⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can_acf.vhd

📁 一个基于can_bus的虚拟程序
💻 VHD
字号:
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;

                      




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -