0
我是VHDL的新手。我需要编写一个模块来进行数据过滤。我的模块结构是:VHDL过滤数据
a_rst - async reset
clk - clock
s_rst - sync reset
valid_in - 0 - no data, 1 - where is data
data_in - [7 downto 0]
输出信号:
valid_out - 0 - no data, 1 - where is data
data_out - [7 downto 0]
我写testbeanch这使我的模块data_in
:00,01,,03,0A,02,00,01 ,,0F。
但我模块返回:00,01,AA,03,0A,02,00,01,AA,0F
insted的组成:00,01,AA,03,0A,02 ,00,01,,0F。
我试着这样做:
--libraries
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
--entity
entity ex6_v03 is
port
(
a_rst : in std_logic;
clk : in std_logic; -- 200 MHz
s_rst : in std_logic;
valid_in : in std_logic;
data_in : in std_logic_vector (7 downto 0);
valid_out : out std_logic;
data_out : out std_logic_vector (7 downto 0)
);
end entity ex6_v03;
architecture behavior of ex6_v03 is
signal st : integer := 0;
begin
process(a_rst, clk)
begin
-- asynchronous reset
if (a_rst = '1') then
data_out <= x"00";
valid_out <= '0';
-- synchronous reset
elsif rising_edge(clk) then -- clk
if (s_rst = '1') then
valid_out <= '0';
data_out <= x"00";
else
-- normal activity
if(valid_in = '1') then
-- main logic
if(data_in = x"00") then
st <= 1;
valid_out <= '1';
data_out <= data_in;
elsif(st = 1 and data_in = x"01") then
st <= 2;
valid_out <= '1';
data_out <= data_in;
elsif(st = 2 and data_in = x"02") then
st <= 3;
valid_out <= '1';
data_out <= x"AA";
elsif(st = 3 and data_in = x"03") then
valid_out <= '1';
data_out <= data_in;
st <= 0;
else
st <= 0;
valid_out <= '1';
data_out <= data_in;
end if;
-- end main logic
else
valid_out <= '0';
data_out <= x"00";
end if;
end if;
end if;
end process;
end architecture behavior;
但我的模块不等待0x03和即时发送和0xAA。如何解决这个问题?
没有明确定义您要修复的内容。 –
如何为此添加缓冲区?当在输入时遇到00,01,02,03替换为00,01,AA,03。 –
你的意思是,用AA代替O2,但只有当下一个状态是03时?或者仅在序列01,02,03?或者在00,01,02,03的顺序中?或者只有第一次出现02但没有其他人,或者......在你提出明智的问题之前,你不可能得到明智的答案。 –