Add True Dual Port RAM Implementation
This commit is contained in:
parent
dcd0b51c83
commit
349db19edd
76
src/true_dual_port_ram.vhd
Normal file
76
src/true_dual_port_ram.vhd
Normal file
@ -0,0 +1,76 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
LIBRARY altera_mf;
|
||||
USE altera_mf.altera_mf_components.all;
|
||||
|
||||
entity true_dual_port_ram is
|
||||
generic (
|
||||
ADDR_WIDTH : natural := 8;
|
||||
DATA_WIDTH : natural := 12;
|
||||
MEMORY_DEPTH : natural := 256
|
||||
);
|
||||
port (
|
||||
clk : in std_logic;
|
||||
addr_a : in std_logic_vector(ADDR_WIDTH-1 downto 0);
|
||||
addr_b : in std_logic_vector(ADDR_WIDTH-1 downto 0);
|
||||
wen_a : in std_logic;
|
||||
wen_b : in std_logic;
|
||||
ren_a : in std_logic;
|
||||
ren_b : in std_logic;
|
||||
wr_data_a : in std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
wr_data_b : in std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
rd_data_a : out std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
rd_data_b : out std_logic_vector(DATA_WIDTH-1 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture arch of true_dual_port_ram is
|
||||
|
||||
begin
|
||||
|
||||
altsyncram_component : altsyncram
|
||||
generic map (
|
||||
address_reg_b => "CLOCK0",
|
||||
clock_enable_input_a => "BYPASS",
|
||||
clock_enable_input_b => "BYPASS",
|
||||
clock_enable_output_a => "BYPASS",
|
||||
clock_enable_output_b => "BYPASS",
|
||||
indata_reg_b => "CLOCK0",
|
||||
intended_device_family => "Cyclone V",
|
||||
lpm_type => "altsyncram",
|
||||
numwords_a => MEMORY_DEPTH,
|
||||
numwords_b => MEMORY_DEPTH,
|
||||
operation_mode => "BIDIR_DUAL_PORT",
|
||||
outdata_aclr_a => "NONE",
|
||||
outdata_aclr_b => "NONE",
|
||||
outdata_reg_a => "UNREGISTERED",
|
||||
outdata_reg_b => "UNREGISTERED",
|
||||
power_up_uninitialized => "FALSE",
|
||||
read_during_write_mode_mixed_ports => "OLD_DATA",
|
||||
read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ",
|
||||
read_during_write_mode_port_b => "NEW_DATA_NO_NBE_READ",
|
||||
widthad_a => ADDR_WIDTH,
|
||||
widthad_b => ADDR_WIDTH,
|
||||
width_a => DATA_WIDTH,
|
||||
width_b => DATA_WIDTH,
|
||||
width_byteena_a => 1,
|
||||
width_byteena_b => 1,
|
||||
wrcontrol_wraddress_reg_b => "CLOCK0"
|
||||
)
|
||||
port map (
|
||||
address_a => addr_a,
|
||||
address_b => addr_b,
|
||||
clock0 => clk,
|
||||
data_a => wr_data_a,
|
||||
data_b => wr_data_b,
|
||||
rden_a => ren_a,
|
||||
rden_b => ren_b,
|
||||
wren_a => wen_a,
|
||||
wren_b => wen_b,
|
||||
q_a => rd_data_a,
|
||||
q_b => rd_data_b
|
||||
);
|
||||
|
||||
end architecture;
|
||||
Loading…
Reference in New Issue
Block a user