Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Листинг 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...