?? can_acf.vhd
字號(hào):
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity can_acf is
port (
clk: in std_logic;
rst: in std_logic;
id: in std_logic_vector(28 downto 0);
reset_mode: in std_logic;
acceptance_filter_mode: in std_logic;
extended_mode: in std_logic;
acceptance_code_0: in std_logic_vector(7 downto 0);
acceptance_code_1: in std_logic_vector(7 downto 0);
acceptance_code_2: in std_logic_vector(7 downto 0);
acceptance_code_3: in std_logic_vector(7 downto 0);
acceptance_mask_0: in std_logic_vector(7 downto 0);
acceptance_mask_1: in std_logic_vector(7 downto 0);
acceptance_mask_2: in std_logic_vector(7 downto 0);
acceptance_mask_3: in std_logic_vector(7 downto 0);
go_rx_crc_lim: in std_logic;
go_rx_inter: in std_logic;
go_error_frame: in std_logic;
data0: in std_logic_vector(7 downto 0);
data1: in std_logic_vector(7 downto 0);
rtr1: in std_logic;
rtr2: in std_logic;
ide: in std_logic;
no_byte0: in std_logic;
no_byte1: in std_logic;
id_ok: out std_logic);
end can_acf;
architecture RTL of can_acf is
signal match: std_logic;
signal match_sf_std: std_logic;
signal match_sf_ext: std_logic;
signal match_df_std: std_logic;
signal match_df_ext: std_logic;
type fifo is array(7 downto 0) of std_logic_vector(7 downto 0);
signal FIF: fifo;
constant Tp: time := 1 ns;
begin
match <= '1' when ((id(3) = (acceptance_code_0(0) or acceptance_mask_0(0)) ) and
(id(4) = (acceptance_code_0(1) or acceptance_mask_0(1)) ) and
(id(5) = (acceptance_code_0(2) or acceptance_mask_0(2)) ) and
(id(6) = (acceptance_code_0(3) or acceptance_mask_0(3)) ) and
(id(7) = (acceptance_code_0(4) or acceptance_mask_0(4)) ) and
(id(8) = (acceptance_code_0(5) or acceptance_mask_0(5)) ) and
(id(9) = (acceptance_code_0(6) or acceptance_mask_0(6)) ) and
(id(10) = (acceptance_code_0(7) or acceptance_mask_0(7)) ))else '0';
match_sf_std <= '1' when ( (id(3) = (acceptance_code_0(0) or acceptance_mask_0(0)) ) and
(id(4) = (acceptance_code_0(1) or acceptance_mask_0(1)) ) and
(id(5) = (acceptance_code_0(2) or acceptance_mask_0(2)) ) and
(id(6) = (acceptance_code_0(3) or acceptance_mask_0(3)) ) and
(id(7) = (acceptance_code_0(4) or acceptance_mask_0(4)) ) and
(id(8) = (acceptance_code_0(5) or acceptance_mask_0(5)) ) and
(id(9) = (acceptance_code_0(6) or acceptance_mask_0(6)) ) and
(id(10) = (acceptance_code_0(7) or acceptance_mask_0(7)) ) and
(rtr1 = (acceptance_code_1(4) or acceptance_mask_1(4)) ) and
(id(0) = (acceptance_code_1(5) or acceptance_mask_1(5)) ) and
(id(1) = (acceptance_code_1(6) or acceptance_mask_1(6)) ) and
(id(2) = (acceptance_code_1(7) or acceptance_mask_1(7)) ) and
(data0(0) = (acceptance_code_2(0) or acceptance_mask_2(0) or no_byte0)) and
(data0(1) = (acceptance_code_2(1) or acceptance_mask_2(1) or no_byte0)) and
(data0(2) = (acceptance_code_2(2) or acceptance_mask_2(2) or no_byte0)) and
(data0(3) = (acceptance_code_2(3) or acceptance_mask_2(3) or no_byte0)) and
(data0(4) = (acceptance_code_2(4) or acceptance_mask_2(4) or no_byte0)) and
(data0(5) = (acceptance_code_2(5) or acceptance_mask_2(5) or no_byte0)) and
(data0(6) = (acceptance_code_2(6) or acceptance_mask_2(6) or no_byte0)) and
(data0(7) = (acceptance_code_2(7) or acceptance_mask_2(7) or no_byte0)) and
(data1(0) = (acceptance_code_3(0) or acceptance_mask_3(0) or no_byte1)) and
(data1(1) = (acceptance_code_3(1) or acceptance_mask_3(1) or no_byte1)) and
(data1(2) = (acceptance_code_3(2) or acceptance_mask_3(2) or no_byte1)) and
(data1(3) = (acceptance_code_3(3) or acceptance_mask_3(3) or no_byte1)) and
(data1(4) = (acceptance_code_3(4) or acceptance_mask_3(4) or no_byte1)) and
(data1(5) = (acceptance_code_3(5) or acceptance_mask_3(5) or no_byte1)) and
(data1(6) = (acceptance_code_3(6) or acceptance_mask_3(6) or no_byte1)) and
(data1(7) = (acceptance_code_3(7) or acceptance_mask_3(7) or no_byte1))
)else '0';
match_sf_ext <= '1' when ( (id(21) = (acceptance_code_0(0) or acceptance_mask_0(0)) ) and
(id(22) = (acceptance_code_0(1) or acceptance_mask_0(1)) ) and
(id(23) = (acceptance_code_0(2) or acceptance_mask_0(2)) ) and
(id(24) = (acceptance_code_0(3) or acceptance_mask_0(3)) ) and
(id(25) = (acceptance_code_0(4) or acceptance_mask_0(4)) ) and
(id(26) = (acceptance_code_0(5) or acceptance_mask_0(5)) ) and
(id(27) = (acceptance_code_0(6) or acceptance_mask_0(6)) ) and
(id(28) = (acceptance_code_0(7) or acceptance_mask_0(7)) ) and
(id(13) = (acceptance_code_1(0) or acceptance_mask_1(0)) ) and
(id(14) = (acceptance_code_1(1) or acceptance_mask_1(1)) ) and
(id(15) = (acceptance_code_1(2) or acceptance_mask_1(2)) ) and
(id(16) = (acceptance_code_1(3) or acceptance_mask_1(3)) ) and
(id(17) = (acceptance_code_1(4) or acceptance_mask_1(4)) ) and
(id(18) = (acceptance_code_1(5) or acceptance_mask_1(5)) ) and
(id(19) = (acceptance_code_1(6) or acceptance_mask_1(6)) ) and
(id(20) = (acceptance_code_1(7) or acceptance_mask_1(7)) ) and
(id(5) = (acceptance_code_2(0) or acceptance_mask_2(0)) ) and
(id(6) = (acceptance_code_2(1) or acceptance_mask_2(1)) ) and
(id(7) = (acceptance_code_2(2) or acceptance_mask_2(2)) ) and
(id(8) = (acceptance_code_2(3) or acceptance_mask_2(3)) ) and
(id(9) = (acceptance_code_2(4) or acceptance_mask_2(4)) ) and
(id(10) = (acceptance_code_2(5) or acceptance_mask_2(5)) ) and
(id(11) = (acceptance_code_2(6) or acceptance_mask_2(6)) ) and
(id(12) = (acceptance_code_2(7) or acceptance_mask_2(7)) ) and
(rtr2 = (acceptance_code_3(2) or acceptance_mask_3(2)) ) and
(id(0) = (acceptance_code_3(3) or acceptance_mask_3(3)) ) and
(id(1) = (acceptance_code_3(4) or acceptance_mask_3(4)) ) and
(id(2) = (acceptance_code_3(5) or acceptance_mask_3(5)) ) and
(id(3) = (acceptance_code_3(6) or acceptance_mask_3(6)) ) and
(id(4) = (acceptance_code_3(7) or acceptance_mask_3(7)) )
)else '0';
match_df_std <= '1' when (((id(3) = (acceptance_code_0(0) or acceptance_mask_0(0)) ) and
(id(4) = (acceptance_code_0(1) or acceptance_mask_0(1)) ) and
(id(5) = (acceptance_code_0(2) or acceptance_mask_0(2)) ) and
(id(6) = (acceptance_code_0(3) or acceptance_mask_0(3)) ) and
(id(7) = (acceptance_code_0(4) or acceptance_mask_0(4)) ) and
(id(8) = (acceptance_code_0(5) or acceptance_mask_0(5)) ) and
(id(9) = (acceptance_code_0(6) or acceptance_mask_0(6)) ) and
(id(10) = (acceptance_code_0(7) or acceptance_mask_0(7)) ) and
(rtr1 = (acceptance_code_1(4) or acceptance_mask_1(4)) ) and
(id(0) = (acceptance_code_1(5) or acceptance_mask_1(5)) ) and
(id(1) = (acceptance_code_1(6) or acceptance_mask_1(6)) ) and
(id(2) = (acceptance_code_1(7) or acceptance_mask_1(7)) ) and
(data0(0) = (acceptance_code_3(0) or acceptance_mask_3(0) or no_byte0)) and
(data0(1) = (acceptance_code_3(1) or acceptance_mask_3(1) or no_byte0)) and
(data0(2) = (acceptance_code_3(2) or acceptance_mask_3(2) or no_byte0)) and
(data0(3) = (acceptance_code_3(3) or acceptance_mask_3(3) or no_byte0)) and
(data0(4) = (acceptance_code_1(4) or acceptance_mask_1(4) or no_byte0)) and
(data0(5) = (acceptance_code_1(5) or acceptance_mask_1(5) or no_byte0)) and
(data0(6) = (acceptance_code_1(6) or acceptance_mask_1(6) or no_byte0)) and
(data0(7) = (acceptance_code_1(7) or acceptance_mask_1(7) or no_byte0)) )
or
((id(3) = (acceptance_code_2(0) or acceptance_mask_2(0)) ) and
(id(4) = (acceptance_code_2(1) or acceptance_mask_2(1)) ) and
(id(5) = (acceptance_code_2(2) or acceptance_mask_2(2)) ) and
(id(6) = (acceptance_code_2(3) or acceptance_mask_2(3)) ) and
(id(7) = (acceptance_code_2(4) or acceptance_mask_2(4)) ) and
(id(8) = (acceptance_code_2(5) or acceptance_mask_2(5)) ) and
(id(9) = (acceptance_code_2(6) or acceptance_mask_2(6)) ) and
(id(10) = (acceptance_code_2(7) or acceptance_mask_2(7)) ) and
(rtr1 = (acceptance_code_3(4) or acceptance_mask_3(4)) ) and
(id(0) = (acceptance_code_3(5) or acceptance_mask_3(5)) ) and
(id(1) = (acceptance_code_3(6) or acceptance_mask_3(6)) ) and
(id(2) = (acceptance_code_3(7) or acceptance_mask_3(7)) ) )
)else '0';
match_df_ext <= '1' when (((id(21) = (acceptance_code_0(0) or acceptance_mask_0(0)) ) and
(id(22) = (acceptance_code_0(1) or acceptance_mask_0(1)) ) and
(id(23) = (acceptance_code_0(2) or acceptance_mask_0(2)) ) and
(id(24) = (acceptance_code_0(3) or acceptance_mask_0(3)) ) and
(id(25) = (acceptance_code_0(4) or acceptance_mask_0(4)) ) and
(id(26) = (acceptance_code_0(5) or acceptance_mask_0(5)) ) and
(id(27) = (acceptance_code_0(6) or acceptance_mask_0(6)) ) and
(id(28) = (acceptance_code_0(7) or acceptance_mask_0(7)) ) and
(id(13) = (acceptance_code_1(0) or acceptance_mask_1(0)) ) and
(id(14) = (acceptance_code_1(1) or acceptance_mask_1(1)) ) and
(id(15) = (acceptance_code_1(2) or acceptance_mask_1(2)) ) and
(id(16) = (acceptance_code_1(3) or acceptance_mask_1(3)) ) and
(id(17) = (acceptance_code_1(4) or acceptance_mask_1(4)) ) and
(id(18) = (acceptance_code_1(5) or acceptance_mask_1(5)) ) and
(id(19) = (acceptance_code_1(6) or acceptance_mask_1(6)) ) and
(id(20) = (acceptance_code_1(7) or acceptance_mask_1(7)) ) )
or
((id(21) = (acceptance_code_2(0) or acceptance_mask_2(0)) ) and
(id(22) = (acceptance_code_2(1) or acceptance_mask_2(1)) ) and
(id(23) = (acceptance_code_2(2) or acceptance_mask_2(2)) ) and
(id(24) = (acceptance_code_2(3) or acceptance_mask_2(3)) ) and
(id(25) = (acceptance_code_2(4) or acceptance_mask_2(4)) ) and
(id(26) = (acceptance_code_2(5) or acceptance_mask_2(5)) ) and
(id(27) = (acceptance_code_2(6) or acceptance_mask_2(6)) ) and
(id(28) = (acceptance_code_2(7) or acceptance_mask_2(7)) ) and
(id(13) = (acceptance_code_3(0) or acceptance_mask_3(0)) ) and
(id(14) = (acceptance_code_3(1) or acceptance_mask_3(1)) ) and
(id(15) = (acceptance_code_3(2) or acceptance_mask_3(2)) ) and
(id(16) = (acceptance_code_3(3) or acceptance_mask_3(3)) ) and
(id(17) = (acceptance_code_3(4) or acceptance_mask_3(4)) ) and
(id(18) = (acceptance_code_3(5) or acceptance_mask_3(5)) ) and
(id(19) = (acceptance_code_3(6) or acceptance_mask_3(6)) ) and
(id(20) = (acceptance_code_3(7) or acceptance_mask_3(7)) ) )
)else '0';
process(clk,rst)
begin
if(clk = '1' and clk'event) then
if (rst = '1') then
id_ok <= '0';
elsif (go_rx_crc_lim = '1') then
if (extended_mode = '1') then
if (acceptance_filter_mode = '1') then
if (ide = '1') then
id_ok <= match_df_ext after Tp;
else
id_ok <= match_df_std after Tp;
end if;
else
if (ide = '1') then
id_ok <= match_sf_ext after Tp;
else
id_ok <= match_sf_std after Tp;
end if;
end if;
else
id_ok <= match after Tp;
end if;
elsif ((reset_mode = '1') or (go_rx_inter='1') or (go_error_frame='1')) then
id_ok <= '0' after Tp;
end if;
end if;
end process;
end RTL;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -