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

Subversion Repositories xmatchpro

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

Compare with Previous | Blame | View Log

--This library 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 library 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 library; if not, write to the Free Software
--Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-- e_mail : j.l.nunez-yanez@byacom.co.uk
 
---------------------------------------------
 
--  ENTITY       = CODING_BUFFER_64_32     --
 
--  version      = 1.0                     --
 
--  last update  = 30/05/00                --
 
--  author       = Jose Nunez              --
 
--  modified:      Vassilios A. Chouliaras
 
---------------------------------------------
 
 
 
 
 
-- FUNCTION
 
-- Apapter that changes the 64 bit parallel interface to a 32 bit parallel
 
-- 256x64 bit word to handle block sizes up to 64Kbytes without stopping the input due to overflow.
 
 
 
--  PIN LIST
 
 
 
--  START = activate the buffer
 
--  FINISHED = the block has been process. empty buffer
 
--  OVERFLOW = 64 bit of compressed data available.
 
--  DATA_IN_64  = input data from the 64 bit out register in X-MatchPRO
 
--  THRESHOLD_LEVEL = input treshold to start outputting data. Latency control.
 
--  BUS_ACKNOWLEDGE = The 32 bit wide output bus is available.
 
--  DATA_OUT_32  = output data to the 32 bit wide output bus
 
--  OVERFLOW_DETECTED = output to the control unit buffer overflow. Stop inputting data
 
--  UNDERFLOW_DETECTED = output to the control unit buffer overflow. Stop outputting data. The bus is free.
 
--  BUS_REQUEST = output requesting bus to output compressed data
 
--  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 CODING_BUFFER_64_32 is
 
port
 
(
 
  FORCE_STOP : in bit;
 
	START : in bit;
 
	FINISHED : in bit;
 
	OVERFLOW : in bit;
 
	SHORT : in bit;
 
   WAITN : in bit;
 
	DATA_IN_64 : in bit_vector(63 downto 0);
 
	THRESHOLD_LEVEL : in bit_vector(8 downto 0);
 
	BUS_ACKNOWLEDGE : in bit;
 
	CLEAR : in bit ;
 
	CLK : in bit ;
 
	DATA_OUT_32: out std_logic_vector(31 downto 0);
 
	ENABLE_READ : out bit;
 
	FLUSHING : out bit;
 
	OVERFLOW_DETECTED : out bit;
 
	UNDERFLOW_DETECTED : out bit;
 
	FINISH : out bit;
 
	DATA_VALID : out bit; -- data in the compressed bus is valid
 
	BUS_REQUEST : out bit
 
);
 
 
 
 
 
end CODING_BUFFER_64_32;
 
 
 
 
 
architecture STRUCTURAL of CODING_BUFFER_64_32 is
 
 
 
-- xilinx memory
 
 
 
component DP_RAM_XILINX_256
 
	port (
 
	addra: IN std_logic_VECTOR(7 downto 0);
 
	clka: IN std_logic;
 
	addrb: IN std_logic_VECTOR(7 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(7 downto 0);
--
--            RDEN : in std_logic;
--
--            DATA : in std_logic_vector(31 downto 0);
--
--            WRADDRESS : in std_logic_vector(7 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_256W_32B_8MX_offWRMSK_8WRGRAN 
 
 
 
  port ( 
 
	CLKA: in std_logic;
 
	CENA: in std_logic;
 
	WENA: in std_logic;
 
	AA: in std_logic_vector(7 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(7 downto 0);
 
	DB: in std_logic_vector(31 downto 0);
 
	QB: out std_logic_vector(31 downto 0)
 
    );
 
    end component;
 
 
 
component CODING_BUFFER_CU
 
 
 
port (
 
    WAITN   : in bit;
 
    FORCE_STOP: in bit;
 
	  START : in bit;
 
	  FINISHED : in bit;
 
	  BUS_ACKNOWLEDGE : in bit;
 
	  THRESHOLD_LEVEL : in bit_vector(8 downto 0);
 
	  CODING_READ_ADDRESS : in bit_vector(8 downto 0);
 
	  CODING_WRITE_ADDRESS : in bit_vector(8 downto 0);
 
	  CLK : in bit;
 
	  CLEAR : in bit;
 
	  BUS_REQUEST : out bit;
 
	  FLUSHING : out bit;
 
	  FINISH : out bit;
 
        CLEAR_COUNTERS : out bit;
 
	  CODING_OVERFLOW : out bit;
 
	  CODING_UNDERFLOW : out bit;
 
	  ENABLE_WRITE : out bit;
 
	  ENABLE_READ : out bit
 
	 );
 
end component;
 
 
 
 
 
component BUFFER_COUNTER_READ 
 
 
 
port (
 
     ENABLE : in bit;
 
	  CLEAR : in bit;
 
	  CLEAR_COUNTERS : in bit;
 
	  CLK : in bit;
 
	  COUNT : out bit_vector(8 downto 0)
 
     );
 
 
 
end component;
 
 
 
component BUFFER_COUNTER_WRITE
 
 
 
port (ENABLE : in bit;
 
    	SHORT : in bit; -- only write 32 bits
 
	  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 CODING_OVERFLOW : bit;
 
signal CODING_UNDERFLOW : bit;
 
signal ENABLE_WRITE : bit;
 
signal DATA_OUT_AUX : std_logic_vector(63 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_MSB :std_logic_vector(31 downto 0);
 
signal RDADDRESS_MSB :std_logic_vector(7 downto 0);
 
signal WRADDRESS_MSB :std_logic_vector(7 downto 0);
 
signal RDEN_MSB :std_logic;
 
signal WREN_MSB :std_logic;
 
signal RDCLOCK_MSB :std_logic;
 
signal RDCLKEN_MSB :std_logic;
 
signal WRCLOCK_MSB :std_logic;
 
signal WRCLKEN_MSB :std_logic; 
 
 
 
signal DATA_LSB :std_logic_vector(31 downto 0);
 
signal RDADDRESS_LSB :std_logic_vector(7 downto 0);
 
signal WRADDRESS_LSB :std_logic_vector(7 downto 0);
 
signal RDEN_LSB :std_logic;
 
signal WREN_LSB :std_logic;
 
signal RDCLOCK_LSB :std_logic;
 
signal RDCLKEN_LSB :std_logic;
 
signal WRCLOCK_LSB :std_logic;
 
signal WRCLKEN_LSB :std_logic; 
 
 
 
signal tsmc_lsb_cena_n , tsmc_lsb_cenb_n : std_logic;
 
signal tsmc_lsb_wena_n , tsmc_lsb_wenb_n : std_logic;
 
signal tsmc_msb_cena_n , tsmc_msb_cenb_n : std_logic;
 
signal tsmc_msb_wena_n , tsmc_msb_wenb_n : std_logic;
 
 
 
 
 
begin
 
 
 
 
 
 
 
 
 
CONTROL_UNIT : CODING_BUFFER_CU
 
port map(
 
    WAITN => WAITN,
 
    FORCE_STOP => FORCE_STOP,
 
	  START => START,
 
	  FINISHED => FINISHED,
 
	  BUS_ACKNOWLEDGE => BUS_ACKNOWLEDGE,
 
	  THRESHOLD_LEVEL => THRESHOLD_LEVEL,
 
	  CODING_READ_ADDRESS => CODING_READ_ADDRESS,
 
	  CODING_WRITE_ADDRESS => CODING_WRITE_ADDRESS,
 
	  CLK => CLK,
 
	  CLEAR => CLEAR,
 
	  CODING_OVERFLOW => CODING_OVERFLOW,
 
	  CODING_UNDERFLOW=> CODING_UNDERFLOW,
 
	  ENABLE_WRITE => ENABLE_WRITE_INT,
 
	  ENABLE_READ => ENABLE_READ_INT,
 
	  FLUSHING => FLUSHING,
 
	  FINISH => FINISH,
 
        CLEAR_COUNTERS => CLEAR_COUNTERS,
 
	  BUS_REQUEST => BUS_REQUEST_INT
 
	 );
 
 
 
 
 
OVERFLOW_DETECTED <= CODING_OVERFLOW;
 
UNDERFLOW_DETECTED <= CODING_UNDERFLOW;
 
 
 
READ_COUNTER : BUFFER_COUNTER_READ 
 
port map(
 
     ENABLE => READ_CLK_ENABLE,
 
	  CLEAR => CLEAR,
 
  	  CLEAR_COUNTERS => CLEAR_COUNTERS,
 
	  CLK => CLK,
 
	  COUNT => CODING_READ_ADDRESS
 
     );
 
 
 
 
 
WRITE_COUNTER : BUFFER_COUNTER_WRITE 
 
port map(ENABLE => ENABLE_WRITE,
 
		SHORT => SHORT,
 
	  CLEAR =>CLEAR,
 
  	 CLEAR_COUNTERS => CLEAR_COUNTERS,
 
	  CLK => CLK,
 
	  COUNT => CODING_WRITE_ADDRESS
 
     );
 
 
 
 
 
RAM_MSB : DP_RAM_XILINX_256
 
		port map (
 
			addra => WRADDRESS_MSB,
 
			clka =>  WRCLOCK_MSB,
 
			addrb => RDADDRESS_MSB,
 
			clkb => RDCLOCK_MSB,
 
			dina => DATA_MSB,
 
			wea(0) => WREN_MSB,
 
			enb =>  RDEN_MSB,
 
			doutb =>  DATA_OUT_AUX(63 downto 32));
 
 
 
-- Actel memory
 
 
 
-- RAM_MSB : MY_MEMORY
 
-- port map(DO => DATA_OUT_AUX(63 downto 32),
 
--      RCLOCK =>RDCLOCK_MSB,
 
--      WCLOCK =>WRCLOCK_MSB,
 
--      DI => DATA_MSB,
 
--      WRB => WREN_MSB,
 
--      RDB =>RDEN_MSB,
 
--      WADDR => WRADDRESS_MSB,
 
--     RADDR => RDADDRESS_MSB
 
--);
 
 
 
-- Altera memory
 
 
 
--ALT_RAM_MSB :
--
--if (not TSMC013) generate
--
--RAM_MSB : LPM_RAM_DP
--
--generic map(LPM_WIDTH => 32,
--
--         LPM_WIDTHAD  => 8,
--
--         LPM_NUMWORDS => 256,
--
--          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_MSB,
--
--              RDADDRESS=> RDADDRESS_MSB,
--
--              WRADDRESS=> WRADDRESS_MSB,
--
--              RDEN=> RDEN_MSB,
--
--              WREN=> WREN_MSB,
--
--              Q=> DATA_OUT_AUX(63 downto 32),
--
--              RDCLOCK=> RDCLOCK_MSB,
--
--              RDCLKEN=> RDCLKEN_MSB,
--
--              WRCLOCK=> WRCLOCK_MSB,
--
--              WRCLKEN=> WRCLKEN_MSB
--
--);
--
--end generate;
--
 
 
 
 
-- Port 1 = R
 
-- Port 2 = R/W
 
--TSMC013_RAM_MSB :
--
--  if (TSMC013) generate
--
--    TMSC_RAM : ra2sh_256W_32B_8MX_offWRMSK_8WRGRAN port map
--
--      (
--
--        clka        =>      RDCLOCK_MSB,
--
--        cena        =>      tsmc_msb_cena_n ,
--
--        wena        =>      tsmc_msb_wena_n,
--
--        aa          =>      RDADDRESS_MSB,
--
--        da          =>      DATA_MSB,
--
--        qa          =>      DATA_OUT_AUX(63 downto 32),
--
--        clkb        =>      WRCLOCK_MSB,
--
--        cenb        =>      tsmc_msb_cenb_n,
--
--        wenb        =>      tsmc_msb_wenb_n,
--
--        ab          =>      WRADDRESS_MSB,
--
--        db          =>      DATA_MSB,
--
--        qb          =>      OPEN
--
--      ) ;      
--
--end generate;
 
 
 
 
 
 
 
tsmc_msb_cenb_n <= not (WRCLKEN_MSB);
 
tsmc_msb_cena_n <= not (RDCLKEN_MSB);
 
tsmc_msb_wena_n <='1';
 
--    not (RDEN_SB); Always in read-mode; read-enable used to
 
--    power-up ram
 
tsmc_msb_wenb_n <= not (WRCLKEN_MSB);
 
 
 
 
 
DATA_MSB<=To_X01Z(DATA_IN_64(63 downto 32))  after 5 ns ;
 
RDADDRESS_MSB<= To_X01Z(CODING_READ_ADDRESS(8 downto 1))  after 5 ns ;
 
WRADDRESS_MSB<= To_X01Z(CODING_WRITE_ADDRESS(8 downto 1))  after 5 ns ;
 
RDEN_MSB<= To_X01Z(ENABLE_READ_INT)  after 5 ns ;
 
WREN_MSB<= To_X01Z(ENABLE_WRITE)  after 5 ns;
 
RDCLOCK_MSB<= To_X01Z(READ_CLK);
 
RDCLKEN_MSB<= To_X01Z(READ_CLK_ENABLE) after 5 ns ;
 
WRCLOCK_MSB<= To_X01Z(WRITE_CLK);
 
WRCLKEN_MSB<= To_X01Z(WRITE_CLK_ENABLE) after 5 ns ;
 
 
 
--RAM_MSB : syn_dpram_256x32_rawr
 
--port map(
 
--              DATA=>To_X01Z(DATA_IN_64(63 downto 32)),
 
--              RDADDRESS=> To_X01Z(CODING_READ_ADDRESS),
 
--              WRADDRESS=> To_X01Z(CODING_WRITE_ADDRESS),
 
--              RDEN=> To_X01Z(ENABLE_READ_INT),
 
--              WREN=> To_X01Z(ENABLE_WRITE),
 
--              Q=> DATA_OUT_AUX(63 downto 32),
 
--              RDCLOCK=> To_X01Z(READ_CLK),
 
--              RDCLKEN=> To_X01Z(READ_CLK_ENABLE),
 
--              WRCLOCK=> To_X01Z(WRITE_CLK),
 
--              WRCLKEN=> To_X01Z(WRITE_CLK_ENABLE)
 
--);
 
 
 
RAM_LSB : DP_RAM_XILINX_256
 
		port map (
 
			addra => WRADDRESS_LSB,
 
			clka =>  WRCLOCK_LSB,
 
			addrb => RDADDRESS_LSB,
 
			clkb => RDCLOCK_LSB,
 
			dina => DATA_LSB,
 
			wea (0) => WREN_LSB,
 
			enb =>  RDEN_LSB,
 
			doutb =>  DATA_OUT_AUX(31 downto 0));
 
 
 
 
 
-- Actel memory
 
 
 
--RAM_LSB : MY_MEMORY
--
--port map(DO => DATA_OUT_AUX(31 downto 0),
--
--      RCLOCK =>RDCLOCK_LSB,
--
--      WCLOCK =>WRCLOCK_LSB,
--
--      DI => DATA_LSB,
--
--      WRB => WREN_LSB,
--
--      RDB =>RDEN_LSB,
--
--      WADDR => WRADDRESS_LSB,
--
--      RADDR => RDADDRESS_LSB
--
--);
 
 
 
-- Altera memory
 
--ALT_RAM_LSB :
--
--if (not TSMC013) generate
--
--RAM_LSB : LPM_RAM_DP
--
--generic map(LPM_WIDTH => 32,
--
--         LPM_WIDTHAD  => 8,
--
--         LPM_NUMWORDS => 256,
--
--         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_LSB,
--
--              RDADDRESS=> RDADDRESS_LSB,
--
--              WRADDRESS=> WRADDRESS_LSB,
--
--              RDEN=> RDEN_LSB,
--
--             WREN=> WREN_LSB,
--
--              Q=> DATA_OUT_AUX(31 downto 0),
--
--              RDCLOCK=> RDCLOCK_LSB,
--
--              RDCLKEN=> RDCLKEN_LSB,
--
--              WRCLOCK=> WRCLOCK_LSB,
--
--              WRCLKEN=> WRCLKEN_LSB
--
--);
--
--end generate;
 
 
 
 
 
-- Port 1 = R
 
-- Port 2 = R/W
 
--TSMC013_RAM_LSB :
--
--  if (TSMC013) generate
--
--    TMSC_RAM : ra2sh_256W_32B_8MX_offWRMSK_8WRGRAN port map
--
--      (
--
--        clka        =>      RDCLOCK_LSB,
--
--        cena        =>      tsmc_lsb_cena_n ,
--
--        wena        =>      tsmc_lsb_wena_n,
--
--        aa          =>      RDADDRESS_LSB,
--
--        da          =>      DATA_LSB,
--
--        qa          =>      DATA_OUT_AUX(31 downto 0),
--
--        clkb        =>      WRCLOCK_LSB,
--
--        cenb        =>      tsmc_lsb_cenb_n,
--
--        wenb        =>      tsmc_lsb_wenb_n,
--
--        ab          =>      WRADDRESS_LSB,
--
--        db          =>      DATA_LSB,
--
--        qb          =>      OPEN
--
--      ) ;      
--
--end generate;
 
 
 
 
 
 
 
tsmc_lsb_cenb_n <= not (WRCLKEN_LSB);
 
tsmc_lsb_cena_n <= not (RDCLKEN_LSB);
 
tsmc_lsb_wena_n <='1';
 
--    not (RDEN_SB); Always in read-mode; read-enable used to
 
--    power-up ram
 
tsmc_lsb_wenb_n <= not (WRCLKEN_LSB);
 
 
 
 
 
 
 
 
 
DATA_LSB<=To_X01Z(DATA_IN_64(31 downto 0)) after 5 ns;
 
RDADDRESS_LSB<= To_X01Z(CODING_READ_ADDRESS(8 downto 1)) after 5 ns;
 
WRADDRESS_LSB<= To_X01Z(CODING_WRITE_ADDRESS(8 downto 1)) after 5 ns;
 
RDEN_LSB<= To_X01Z(ENABLE_READ_INT) after 5 ns;
 
WREN_LSB<= To_X01Z(ENABLE_WRITE) after 5 ns;
 
RDCLOCK_LSB<= To_X01Z(READ_CLK);
 
RDCLKEN_LSB<= To_X01Z(READ_CLK_ENABLE) after 5 ns; 
 
WRCLOCK_LSB<= To_X01Z(WRITE_CLK);
 
WRCLKEN_LSB<= To_X01Z(WRITE_CLK_ENABLE) after 5 ns;
 
 
 
 
 
--RAM_LSB : syn_dpram_256x32_rawr
 
--port map(
 
--              DATA=>To_X01Z(DATA_IN_64(31 downto 0)),
 
--              RDADDRESS=> To_X01Z(CODING_READ_ADDRESS),
 
--              WRADDRESS=> To_X01Z(CODING_WRITE_ADDRESS),
 
--              RDEN=> To_X01Z(ENABLE_READ_INT),
 
--              WREN=> To_X01Z(ENABLE_WRITE),
 
--              Q=> DATA_OUT_AUX(31 downto 0),
 
--              RDCLOCK=> To_X01Z(READ_CLK),
 
--              RDCLKEN=> To_X01Z(READ_CLK_ENABLE),
 
--              WRCLOCK=> To_X01Z(WRITE_CLK),
 
--              WRCLKEN=> To_X01Z(WRITE_CLK_ENABLE)
 
--);
 
 
 
 
 
DATA_VALID_PROCESS : process (CLK,CLEAR,WAITN)
 
variable DATA_VALID_AUX : bit;
 
begin
 
 
 
     if (CLEAR = '0') then
 
	    DATA_VALID_AUX := '1';
 
	 elsif ((CLK'event) and (CLK = '1')) then
 
     if(WAITN = '0') then
 
      	DATA_VALID_AUX := DATA_VALID_AUX; -- keep state
 
		elsif(CODING_UNDERFLOW = '1') then
 
	--	if(READ_ADDRESS + "00000001" = CODING_WRITE_ADDRESS) then
 
	  		DATA_VALID_AUX := '1';
 
		elsif (READ_CLK_ENABLE = '1') then
 
	      	DATA_VALID_AUX := '0';
 
		else
 
	      	DATA_VALID_AUX := DATA_VALID_AUX;
 
		end if;
 
	end if;
 
DATA_VALID <= DATA_VALID_AUX or not(WAITN);
 
end process DATA_VALID_PROCESS;
 
 
 
 
 
DATA_OUT_32 <= DATA_OUT_AUX(63 downto 32) when CODING_READ_ADDRESS(0) = '1' else DATA_OUT_AUX(31 downto 0);
 
WRITE_CLK <= CLK;
 
READ_CLK <= CLK;
 
ENABLE_WRITE <= ENABLE_WRITE_INT and not(OVERFLOW);
 
ENABLE_READ <= ENABLE_READ_INT  and not(CODING_UNDERFLOW) and WAITN; -- do not increase read address when coding_underflow equals 1
 
-- or wait equals 0
 
WRITE_CLK_ENABLE <= ENABLE_WRITE;
 
READ_CLK_ENABLE <= ENABLE_READ_INT and not(CODING_UNDERFLOW) and WAITN; -- if wait zero do not read more
 
BUS_REQUEST <= BUS_REQUEST_INT;
 
 
 
 
 
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.