0

私は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]

data_in私は自分のモジュールを置くtestbeanchを書きます: 00,01、02、03,0A、02,00,01、02、0F 。

しかし、私のモジュールは次を返します:00,01、AA、03,0A、02,00,01、AA、0F
insted of:00,01、AA、03,0A、02,00,01、02、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を送信します。これを修正する方法は?

4

1 に答える 1