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

Subversion Repositories xmatchpro

[/] [xmatchpro/] [trunk/] [xmw4-comdec/] [xmatch_sim7/] [src/] [output_buffer_32_32.vhd] - Rev 9

Compare with Previous | Blame | View Log

---------------------------------------------
 
--  ENTITY       = OUTPUT_BUFFER_32_32     --
 
--  version      = 1.0                     --
 
--  last update  = 30/05/01                --
 
--  author       = Jose Nunez              --
 
--  Modified:    Vassilios A. Chouliaras 270204
 
--               Added TSMC013 DPRAM with
 
--               minor mods to strobe generation
 
---------------------------------------------
 
 
 
 
 
-- FUNCTION
 
-- This output buffer loads 32 bits of data from the decompression engine and writes 32 bit of data to the output bus
 
-- 256x32 bit word to handle a block of 1 Kbyte. Then the buffer waits for the all data processed signal before requesting more data.
 
 
 
--  PIN LIST
 
 
 
--  START = activate the buffer
 
--  WRITE = write data from the engine to the buffer
 
--  FINISHED = all the data has accessed the buffer. Engine has finished
 
--  DATA_IN_32  = input data from the 32 bit decompression engine
 
--  THRESHOLD = data that must be present in the buffer when data starts being output
 
--  BUS_ACKNOWLEDGE = starting outputting data to the output bus
 
--  DATA_OUT_32  = output data to the 32 bit wide output bus
 
--  READY = data ready in the buffer
 
--  BUS_REQUEST = output requesting bus to start outputting databe processed
 
--  CLEAR    = asynchronous clear
 
--  CLK      = master clock
 
 
 
 
 
library ieee,dzx;
 
use ieee.std_logic_1164.all;
 
use IEEE.std_logic_arith.all;
 
use dzx.bit_arith.all;
 
library xil_lib;
use xil_lib.xil_comp.all;
use work.tech_package.all;
 
 
 
 
 
entity OUTPUT_BUFFER_32_32 is
 
port
 
(
 
	FORCE_STOP : in bit;
 
	START_D : in bit;
 
	START_C : in bit;
 
	WRITE : in bit;
 
	FINISHED : in bit;
 
  WAITN : in bit; -- introduce wait cycles
 
	DATA_IN_32 : in bit_vector(31 downto 0);
 
	THRESHOLD : in bit_vector(7 downto 0);
 
	BUS_ACKNOWLEDGE : in bit;
 
	CLEAR : in bit ;
 
	CLK : in bit ;
 
	FLUSHING : out bit;
 
	FINISHED_FLUSHING : out bit;
 
	OVERFLOW_DETECTED : out bit;
 
	DATA_OUT_32: out bit_vector(31 downto 0);
 
	READY : out bit;
 
  OVERFLOW_CONTROL : out bit;
 
	BUS_REQUEST : out bit
 
);
 
 
 
end OUTPUT_BUFFER_32_32;
 
 
 
 
 
architecture STRUCTURAL of OUTPUT_BUFFER_32_32 is
 
 
 
-- xilinx memory
 
 
 
component DP_RAM_XILINX_512
 
	port (
 
	addra: IN std_logic_VECTOR(8 downto 0);
 
	clka: IN std_logic;
 
	addrb: IN std_logic_VECTOR(8 downto 0);
 
	clkb: IN std_logic;
 
	dina: IN std_logic_VECTOR(31 downto 0);
 
	wea: IN std_logic_vector (0 downto 0);
 
	enb: IN std_logic;
 
	doutb: OUT std_logic_VECTOR(31 downto 0));
 
end component;
 
 
 
-- Synplicity black box declaration
 
--attribute black_box : boolean;
 
--attribute black_box of DP_RAM_XILINX: component is true;
 
 
 
 
 
-- Actel memory
 
 
 
-- component MY_MEMORY
 
 
 
--   port(DO : out std_logic_vector (31 downto 0);
 
--      RCLOCK : in std_logic;
 
--      WCLOCK : in std_logic;
 
--      DI : in std_logic_vector (31 downto 0);
 
--      WRB : in std_logic;
 
--      RDB : in std_logic;
 
--      WADDR :   in std_logic_vector (7 downto 0);
 
--      RADDR : in std_logic_vector (7 downto 0)
 
--	  );
 
 
 
-- end component;
 
 
 
 
 
 
 
--component syn_dpram_256x32_rawr
 
--port (
 
--              Data : in std_logic_vector(31 downto 0);
 
--              RdAddress : in std_logic_vector(7 downto 0);
 
--              WrAddress : in std_logic_vector(7 downto 0);
 
--              RdEn : in std_logic;
 
--              WrEn : in std_logic;
 
--              Q : out std_logic_vector(31 downto 0);
 
--              RdClock : in std_logic;
 
--              RdClken : in std_logic;
 
--              WrClock : in std_logic;
 
--              WrClken : in std_logic
 
--           );
 
--end component;
 
 
 
--component LPM_RAM_DP
--
--      generic (LPM_WIDTH    : positive ;
--
--               LPM_WIDTHAD  : positive;
--
--               LPM_NUMWORDS : positive;
--
--               LPM_INDATA   : string;
--
--               LPM_RDADDRESS_CONTROL : string;
--
--               LPM_WRADDRESS_CONTROL : string;
--
--               LPM_OUTDATA  : string;
--
--              LPM_TYPE     : string;
--
--               LPM_FILE     : string;
--
---------------------------------------------------------------------------------
--
--               LPM_HINT	    : string);
--
--      port (RDCLOCK : in std_logic;
--
--            RDCLKEN : in std_logic;
--
--            RDADDRESS : in std_logic_vector(8 downto 0);
--
--           RDEN : in std_logic;
--
--            DATA : in std_logic_vector(31 downto 0);
--
--           WRADDRESS : in std_logic_vector(8 downto 0);
--
--            WREN : in std_logic;
--
--            WRCLOCK : in std_logic;
--
--            WRCLKEN : in std_logic;
--
--            Q : out std_logic_vector(31 downto 0));
--
--end component;
 
 
 
--attribute noopt: boolean;
 
--attribute noopt of LPM_RAM_DP: component is true;
 
-- TSMC DPRAM
 
  component ra2sh_512W_32B_16MX_offWRMSK_8WRGRAN 
 
 
 
  port ( 
 
	CLKA: in std_logic;
 
	CENA: in std_logic;
 
	WENA: in std_logic;
 
	AA: in std_logic_vector(8 downto 0);
 
	DA: in std_logic_vector(31 downto 0);
 
	QA: out std_logic_vector(31 downto 0);
 
	CLKB: in std_logic;
 
	CENB: in std_logic;
 
	WENB: in std_logic;
 
	AB: in std_logic_vector(8 downto 0);
 
	DB: in std_logic_vector(31 downto 0);
 
	QB: out std_logic_vector(31 downto 0)
 
    );
 
    end component;
 
 
 
component OUTPUT_BUFFER_CU
 
 
 
port (
 
		WAITN : in bit;
 
		FORCE_STOP : in bit;
 
	  START_D : in bit;
 
	  START_C : in bit;
 
	  FINISHED  : in bit;
 
	  BUS_ACKNOWLEDGE : in bit;
 
	  CODING_READ_ADDRESS : in bit_vector(8 downto 0);
 
	  CODING_WRITE_ADDRESS : in bit_vector(8 downto 0);
 
	  FLUSHING : out bit;
 
	  FINISHED_FLUSHING : out bit;
 
	  OVERFLOW_DETECTED : out bit;
 
	  THRESHOLD : in bit_vector(8 downto 0);
 
	  CLK : in bit;
 
	  CLEAR : in bit;
 
	  ENABLE_WRITE : out bit;
 
	  ENABLE_READ : out bit;
 
	  READY : out bit;
 
      CLEAR_COUNTERS : out bit;
 
    OVERFLOW_CONTROL : out bit;
 
	  BUS_REQUEST : out bit
 
	 );
 
end component;
 
 
 
 
 
component INPUT_COUNTER_9BITS
 
 
 
port (ENABLE : in bit;
 
	  CLEAR : in bit;
 
	  CLEAR_COUNTERS : in bit;
 
	  CLK : in bit;
 
	  COUNT : out bit_vector(8 downto 0)
 
     );
 
 
 
end component;
 
 
 
 
 
-- 1 bit for the 64-to-32 multiplexor
 
 
 
signal CODING_READ_ADDRESS : bit_vector(8 downto 0);
 
signal CODING_WRITE_ADDRESS : bit_vector(8 downto 0);
 
signal ENABLE_WRITE : bit;
 
signal DATA_OUT_AUX : std_logic_vector(31 downto 0);
 
signal READ_CLK : bit;
 
signal WRITE_CLK : bit;
 
signal WRITE_CLK_ENABLE : bit;
 
signal READ_CLK_ENABLE : bit;
 
signal ENABLE_READ_INT : bit;
 
signal ENABLE_WRITE_INT : bit;
 
signal BUS_REQUEST_INT : bit;
 
signal CLEAR_COUNTERS : bit;
 
 
 
signal DATA_SB :std_logic_vector(31 downto 0);
 
signal RDADDRESS_SB :std_logic_vector(8 downto 0);
 
signal WRADDRESS_SB :std_logic_vector(8 downto 0);
 
signal RDEN_SB :std_logic;
 
signal WREN_SB :std_logic;
 
signal RDCLOCK_SB :std_logic;
 
signal RDCLKEN_SB :std_logic;
 
signal WRCLOCK_SB :std_logic;
 
signal WRCLKEN_SB :std_logic; 
 
signal READY_AUX : bit;
 
signal THRESHOLD_AUX : bit_vector(8 downto 0);
 
 
 
signal LOGIC_0 : std_logic := '0';
 
signal tsmc_cena_n , tsmc_cenb_n : std_logic;
 
signal tsmc_wena_n , tsmc_wenb_n : std_logic;
 
begin
 
 
 
 
 
CONTROL_UNIT : OUTPUT_BUFFER_CU
 
port map(
 
		WAITN => WAITN,
 
		FORCE_STOP => FORCE_STOP,
 
	  START_D=> START_D,
 
	  START_C=> START_C,
 
	  FINISHED => FINISHED,
 
	  BUS_ACKNOWLEDGE => BUS_ACKNOWLEDGE,
 
	  CODING_READ_ADDRESS => CODING_READ_ADDRESS,
 
	  CODING_WRITE_ADDRESS => CODING_WRITE_ADDRESS,
 
	  FLUSHING => FLUSHING,
 
	  FINISHED_FLUSHING =>FINISHED_FLUSHING,
 
	  OVERFLOW_DETECTED => OVERFLOW_DETECTED,
 
	  THRESHOLD => THRESHOLD_AUX,
 
	  CLK => CLK,
 
	  CLEAR => CLEAR,
 
	  ENABLE_WRITE => ENABLE_WRITE_INT,
 
	  ENABLE_READ => ENABLE_READ_INT,
 
	  READY => READY_AUX,
 
      CLEAR_COUNTERS => CLEAR_COUNTERS,
 
    OVERFLOW_CONTROL => OVERFLOW_CONTROL,
 
	  BUS_REQUEST => BUS_REQUEST_INT
 
	 );
 
 
 
 
 
 
 
READ_COUNTER : INPUT_COUNTER_9BITS
 
port map(ENABLE => READ_CLK_ENABLE,
 
	  CLEAR => CLEAR,
 
  	  CLEAR_COUNTERS => CLEAR_COUNTERS,
 
	  CLK => CLK,
 
	  COUNT => CODING_READ_ADDRESS
 
     );
 
 
 
 
 
WRITE_COUNTER : INPUT_COUNTER_9BITS
 
port map(ENABLE => ENABLE_WRITE,
 
	  CLEAR =>CLEAR,
 
  	 CLEAR_COUNTERS => CLEAR_COUNTERS,
 
	  CLK => CLK,
 
	  COUNT => CODING_WRITE_ADDRESS
 
     );
 
 
 
 
 
-- xilinx memory
 
 
 
RAM_SB: DP_RAM_XILINX_512
 
port map(
 
			addra => WRADDRESS_SB,
 
			clka =>  WRCLOCK_SB,
 
			addrb => RDADDRESS_SB,
 
			clkb => RDCLOCK_SB,
 
			dina => DATA_SB,
 
			wea(0) => WREN_SB,
 
			enb =>  RDEN_SB,
 
			doutb =>  DATA_OUT_AUX);
 
 
 
 
 
-- Actel memory
 
 
 
--RAM_SB : MY_MEMORY
 
-- port map(DO => DATA_OUT_AUX,
 
--      RCLOCK =>RDCLOCK_SB,
 
--      WCLOCK =>WRCLOCK_SB,
 
--      DI => DATA_SB,
 
--      WRB => WREN_SB,
 
--      RDB =>RDEN_SB,
 
--      WADDR => WRADDRESS_SB,
 
--      RADDR => RDADDRESS_SB
 
--);
 
 
 
-- Altera memory
 
-- pragma translate off
 
--ALT_RAM :
--
--if (not TSMC013) generate
--
--RAM_SB : LPM_RAM_DP
--
-- generic map(LPM_WIDTH => 32,
--
--          LPM_WIDTHAD  => 9,
--
--          LPM_NUMWORDS => 512,
--
--		 LPM_INDATA => "REGISTERED",
--
--	      LPM_OUTDATA  =>  "UNREGISTERED",
--
--		 LPM_RDADDRESS_CONTROL => "REGISTERED",
--
--		 LPM_WRADDRESS_CONTROL => "REGISTERED",
--
--		 LPM_FILE  => "UNUSED",
--
--		 LPM_TYPE  => "LPM_RAM_DP",
--
--		 LPM_HINT => "UNUSED")         
--
--port map(
--
--              DATA=> DATA_SB,
--
--              RDADDRESS=> RDADDRESS_SB,
--
--              WRADDRESS=> WRADDRESS_SB,
--
--              RDEN=> RDEN_SB,
--
--              WREN=> WREN_SB,
--
--              Q=> DATA_OUT_AUX,
--
--              RDCLOCK=> RDCLOCK_SB,
--
--              RDCLKEN=> RDCLKEN_SB,
--
--              WRCLOCK=> WRCLOCK_SB,
--
--              WRCLKEN=> WRCLKEN_SB
--
--);
--
--end generate;
 
--pragma translate on
 
-- Port 1 = R
 
-- Port 2 = R/W
 
--TSMC013_RAM :
--
--  if (TSMC013) generate
--
--    TMSC_RAM : ra2sh_512W_32B_16MX_offWRMSK_8WRGRAN port map
--
--      (
--
--        clka        =>      RDCLOCK_SB,
--
--        cena        =>      tsmc_cena_n ,
--
--        wena        =>      tsmc_wena_n,
--
--        aa          =>      RDADDRESS_SB,
--
--        da          =>      DATA_SB,
--
--        qa          =>      DATA_OUT_AUX,
--
--        clkb        =>      WRCLOCK_SB,
--
--        cenb        =>      tsmc_cenb_n,
--
--        wenb        =>      tsmc_wenb_n,
--
--        ab          =>      WRADDRESS_SB,
--
--        db          =>      DATA_SB,
--
--        qb          =>      OPEN
--
--      ) ;      
--
--  end generate;
 
 
 
DATA_SB<=To_X01Z(DATA_IN_32)  after 5 ns ;
 
RDADDRESS_SB<= To_X01Z(CODING_READ_ADDRESS)  after 5 ns ;
 
WRADDRESS_SB<= To_X01Z(CODING_WRITE_ADDRESS)  after 5 ns ;
 
RDEN_SB<= To_X01Z(ENABLE_READ_INT)  after 5 ns ;
 
WREN_SB<= To_X01Z(ENABLE_WRITE)  after 5 ns ;
 
RDCLOCK_SB<= To_X01Z(READ_CLK);
 
RDCLKEN_SB<= To_X01Z(READ_CLK_ENABLE)  after 5 ns ;
 
WRCLOCK_SB<= To_X01Z(WRITE_CLK);
 
WRCLKEN_SB<= To_X01Z(WRITE_CLK_ENABLE)  after 5 ns ;
 
 
 
tsmc_cenb_n <= not (WRCLKEN_SB);
 
tsmc_cena_n <= not (RDCLKEN_SB);
 
tsmc_wena_n <='1';
 
--    not (RDEN_SB); Always in read-mode; read-enable used to
 
--    power-up ram
 
tsmc_wenb_n <= not (WREN_SB);
 
 
 
DATA_OUT_32 <= To_bitvector(DATA_OUT_AUX);
 
WRITE_CLK <= CLK;
 
READ_CLK <= CLK;
 
ENABLE_WRITE <= WRITE and ENABLE_WRITE_INT and FINISHED;
 
WRITE_CLK_ENABLE <= ENABLE_WRITE_INT;
 
READ_CLK_ENABLE <= ENABLE_READ_INT and WAITN;
 
BUS_REQUEST <= BUS_REQUEST_INT;
 
READY <= READY_AUX or not(WAITN); -- no ready if wait asserted at zero
 
 
 
 
 
 
 
THRESHOLD_AUX <= '0' & THRESHOLD;
 
 
 
 
 
 
 
 
 
 
 
end STRUCTURAL;
 
 

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.