Разработка VHDL-описаний цифровых устройств, проектируемых на основе ПЛИС фирмы Xilinx, с использованием шаблонов САПР ISE Design Suite

№ 11’2012
Продолжение. Начало в № 2`2010
В тридцать четвертой части статьи автор продолжает знакомить читателей с шаблонами синтезируемых конструкций, которые можно использовать при создании законченных описаний типовых элементов проектируемых устройств.

В папке Up/Down Counters расположены образцы конструкций, предназначенных для создания синтезируемых описаний двоичных реверсивных счетчиков.

Up/Down Counters/w CE включает в себя шаблон описания двоичного реверсивного счетчика с разрешением счета:

process (<clock>)
begin
if <clock>=‘1’ and <clock>’event then
if <clock_enable>=‘1’ then
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end if;
end process;

При практическом использовании этой конструкции нужно вместо clock вставить идентификатор тактового сигнала, вместо clock_enable — идентификатор сигнала разрешения счета, вместо count_direction — идентификатор сигнала выбора направления счета, а вместо count — идентификатор двунаправленной шины, на которой отображается текущее состояние счетчика.

Up/Down Counters/w CE and Async Active High Reset содержит образец описания двоичного реверсивного счетчика с разрешением счета и асинхронным сбросом, который осуществляется при высоком уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<count> <= (others => ‘0’);
elsif <clock>=‘1’ and <clock>’event then
if <clock_enable>=‘1’ then
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end if;
end process;

Up/Down Counters/w CE and Async Active Low Reset демонстрирует шаблон описания двоичного реверсивного счетчика с разрешением счета и асинхронным сбросом, который выполняется при низком уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<count> <= (others => ‘0’);
elsif <clock>=‘1’ and <clock>’event then
if <clock_enable>=‘1’ then
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end if;
end process;

Up/Down Counters/w CE and Sync Active High Reset представляет собой образец описания двоичного реверсивного счетчика с разрешением счета и синхронным сбросом, который осуществляется при высоком уровне сигнала сброса:

process (<clock>)
begin
if <clock>=‘1’ and <clock>’event then
if <reset>=‘1’ then
<count> <= (others => ‘0’);
elsif <clock_enable>=‘1’ then
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end if;
end process;

Up/Down Counters/w CE and Sync Active Low Reset является шаблоном описания двоичного реверсивного счетчика с разрешением счета и синхронным сбросом, который выполняется при низком уровне сигнала сброса:

process (<clock>)
begin
if <clock>=‘1’ and <clock>’event then
if <reset>=‘0’ then
<count> <= (others => ‘0’);
elsif <clock_enable>=‘1’ then
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end if;
end process;

Up/Down Counters/w Load, CE and Async Active High Reset включает в себя образец описания двоичного реверсивного счетчика с разрешением счета, параллельной загрузкой и активным высоким логическим уровнем сигнала асинхронного сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<count> <= (others => ‘0’);
elsif <clock>=‘1’ and <clock>’event then
if <clock_enable>=‘1’ then
if <load_enable>=‘1’ then
<count> <= <input>;
else
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end if;
end if;
end process;

При формировании законченного описания счетчика на основе этой конструкции кроме действий, перечисленных при рассмотрении предыдущих шаблонов, нужно заменить load_enable идентификатором сигнала разрешения загрузки, а input — идентификатором входной шины, на которую поступает записываемое значение.

Up/Down Counters/w Load, CE and Async Active Low Reset содержит шаблон описания двоичного реверсивного счетчика с разрешением счета, параллельной загрузкой и активным низким логическим уровнем сигнала асинхронного сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<count> <= (others => ‘0’);
elsif <clock>=‘1’ and <clock>’event then
if <clock_enable>=‘1’ then
if <load_enable>=‘1’ then
<count> <= <input>;
else
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end if;
end if;
end process;

Up/Down Counters/w Load, CE and Sync Active High Reset демонстрирует образец описания двоичного реверсивного счетчика с разрешением счета, параллельной загрузкой и синхронным сбросом, который выполняется при высоком уровне сигнала сброса:

process (<clock>)
begin
if <clock>=‘1’ and <clock>’event then
if <reset>=‘1’ then
<count> <= (others => ‘0’);
elsif <clock_enable>=‘1’ then
if <load_enable>=‘1’ then
<count> <= <input>;
else
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end if;
end if;
end process;

Up/Down Counters/w Load, CE and Sync Active Low Reset предоставляет шаблон описания двоичного реверсивного счетчика с разрешением счета, параллельной загрузкой и синхронным сбросом, который осуществляется при низком уровне сигнала сброса:

process (<clock>)
begin
if <clock>=‘1’ and <clock>’event then
if <reset>=‘0’ then
<count> <= (others => ‘0’);
elsif <clock_enable>=‘1’ then
if <load_enable>=‘1’ then
<count> <= <input>;
else
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end if;
end if;
end process;

Up/Down Counters/Simple Counter является образцом описания простейшего двоичного реверсивного счетчика:

process (<clock>)
begin
if <clock>=‘1’ and <clock>’event then
if <count_direction>=‘1’ then
<count> <= <count> + 1;
else
<count> <= <count> – 1;
end if;
end if;
end process;

Counters/Binary/Example Code включает в себя пример полного описания 4-разрядного инкрементного счетчика с синхронным сбросом:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counters_1 is
port(CLK, CLR : in std_logic;
Q : out std_logic_vector(3 downto 0));
end counters_1;
architecture archi of counters_1 is
signal tmp: std_logic_vector(3 downto 0);
begin
process (CLK)
begin
if (CLK’event and CLK=‘1’) then
if (CLR=‘1’) then
tmp <= “0000”;
else
tmp <= tmp + 1;
end if;
end if;
end process;
Q <= tmp;
end archi;

В состав системы условных обозначений, используемых в описании интерфейса счетчика, формируемого с помощью представленного шаблона, входят следующие идентификаторы входных и выходных портов:

  • CLK — вход тактового сигнала.
  • CLR — вход сигнала синхронного сброса.
  • Q — выходная 4-разрядная шина, на которой отображается текущее состояние счетчика.

На рис. 543 показан условный графический образ счетчика, создаваемого с помощью шаблона Counters/Binary/Example Code.

Oбраз счетчика, формируемого с помощью шаблона Counters/Binary/Example Code

Рис. 543. Условный графический образ счетчика, формируемого с помощью шаблона Counters/Binary/Example Code

В подкаталоге Gray Code сосредоточены образцы конструкций, предназначенных для формирования описаний различных вариантов счетчиков в коде Грея. Содержание этого подкаталога показано на рис. 544.

Содержание подкаталогов Gray Code и LFSR

Рис. 544. Содержание подкаталогов Gray Code и LFSR

Gray Code/w CE and Async Active High Reset содержит шаблон описания счетчика в коде Грея с разрешением счета и активным высоким логическим уровнем сигнала асинхронного сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.

<next_binary_count> <= <binary_count> + 1;

process(<clock>,<reset>)
begin
if ( <reset> = ‘1’) then
<binary_count> <= (others => ‘0’);
<gray_count> <= (others => ‘0’);
elsif ( <clock>’event and <clock> =‘1’) then
if <clock_enable>=‘1’ then
<binary_count> <= <next_binary_count>;
<gray_count> <= ((‘0’ & next_binary_count(<width-1> downto 1)) XOR <next_binary_count>);
end if;
end if;
end process;

При создании законченного описания в приведенной конструкции следует заменить binary_count и next_binary_count — идентификаторами внутренних шин, представляющих текущее и следующее значение соответствующего двоичного счетчика, а gray_count — идентификатором выходной шины счетчика в коде Грея.

Gray Code/w CE and Sync Active High Reset демонстрирует образец описания счетчика в коде Грея с разрешением счета и активным высоким логическим уровнем сигнала синхронного сброса:

<next_binary_count> <= <binary_count> + 1;

process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
if (<reset> = ‘1’) then
<binary_count> <= (others => ‘0’);
<gray_count> <= (others => ‘0’);
elsif <clock_enable>=‘1’ then
<binary_count> <= <next_binary_count>;
<gray_count> <= ((‘0’ & next_binary_count(<width-1> downto 1)) XOR <next_binary_count>);
end if;
end if;
end process;

В подкаталоге LFSR находятся шаблоны, применяемые для подготовки описаний счетчиков на регистрах сдвига с линейной обратной связью (рис. 544). Во всех конструкциях этого подкаталога используется сигнал сброса с активным высоким логическим уровнем.

LFSR/16-Bit/w CE and Async Active High Reset представляет собой образец описания 16-разрядного счетчика на регистрах сдвига с линейной обратной связью с разрешением счета и асинхронным сбросом:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process(<clock>,<reset>)
begin
if ( <reset> = ‘1’) then
<reg_name> <= (others => ‘0’);
elsif ( <clock>’event and <clock> =‘1’) then
if <clock_enable>=‘1’ then
<reg_name>(15 downto 1) <= <reg_name>(14 downto 0) ;
<reg_name>(0) <= not(<reg_name>(15) XOR <reg_name>(14) XOR <reg_name>(13) XOR <reg_name>(4));
end if;
end if;
end process;

В приведенной конструкции вместо reg_name указывается идентификатор массива, представляющего сдвиговый регистр соответствующей разрядности.

LFSR/16-Bit/w CE and Sync Active High Reset является шаблоном описания 16-разрядного счетчика на регистрах сдвига с линейной обратной связью с разрешением счета и синхронным сбросом:

process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
if (<reset> = ‘1’) then
<reg_name> <= (others => ‘0’);
elsif <clock_enable>=‘1’ then
<reg_name>(15 downto 1) <= <reg_name>(14 downto 0) ;
<reg_name>(0) <= not(<reg_name>(15) XOR <reg_name>(14) XOR <reg_name>(13) XOR <reg_name>(4));
end if;
end if;
end process;

LFSR/32-Bit/w CE and Async Active High Reset включает в себя образец описания 32-разрядного счетчика на регистрах сдвига с линейной обратной связью с разрешением счета и асинхронным сбросом:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process(<clock>,<reset>)
begin
if ( <reset> = ‘1’) then
<reg_name> <= (others => ‘0’);
elsif ( <clock>’event and <clock> =‘1’) then
if <clock_enable>=‘1’ then
<reg_name>(31 downto 1) <= <reg_name>(30 downto 0);
<reg_name>(0) <= not(<reg_name>(31) XOR <reg_name>(22) XOR <reg_name>(2) XOR <reg_name>(1));
end if;
end if;
end process;

LFSR/32-Bit/w CE and Sync Active High Reset содержит шаблон описания 32-разрядного счетчика на регистрах сдвига с линейной обратной связью с разрешением счета и синхронным сбросом:

process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
if (<reset> = ‘1’) then
<reg_name> <= (others => ‘0’);
elsif <clock_enable>=‘1’ then
<reg_name>(31 downto 1) <= <reg_name>(30 downto 0);
<reg_name>(0) <= not(<reg_name>(31) XOR <reg_name>(22) XOR <reg_name>(2) XOR <reg_name>(1));
end if;
end if;
end process;

LFSR/4-Bit/w CE and Async Active High Reset демонстрирует образец описания 4-разрядного счетчика на регистрах сдвига с линейной обратной связью с разрешением счета и асинхронным сбросом:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process(<clock>,<reset>)
begin
if ( <reset> = ‘1’) then
<reg_name> <= (others => ‘0’);
elsif ( <clock>’event and <clock> =‘1’) then
if <clock_enable>=‘1’ then
<reg_name>(3 downto 1) <= <reg_name>(2 downto 0);
<reg_name>(0) <= not(<reg_name>(4) XOR <reg_name>(3));
end if;
end if;
end process;

LFSR/4-Bit/w CE and Sync Active High Reset предоставляет шаблон описания 4-разрядного счетчика на регистрах сдвига с линейной обратной связью с разрешением счета и синхронным сбросом:

process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
if (<reset> = ‘1’) then
<reg_name> <= (others => ‘0’);
elsif <clock_enable>=‘1’ then
<reg_name>(3 downto 1) <= <reg_name>(2 downto 0);
<reg_name>(0) <= not(<reg_name>(4) XOR <reg_name>(3));
end if;
end if;
end process;

LFSR/8-Bit/w CE and Async Active High Reset является образцом описания 8-разрядного счетчика на регистрах сдвига с линейной обратной связью с разрешением счета и асинхронным сбросом:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process(<clock>,<reset>)
begin
if ( <reset> = ‘1’) then
<reg_name> <= (others => ‘0’);
elsif ( <clock>’event and <clock> =‘1’) then
if <clock_enable>=‘1’ then
<reg_name>(7 downto 1) <= <reg_name>(6 downto 0);
<reg_name>(0) <= not(<reg_name>(7) XOR <reg_name>(6) XOR <reg_name>(4));
end if;
end if;
end process;

LFSR/8-Bit/w CE and Sync Active High Reset включает в себя шаблон описания 8-разрядного счетчика на регистрах сдвига с линейной обратной связью с разрешением счета и синхронным сбросом:

process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
if (<reset> = ‘1’) then
<reg_name> <= (others => ‘0’);
elsif <clock_enable>=‘1’ then
<reg_name>(7 downto 1) <= <reg_name>(6 downto 0);
<reg_name>(0) <= not(<reg_name>(7) XOR <reg_name>(6) XOR <reg_name>(4));
end if;
end if;
end process;

Каталог Decoders объединяет образцы конструкций, предназначенных для формирования описаний дешифраторов с выходными регистрами (рис. 545).

Структура каталогов Decoders, Encoders и Flip Flops

Рис. 545. Структура каталогов Decoders, Encoders и Flip Flops

Decoders/4-bit Registered output содержит шаблон описания дешифратора с 2 на 4 с регистровыми выходами и синхронным сбросом, преобразующего входной двухразрядный двоичный код в сигнал высокого уровня на выходе, номер которого соответствует значению входного кода:

process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
if ( <reset> = ‘1’) then
<output> <= “0000”;
else
case <input> is
when “00” => <output> <= “0001”;
when “01” => <output> <= “0010”;
when “10” => <output> <= “0100”;
when “11” => <output> <= “1000”;
when others => <output> <= “0000”;
end case;
end if;
end if;
end process;

При создании законченного описания дешифратора на базе этой конструкции нужно заменить input идентификатором входной шины, на которую поступает преобразуемый код, а output — идентификатором выходной шины, на которой отображается результат дешифрации.

Decoders/8-bit Registered output демонстрирует образец описания дешифратора с 3 на 8 с регистровыми выходами и синхронным сбросом, преобразующего входной трехразрядный двоичный код в сигнал высокого уровня на выходе, номер которого соответствует значению входного кода:

process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
if ( <reset> = ‘1’) then
<output> <= “00000000”;
else
case <input> is
when “000” => <output> <= “00000001”;
when “001” => <output> <= “00000010”;
when “010” => <output> <= “00000100”;
when “011” => <output> <= “00001000”;
when “100” => <output> <= “00010000”;
when “101” => <output> <= “00100000”;
when “110” => <output> <= “01000000”;
when “111” => <output> <= “10000000”;
when others => <output> <= “00000000”;
end case;
end if;
end if;
end process;

В каталоге Encoders собраны шаблоны конструкций, применяемых для подготовки описаний шифраторов с выходными регистрами.

Encoders/4-bit Registered output представляет собой образец описания шифратора с 4 на 2 с регистровыми выходами и синхронным сбросом, преобразующего высокий логический уровень сигнала на одном из четырех входов в выходной двухразрядный двоичный код:

process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
if (<reset> = ‘1’) then
<output> <= “00”;
else
case <input> is
when “0001” => <output> <= “00”;
when “0010” => <output> <= “01”;
when “0100” => <output> <= “10”;
when “1000” => <output> <= “11”;
when others => <output> <= “00”;
end case;
end if;
end if;
end process;

Encoders/8-bit Registered output является шаблоном описания шифратора с 8 на 3 с регистровыми выходами и синхронным сбросом, преобразующего высокий логический уровень сигнала на одном из восьми входов в выходной трехразрядный двоичный код:

process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
if ( <reset> = ‘1’) then
<output> <= “000”;
else
case <input> is
when “00000001” => <output> <= “000”;
when “00000010” => <output> <= “001”;
when “00000100” => <output> <= “010”;
when “00001000” => <output> <= “011”;
when “00010000” => <output> <= “100”;
when “00100000” => <output> <= “101”;
when “01000000” => <output> <= “110”;
when “10000000” => <output> <= “111”;
when others => <output> <= “000”;
end case;
end if;
end if;
end process;

В каталоге Flip Flops расположены образцы конструкций, используемых для создания описаний триггеров различного типа (рис. 545).

Flip Flops/Coding Example включает в себя пример законченного описания D-триггера, условный графический образ которого изображен на рис. 546:

Oбраз D-триггера, создаваемого с помощью шаблона Flip Flops/Coding Example

Рис. 546. Условный графический образ D-триггера, создаваемого с помощью шаблона Flip Flops/Coding Example

library ieee;
use ieee.std_logic_1164.all;

entity registers_1 is
port(C, D : in std_logic;
Q : out std_logic);
end registers_1;

architecture archi of registers_1 is
begin
process (C)
begin
if (C’event and C=‘1’) then
Q <= D;
end if;
end process;
end archi;

В состав каталога Flip Flops входят два подкаталога — D Flip Flop и T Flip Flop, в каждом из которых сгруппированы шаблоны конструкций, предназначенных для подготовки описаний триггеров соответствующего типа. В подкаталоге D Flip Flop находятся образцы обобщенных описаний D-триггеров. Развернутая структура этого подкаталога показана на рис. 547.

Структура подкаталога D Flip Flop

Рис. 547. Структура подкаталога D Flip Flop

Шаблоны подкаталога D Flip Flop распределены в две папки: Negedge и Posedge. Папка Negedge объединяет образцы описаний D-триггеров с записью информации по спаду тактового сигнала.

D Flip Flop/Negedge/Simple Register содержит образец описания D-триггера, тактируемого спадом сигнала синхронизации:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
<output> <= <input>;
end if;
end process;

D Flip Flop/Negedge/w Asynchronous Active High Reset демонстрирует шаблон описания D-триггера, управляемого спадом тактового сигнала, с асинхронным сбросом, осуществляемым при высоком логическом уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘0’) then
<output> <= <input>;
end if;
end process;

D Flip Flop/Negedge/w Asynchronous Active High Reset and CE предоставляет образец описания D-триггера, тактируемого спадом сигнала синхронизации, с асинхронным сбросом, выполняемым при высоком логическом уровне сигнала сброса, и разрешением синхронизации:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘0’) then
if <clock_enable> = ‘1’ then
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Negedge/w Asynchronous Active Low Reset является шаблоном описания D-триггера с записью данных по спаду тактового сигнала и активным низким логическим уровнем сигнала асинхронного сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘0’) then
<output> <= <input>;
end if;
end process;

D Flip Flop/Negedge/w Asynchronous Active Low Reset and CE включает в себя образец описания D-триггера, управляемого спадом тактового сигнала, с разрешением синхронизации и асинхронным сбросом, осуществляемым при низком логическом уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘0’) then
if <clock_enable> = ‘1’ then
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Negedge/w Synchronous Active High Reset содержит шаблон описания D-триггера, тактируемого спадом сигнала синхронизации, с активным высоким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
if <reset>=‘1’ then
<output> <= ‘0’;
else
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Negedge/w Synchronous Active High Reset and CE демонстрирует образец описания D-триггера, управляемого спадом тактового сигнала, с разрешением синхронизации и активным высоким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
if <reset>=‘1’ then
<output> <= ‘0’;
elsif <clock_enable> =‘1’ then
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Negedge/w Synchronous Active Low Reset представляет собой шаблон описания D-триггера, тактируемого спадом сигнала синхронизации, с синхронным сбросом, выполняемым при низком логическом уровне сигнала сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
if <reset>=‘0’ then
<output> <= ‘0’;
else
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Negedge/w Synchronous Active Low Reset and CE является образцом описания D-триггера, управляемого спадом тактового сигнала, с разрешением синхронизации и активным низким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
if <reset>=‘0’ then
<output> <= ‘0’;
elsif <clock_enable> =‘1’ then
<output> <= <input>;
end if;
end if;
end process;

В папке Posedge подкаталога D Flip Flop расположены шаблоны обобщенных описаний D-триггеров с записью информации по фронту тактового сигнала.

D Flip Flop/Posedge/Simple Register включает в себя образец описания D-триггера, тактируемого фронтом сигнала синхронизации:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
<output> <= <input>;
end if;
end process;

D Flip Flop/Posedge/w Asynchronous Active High Reset содержит шаблон описания D-триггера, управляемого фронтом тактового сигнала, с асинхронным сбросом, осуществляемым при высоком логическом уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘1’) then
<output> <= <input>;
end if;
end process;

D Flip Flop/Posedge/w Asynchronous Active High Reset and CE демонстрирует образец описания D-триггера, тактируемого фронтом сигнала синхронизации, с асинхронным сбросом, выполняемым при высоком логическом уровне сигнала сброса, и разрешением синхронизации:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘1’) then
if <clock_enable> = ‘1’ then
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Posedge/w Asynchronous Active Low Reset предоставляет шаблон описания D-триггера, управляемого фронтом сигнала синхронизации, с активным низким логическим уровнем сигнала асинхронного сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘1’) then
<output> <= <input>;
end if;
end process;

D Flip Flop/Posedge/w Asynchronous Active Low Reset and CE является образцом описания D-триггера, управляемого фронтом тактового сигнала, с разрешением синхронизации и асинхронным сбросом, осуществляемым при низком логическом уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘1’) then
if <clock_enable> = ‘1’ then
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Posedge/w Synchronous Active High Reset включает в себя шаблон описания D-триггера, тактируемого фронтом сигнала синхронизации, с активным высоким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
if <reset>=‘1’ then
<output> <= ‘0’;
else
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Posedge/w Synchronous Active High Reset and CE содержит образец описания D-триггера, управляемого фронтом тактового сигнала, с разрешением синхронизации и активным высоким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
if <reset>=‘1’ then
<output> <= ‘0’;
elsif <clock_enable> =‘1’ then
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Posedge/w Synchronous Active Low Reset демонстрирует шаблон описания D-триггера, тактируемого фронтом сигнала синхронизации, с синхронным сбросом, выполняемым при низком логическом уровне сигнала сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
if <reset>=‘0’ then
<output> <= ‘0’;
else
<output> <= <input>;
end if;
end if;
end process;

D Flip Flop/Posedge/w Synchronous Active Low Reset and CE представляет собой образец описания D-триггера, управляемого фронтом тактового сигнала, с разрешением синхронизации и активным низким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
if <reset>=‘0’ then
<output> <= ‘0’;
elsif <clock_enable> =‘1’ then
<output> <= <input>;
end if;
end if;
end process;

В подкаталоге T Flip Flop сосредоточены шаблоны обобщенных описаний T-триггеров. Подробная структура этого подкаталога приведена на рис. 548.

Структура подкаталога T Flip Flop

Рис. 548. Структура подкаталога T Flip Flop

Шаблоны подкаталога T Flip Flop размещаются в двух папках: Negedge и Posedge. В папке Negedge находятся образцы описаний T-триггеров, переключаемых спадом тактового сигнала.

T Flip Flop/Negedge/Simple Register является образцом описания T-триггера, управляемого спадом тактового сигнала:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
<output> <= not(<output>);
end if;
end process;

T Flip Flop/Negedge/w Asynchronous Active High Reset включает в себя шаблон описания T-триггера, переключаемого спадом тактового сигнала, с асинхронным сбросом, выполняемым при высоком логическом уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘0’) then
<output> <= not(<output>);
end if;
end process;

T Flip Flop/Negedge/w Asynchronous Active High Reset and CE содержит образец описания T-триггера, управляемого спадом тактового сигнала, с разрешением синхронизации и асинхронным сбросом, осуществляемым при высоком логическом уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘0’) then
if <clock_enable> = ‘1’ then
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Negedge/w Asynchronous Active Low Reset демонстрирует шаблон описания T-триггера, переключаемого спадом тактового сигнала, с активным низким логическим уровнем сигнала асинхронного сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘0’) then
<output> <= not(<output>);
end if;
end process;

T Flip Flop/Negedge/w Asynchronous Active Low Reset and CE предоставляет образец описания T-триггера, управляемого спадом тактового сигнала, с разрешением синхронизации и асинхронным сбросом, выполняемым при низком логическом уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘0’) then
if <clock_enable> = ‘1’ then
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Negedge/w Synchronous Active High Reset является шаблоном описания T-триггера, переключаемого спадом тактового сигнала, с активным высоким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
if <reset>=‘1’ then
<output> <= ‘0’;
else
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Negedge/w Synchronous Active High Reset and CE включает в себя образец описания T-триггера, управляемого спадом тактового сигнала, с разрешением синхронизации и активным высоким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
if <reset>=‘1’ then
<output> <= ‘0’;
elsif <clock_enable> =‘1’ then
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Negedge/w Synchronous Active Low Reset содержит шаблон описания T-триггера, переключаемого спадом тактового сигнала, с синхронным сбросом, осуществляемым при низком логическом уровне сигнала сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
if <reset>=‘0’ then
<output> <= ‘0’;
else
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Negedge/w Synchronous Active Low Reset and CE демонстрирует образец описания T-триггера, управляемого спадом тактового сигнала, с разрешением синхронизации и активным низким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘0’ then
if <reset>=‘0’ then
<output> <= ‘0’;
elsif <clock_enable> =‘1’ then
<output> <= not(<output>);
end if;
end if;
end process;

В папке Posedge подкаталога T Flip Flop собраны шаблоны обобщенных описаний T-триггеров, переключаемых фронтом тактового сигнала.

T Flip Flop/Posedge/Simple Register представляет собой образец описания T-триггера, изменяющего свое состояние по фронту тактового сигнала:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
<output> <= not(<output>);
end if;
end process;

T Flip Flop/Posedge/w Asynchronous Active High Reset является шаблоном описания T-триггера, управляемого фронтом тактового сигнала, с активным высоким логическим уровнем сигнала асинхронного сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘1’) then
<output> <= not(<output>);
end if;
end process;

T Flip Flop/Posedge/w Asynchronous Active High Reset and CE включает в себя образец описания T-триггера, переключаемого фронтом тактового сигнала, с разрешением синхронизации и асинхронным сбросом, выполняемым при высоком логическом уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘1’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘1’) then
if <clock_enable> = ‘1’ then
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Posedge/w Asynchronous Active Low Reset содержит шаблон описания T-триггера, управляемого фронтом тактового сигнала, с активным низким логическим уровнем сигнала асинхронного сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘1’) then
<output> <= not(<output>);
end if;
end process;

T Flip Flop/Posedge/w Asynchronous Active Low Reset and CE демонстрирует образец описания T-триггера, переключаемого фронтом тактового сигнала, с разрешением синхронизации и асинхронным сбросом, осуществляемым при низком логическом уровне сигнала сброса:

— Usage of Asynchronous resets may negatively impact FPGA resources
— and timing. In general faster and smaller FPGA designs will
— result from not using Asynchronous Resets. Please refer to
— the Synthesis and Simulation Design Guide for more information.
process (<clock>, <reset>)
begin
if <reset>=‘0’ then
<output> <= ‘0’;
elsif (<clock>’event and <clock>=‘1’) then
if <clock_enable> = ‘1’ then
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Posedge/w Synchronous Active High Reset предоставляет шаблон описания T-триггера, тактируемого фронтом сигнала синхронизации, с активным высоким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
if <reset>=‘1’ then
<output> <= ‘0’;
else
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Posedge/w Synchronous Active High Reset and CE является образцом описания T-триггера, управляемого фронтом тактового сигнала, с разрешением синхронизации и активным высоким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
if <reset>=‘1’ then
<output> <= ‘0’;
elsif <clock_enable> =‘1’ then
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Posedge/w Synchronous Active Low Reset включает в себя шаблон описания T-триггера, переключаемого фронтом тактового сигнала, с синхронным сбросом, выполняемым при низком логическом уровне сигнала сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
if <reset>=‘0’ then
<output> <= ‘0’;
else
<output> <= not(<output>);
end if;
end if;
end process;

T Flip Flop/Posedge/w Synchronous Active Low Reset and CE содержит образец описания T-триггера, управляемого фронтом тактового сигнала, с разрешением синхронизации и активным низким логическим уровнем сигнала синхронного сброса:

process (<clock>)
begin
if <clock>’event and <clock>=‘1’ then
if <reset>=‘0’ then
<output> <= ‘0’;
elsif <clock_enable> =‘1’ then
<output> <= not(<output>);
end if;
end if;
end process;

Каталог Logical Shifters объединяет шаблоны конструкций, предназначенных для подготовки синтезируемых описаний устройств логического сдвига (рис. 549).

Структура каталогов Logical Shifters и Misc

Рис. 549. Структура каталогов Logical Shifters и Misc

Logical Shifters/2-bit Select демонстрирует образец описания элемента, выполняющего логический сдвиг входных данных влево на 1–3 разряда. Число разрядов, на которое производится сдвиг, определяется кодом на входной шине выбора, идентификатор которой указывают вместо selector:

—Input and Output need to be type unsigned
—use IEEE.numeric_std.all;
process(<clock>)
begin
if ( <clock>’event and <clock> =’1’) then
case <selector> is
when “00” => <output> <= <input> ;
when “01” => <output> <= <input> sll 1;
when “10” => <output> <= <input> sll 2;
when “11” => <output> <= <input> sll 3;
when others => <output> <= <input> ;
end case;
end if;
end process;

Logical Shifters/3-bit Select представляет собой шаблон описания устройства, осуществляющего логический сдвиг входных данных влево на 1–7 разрядов:

—Input and Output need to be type unsigned
—use IEEE.numeric_std.all;
process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
case <selector> is
when “000” => <output> <= <input> ;
when “001” => <output> <= <input> sll 1;
when “010” => <output> <= <input> sll 2;
when “011” => <output> <= <input> sll 3;
when “100” => <output> <= <input> sll 4;
when “101” => <output> <= <input> sll 5;
when “110” => <output> <= <input> sll 6;
when “111” => <output> <= <input> sll 7;
when others => <output> <= <input> ;
end case;
end if;
end process;

Logical Shifters/4-bit Select является образцом описания устройства логического сдвига входных данных влево на 1–15 разрядов:

—Input and Output need to be type unsigned
—use IEEE.numeric_std.all;
process(<clock>)
begin
if ( <clock>’event and <clock> =‘1’) then
case <selector> is
when “0000” => <output> <= <input> ;
when “0001” => <output> <= <input> sll 1;
when “0010” => <output> <= <input> sll 2;
when “0011” => <output> <= <input> sll 3;
when “0100” => <output> <= <input> sll 4;
when “0101” => <output> <= <input> sll 5;
when “0110” => <output> <= <input> sll 6;
when “0111” => <output> <= <input> sll 7;
when “1000” => <output> <= <input> sll 8;
when “1001” => <output> <= <input> sll 9;
when “1010” => <output> <= <input> sll 10;
when “1011” => <output> <= <input> sll 11;
when “1100” => <output> <= <input> sll 12;
when “1101” => <output> <= <input> sll 13;
when “1110” => <output> <= <input> sll 14;
when “1111” => <output> <= <input> sll 15;
when others => <output> <= <input> ;
end case;
end if;
end process;

Logical Shifters/Example Code включает в себя пример полного описания устройства логического сдвига входных данных влево на 1–3 разряда, условный графический образ которого изображен на рис. 550:

Условный графический образ устройства логического сдвига влево на 1–3 разряда

Рис. 550. Условный графический образ устройства логического сдвига влево на 1–3 разряда

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity logical_shifters_1 is
port(CLK : in std_logic;
DI : in unsigned(7 downto 0);
SEL : in unsigned(1 downto 0);
SO : out unsigned(7 downto 0));
end logical_shifters_1;

architecture archi of logical_shifters_1 is
process (CLK)
begin
if (CLK’event and CLK = ‘1’) then
case s is
when “00” => SO <= DI ;
when “01” => SO <= DI sll 1;
when “10” => S0 <= DI sll 2;
when “11” => SO <= DI sll 3;
when others => SO <= DI ;
end case;
end if;
end process;
end archi;

Примечание. Полный список литературы смотрите в предыдущих частях статьи.

Окончание следует

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *