Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ------------------------------------------------------------------------------
- -- user_logic.vhd - entity/architecture pair
- ------------------------------------------------------------------------------
- --
- -- ***************************************************************************
- -- ** Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. **
- -- ** **
- -- ** Xilinx, Inc. **
- -- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" **
- -- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND **
- -- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, **
- -- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, **
- -- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION **
- -- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, **
- -- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE **
- -- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY **
- -- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE **
- -- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR **
- -- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF **
- -- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS **
- -- ** FOR A PARTICULAR PURPOSE. **
- -- ** **
- -- ***************************************************************************
- --
- ------------------------------------------------------------------------------
- -- Filename: user_logic.vhd
- -- Version: 1.00.a
- -- Description: User logic.
- -- Date: Sat Jul 14 13:39:25 2012 (by Create and Import Peripheral Wizard)
- -- VHDL Standard: VHDL'93
- ------------------------------------------------------------------------------
- -- Naming Conventions:
- -- active low signals: "*_n"
- -- clock signals: "clk", "clk_div#", "clk_#x"
- -- reset signals: "rst", "rst_n"
- -- generics: "C_*"
- -- user defined types: "*_TYPE"
- -- state machine next state: "*_ns"
- -- state machine current state: "*_cs"
- -- combinatorial signals: "*_com"
- -- pipelined or register delay signals: "*_d#"
- -- counter signals: "*cnt*"
- -- clock enable signals: "*_ce"
- -- internal version of output port: "*_i"
- -- device pins: "*_pin"
- -- ports: "- Names begin with Uppercase"
- -- processes: "*_PROCESS"
- -- component instantiations: "<ENTITY_>I_<#|FUNC>"
- ------------------------------------------------------------------------------
- -- DO NOT EDIT BELOW THIS LINE --------------------
- library ieee;
- use ieee.std_logic_1164.all;
- use ieee.std_logic_arith.all;
- use ieee.std_logic_unsigned.all;
- library proc_common_v3_00_a;
- use proc_common_v3_00_a.proc_common_pkg.all;
- -- DO NOT EDIT ABOVE THIS LINE --------------------
- library filter_if_v1_00_a;
- use filter_if_v1_00_a.filtre;
- use filter_if_v1_00_a.filter_pkg.all;
- --USER libraries added here
- ------------------------------------------------------------------------------
- -- Entity section
- ------------------------------------------------------------------------------
- -- Definition of Generics:
- -- C_SLV_DWIDTH -- Slave interface data bus width
- -- C_NUM_REG -- Number of software accessible registers
- --
- -- Definition of Ports:
- -- Bus2IP_Clk -- Bus to IP clock
- -- Bus2IP_Reset -- Bus to IP reset
- -- Bus2IP_Data -- Bus to IP data bus
- -- Bus2IP_BE -- Bus to IP byte enables
- -- Bus2IP_RdCE -- Bus to IP read chip enable
- -- Bus2IP_WrCE -- Bus to IP write chip enable
- -- IP2Bus_Data -- IP to Bus data bus
- -- IP2Bus_RdAck -- IP to Bus read transfer acknowledgement
- -- IP2Bus_WrAck -- IP to Bus write transfer acknowledgement
- -- IP2Bus_Error -- IP to Bus error response
- ------------------------------------------------------------------------------
- entity user_logic is
- generic
- (
- -- ADD USER GENERICS BELOW THIS LINE ---------------
- --USER generics added here
- -- ADD USER GENERICS ABOVE THIS LINE ---------------
- -- DO NOT EDIT BELOW THIS LINE ---------------------
- -- Bus protocol parameters, do not add to or delete
- C_SLV_DWIDTH : integer := 32;
- C_NUM_REG : integer := 10
- -- DO NOT EDIT ABOVE THIS LINE ---------------------
- );
- port
- (
- -- ADD USER PORTS BELOW THIS LINE ------------------
- -- ADD USER PORTS ABOVE THIS LINE ------------------
- -- DO NOT EDIT BELOW THIS LINE ---------------------
- -- Bus protocol ports, do not add to or delete
- Bus2IP_Clk : in std_logic;
- Bus2IP_Reset : in std_logic;
- Bus2IP_Data : in std_logic_vector(0 to C_SLV_DWIDTH-1);
- Bus2IP_BE : in std_logic_vector(0 to C_SLV_DWIDTH/8-1);
- Bus2IP_RdCE : in std_logic_vector(0 to C_NUM_REG-1);
- Bus2IP_WrCE : in std_logic_vector(0 to C_NUM_REG-1);
- IP2Bus_Data : out std_logic_vector(0 to C_SLV_DWIDTH-1);
- IP2Bus_RdAck : out std_logic;
- IP2Bus_WrAck : out std_logic;
- IP2Bus_Error : out std_logic
- -- DO NOT EDIT ABOVE THIS LINE ---------------------
- );
- attribute MAX_FANOUT : string;
- attribute SIGIS : string;
- attribute SIGIS of Bus2IP_Clk : signal is "CLK";
- attribute SIGIS of Bus2IP_Reset : signal is "RST";
- end entity user_logic;
- ------------------------------------------------------------------------------
- -- Architecture section
- ------------------------------------------------------------------------------
- architecture IMP of user_logic is
- --USER signal declarations added here, as needed for user logic
- component filtre
- port(reset_n : in std_logic;
- clk : in std_logic;
- p_val : in std_logic;
- q_val : in std_logic;
- idata : in std_logic_vector(max_msg_bits-1 downto 0);
- ram_out: out std_logic_vector(2**num_hash_bits-1 downto 0);
- match : out std_logic;
- t_ready : out std_logic
- );
- end component;
- ------------------------------------------
- -- Signals for user logic slave model s/w accessible register example
- ------------------------------------------
- signal slv_reg0 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg1 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg2 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg3 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg4 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg5 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg6 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg7 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg8 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg9 : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_reg_write_sel : std_logic_vector(0 to 9);
- signal slv_reg_read_sel : std_logic_vector(0 to 9);
- signal slv_ip2bus_data : std_logic_vector(0 to C_SLV_DWIDTH-1);
- signal slv_read_ack : std_logic;
- signal slv_write_ack : std_logic;
- signal data : std_logic_vector(0 to max_msg_bits-1);
- begin
- -- USER logic implementation added here
- filtre_INST: entity filter_if_v1_00_a.filtre
- port map (
- reset_n => not(Bus2IP_Reset),
- clk => Bus2IP_Clk,
- p_val => slv_reg1(31),
- q_val => slv_reg2(31),
- idata => data,
- ram_out => slv_reg7,
- match => slv_reg5(31),
- t_ready => slv_reg6(31));
- process(Bus2IP_Clk)
- begin
- if Bus2IP_Clk'event and Bus2IP_Clk = '1' then
- if conv_integer(slv_reg4) < (max_msg_bits/32) then
- data(conv_integer(slv_reg4)*32 to 31+ (conv_integer(slv_reg4)*32)) <= slv_reg3;
- end if;
- end if;
- end process;
- -- input registers from filter
- slv_reg8 <= x"00000001";
- slv_reg9 <= (31 => '1', others => '0');
- ------------------------------------------
- -- Example code to read/write user logic slave model s/w accessible registers
- --
- -- Note:
- -- The example code presented here is to show you one way of reading/writing
- -- software accessible registers implemented in the user logic slave model.
- -- Each bit of the Bus2IP_WrCE/Bus2IP_RdCE signals is configured to correspond
- -- to one software accessible register by the top level template. For example,
- -- if you have four 32 bit software accessible registers in the user logic,
- -- you are basically operating on the following memory mapped registers:
- --
- -- Bus2IP_WrCE/Bus2IP_RdCE Memory Mapped Register
- -- "1000" C_BASEADDR + 0x0
- -- "0100" C_BASEADDR + 0x4
- -- "0010" C_BASEADDR + 0x8
- -- "0001" C_BASEADDR + 0xC
- --
- ------------------------------------------
- slv_reg_write_sel <= Bus2IP_WrCE(0 to 9);
- slv_reg_read_sel <= Bus2IP_RdCE(0 to 9);
- slv_write_ack <= Bus2IP_WrCE(0) or Bus2IP_WrCE(1) or Bus2IP_WrCE(2) or Bus2IP_WrCE(3) or Bus2IP_WrCE(4) or Bus2IP_WrCE(5) or Bus2IP_WrCE(6) or Bus2IP_WrCE(7) or Bus2IP_WrCE(8) or Bus2IP_WrCE(9);
- slv_read_ack <= Bus2IP_RdCE(0) or Bus2IP_RdCE(1) or Bus2IP_RdCE(2) or Bus2IP_RdCE(3) or Bus2IP_RdCE(4) or Bus2IP_RdCE(5) or Bus2IP_RdCE(6) or Bus2IP_RdCE(7) or Bus2IP_RdCE(8) or Bus2IP_RdCE(9);
- -- implement slave model software accessible register(s)
- SLAVE_REG_WRITE_PROC : process( Bus2IP_Clk ) is
- begin
- if Bus2IP_Clk'event and Bus2IP_Clk = '1' then
- if Bus2IP_Reset = '1' then
- slv_reg0 <= (others => '0');
- slv_reg1 <= (others => '0');
- slv_reg2 <= (others => '0');
- slv_reg3 <= (others => '0');
- slv_reg4 <= (others => '0');
- -- slv_reg5 <= (others => '0');
- -- slv_reg6 <= (others => '0');
- -- slv_reg7 <= (others => '0');
- -- slv_reg8 <= (others => '0');
- -- slv_reg9 <= (others => '0');
- else
- case slv_reg_write_sel is
- when "1000000000" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- slv_reg0(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when "0100000000" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- slv_reg1(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when "0010000000" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- slv_reg2(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when "0001000000" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- slv_reg3(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when "0000100000" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- slv_reg4(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when "0000010000" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- -- slv_reg5(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when "0000001000" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- -- slv_reg6(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when "0000000100" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- -- slv_reg7(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when "0000000010" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- -- slv_reg8(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when "0000000001" =>
- for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
- if ( Bus2IP_BE(byte_index) = '1' ) then
- -- slv_reg9(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
- end if;
- end loop;
- when others => null;
- end case;
- end if;
- end if;
- end process SLAVE_REG_WRITE_PROC;
- -- implement slave model software accessible register(s) read mux
- SLAVE_REG_READ_PROC : process( slv_reg_read_sel, slv_reg0, slv_reg1, slv_reg2, slv_reg3, slv_reg4, slv_reg5, slv_reg6, slv_reg7, slv_reg8, slv_reg9 ) is
- begin
- case slv_reg_read_sel is
- when "1000000000" => slv_ip2bus_data <= slv_reg0;
- when "0100000000" => slv_ip2bus_data <= slv_reg1;
- when "0010000000" => slv_ip2bus_data <= slv_reg2;
- when "0001000000" => slv_ip2bus_data <= slv_reg3;
- when "0000100000" => slv_ip2bus_data <= slv_reg4;
- when "0000010000" => slv_ip2bus_data <= slv_reg5;
- when "0000001000" => slv_ip2bus_data <= slv_reg6;
- when "0000000100" => slv_ip2bus_data <= slv_reg7;
- when "0000000010" => slv_ip2bus_data <= slv_reg8;
- when "0000000001" => slv_ip2bus_data <= slv_reg9;
- when others => slv_ip2bus_data <= (others => '0');
- end case;
- end process SLAVE_REG_READ_PROC;
- ------------------------------------------
- -- Example code to drive IP to Bus signals
- ------------------------------------------
- IP2Bus_Data <= slv_ip2bus_data when slv_read_ack = '1' else
- (others => '0');
- IP2Bus_WrAck <= slv_write_ack;
- IP2Bus_RdAck <= slv_read_ack;
- IP2Bus_Error <= '0';
- end IMP;
Add Comment
Please, Sign In to add comment