OpenCores
URL https://opencores.org/ocsvn/the_wizardry_project/the_wizardry_project/trunk

Subversion Repositories the_wizardry_project

[/] [the_wizardry_project/] [trunk/] [Wizardry/] [VHDL/] [Wizardry Top Level/] [Address Generation/] [eRCP_Match_Store.vhd] - Rev 22

Compare with Previous | Blame | View Log

----------------------------------------------------------------------------------
--
--  This file is a part of Technica Corporation Wizardry Project
--
--  Copyright (C) 2004-2009, Technica Corporation  
--
--  This program is free software: you can redistribute it and/or modify
--  it under the terms of the GNU General Public License as published by
--  the Free Software Foundation, either version 3 of the License, or
--  (at your option) any later version.
--
--  This program 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 General Public License for more details.
--
--  You should have received a copy of the GNU General Public License
--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
--
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
-- Module Name: store_count_data - Behavioral 
-- Project Name: Wizardry
-- Target Devices: Virtex 4 ML401
-- Description: Stores count values for each eRCP counter. (up to 32)
-- Revision: 1.0
-- Additional Comments: 
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use work.eRCP_Constants.ALL;
use work.MAC_Constants.all;
use work.port_block_constants.all;
 
--library UNISIM;
--use UNISIM.VComponents.all;
 
entity match_store is
  port ( Reset : in std_logic;
			Clock : in std_logic;
			match_counts : in  counter_interface;
			statistics_interface : in statistical_interface;
--			boot_index : std_logic_vector(127 downto 0);
			---WB Signals
			adr_o	 	:     out std_logic_vector(virtual_address_width -1 downto 0);
			dat_o	 	:     out std_logic_vector(data_width -1 downto 0);
			we_o	 	:     out std_logic;
			sel_o	 	:     out std_logic_vector(data_resolution -1 downto 0);
			stb_o	 	:     out std_logic;
			cyc_o	 	:     out std_logic;
			ID_o	 	:     out std_logic_vector(ID_width -1 downto 0);
			priority_o :   out std_logic_vector(priority_width -1 downto 0);
			lock_o   :  	out std_logic;			
			err_i	 	:     in std_logic;
			ack_i	 	:     in std_logic
--			busy : out boolean      
			);  
end match_store;
 
architecture RTL of match_store is
 
     type StateType is (reset_state, reset_count,reset_count_wait,register_count,register_count_0,
		store_count,store_count_0,wait_acknowledge, increment_pointer, check_pointer
--		, to_primitive_ram,to_primitive_ram_inc_ptr,
--		to_primitive_ram_check_ptr
 
--		store_count_2,wait_acknowledge_2,  store_count_3,wait_acknowledge_3,
--		store_count_4,wait_acknowledge_4, store_count_5,wait_acknowledge_5,  store_count_6,wait_acknowledge_6,
--		store_count_7,wait_acknowledge_7, store_count_8,wait_acknowledge_8
 
 
 
 
			);
 
signal CurrentState,NextState: StateType;   
signal count_s : std_logic_vector(8 downto 0);
signal count_internal : counter_interface;
signal cnt_rst,reg_cnt : std_logic;
 
--signal pointer_hex : std_logic_vector(6 downto 0); -- integer range 0 to 95;
signal pointer_s : integer range 0 to 32; --std_logic_vector(6 downto 0); -- integer range 0 to 95;
signal inc_ptr : std_logic;
signal store_ram, ram_we : std_logic;
signal ram_reg_out,ram_reg_out_s,ram_reg_in : std_logic_vector(31 downto 0);
signal clr_ptr : std_logic;
 
begin
priority_o <= "00000001";
ID_o	 	<= ID_eRCP0_SHARED(4 downto 0);--"00001";
lock_o <= '0';
 
	process(pointer_s,count_internal,statistics_interface)
	begin
		case (pointer_s) is				
			when 0 => ram_reg_out <= count_internal.count_0;
			when 1 => ram_reg_out <= count_internal.count_1;
			when 2 => ram_reg_out <= count_internal.count_2;
			when 3 => ram_reg_out <= count_internal.count_3;
			when 4 => ram_reg_out <= count_internal.count_4;
			when 5 => ram_reg_out <= count_internal.count_5;
			when 6 => ram_reg_out <= count_internal.count_6;
			when 7 => ram_reg_out <= count_internal.count_7;
			when 8 => ram_reg_out <= count_internal.count_8;
			when 9 => ram_reg_out <= count_internal.count_9;
			when 10 => ram_reg_out <= count_internal.count_10;
			when 11 => ram_reg_out <= count_internal.count_11;
			when 12 => ram_reg_out <= count_internal.count_12;
			when 13 => ram_reg_out <= count_internal.count_13;
			when 14 => ram_reg_out <= count_internal.count_14;
			when 15 => ram_reg_out <= count_internal.count_15;
			when 16 => ram_reg_out <= count_internal.count_16;
			when 17 => ram_reg_out <= count_internal.count_17;
			when 18 => ram_reg_out <= count_internal.count_18;
			when 19 => ram_reg_out <= count_internal.count_19;
			when 20 => ram_reg_out <= count_internal.count_20;
			when 21 => ram_reg_out <= count_internal.count_21;
			when 22 => ram_reg_out <= count_internal.count_22;
			when 23 => ram_reg_out <= count_internal.count_23;
			when 24 => ram_reg_out <= count_internal.count_24;
			when 25 => ram_reg_out <= count_internal.count_25;
			when 26 => ram_reg_out <= count_internal.count_26;
			when 27 => ram_reg_out <= count_internal.count_27;
			when 28 => ram_reg_out <= count_internal.count_28;
			when 29 => ram_reg_out <=  X"000000" & "000" & statistics_interface.available_LU; --count_internal.count_29;
			when 30 => ram_reg_out <= X"000000" & "000" & statistics_interface.available_CE; --count_internal.count_30;
			when 31 => ram_reg_out <= X"000000" & "000" & statistics_interface.available_CmpE;
				--count_internal.count_31;
 
--			when 32 => ram_reg_out <= count_internal.count_a_0;
--			when 33 => ram_reg_out <= count_internal.count_a_1;
--			when 34 => ram_reg_out <= count_internal.count_a_2;
--			when 35 => ram_reg_out <= count_internal.count_a_3;
--			when 36 => ram_reg_out <= count_internal.count_a_4;
--			when 37 => ram_reg_out <= count_internal.count_a_5;
--			when 38 => ram_reg_out <= count_internal.count_a_6;
--			when 39 => ram_reg_out <= count_internal.count_a_7;
--			when 40 => ram_reg_out <= count_internal.count_a_8;
--			when 41 => ram_reg_out <= count_internal.count_a_9;
--			when 42 => ram_reg_out <= count_internal.count_a_10;
--			when 43 => ram_reg_out <= count_internal.count_a_11;
--			when 44 => ram_reg_out <= count_internal.count_a_12;
--			when 45 => ram_reg_out <= count_internal.count_a_13;
--			when 46 => ram_reg_out <= count_internal.count_a_14;
--			when 47 => ram_reg_out <= count_internal.count_a_15;
--			when 48 => ram_reg_out <= count_internal.count_a_16;
--			when 49 => ram_reg_out <= count_internal.count_a_17;
--			when 50 => ram_reg_out <= count_internal.count_a_18;
--			when 51 => ram_reg_out <= count_internal.count_a_19;
--			when 52 => ram_reg_out <= count_internal.count_a_20;
--			when 53 => ram_reg_out <= count_internal.count_a_21;
--			when 54 => ram_reg_out <= count_internal.count_a_22;
--			when 55 => ram_reg_out <= count_internal.count_a_23;
--			when 56 => ram_reg_out <= count_internal.count_a_24;
--			when 57 => ram_reg_out <= count_internal.count_a_25;
--			when 58 => ram_reg_out <= count_internal.count_a_26;
--			when 59 => ram_reg_out <= count_internal.count_a_27;
--			when 60 => ram_reg_out <= count_internal.count_a_28;
--			when 61 => ram_reg_out <= count_internal.count_a_29;
--			when 62 => ram_reg_out <= count_internal.count_a_30;
--			when 63 => ram_reg_out <= count_internal.count_a_31;
--			when 64 => ram_reg_out <= count_internal.count_b_0;
--			when 65 => ram_reg_out <= count_internal.count_b_1;
--			when 66 => ram_reg_out <= count_internal.count_b_2;
--			when 67 => ram_reg_out <= count_internal.count_b_3;
--			when 68 => ram_reg_out <= count_internal.count_b_4;
--			when 69 => ram_reg_out <= count_internal.count_b_5;
--			when 70 => ram_reg_out <= count_internal.count_b_6;
--			when 71 => ram_reg_out <= count_internal.count_b_7;
--			when 72 => ram_reg_out <= count_internal.count_b_8;
--			when 73 => ram_reg_out <= count_internal.count_b_9;
--			when 74 => ram_reg_out <= count_internal.count_b_10;
--			when 75 => ram_reg_out <= count_internal.count_b_11;
--			when 76 => ram_reg_out <= count_internal.count_b_12;
--			when 77 => ram_reg_out <= count_internal.count_b_13;
--			when 78 => ram_reg_out <= count_internal.count_b_14;
--			when 79 => ram_reg_out <= count_internal.count_b_15;
--			when 80 => ram_reg_out <= count_internal.count_b_16;
--			when 81 => ram_reg_out <= count_internal.count_b_17;
--			when 82 => ram_reg_out <= count_internal.count_b_18;
--			when 83 => ram_reg_out <= count_internal.count_b_19;
--			when 84 => ram_reg_out <= count_internal.count_b_20;
--			when 85 => ram_reg_out <= count_internal.count_b_21;
--			when 86 => ram_reg_out <= count_internal.count_b_22;
--			when 87 => ram_reg_out <= count_internal.count_b_23;
--			when 88 => ram_reg_out <= count_internal.count_b_24;
--			when 89 => ram_reg_out <= count_internal.count_b_25;
--			when 90 => ram_reg_out <= count_internal.count_b_26;
--			when 91 => ram_reg_out <= count_internal.count_b_27;
--			when 92 => ram_reg_out <= count_internal.count_b_28;
--			when 93 => ram_reg_out <= count_internal.count_b_29;
--			when 94 => ram_reg_out <= count_internal.count_b_30;
--			when 95 => ram_reg_out <= count_internal.count_b_31;
--			
			when others => ram_reg_out <= count_internal.count_0;
		end case;
	end process;
 
	process(reset,clock,inc_ptr)
--	variable pointer_v : integer range 0 to 95;
	begin
		if(reset = '1') then
--			pointer_v := 0;
			pointer_s <= 0;
		elsif(rising_edge(clock)) then
			if(inc_ptr = '1') then
--				pointer_v := pointer_v + 1;
				pointer_s <= pointer_s + 1;
			elsif(clr_ptr = '1') then
--				pointer_v := 0;
				pointer_s <= 0;
			else
--				pointer_v := pointer_v;
				pointer_s <= pointer_s;
			end if;
		end if;
--		pointer_s <= pointer_v;
--		pointer_hex <= conv_std_logic_vector(pointer_v,7);
	end process;
 
--	process(pointer_s,count_internal)
--	begin
--		case (pointer_s) is				
--			when 0 => ram_reg_out <= count_internal.count_0;
--			when 1 => ram_reg_out <= count_internal.count_1;
--			when 2 => ram_reg_out <= count_internal.count_2;
--			when 3 => ram_reg_out <= count_internal.count_3;
--			when 4 => ram_reg_out <= count_internal.count_4;
--			when 5 => ram_reg_out <= count_internal.count_5;
--			when 6 => ram_reg_out <= count_internal.count_6;
--			when 7 => ram_reg_out <= count_internal.count_7;
--			when 8 => ram_reg_out <= count_internal.count_8;
--			when 9 => ram_reg_out <= count_internal.count_9;
--			when 10 => ram_reg_out <= count_internal.count_10;
--			when 11 => ram_reg_out <= count_internal.count_11;
--			when 12 => ram_reg_out <= count_internal.count_12;
--			when 13 => ram_reg_out <= count_internal.count_13;
--			when 14 => ram_reg_out <= count_internal.count_14;
--			when 15 => ram_reg_out <= count_internal.count_15;
--			when 16 => ram_reg_out <= count_internal.count_16;
--			when 17 => ram_reg_out <= count_internal.count_17;
--			when 18 => ram_reg_out <= count_internal.count_18;
--			when 19 => ram_reg_out <= count_internal.count_29;
--			when 20 => ram_reg_out <= count_internal.count_20;
--			when 21 => ram_reg_out <= count_internal.count_21;
--			when 22 => ram_reg_out <= count_internal.count_22;
--			when 23 => ram_reg_out <= count_internal.count_23;
--			when 24 => ram_reg_out <= count_internal.count_24;
--			when 25 => ram_reg_out <= count_internal.count_25;
--			when 26 => ram_reg_out <= count_internal.count_26;
--			when 27 => ram_reg_out <= count_internal.count_27;
--			when 28 => ram_reg_out <= count_internal.count_28;
--			when 29 => ram_reg_out <= count_internal.count_29;
--			when 30 => ram_reg_out <= count_internal.count_30;
--			when 31 => ram_reg_out <= count_internal.count_31;
--			when 32 => ram_reg_out <= count_internal.count_a_0;
--			when 33 => ram_reg_out <= count_internal.count_a_1;
--			when 34 => ram_reg_out <= count_internal.count_a_2;
--			when 35 => ram_reg_out <= count_internal.count_a_3;
--			when 36 => ram_reg_out <= count_internal.count_a_4;
--			when 37 => ram_reg_out <= count_internal.count_a_5;
--			when 38 => ram_reg_out <= count_internal.count_a_6;
--			when 39 => ram_reg_out <= count_internal.count_a_7;
--			when 40 => ram_reg_out <= count_internal.count_a_8;
--			when 41 => ram_reg_out <= count_internal.count_a_9;
--			when 42 => ram_reg_out <= count_internal.count_a_10;
--			when 43 => ram_reg_out <= count_internal.count_a_11;
--			when 44 => ram_reg_out <= count_internal.count_a_12;
--			when 45 => ram_reg_out <= count_internal.count_a_13;
--			when 46 => ram_reg_out <= count_internal.count_a_14;
--			when 47 => ram_reg_out <= count_internal.count_a_15;
--			when 48 => ram_reg_out <= count_internal.count_a_16;
--			when 49 => ram_reg_out <= count_internal.count_a_17;
--			when 50 => ram_reg_out <= count_internal.count_a_18;
--			when 51 => ram_reg_out <= count_internal.count_a_19;
--			when 52 => ram_reg_out <= count_internal.count_a_20;
--			when 53 => ram_reg_out <= count_internal.count_a_21;
--			when 54 => ram_reg_out <= count_internal.count_a_22;
--			when 55 => ram_reg_out <= count_internal.count_a_23;
--			when 56 => ram_reg_out <= count_internal.count_a_24;
--			when 57 => ram_reg_out <= count_internal.count_a_25;
--			when 58 => ram_reg_out <= count_internal.count_a_26;
--			when 59 => ram_reg_out <= count_internal.count_a_27;
--			when 60 => ram_reg_out <= count_internal.count_a_28;
--			when 61 => ram_reg_out <= count_internal.count_a_29;
--			when 62 => ram_reg_out <= count_internal.count_a_30;
--			when 63 => ram_reg_out <= count_internal.count_b_31;
--			when 64 => ram_reg_out <= count_internal.count_b_0;
--			when 65 => ram_reg_out <= count_internal.count_b_1;
--			when 66 => ram_reg_out <= count_internal.count_b_2;
--			when 67 => ram_reg_out <= count_internal.count_b_3;
--			when 68 => ram_reg_out <= count_internal.count_b_4;
--			when 69 => ram_reg_out <= count_internal.count_b_5;
--			when 70 => ram_reg_out <= count_internal.count_b_6;
--			when 71 => ram_reg_out <= count_internal.count_b_7;
--			when 72 => ram_reg_out <= count_internal.count_b_8;
--			when 73 => ram_reg_out <= count_internal.count_b_9;
--			when 74 => ram_reg_out <= count_internal.count_b_10;
--			when 75 => ram_reg_out <= count_internal.count_b_11;
--			when 76 => ram_reg_out <= count_internal.count_b_12;
--			when 77 => ram_reg_out <= count_internal.count_b_13;
--			when 78 => ram_reg_out <= count_internal.count_b_14;
--			when 79 => ram_reg_out <= count_internal.count_b_15;
--			when 80 => ram_reg_out <= count_internal.count_b_16;
--			when 81 => ram_reg_out <= count_internal.count_b_17;
--			when 82 => ram_reg_out <= count_internal.count_b_18;
--			when 83 => ram_reg_out <= count_internal.count_b_19;
--			when 84 => ram_reg_out <= count_internal.count_b_20;
--			when 85 => ram_reg_out <= count_internal.count_b_21;
--			when 86 => ram_reg_out <= count_internal.count_b_22;
--			when 87 => ram_reg_out <= count_internal.count_b_23;
--			when 88 => ram_reg_out <= count_internal.count_b_24;
--			when 89 => ram_reg_out <= count_internal.count_b_25;
--			when 90 => ram_reg_out <= count_internal.count_b_26;
--			when 91 => ram_reg_out <= count_internal.count_b_27;
--			when 92 => ram_reg_out <= count_internal.count_b_28;
--			when 93 => ram_reg_out <= count_internal.count_b_29;
--			when 94 => ram_reg_out <= count_internal.count_b_30;
--			when 95 => ram_reg_out <= count_internal.count_b_31;
--			
--			when others => ram_reg_out <= (others => '0');
--		end case;
----			end if;
----		else
----			ram_reg_out <= ram_reg_out;
----		end if;
--	end process;
 
	process(clock,reset,ram_reg_out)
	begin
		if(reset = '1') then
			ram_reg_out_s  <= (others => '0');
		elsif(rising_edge(clock)) then
			if(store_ram = '1') then
				ram_reg_out_s <= ram_reg_out;
			end if;
		end if;
	end process;
 
	refresh_count : process(clock,reset,cnt_rst,count_s)
	begin
	if(cnt_rst = '0') then
		count_s <= (others => '0');
	elsif(rising_edge(clock)) then
		if(cnt_rst = '1') then
			count_s <= count_s + 1;
		end if;
	end if;
	end process refresh_count;
 
	register_counters : process(clock,reset,reg_cnt,match_counts)
--	variable count_internal_v : counter_interface;
--	variable match_count_array : match_counters_array_type;
	begin
	if(reset = '1') then
--		for i in 0 to 95 loop
--			count_internal <= (others => '0');
--		end loop;
	elsif(rising_edge(clock)) then
		if(reg_cnt = '1') then
			count_internal.count_0 <= match_counts.count_0;
			count_internal.count_1 <= match_counts.count_1;
			count_internal.count_2 <= match_counts.count_2;
			count_internal.count_3 <= match_counts.count_3;
			count_internal.count_4 <= match_counts.count_4;
			count_internal.count_5 <= match_counts.count_5;
			count_internal.count_6 <= match_counts.count_6;
			count_internal.count_7 <= match_counts.count_7;
			count_internal.count_8 <= match_counts.count_8;
			count_internal.count_9 <= match_counts.count_9;
			count_internal.count_10 <= match_counts.count_10;
			count_internal.count_11 <= match_counts.count_11;
			count_internal.count_12 <= match_counts.count_12;
			count_internal.count_13 <= match_counts.count_13;
			count_internal.count_14 <= match_counts.count_14;
			count_internal.count_15 <= match_counts.count_15;
			count_internal.count_16 <= match_counts.count_16;
			count_internal.count_17 <= match_counts.count_17;
			count_internal.count_18 <= match_counts.count_18;
			count_internal.count_19 <= match_counts.count_19;
			count_internal.count_20 <= match_counts.count_20;
			count_internal.count_21 <= match_counts.count_21;
			count_internal.count_22 <= match_counts.count_22;
			count_internal.count_23 <= match_counts.count_23;
			count_internal.count_24 <= match_counts.count_24;
			count_internal.count_25 <= match_counts.count_25;
			count_internal.count_26 <= match_counts.count_26;
			count_internal.count_27 <= match_counts.count_27;
			count_internal.count_28 <= match_counts.count_28;
			count_internal.count_29 <= match_counts.count_29;
			count_internal.count_30 <= match_counts.count_30;
			count_internal.count_31 <= match_counts.count_31;
			count_internal.count_a_0 <= match_counts.count_a_0;
			count_internal.count_a_1 <= match_counts.count_a_1;
			count_internal.count_a_2 <= match_counts.count_a_2;
			count_internal.count_a_3 <= match_counts.count_a_3;
			count_internal.count_a_4 <= match_counts.count_a_4;
			count_internal.count_a_5 <= match_counts.count_a_5;
			count_internal.count_a_6 <= match_counts.count_a_6;
			count_internal.count_a_7 <= match_counts.count_a_7;
			count_internal.count_a_8 <= match_counts.count_a_8;
			count_internal.count_a_9 <= match_counts.count_a_9;
			count_internal.count_a_10 <= match_counts.count_a_10;
			count_internal.count_a_11 <= match_counts.count_a_11;
			count_internal.count_a_12 <= match_counts.count_a_12;
			count_internal.count_a_13 <= match_counts.count_a_13;
			count_internal.count_a_14 <= match_counts.count_a_14;
			count_internal.count_a_15 <= match_counts.count_a_15;
			count_internal.count_a_16 <= match_counts.count_a_16;
			count_internal.count_a_17 <= match_counts.count_a_17;
			count_internal.count_a_18 <= match_counts.count_a_18;
			count_internal.count_a_19 <= match_counts.count_a_19;
			count_internal.count_a_20 <= match_counts.count_a_20;
			count_internal.count_a_21 <= match_counts.count_a_21;
			count_internal.count_a_22 <= match_counts.count_a_22;
			count_internal.count_a_23 <= match_counts.count_a_23;
			count_internal.count_a_24 <= match_counts.count_a_24;
			count_internal.count_a_25 <= match_counts.count_a_25;
			count_internal.count_a_26 <= match_counts.count_a_26;
			count_internal.count_a_27 <= match_counts.count_a_27;
			count_internal.count_a_28 <= match_counts.count_a_28;
			count_internal.count_a_29 <= match_counts.count_a_29;
			count_internal.count_a_30 <= match_counts.count_a_30;
			count_internal.count_a_31 <= match_counts.count_a_31;
			count_internal.count_b_0 <= match_counts.count_b_0;
			count_internal.count_b_1 <= match_counts.count_b_1;
			count_internal.count_b_2 <= match_counts.count_b_2;
			count_internal.count_b_3 <= match_counts.count_b_3;
			count_internal.count_b_4 <= match_counts.count_b_4;
			count_internal.count_b_5 <= match_counts.count_b_5;
			count_internal.count_b_6 <= match_counts.count_b_6;
			count_internal.count_b_7 <= match_counts.count_b_7;
			count_internal.count_b_8 <= match_counts.count_b_8;
			count_internal.count_b_9 <= match_counts.count_b_9;
			count_internal.count_b_10 <= match_counts.count_b_10;
			count_internal.count_b_11 <= match_counts.count_b_11;
			count_internal.count_b_12 <= match_counts.count_b_12;
			count_internal.count_b_13 <= match_counts.count_b_13;
			count_internal.count_b_14 <= match_counts.count_b_14;
			count_internal.count_b_15 <= match_counts.count_b_15;
			count_internal.count_b_16 <= match_counts.count_b_16;
			count_internal.count_b_17 <= match_counts.count_b_17;
			count_internal.count_b_18 <= match_counts.count_b_18;
			count_internal.count_b_19 <= match_counts.count_b_19;
			count_internal.count_b_20 <= match_counts.count_b_20;
			count_internal.count_b_21 <= match_counts.count_b_21;
			count_internal.count_b_22 <= match_counts.count_b_22;
			count_internal.count_b_23 <= match_counts.count_b_23;
			count_internal.count_b_24 <= match_counts.count_b_24;
			count_internal.count_b_25 <= match_counts.count_b_25;
			count_internal.count_b_26 <= match_counts.count_b_26;
			count_internal.count_b_27 <= match_counts.count_b_27;
			count_internal.count_b_28 <= match_counts.count_b_28;
			count_internal.count_b_29 <= match_counts.count_b_29;
			count_internal.count_b_30 <= match_counts.count_b_30;
			count_internal.count_b_31 <= match_counts.count_b_31;
		else
			count_internal <= count_internal;
		end if;
	end if;
	end process register_counters;
 
 
   FSM: process(CurrentState, count_s,ack_i,pointer_s,ram_reg_out_s,ram_reg_out) --count_internal)
 
   begin
 
		case (CurrentState) is
 
			when reset_state =>
					NextState <= reset_count;
 
			reg_cnt 	<= '0';
			cnt_rst 	<= '0';
			adr_o	 	<= (others => '0');
			dat_o	 	<= (others => '0');
			we_o	 	<= '0';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '0';
			cyc_o	 	<= '0';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '0';
 
			when reset_count =>
					NextState <= reset_count_wait;
 
			reg_cnt 	<= '0';
			cnt_rst 	<= '0';
			adr_o	 	<= (others => '0');
			dat_o	 	<= (others => '0');
			we_o	 	<= '0';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '0';
			cyc_o	 	<= '0';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '1';
 
			when reset_count_wait =>
				if(count_s = "000000000") then
					NextState <= register_count;
				else
					NextState <= reset_count_wait;
				end if;
 
			cnt_rst 	<= '1';
			reg_cnt 	<= '0';
			adr_o	 	<= (others => '0');
			dat_o	 	<= (others => '0');
			we_o	 	<= '0';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '0';
			cyc_o	 	<= '0';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '0';
 
			when register_count =>
					NextState <= register_count_0;	
 
			cnt_rst 	<= '0';
			reg_cnt 	<= '1';
			adr_o	 	<= (others => '0');
			dat_o	 	<= (others => '0');
			we_o	 	<= '0';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '0';
			cyc_o	 	<= '0';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '0';
 
			when register_count_0 =>
					NextState <= store_count_0;	
 
			cnt_rst 	<= '0';
			reg_cnt 	<= '0';
			adr_o	 	<= (others => '0');
			dat_o	 	<= (others => '0');
			we_o	 	<= '0';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '0';
			cyc_o	 	<= '0';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '1';
			ram_we    <= '0';
			clr_ptr <= '0';
 
---- NEW CHANGE 4-17-08						
-- SIMPLE EXPRESSION 0			
			when store_count_0 =>
					NextState <= store_count;
 
			cnt_rst 	<= '0';
			reg_cnt 	<= '0';
			adr_o	 	<= (others => '0'); --
			dat_o	 	<= (others => '0'); --
			we_o	 	<= '0';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '0';
			cyc_o	 	<= '0';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '1';
 
			when store_count =>
					NextState <= wait_acknowledge;
 
			cnt_rst 	<= '0';
			reg_cnt 	<= '0';
			adr_o	 	<= "011011000000000" & conv_std_logic_vector(pointer_s,7);
			dat_o	 	<= ram_reg_out; --match_count_array_s(pointer_s);  --count_internal.count_0;
			we_o	 	<= '1';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '1';
			cyc_o	 	<= '1';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '0';
 
			when wait_acknowledge =>
				if(ack_i = '1') then
					NextState <= increment_pointer;
				else
					NextState <= wait_acknowledge;
				end if;
 
			cnt_rst 	<= '0';
			reg_cnt 	<= '0';
			adr_o	 	<= "011011000000000" & conv_std_logic_vector(pointer_s,7);
			dat_o	 	<= ram_reg_out; --match_count_array_s(pointer_s); --count_internal.count_0;
			we_o	 	<= '1';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '1';
			cyc_o	 	<= '1';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '0';
 
			when increment_pointer =>
					NextState <= check_pointer;
 
			cnt_rst 	<= '0';
			reg_cnt 	<= '0';
			adr_o	 	<= (others => '0'); --"0110110000000000000000";
			dat_o	 	<= (others => '0'); --match_count_array_s(0); --count_internal.count_0;
			we_o	 	<= '0';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '0';
			cyc_o	 	<= '0';
			lock_o   <= '0';
			inc_ptr	<= '1';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '0';
 
			when check_pointer =>
				if(pointer_s = 32) then
					NextState <= reset_count;
				else
					NextState <= store_count;
				end if;
 
			cnt_rst 	<= '0';
			reg_cnt 	<= '0';
			adr_o	 	<= (others => '0'); --"0110110000000000000000";
			dat_o	 	<= (others => '0'); --match_count_array_s(0); --count_internal.count_0;
			we_o	 	<= '0';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '0';
			cyc_o	 	<= '0';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '0';
 
---- SIMPLE EXPRESSION 0			
--			when store_count =>
--					NextState <= wait_acknowledge;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000000";
--			dat_o	 	<= match_count_array_s(0);  --count_internal.count_0;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			when wait_acknowledge =>
--				if(ack_i = '1') then
--					NextState <= store_count_2;
--				else
--					NextState <= wait_acknowledge;
--				end if;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000000";
--			dat_o	 	<= match_count_array_s(0); --count_internal.count_0;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--
--
---- NEW CHANGES 3-27-08
---- SIMPLE EXPRESSION 1
--
--			when store_count_2 =>
--					NextState <= wait_acknowledge_2;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000001";
--			dat_o	 	<= match_count_array_s(1);  --count_internal.count_1;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			when wait_acknowledge_2 =>
--				if(ack_i = '1') then
--					NextState <= store_count_3;
--				else
--					NextState <= wait_acknowledge_2;
--				end if;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000001";
--			dat_o	 	<= match_count_array_s(1);  --count_internal.count_1;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
---- SIMPLE EXPRESSION 2
--			when store_count_3 =>
--					NextState <= wait_acknowledge_3;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000010";
--			dat_o	 	<= match_count_array_s(2);  --count_internal.count_2;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			when wait_acknowledge_3 =>
--				if(ack_i = '1') then
--					NextState <= store_count_4;
--				else
--					NextState <= wait_acknowledge_3;
--				end if;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000010";
--			dat_o	 	<= match_count_array_s(2); --count_internal.count_2;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
---- SIMPLE EXPRESSION 3
--			when store_count_4 =>
--					NextState <= wait_acknowledge_4;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000011";
--			dat_o	 	<= match_count_array_s(3); --count_internal.count_3;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			when wait_acknowledge_4 =>
--				if(ack_i = '1') then
--					NextState <= store_count_5;
--				else
--					NextState <= wait_acknowledge_4;
--				end if;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000011";
--			dat_o	 	<= match_count_array_s(3);  --count_internal.count_3;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			
---- SIMPLE EXPRESSION 4
--			when store_count_5 =>
--					NextState <= wait_acknowledge_5;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000100";
--			dat_o	 	<= match_count_array_s(4); --count_internal.count_4;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			when wait_acknowledge_5 =>
--				if(ack_i = '1') then
--					NextState <= store_count_6;
--				else
--					NextState <= wait_acknowledge_5;
--				end if;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000100";
--			dat_o	 	<= match_count_array_s(4);  --count_internal.count_4;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--
---- SIMPLE EXPRESSION 5
--			when store_count_6 =>
--					NextState <= wait_acknowledge_6;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000101";
--			dat_o	 	<= match_count_array_s(5); --count_internal.count_5;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			when wait_acknowledge_6 =>
--				if(ack_i = '1') then
--					NextState <= store_count_7;
--				else
--					NextState <= wait_acknowledge_6;
--				end if;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000101";
--			dat_o	 	<= match_count_array_s(5);  --count_internal.count_5;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			
---- SIMPLE EXPRESSION 6
--			when store_count_7 =>
--					NextState <= wait_acknowledge_7;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000110";
--			dat_o	 	<= match_count_array_s(6); --count_internal.count_6;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			when wait_acknowledge_7 =>
--				if(ack_i = '1') then
--					NextState <= store_count_8;
--				else
--					NextState <= wait_acknowledge_7;
--				end if;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000110";
--			dat_o	 	<= match_count_array_s(6); --count_internal.count_6;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
---- SIMPLE EXPRESSION 7
--			when store_count_8 =>
--					NextState <= wait_acknowledge_8;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000111";
--			dat_o	 	<= match_count_array_s(7);  --count_internal.count_7;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
--			
--			when wait_acknowledge_8 =>
--				if(ack_i = '1') then
--					NextState <= reset_count;
--				else
--					NextState <= wait_acknowledge_8;
--				end if;
--									
--			cnt_rst 	<= '0';
--			reg_cnt 	<= '0';
--			adr_o	 	<= "0110110000000000000111";
--			dat_o	 	<= match_count_array_s(7); --count_internal.count_7;
--			we_o	 	<= '1';
--			sel_o	 	<= (others => '0');
--			stb_o	 	<= '1';
--			cyc_o	 	<= '1';
--			
--			lock_o   <= '0';
 
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------			
 
            when others =>
               NextState <= reset_state;
 
			cnt_rst 	<= '0';
			reg_cnt 	<= '0';
			adr_o	 	<= (others => '0');
			dat_o	 	<= (others => '0');
			we_o	 	<= '0';
			sel_o	 	<= (others => '0');
			stb_o	 	<= '0';
			cyc_o	 	<= '0';
			lock_o   <= '0';
			inc_ptr	<= '0';
			store_ram <= '0';
			ram_we    <= '0';
			clr_ptr <= '0';
 
         end case;  
 
   end process FSM;
 
nextstatelogic: process
	begin
			wait until clock'EVENT and clock = '1'; --WAIT FOR RISING EDGE
			-- INITIALIZATION
			if (Reset = '1') then
				CurrentState <= reset_state;
			else
       				CurrentState <= NextState;
			end if;
end process nextstatelogic;
 
--make_primitive_ram: for i in 0 to 31 generate
--begin
--  
--   RAM128X1S_inst : RAM128X1S
--   generic map (
--      INIT => X"00000000000000000000000000000000")
--   port map (
--      O => ram_reg_out(i),        -- 1-bit data output
--      A0 => pointer_hex(0), --A0,      -- Address[0] input bit
--      A1 => pointer_hex(1), --A1,      -- Address[1] input bit
--      A2 => pointer_hex(2), --A2,      -- Address[2] input bit
--      A3 => pointer_hex(3), --A3,      -- Address[3] input bit
--      A4 => pointer_hex(4), --A4,      -- Address[4] input bit
--      A5 => pointer_hex(5), --A5,      -- Address[5] input bit
--      A6 => pointer_hex(6), --A6,      -- Address[6] input bit
--      D => ram_reg_in(i),        -- 1-bit data input
--      WCLK => clock,  -- Write clock input
--      WE => ram_we       -- Write enable input
--   );
--end generate;
--   -- End of RAM128X1S_inst instantiation
end RTL;

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.