Симулятор Aldec и vhdl счетчик с отводами

Симулятор Aldec и vhdl счетчик с отводамиСимулятор в Aldec довольно мощная штука. Вполне может конкурировать с общеизвестным ModelSim. Для того, чтобы опроовать симулятор Aldec в действии создадим небольшой проект, например на VHDL, цепочки трех счетчиков с отводами, каждый отвод будет генерить импульсы нужной частоты с длительностью равной одному периоду исходной тактовой частоты.

Для этого запустим собственно Aldec и создадим в нем новое рабочее пространство (например Tests_Aldec83), а в нем новый проект (например Testcnt).

Новое рабочее пространство Aldec

Создание нового проекта в Aldec

Далее остается только добавить источник VHDL, откомпилировать его и приступить к симуляции. Цепочка счетчиков с отводами (например на 32, 3, 5) на VHDL выглядит примерно так:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity testcnt is	

	Port
	(
		clk 					: in std_logic;
		clr					 	: in std_logic;
		carry32 			: out std_logic;
		carry3 				: out std_logic;
		carry5 				: out std_logic
	);
end testcnt;

architecture testcnt of testcnt is	

	signal s_carry32				: std_logic;
	signal s_carry3					: std_logic;
	signal s_carry5					: std_logic;
	signal s_clkdiv32				: std_logic_vector(5 downto 0);
	signal s_clkdiv3				: std_logic_vector(1 downto 0);
	signal s_clkdiv5				: std_logic_vector(3 downto 0);
	
begin

	process(clk)
	begin
		if(rising_edge(clk))then 
			-- neio?iiiue na?in
			if(clr='0')then 
				s_clkdiv32 <= (others => '0');
				s_clkdiv3 <= (others => '0');
				s_clkdiv5 <= (others => '0');
				s_carry32 <= '0';
				s_carry3 <= '0';
				s_carry5 <= '0';
			else 
				case s_clkdiv32(5) is
					when '0' =>  
						-- n?ao iiea s_clkdiv32(5) a 0
						s_clkdiv32 <= s_clkdiv32 + 1 ;
						s_carry32 <= '0';
						s_carry3 <= '0';
						s_carry5 <= '0';
					when '1' => 
						s_clkdiv32 <= (others => '0');
						s_carry32 <= '1';
						if s_clkdiv3 =  2 then
							s_carry3 <= '1';
							s_clkdiv3 <= (others => '0') ;
							if s_clkdiv5 = 4 then 
								s_carry5 <= '1';
								s_clkdiv5 <= (others => '0') ;
							else  
								s_clkdiv5 <= s_clkdiv5 + 1 ;
							end if;
						else 
							s_clkdiv3 <= s_clkdiv3 + 1 ;
						end if;       

					when others=> null;     
				end case; 
			end if;
		end if;
	end process;

	carry32 <= s_carry32;
	carry3 <= s_carry3;
	carry5 <= s_carry5;
	
end testcnt;

После добавления файла с кодом к проекту его можно откомпилировать и отсимулировать. Как это делается? Для начала нужно инициализировать симулятор

Инициализация симулятора Aldec

Затем добавляем New Waveform, нажав на соответствующую заметную кнопку на панели программы и после появления пустой диаграммы перетаскиваем мышкой на нее нужные сигналы.

Добавление сигналов на Waveform Aldec

Далее достаточно назначить параметры клока и сброса и запустить симулятор на исполнение.

Параметры клока

Параметры сброса

Симулятор Aldec

Исполнение начнется при нажатии на кнопку Run. Перед этим нужно не забыть выставить длину шага типа 500 000 нсек. Вот собственно и вся музыка, в простейшем варианте конечно-же. Ну а ниже по тексту ссылка на выше представленный проект.

Добавить комментарий:

Перейти и растаять в своей любимой социалке