Другие языки программирования и технологии

Создание структурных моделей VHDL. Помогите написать VHDL код.

Используя схему, разработать структурную модель n-разрядного сдвигового регистра.
Разрядность регистра задать через generic-константу. Для создания n копий компонентов использовать оператор generate.

Пример реализации JK-триггера представлен листингом ниже.

library IEEE;
use IEEE.std_logic_1164.all;
entity JKFF is
port (SN, RN, J, K, CLK: in std_logic;
Q, QN : out std_logic);
end JKFF;
architecture JKFF1 of JKFF is
signal Qin: std_logic;
begin
process (SN, RN, CLK)
begin
if RN = '0' then
Qin <= '0'; -- сброс в 0
elsif SN = '0' then
Qin<= '1'; -- установка в 1
elsif CLK = '0' and CLK'event then
Qin<=(J and not Qin) or (not K and Qin);
end if;
end process ;

Q<=Qin; QN <= not Qin;
end JKFF1 ;

Или возможно у кого то есть примеры с использованием оператора generate. Самому разобраться довольно сложно.
Grisa Slobodean
Grisa Slobodean
707
Ну вообще так с ходу это, действительно, не так просто, особенно без опыта того железа, на котором требуется воплотить.
Интересно, а эта задача у Вас откуда (из учебного процесса в университете или применительно к профессиональной деятельности)?
ДА
Денис Алябьев
76 473
Лучший ответ
Grisa Slobodean Учусь в универе, если с двумя прошлыми заданиями я справился, то тут уже застопорился.
Пример кода JK-триггер на VHDL

library ieee;
use ieee.std_logic_1164.all;

entity jk_trigger is

port (
Clk, Clr, Set, J, K : in std_logic;
Q,notQ : out std_logic);

end jk_trigger;

architecture behaviour of jk_trigger is
signal Qtmp : std_logic := '0';
signal notQtmp : std_logic := '1';
begin -- behaviour

Q <= Qtmp;
notQ <= notQtmp;

process (Clk, Clr, Set)
begin
if Clr = '1' then
Qtmp <= '0';
notQtmp <= '1';
elsif Set = '1' then
Qtmp <= '1';
notQtmp <= '0';
elsif Clk'event and Clk = '1' then -- rising clock edge
if (J = '1') and (K = '0') then
Qtmp <= '1';
notQtmp <= '0';
elsif (J = '0') and (K = '1') then
Qtmp <= '0';
notQtmp <= '1';
elsif (J = '1') and (K = '1') then
Qtmp <= not Qtmp;
notQtmp <= not notQtmp;
end if;
end if;
end process;

end behaviour;

library ieee;
use ieee.std_logic_1164.all;

entity jk_tb is
end jk_tb;

architecture behaviour of jk_tb is
subtype template_type is std_logic_vector (0 to 6);
type templates_type is array (natural range <>) of template_type;
constant test_cases : templates_type := ("0000001","1000010");
signal Clr,Clk,Set,J,K : std_logic;

begin -- behaviour
trigger : entity work.jk_trigger(behaviour) port map (
Clk => Clk ,
Clr => Clr,
Set => Set,
J => J,
K => K);
worker: process (Clk, Clr)
begin

end process worker;

end behaviour;