📄 can_top.vhd
字号:
-------------------------------------------------------------------------------------------------- VHDL file generated by X-HDL - Revision 3.2.53 Aug. 1, 2005 -- Tue Aug 9 07:33:50 2005---- Input file : C:/Documents and Settings/BryantI/My Documents/tmp/can_top.v-- Design name : can_acf-- Author : -- Company : Actel---- Description : ------------------------------------------------------------------------------------------------------////////////////////////////////////////////////////////////////////--// ////--// can_acf.v ////--// ////--// ////--// This file is part of the CAN Protocol Controller ////--// http://www.opencores.org/projects/can/ ////--// ////--// ////--// Author(s): ////--// Igor Mohor ////--// igorm@opencores.org ////--// ////--// ////--// All additional information is available in the README.txt ////--// file. ////--// ////--////////////////////////////////////////////////////////////////////--// ////--// Copyright (C) 2002, 2003, 2004 Authors ////--// ////--// This source file may be used and distributed without ////--// restriction provided that this copyright statement is not ////--// removed from the file and that any derivative work contains ////--// the original copyright notice and the associated disclaimer. ////--// ////--// This source file is free software; you can redistribute it ////--// and/or modify it under the terms of the GNU Lesser General ////--// Public License as published by the Free Software Foundation; ////--// either version 2.1 of the License, or (at your option) any ////--// later version. ////--// ////--// This source is distributed in the hope that it will be ////--// useful, but WITHOUT ANY WARRANTY; without even the implied ////--// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////--// PURPOSE. See the GNU Lesser General Public License for more ////--// details. ////--// ////--// You should have received a copy of the GNU Lesser General ////--// Public License along with this source; if not, download it ////--// from http://www.opencores.org/lgpl.shtml ////--// ////--// The CAN protocol is developed by Robert Bosch GmbH and ////--// protected by patents. Anybody who wants to implement this ////--// CAN IP core on silicon has to obtain a CAN protocol license ////--// from Bosch. ////--// ////--////////////////////////////////////////////////////////////////////---- CVS Revision History---- $Log: can_acf.v,v $-- Revision 1.10 2005/04/08 13:03:07 igorm-- In "Extended mode" when dual filter was used and standard frame received,-- upper nibble of the data was not filtered ok.---- Revision 1.9 2004/05/31 14:46:11 igorm-- Bit acceptance_filter_mode was inverted.---- Revision 1.8 2004/02/08 14:16:44 mohor-- Header changed.---- Revision 1.7 2003/07/16 13:41:34 mohor-- Fixed according to the linter.---- Revision 1.6 2003/02/10 16:02:11 mohor-- CAN is working according to the specification. WB interface and more-- registers (status, IRQ, ...) needs to be added.---- Revision 1.5 2003/02/09 18:40:29 mohor-- Overload fixed. Hard synchronization also enabled at the last bit of-- interframe.---- Revision 1.4 2003/02/09 02:24:33 mohor-- Bosch license warning added. Error counters finished. Overload frames-- still need to be fixed.---- Revision 1.3 2003/01/31 01:13:37 mohor-- backup.---- Revision 1.2 2003/01/14 12:19:35 mohor-- rx_fifo is now working.---- Revision 1.1 2003/01/08 02:13:15 mohor-- Acceptance filter added.---------- synopsys translate_off--`include "can_defines.v"-- synopsys translate_onLIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.numeric_std.all;library grlib;use grlib.stdlib.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 ENTITY 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; SIGNAL id_ok_xhdl1 : std_logic; BEGIN id_ok <= id_ok_xhdl1; -- Working in basic mode. ID match for standard format (11-bit ID). match <= (((((((CONV_STD_LOGIC(id(3) = acceptance_code_0(0)) OR acceptance_mask_0(0)) AND (CONV_STD_LOGIC(id(4) = acceptance_code_0(1)) OR acceptance_mask_0(1))) AND (CONV_STD_LOGIC(id(5) = acceptance_code_0(2)) OR acceptance_mask_0(2))) AND (CONV_STD_LOGIC(id(6) = acceptance_code_0(3)) OR acceptance_mask_0(3))) AND (CONV_STD_LOGIC(id(7) = acceptance_code_0(4)) OR acceptance_mask_0(4))) AND (CONV_STD_LOGIC(id(8) = acceptance_code_0(5)) OR acceptance_mask_0(5))) AND (CONV_STD_LOGIC(id(9) = acceptance_code_0(6)) OR acceptance_mask_0(6))) AND (CONV_STD_LOGIC(id(10) = acceptance_code_0(7)) OR acceptance_mask_0(7)) ; -- Working in extended mode. ID match for standard format (11-bit ID). Using single filter. match_sf_std <= (((((((((((((((((((((((((((CONV_STD_LOGIC(id(3) = acceptance_code_0(0)) OR acceptance_mask_0(0)) AND (CONV_STD_LOGIC(id(4) = acceptance_code_0(1)) OR acceptance_mask_0(1))) AND (CONV_STD_LOGIC(id(5) = acceptance_code_0(2)) OR acceptance_mask_0(2))) AND (CONV_STD_LOGIC(id(6) = acceptance_code_0(3)) OR acceptance_mask_0(3))) AND (CONV_STD_LOGIC(id(7) = acceptance_code_0(4)) OR acceptance_mask_0(4))) AND (CONV_STD_LOGIC(id(8) = acceptance_code_0(5)) OR acceptance_mask_0(5))) AND (CONV_STD_LOGIC(id(9) = acceptance_code_0(6)) OR acceptance_mask_0(6))) AND (CONV_STD_LOGIC(id(10) = acceptance_code_0(7)) OR acceptance_mask_0(7))) AND (CONV_STD_LOGIC(rtr1 = acceptance_code_1(4)) OR acceptance_mask_1(4))) AND (CONV_STD_LOGIC(id(0) = acceptance_code_1(5)) OR acceptance_mask_1(5))) AND (CONV_STD_LOGIC(id(1) = acceptance_code_1(6)) OR acceptance_mask_1(6))) AND (CONV_STD_LOGIC(id(2) = acceptance_code_1(7)) OR acceptance_mask_1(7))) AND (CONV_STD_LOGIC(data0(0) = acceptance_code_2(0)) OR acceptance_mask_2(0) OR no_byte0)) AND (CONV_STD_LOGIC(data0(1) = acceptance_code_2(1)) OR acceptance_mask_2(1) OR no_byte0)) AND (CONV_STD_LOGIC(data0(2) = acceptance_code_2(2)) OR acceptance_mask_2(2) OR no_byte0)) AND (CONV_STD_LOGIC(data0(3) = acceptance_code_2(3)) OR acceptance_mask_2(3) OR no_byte0)) AND (CONV_STD_LOGIC(data0(4) = acceptance_code_2(4)) OR acceptance_mask_2(4) OR no_byte0)) AND (CONV_STD_LOGIC(data0(5) = acceptance_code_2(5)) OR acceptance_mask_2(5) OR no_byte0)) AND (CONV_STD_LOGIC(data0(6) = acceptance_code_2(6)) OR acceptance_mask_2(6) OR no_byte0)) AND (CONV_STD_LOGIC(data0(7) = acceptance_code_2(7)) OR acceptance_mask_2(7) OR no_byte0)) AND (CONV_STD_LOGIC(data1(0) = acceptance_code_3(0)) OR acceptance_mask_3(0) OR no_byte1)) AND (CONV_STD_LOGIC(data1(1) = acceptance_code_3(1)) OR acceptance_mask_3(1) OR no_byte1)) AND (CONV_STD_LOGIC(data1(2) = acceptance_code_3(2)) OR acceptance_mask_3(2) OR no_byte1)) AND (CONV_STD_LOGIC(data1(3) = acceptance_code_3(3)) OR acceptance_mask_3(3) OR no_byte1)) AND (CONV_STD_LOGIC(data1(4) = acceptance_code_3(4)) OR acceptance_mask_3(4) OR no_byte1)) AND (CONV_STD_LOGIC(data1(5) = acceptance_code_3(5)) OR acceptance_mask_3(5) OR no_byte1)) AND (CONV_STD_LOGIC(data1(6) = acceptance_code_3(6)) OR acceptance_mask_3(6) OR no_byte1)) AND (CONV_STD_LOGIC(data1(7) = acceptance_code_3(7)) OR acceptance_mask_3(7) OR no_byte1) ; -- Working in extended mode. ID match for extended format (29-bit ID). Using single filter. match_sf_ext <= (((((((((((((((((((((((((((((CONV_STD_LOGIC(id(21) = acceptance_code_0(0)) OR acceptance_mask_0(0)) AND (CONV_STD_LOGIC(id(22) = acceptance_code_0(1)) OR acceptance_mask_0(1))) AND (CONV_STD_LOGIC(id(23) = acceptance_code_0(2)) OR acceptance_mask_0(2))) AND (CONV_STD_LOGIC(id(24) = acceptance_code_0(3)) OR acceptance_mask_0(3))) AND (CONV_STD_LOGIC(id(25) = acceptance_code_0(4)) OR acceptance_mask_0(4))) AND (CONV_STD_LOGIC(id(26) = acceptance_code_0(5)) OR acceptance_mask_0(5))) AND (CONV_STD_LOGIC(id(27) = acceptance_code_0(6)) OR acceptance_mask_0(6))) AND (CONV_STD_LOGIC(id(28) = acceptance_code_0(7)) OR acceptance_mask_0(7))) AND (CONV_STD_LOGIC(id(13) = acceptance_code_1(0)) OR acceptance_mask_1(0))) AND (CONV_STD_LOGIC(id(14) = acceptance_code_1(1)) OR acceptance_mask_1(1))) AND (CONV_STD_LOGIC(id(15) = acceptance_code_1(2)) OR acceptance_mask_1(2))) AND (CONV_STD_LOGIC(id(16) = acceptance_code_1(3)) OR acceptance_mask_1(3))) AND (CONV_STD_LOGIC(id(17) = acceptance_code_1(4)) OR acceptance_mask_1(4))) AND (CONV_STD_LOGIC(id(18) = acceptance_code_1(5)) OR acceptance_mask_1(5))) AND (CONV_STD_LOGIC(id(19) = acceptance_code_1(6)) OR acceptance_mask_1(6))) AND (CONV_STD_LOGIC(id(20) = acceptance_code_1(7)) OR acceptance_mask_1(7))) AND (CONV_STD_LOGIC(id(5) = acceptance_code_2(0)) OR acceptance_mask_2(0))) AND (CONV_STD_LOGIC(id(6) = acceptance_code_2(1)) OR acceptance_mask_2(1))) AND (CONV_STD_LOGIC(id(7) = acceptance_code_2(2)) OR acceptance_mask_2(2))) AND (CONV_STD_LOGIC(id(8) = acceptance_code_2(3)) OR acceptance_mask_2(3))) AND (CONV_STD_LOGIC(id(9) = acceptance_code_2(4)) OR acceptance_mask_2(4))) AND (CONV_STD_LOGIC(id(10) = acceptance_code_2(5)) OR acceptance_mask_2(5))) AND (CONV_STD_LOGIC(id(11) = acceptance_code_2(6)) OR acceptance_mask_2(6))) AND (CONV_STD_LOGIC(id(12) = acceptance_code_2(7)) OR acceptance_mask_2(7))) AND (CONV_STD_LOGIC(rtr2 = acceptance_code_3(2)) OR acceptance_mask_3(2))) AND (CONV_STD_LOGIC(id(0) = acceptance_code_3(3)) OR acceptance_mask_3(3))) AND (CONV_STD_LOGIC(id(1) = acceptance_code_3(4)) OR acceptance_mask_3(4))) AND (CONV_STD_LOGIC(id(2) = acceptance_code_3(5)) OR acceptance_mask_3(5))) AND (CONV_STD_LOGIC(id(3) = acceptance_code_3(6)) OR acceptance_mask_3(6))) AND (CONV_STD_LOGIC(id(4) = acceptance_code_3(7)) OR acceptance_mask_3(7)) ; -- Working in extended mode. ID match for standard format (11-bit ID). Using double filter. match_df_std <= ((((((((((((((((((((CONV_STD_LOGIC(id(3) = acceptance_code_0(0)) OR acceptance_mask_0(0)) AND (CONV_STD_LOGIC(id(4) = acceptance_code_0(1)) OR acceptance_mask_0(1))) AND (CONV_STD_LOGIC(id(5) = acceptance_code_0(2)) OR acceptance_mask_0(2))) AND (CONV_STD_LOGIC(id(6) = acceptance_code_0(3)) OR acceptance_mask_0(3))) AND (CONV_STD_LOGIC(id(7) = acceptance_code_0(4)) OR acceptance_mask_0(4))) AND (CONV_STD_LOGIC(id(8) = acceptance_code_0(5)) OR acceptance_mask_0(5))) AND (CONV_STD_LOGIC(id(9) = acceptance_code_0(6)) OR acceptance_mask_0(6))) AND (CONV_STD_LOGIC(id(10) = acceptance_code_0(7)) OR acceptance_mask_0(7))) AND (CONV_STD_LOGIC(rtr1 = acceptance_code_1(4)) OR acceptance_mask_1(4))) AND (CONV_STD_LOGIC(id(0) = acceptance_code_1(5)) OR acceptance_mask_1(5))) AND (CONV_STD_LOGIC(id(1) = acceptance_code_1(6)) OR acceptance_mask_1(6))) AND (CONV_STD_LOGIC(id(2) = acceptance_code_1(7)) OR acceptance_mask_1(7))) AND (CONV_STD_LOGIC(data0(0) = acceptance_code_3(0)) OR acceptance_mask_3(0) OR no_byte0)) AND (CONV_STD_LOGIC(data0(1) = acceptance_code_3(1)) OR acceptance_mask_3(1) OR no_byte0)) AND (CONV_STD_LOGIC(data0(2) = acceptance_code_3(2)) OR acceptance_mask_3(2) OR no_byte0)) AND (CONV_STD_LOGIC(data0(3) = acceptance_code_3(3)) OR acceptance_mask_3(3) OR no_byte0)) AND (CONV_STD_LOGIC(data0(4) = acceptance_code_1(0)) OR acceptance_mask_1(0) OR no_byte0)) AND (CONV_STD_LOGIC(data0(5) = acceptance_code_1(1)) OR acceptance_mask_1(1) OR no_byte0)) AND (CONV_STD_LOGIC(data0(6) = acceptance_code_1(2)) OR acceptance_mask_1(2) OR no_byte0)) AND (CONV_STD_LOGIC(data0(7) = acceptance_code_1(3)) OR acceptance_mask_1(3) OR no_byte0)) OR ((((((((((((CONV_STD_LOGIC(id(3) = acceptance_code_2(0)) OR acceptance_mask_2(0)) AND (CONV_STD_LOGIC(id(4) = acceptance_code_2(1)) OR acceptance_mask_2(1))) AND (CONV_STD_LOGIC(id(5) = acceptance_code_2(2)) OR acceptance_mask_2(2))) AND (CONV_STD_LOGIC(id(6) = acceptance_code_2(3)) OR acceptance_mask_2(3))) AND (CONV_STD_LOGIC(id(7) = acceptance_code_2(4)) OR acceptance_mask_2(4))) AND (CONV_STD_LOGIC(id(8) = acceptance_code_2(5)) OR acceptance_mask_2(5))) AND (CONV_STD_LOGIC(id(9) = acceptance_code_2(6)) OR acceptance_mask_2(6))) AND (CONV_STD_LOGIC(id(10) = acceptance_code_2(7)) OR acceptance_mask_2(7))) AND (CONV_STD_LOGIC(rtr1 = acceptance_code_3(4)) OR acceptance_mask_3(4))) AND (CONV_STD_LOGIC(id(0) = acceptance_code_3(5)) OR acceptance_mask_3(5))) AND (CONV_STD_LOGIC(id(1) = acceptance_code_3(6)) OR acceptance_mask_3(6))) AND (CONV_STD_LOGIC(id(2) = acceptance_code_3(7)) OR acceptance_mask_3(7))) ; -- Working in extended mode. ID match for extended format (29-bit ID). Using double filter. match_df_ext <= ((((((((((((((((CONV_STD_LOGIC(id(21) = acceptance_code_0(0)) OR acceptance_mask_0(0)) AND (CONV_STD_LOGIC(id(22) = acceptance_code_0(1)) OR acceptance_mask_0(1))) AND (CONV_STD_LOGIC(id(23) = acceptance_code_0(2)) OR acceptance_mask_0(2))) AND (CONV_STD_LOGIC(id(24) = acceptance_code_0(3)) OR acceptance_mask_0(3))) AND (CONV_STD_LOGIC(id(25) = acceptance_code_0(4)) OR acceptance_mask_0(4))) AND (CONV_STD_LOGIC(id(26) = acceptance_code_0(5)) OR acceptance_mask_0(5))) AND (CONV_STD_LOGIC(id(27) = acceptance_code_0(6)) OR acceptance_mask_0(6))) AND (CONV_STD_LOGIC(id(28) = acceptance_code_0(7)) OR acceptance_mask_0(7))) AND (CONV_STD_LOGIC(id(13) = acceptance_code_1(0)) OR acceptance_mask_1(0))) AND (CONV_STD_LOGIC(id(14) = acceptance_code_1(1)) OR acceptance_mask_1(1))) AND (CONV_STD_LOGIC(id(15) = acceptance_code_1(2)) OR acceptance_mask_1(2))) AND (CONV_STD_LOGIC(id(16) = acceptance_code_1(3)) OR acceptance_mask_1(3))) AND (CONV_STD_LOGIC(id(17) = acceptance_code_1(4)) OR acceptance_mask_1(4))) AND (CONV_STD_LOGIC(id(18) = acceptance_code_1(5)) OR acceptance_mask_1(5))) AND (CONV_STD_LOGIC(id(19) = acceptance_code_1(6)) OR acceptance_mask_1(6))) AND (CONV_STD_LOGIC(id(20) = acceptance_code_1(7)) OR acceptance_mask_1(7))) OR ((((((((((((((((CONV_STD_LOGIC(id(21) = acceptance_code_2(0)) OR acceptance_mask_2(0)) AND (CONV_STD_LOGIC(id(22) = acceptance_code_2(1)) OR acceptance_mask_2(1))) AND (CONV_STD_LOGIC(id(23) = acceptance_code_2(2)) OR acceptance_mask_2(2))) AND (CONV_STD_LOGIC(id(24) = acceptance_code_2(3)) OR acceptance_mask_2(3))) AND (CONV_STD_LOGIC(id(25) = acceptance_code_2(4)) OR acceptance_mask_2(4))) AND (CONV_STD_LOGIC(id(26) = acceptance_code_2(5)) OR acceptance_mask_2(5))) AND (CONV_STD_LOGIC(id(27) = acceptance_code_2(6)) OR acceptance_mask_2(6))) AND (CONV_STD_LOGIC(id(28) = acceptance_code_2(7)) OR acceptance_mask_2(7))) AND (CONV_STD_LOGIC(id(13) = acceptance_code_3(0)) OR acceptance_mask_3(0))) AND (CONV_STD_LOGIC(id(14) = acceptance_code_3(1)) OR acceptance_mask_3(1))) AND (CONV_STD_LOGIC(id(15) = acceptance_code_3(2)) OR acceptance_mask_3(2))) AND (CONV_STD_LOGIC(id(16) = acceptance_code_3(3)) OR acceptance_mask_3(3))) AND (CONV_STD_LOGIC(id(17) = acceptance_code_3(4)) OR acceptance_mask_3(4))) AND (CONV_STD_LOGIC(id(18) = acceptance_code_3(5)) OR acceptance_mask_3(5))) AND (CONV_STD_LOGIC(id(19) = acceptance_code_3(6)) OR acceptance_mask_3(6))) AND (CONV_STD_LOGIC(id(20) = acceptance_code_3(7)) OR acceptance_mask_3(7))) ; -- ID ok signal generation PROCESS (clk, rst) BEGIN IF (rst = '1') THEN id_ok_xhdl1 <= '0'; ELSIF (clk'EVENT AND clk = '1') THEN IF (go_rx_crc_lim = '1') THEN -- sample_point is already included in go_rx_crc_lim IF (extended_mode = '1') THEN IF (NOT acceptance_filter_mode = '1') THEN -- dual filter IF (ide = '1') THEN -- extended frame message id_ok_xhdl1 <= match_df_ext ; ELSE -- standard frame message id_ok_xhdl1 <= match_df_std ; END IF; ELSE -- single filter IF (ide = '1') THEN -- extended frame message id_ok_xhdl1 <= match_sf_ext ; ELSE -- standard frame message id_ok_xhdl1 <= match_sf_std ; END IF; END IF; ELSE id_ok_xhdl1 <= match ; END IF; ELSE IF ((reset_mode OR go_rx_inter OR go_error_frame) = '1') THEN -- sample_point is already included in go_rx_inter id_ok_xhdl1 <= '0' ; END IF; END IF; END IF; END PROCESS;END ARCHITECTURE RTL;-------------------------------------------------------------------------------------------------- VHDL file generated by X-HDL - Revision 3.2.53 Aug. 1, 2005 -- Tue Aug 9 07:33:51 2005---- Input file : C:/Documents and Settings/BryantI/My Documents/tmp/can_top.v-- Design name : can_btl-- Author : -- Company : Actel---- Description : --
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -