Simple Dual Port (Read and Write Port), and True Dual Port RAM implementations, together with their respective Altera implementations were added. The 'arch' Architectures should have the same behaviour as the Altera Implementations (single_port_ram was modified to achieve that)
59 lines
2.4 KiB
VHDL
59 lines
2.4 KiB
VHDL
-- altera vhdl_input_version vhdl_2008
|
|
-- XXX: QSYS Fix (https://www.intel.com/content/www/us/en/support/programmable/articles/000079458.html)
|
|
|
|
library ieee;
|
|
use ieee.std_logic_1164.all;
|
|
use ieee.numeric_std.all;
|
|
|
|
LIBRARY altera_mf;
|
|
USE altera_mf.altera_mf_components.all;
|
|
|
|
architecture altera 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 => "DONT_CARE",
|
|
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;
|