BlinkenArea - GitList
Repositories
Blog
Wiki
mips_sys
Code
Commits
Branches
Tags
Search
Tree:
1f34390
Branches
Tags
master
mips_sys
blocks
rwram_dc.vhd
added dual clock FIFO implementation changed ethernet TX interface to use dual clock FIFO for clock domain crossing
Stefan Schuermans
commited
1f34390
at 2012-03-10 10:50:55
rwram_dc.vhd
Blame
History
Raw
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; -- read write RAM with dual clocks ENTITY e_block_rwram_dc IS GENERIC ( addr_width: natural; data_width: natural ); PORT ( rd_clk: IN std_logic; i_rd_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); o_rd_data: OUT std_logic_vector(data_width - 1 DOWNTO 0); wr_clk: IN std_logic; i_wr_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); i_wr_data: IN std_logic_vector(data_width - 1 DOWNTO 0); i_wr_en: IN std_logic ); END ENTITY e_block_rwram_dc; ARCHITECTURE a_block_rwram_dc OF e_block_rwram_dc IS SUBTYPE t_addr IS std_logic_vector(addr_width - 1 DOWNTO 0); SUBTYPE t_data IS std_logic_vector(data_width - 1 DOWNTO 0); TYPE t_buf IS ARRAY(0 TO 2 ** addr_width - 1) OF t_data; SIGNAL s_buf: t_buf; BEGIN p_rd: PROCESS(rd_clk) BEGIN IF rising_edge(rd_clk) THEN o_rd_data <= s_buf(to_integer(unsigned(i_rd_addr))); END IF; END PROCESS p_rd; p_wr: PROCESS(wr_clk) BEGIN IF rising_edge(wr_clk) THEN IF i_wr_en = '1' THEN s_buf(to_integer(unsigned(i_wr_addr))) <= i_wr_data; END IF; END IF; END PROCESS p_wr; END ARCHITECTURE a_block_rwram_dc;