Краткие теоретические сведения
Комбинационной является такая логическая схема, выходные сигналы которой зависят только от текущих значений входных сигналов. Основные сведения о языке VHDL содержатся в [1, 2]. При проектировании логических схем на VHDL используются следующие подходы: структурное описание схемы, потоковое и поведенческое описание. Структурное описание содержит описание элементов схемы и связей между ними. Основными операторами VHDL, используемыми для этого, являются операторы сomponent, for-generate, entity. Структурное проектирование является обязательным при проектировании на верхнем уровне иерархии проекта. Пример структурного описания устройства для обнаружения простых чисел приведено на рисунке 11.
-- Пример1 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- объявление объекта entity prime is port( N: in std_logic_vector(3 downto 0); F: out std_logic ); end prime;
architecture prime_arch of prime is -- объявление сигналов, внутренних точек схемы signal N3_L, N2_L, N1_L: std_logic; signal N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0: std_logic; -- объявление компонентов схемы, элементы должны быть в библиотеках component inv is port(I: in std_logic; O: out std_logic);end component; component and2 is port(I0,I1: in std_logic;O: out std_logic);end component; component and3 is port(I0,I1,I2: in std_logic;O: out std_logic);end component; component or41 is port(I0,I1,I2,I3: in std_logic; O: out std_logic);end component;
begin U1: inv port map (N(3),N3_L); -- операторы component U2: inv port map (N(2),N2_L); U3: inv port map (N(1),N1_L); U4: and2 port map (N3_L,N(0),N3L_N0); U5: and3 port map (N3_L,N2_L,N(1),N3L_N2L_N1); U6: and3 port map (N2_L,N(1),N(0),N2L_N1_N0); U7: and3 port map (N(2),N1_L,N(0), N2_N1L_N0); U8: or41 port map (N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0, F); end prime_arch;
Рисунок 11 – Пример 1 структурного описания логической схемы
При потоковом описании функционирование схемы описывается в терминах потоков данных и выполняемых операций над этими данными. Основным оператором потокового проектирования является параллельный сигнальный оператор присваивания. Для операций над данными используются встроенные операторы and, оr и not. При потоковом описании может использоваться оператор select. Примеры потокового описания устройства обнаружения простых чисел приведены на рисунках 12 - 13, объявление объекта такое же, как в примере 1.
-- Пример2 architecture prime2_arch of prime is signal N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0: std_logic; begin N3L_N0 <= not N(3) and N(0); N3L_N2L_N1 <= not N(3) and not N(2) and N(1); N2L_N1_N0 <= not N(2) and N(1) and N(0); N2_N1L_N0 <= N(2) and not N(1) and N(0); F <= N3L_N0 or N3L_N2L_N1 or N2L_N1_N0 or N2_N1L_N0; end prime2_arch;
Рисунок 12 – Пример 2 потокового описания с использованием параллельного сигнального оператора присваивания
-- Пример 3 architecture prime3_arch of prime is signal N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0: std_logic; begin -- использование условного присваивания
N3L_N0 <= '1' when N(3)='0' and N(0)='1' else '0'; N3L_N2L_N1 <= '1' when N(3)='0' and N(2)='0' and N(1)='1' else '0'; N2L_N1_N0 <= '1' when N(2)='0' and N(1)='1' and N(0)='1' else '0'; N2_N1L_N0 <= '1' when N(2)='1' and N(1)='0' and N(0)='1' else '0'; F <= N3L_N0 or N3L_N2L_N1 or N2L_N1_N0 or N2_N1L_N0; end prime3_arch;
-- Пример 4 architecture prime4_arch of prime is begin --использование избирательного присваивания with N select F <= '1' when "0001", '1' when "0010", '1' when "0011"| "0101"| "0111", '1' when "1011"| "1101", '0' when others; end prime4_arch;
Рисунок 13 – Примеры потокового описания логической схемы с использованием условного присваивания
Поведенческое проектирование. Стиль описания устройства, опирающийся на описание поведения, выполняемых устройством функций, без привязки к структуре устройства, называется поведенческим. Строго говоря, поведенческое описание можно создать, используя операторы потокового проектирования. Условимся называть поведенческим описание, использующее оператор process и последовательные операторы – последовательный сигнальный оператор присваивания, операторы if, case, loop, for. Примеры поведенческого проектирования устройства обнаружения простых чисел приведены на рисунках 14 - 17.
-- Пример 5 architecture prime5_arch of prime is begin process(N) variable N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0: std_logic; begin N3L_N0:= not N(3) and N(0); N3L_N2L_N1:= not N(3) and not N(2) and N(1); N2L_N1_N0:= not N(2) and N(1) and N(0); N2_N1L_N0:= N(2) and not N(1) and N(0); F <= N3L_N0 or N3L_N2L_N1 or N2L_N1_N0 or N2_N1L_N0; End process; end prime5_arch;
Рисунок 14 – Пример поведенческого описания логической схемы
-- пример 6 architecture prime6_arch of prime is begin process(N) variable NI: INTEGER; begin NI:= CONV_INTEGER(N); If NI=1 or NI=2 then F<='1'; Elsif NI=1 or NI=5 or NI=7 or NI=11 or NI=13 then F<='1'; Else F <= '0'; End if; End process; end prime6_arch;
Рисунок 15 – Пример поведенческого описания логической схемы с использованием оператора if
--Пример 7 architecture prime7_arch of prime is begin process(N) begin case CONV_INTEGER(N) is when 1 => F<='1'; when 2 => F<='1'; when 3|5|7|11|13 => F<='1'; when others => F<='0'; end case; end process; end prime7_arch;
Рисунок 16 – Пример поведенческого описания логической схемы с использованием оператора case
--Пример 8 entity prime8 is port( N: in std_logic_vector(15 downto 0); F: out std_logic ); end prime;
architecture prime8_arch of prime8 is begin process(N) variable NI,I: INTEGER; variable prime: boolean; begin NI:= CONV_INTEGER(N); Prime:=true; If NI=1 or NI=2 then null; Else for I in 2 to 253 loop if (NI mod I)=0 then prime:=false; end if; end loop; End if; If prime then F<='1'; else F<='0'; end if; End process; end prime8_arch;
Рисунок 17 – Пример поведенческого описания логической схемы с использованием оператора for
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|