Доброго времени суток!
Я только начал разбираться с VHDL и попытался написать регистр. До этого никакого опыта работы на языках описания аппаратуры не было.
Так вот, идея была такая - в регистре 3 входных порта, один типа std_logic (порт cs), два других типа std_logic_vector (порты addr и datain). Два выходных порта типа std_logic (порты oi1 и oi2). Хотел, чтобы при определенных комбинациях на портах cs и addr, разрешалось запись на порт datain. Также хотел ввести "запрещенные" комбинации на порт datain, в зависимости от которых на выходные порты oi1 и oi2 отправлялась единица. для этого написал следующий код:
library ieee;
use ieee.std_logic_1164.all;
entity Reg is
port (
cs : in std_logic;
addr : in std_logic_vector(1 downto 0);
datain : in std_logic_vector(7 downto 0);
oi1, oi2 : out std_logic
);
end Reg;
architecture ArchReg of Reg is
signal sigreg : std_logic_vector(7 downto 0);
begin
process (cs, addr)
begin
if (cs = '1') then
case addr is
when "10" => sigreg <= datain;
when "11" => sigreg <= datain;
when others => null;
end case;
end if;
if (sigreg = "11110000" or sigreg = "11001100") then
oi1 <= '1';
elsif (sigreg = "00001111" or sigreg = "00110011") then
oi2 <= '1';
else
oi1 <= '0';
oi2 <= '0';
end if;
end process;
end ArchReg;
Данный код скомпилировал в квартусе, компилируется без ошибок, однако получившаяся схема получается далекой от истины. Отсюда вопрос - как правильно написать данный регистр?
Раздел: ПЛИС
Я только начал разбираться с VHDL и попытался написать регистр. До этого никакого опыта работы на языках описания аппаратуры не было.
Так вот, идея была такая - в регистре 3 входных порта, один типа std_logic (порт cs), два других типа std_logic_vector (порты addr и datain). Два выходных порта типа std_logic (порты oi1 и oi2). Хотел, чтобы при определенных комбинациях на портах cs и addr, разрешалось запись на порт datain. Также хотел ввести "запрещенные" комбинации на порт datain, в зависимости от которых на выходные порты oi1 и oi2 отправлялась единица. для этого написал следующий код:
library ieee;
use ieee.std_logic_1164.all;
entity Reg is
port (
cs : in std_logic;
addr : in std_logic_vector(1 downto 0);
datain : in std_logic_vector(7 downto 0);
oi1, oi2 : out std_logic
);
end Reg;
architecture ArchReg of Reg is
signal sigreg : std_logic_vector(7 downto 0);
begin
process (cs, addr)
begin
if (cs = '1') then
case addr is
when "10" => sigreg <= datain;
when "11" => sigreg <= datain;
when others => null;
end case;
end if;
if (sigreg = "11110000" or sigreg = "11001100") then
oi1 <= '1';
elsif (sigreg = "00001111" or sigreg = "00110011") then
oi2 <= '1';
else
oi1 <= '0';
oi2 <= '0';
end if;
end process;
end ArchReg;
Данный код скомпилировал в квартусе, компилируется без ошибок, однако получившаяся схема получается далекой от истины. Отсюда вопрос - как правильно написать данный регистр?
Раздел: ПЛИС