Листинг 6. 5. Entity Multiply IS. Architecture structure of Multiply IS. Componentreg_shift_r IS. generic (m : integer);
Листинг 6. 5 LIBRARY ieee; USE ieee. std_logic_1164. ALL; USE ieee. std_logic_arith. ALL; USE ieee. std_logic_unsigned. ALL;
ENTITY Multiply IS GENERIC (m: INTEGER: = 2 ); PORT ( Reset, Clk : IN std_logic; Start : IN std_logic; Busy : OUT std_logic; D_In1, D_In2 : IN std_logic_vector (2**m - 1 DOWNTO 0); D_Out : OUT std_logic_vector (2*(2**m) - 1 DOWNTO 0); Ready : OUT std_logic; Ack : IN std_logic ); END Multiply;
ARCHITECTURE structure OF Multiply IS
COMPONENTReg_Shift_R IS GENERIC (m: INTEGER); PORT ( Reset, Clk : IN std_logic; Load, En_R: IN std_logic; D_in : IN std_logic_vector(m**2-1 DOWNTO 0); Bit_Multi : OUT std_logic ); END COMPONENT Reg_Shift_R; COMPONENT Reg_Shift_L IS GENERIC (m: INTEGER ); PORT ( Reset, Clk : IN std_logic; Load, En_Left : IN std_logic; D_in : IN std_logic_vector(m**2-1 DOWNTO 0); Q : BUFFER std_logic_vector(2*(2**m)-1 DOWNTO 0) ); END COMPONENT Reg_Shift_L;
COMPONENTReg_AccumIS GENERIC(m: INTEGER); PORT ( Reset, Clk: IN std_logic; En : IN std_logic; D_in : IN std_logic_vector(2*(2**m)-1 DOWNTO 0); Q : BUFFER std_logic_vector(2*(2**m)-1 DOWNTO 0) ); END COMPONENT Reg_Accum; COMPONENT Count_Bit GENERIC (m: INTEGER ); PORT ( Clk, En : IN std_logic; Load : IN std_logic; Equal_Zero: OUT std_logic ); END COMPONENT Count_Bit; COMPONENT Cnt_Avt PORT ( Reset, Clk: IN std_logic; Start : IN std_logic; Busy, En : OUT std_logic; Equal_Zero: IN std_logic; Load, Ready: OUT std_logic; Ack : IN std_logic
); END COMPONENT Cnt_Avt; SIGNAL Bit_Multi : std_logic; SIGNAL Partial_Sym : std_logic_vector(2*(m**2) - 1 DOWNTO 0); SIGNAL En : std_logic; SIGNAL En_Add : std_logic; SIGNAL Load : std_logic; SIGNAL Count : std_logic_vector(m - 1 DOWNTO 0); SIGNAL Equal_Zero : std_logic;
BEGIN U1: Reg_Shift_L GENERIC MAP (m) PORT MAP( Reset => Reset, Clk => Clk, Load => Load, En_Left => En, D_in => D_In1, Q => Partial_Sym ); -- ENDReg_Shift_L; U2: Reg_Shift_R GENERIC MAP (m) PORT MAP ( Reset => Reset, Clk => Clk, Load => Load, En_Right => En, D_in => D_In2, Bit_Multi => Bit_Multi ); -- ENDReg_Shift_R; En_Add < = '1' WHEN Bit_Multi = '1' AND En = '1' ELSE '0';
U3: Reg_Accum GENERIC MAP (m) PORT MAP ( Reset => Load, Clk => Clk, En => En_Add, D_in => Partial_Sym, Q => D_Out ); -- ENDReg_Accum; U4: Cnt_Avt PORT MAP ( Reset => Reset, Clk => Clk, Start => Start, Load => Load, En => En, Equal_Zero => Equal_Zero, Busy => Busy, Ready => Ready, Ack => Ack ); -- END Cnt_Avt
U5: Count_Bit GENERIC MAP (m) PORT MAP ( Load => Load, Clk => Clk, En => En, Equal_Zero => Equal_Zero ); -- END Count_Bit; END structure; 6. 4. Имплементация и отладка проектов
Теперь, когда проект полностью описан, самое время вернуться к вопросу проверки верности и работоспособности спроектированного устройства. Важность и практическая неизбежность отладки мало мальски сложного (с точки зрения разработчика) проекта заставляет обсудить эту проблему. Эффективность процедуры отладки складывается из двух сильно связанных частей: инструментария, имеющегося в распоряжении проектировщика, и его умения пользоваться подобным инструментарием. Из опыта, полученного в ходе выполнения работ предыдущих разделов, видно, что как системы моделирования, так и системы имплементации позволяют производить поиск синтаксических и семантических ошибок проектов, написанных на языке VHDL. Однако эффективность использования этих двух систем для целей отладки различна. В моделирующих САПР, и значительно реже в синтезирующих, для проверки работоспособности проектируемого устройства осуществляется разработка специальных тестирующих программ (TestBench). В этих программах определяется последовательность перебора внешних сигналов, достаточных для исполнения требуемых тестовых действий. В состав TestBench либо включается описание явно выраженного компонента-генератора тестирующих воздействий, формирующего требуемую последовательность, либо требуемые изменения тактирующих импульсов встроены в TestBench. Каждый подход имеет свои плюсы и минусы. Обычно это поведенческое описание алгоритма с изменением значений сигналов генератора в запрограммированные моменты модельного времени. Такое описание можно непосредственно встраивать в программу, представляющую проектируемое устройство (имея ввиду исключение этого фрагмента из программы при передаче описания в подсистему синтеза), однако более целесообразно строить специальную программу (TestBench), описывающую на структурном уровне модель испытательной установки, содержащей проектируемое устройство и генератор тестирующих воздействий. Отлаживаемое устройство встраивается как компонент в состав TestBench (смотри раздел 3).
Достоинством моделирующих систем является, прежде всего, то, что отладка может производиться на различных уровнях детализации проектируемой системы, и что очень существенно на функциональном уровне описания. Для функционального описания характерно отсутствие ограничений на используемые конструкции языка (можно использовать не синтезируемые конструкции). Следующее отличие связано с тем, что моделирование осуществляется в соответствии с текстом отдельных файлов, поэтому при отладке легко идентифицировать какие действия и где выполняются. В синтезирующих системах отладка выполняется над моделью, синтезированной в результате компиляции. Объединение в одной модели описаний из разных файлов далеко не всегда позволяет просто определить источник расхождений желаемого и наблюдаемого поведения системы. Достоинством синтезирующих систем является возможность моделирования поведения как функциональной, так и временной модели. Хотя результаты моделирования временной модели можно просматривать в моделирующих системах.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|