📄 sdram_test_component.vhd
字号:
--
-- signal q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
-- );
--end entity sdram_test_component_ram_module;
--
--
--architecture europa of sdram_test_component_ram_module is
-- component lpm_ram_dp is
--GENERIC (
-- lpm_file : STRING;
-- lpm_hint : STRING;
-- lpm_indata : STRING;
-- lpm_outdata : STRING;
-- lpm_rdaddress_control : STRING;
-- lpm_width : NATURAL;
-- lpm_widthad : NATURAL;
-- lpm_wraddress_control : STRING;
-- suppress_memory_conversion_warnings : STRING
-- );
-- PORT (
-- signal q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
-- signal data : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
-- signal rdaddress : IN STD_LOGIC_VECTOR (21 DOWNTO 0);
-- signal rdclken : IN STD_LOGIC;
-- signal wraddress : IN STD_LOGIC_VECTOR (21 DOWNTO 0);
-- signal wrclock : IN STD_LOGIC;
-- signal wren : IN STD_LOGIC
-- );
-- end component lpm_ram_dp;
-- signal internal_q : STD_LOGIC_VECTOR (31 DOWNTO 0);
-- TYPE mem_array is ARRAY( 4194303 DOWNTO 0) of STD_LOGIC_VECTOR(31 DOWNTO 0);
-- signal memory_has_been_read : STD_LOGIC;
-- signal read_address : STD_LOGIC_VECTOR (21 DOWNTO 0);
--
--begin
--
-- process (rdaddress)
-- begin
-- if (std_logic_vector'("00000000000000000000000000000001")) /= std_logic_vector'("00000000000000000000000000000000") then
-- read_address <= rdaddress;
-- end if;
--
-- end process;
--
-- lpm_ram_dp_component : lpm_ram_dp
-- generic map(
-- lpm_file => "UNUSED",
-- lpm_hint => "USE_EAB=ON",
-- lpm_indata => "REGISTERED",
-- lpm_outdata => "UNREGISTERED",
-- lpm_rdaddress_control => "UNREGISTERED",
-- lpm_width => 32,
-- lpm_widthad => 22,
-- lpm_wraddress_control => "REGISTERED",
-- suppress_memory_conversion_warnings => "ON"
-- )
-- port map(
-- data => data,
-- q => internal_q,
-- rdaddress => read_address,
-- rdclken => rdclken,
-- wraddress => wraddress,
-- wrclock => wrclock,
-- wren => wren
-- );
--
--
-- q <= internal_q;
--end europa;
--
--synthesis read_comments_as_HDL off
library altera_vhdl_support;
use altera_vhdl_support.altera_vhdl_support_lib.all;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
library std;
use std.textio.all;
entity sdram_test_component is
port (
-- inputs:
signal clk : IN STD_LOGIC;
signal zs_addr : IN STD_LOGIC_VECTOR (11 DOWNTO 0);
signal zs_ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
signal zs_cas_n : IN STD_LOGIC;
signal zs_cke : IN STD_LOGIC;
signal zs_cs_n : IN STD_LOGIC;
signal zs_dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
signal zs_ras_n : IN STD_LOGIC;
signal zs_we_n : IN STD_LOGIC;
-- outputs:
signal zs_dq : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0)
);
end entity sdram_test_component;
architecture europa of sdram_test_component is
component sdram_test_component_ram_module is
port (
-- inputs:
signal data : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
signal rdaddress : IN STD_LOGIC_VECTOR (21 DOWNTO 0);
signal rdclken : IN STD_LOGIC;
signal wraddress : IN STD_LOGIC_VECTOR (21 DOWNTO 0);
signal wrclock : IN STD_LOGIC;
signal wren : IN STD_LOGIC;
-- outputs:
signal q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
);
end component sdram_test_component_ram_module;
signal CODE : STD_LOGIC_VECTOR (23 DOWNTO 0);
signal a : STD_LOGIC_VECTOR (11 DOWNTO 0);
signal addr_col : STD_LOGIC_VECTOR (7 DOWNTO 0);
signal addr_crb : STD_LOGIC_VECTOR (13 DOWNTO 0);
signal ba : STD_LOGIC_VECTOR (1 DOWNTO 0);
signal cas_n : STD_LOGIC;
signal cke : STD_LOGIC;
signal cmd_code : STD_LOGIC_VECTOR (2 DOWNTO 0);
signal cs_n : STD_LOGIC;
signal dqm : STD_LOGIC_VECTOR (3 DOWNTO 0);
signal index : STD_LOGIC_VECTOR (2 DOWNTO 0);
signal latency : STD_LOGIC_VECTOR (2 DOWNTO 0);
signal mask : STD_LOGIC_VECTOR (3 DOWNTO 0);
signal mem_bytes : STD_LOGIC_VECTOR (31 DOWNTO 0);
signal module_input : STD_LOGIC_VECTOR (21 DOWNTO 0);
signal module_input1 : STD_LOGIC;
signal module_input2 : STD_LOGIC;
signal ras_n : STD_LOGIC;
signal rd_addr_pipe_0 : STD_LOGIC_VECTOR (21 DOWNTO 0);
signal rd_addr_pipe_1 : STD_LOGIC_VECTOR (21 DOWNTO 0);
signal rd_addr_pipe_2 : STD_LOGIC_VECTOR (21 DOWNTO 0);
signal rd_mask_pipe_0 : STD_LOGIC_VECTOR (3 DOWNTO 0);
signal rd_mask_pipe_1 : STD_LOGIC_VECTOR (3 DOWNTO 0);
signal rd_mask_pipe_2 : STD_LOGIC_VECTOR (3 DOWNTO 0);
signal rd_valid_pipe : STD_LOGIC_VECTOR (2 DOWNTO 0);
signal read_addr : STD_LOGIC_VECTOR (21 DOWNTO 0);
signal read_data : STD_LOGIC_VECTOR (31 DOWNTO 0);
signal read_mask : STD_LOGIC_VECTOR (3 DOWNTO 0);
signal read_temp : STD_LOGIC_VECTOR (31 DOWNTO 0);
signal read_valid : STD_LOGIC;
signal rmw_temp : STD_LOGIC_VECTOR (31 DOWNTO 0);
signal test_addr : STD_LOGIC_VECTOR (21 DOWNTO 0);
signal txt_code : STD_LOGIC_VECTOR (23 DOWNTO 0);
signal we_n : STD_LOGIC;
begin
process
VARIABLE write_line : line;
VARIABLE write_line1 : line;
VARIABLE write_line2 : line;
VARIABLE write_line3 : line;
VARIABLE write_line4 : line;
VARIABLE write_line5 : line;
begin
write(write_line, string'(""));
write(output, write_line.all & CR);
deallocate (write_line);
write(write_line1, string'("************************************************************"));
write(output, write_line1.all & CR);
deallocate (write_line1);
write(write_line2, string'("This testbench includes an SOPC Builder Generated Altera model:"));
write(output, write_line2.all & CR);
deallocate (write_line2);
write(write_line3, string'("'sdram_test_component.vhd', to simulate accesses to SDRAM."));
write(output, write_line3.all & CR);
deallocate (write_line3);
write(write_line4, string'("Initial contents are loaded from the file: 'sdram.dat'."));
write(output, write_line4.all & CR);
deallocate (write_line4);
write(write_line5, string'("************************************************************"));
write(output, write_line5.all & CR);
deallocate (write_line5);
wait;
end process;
sdram_test_component_ram : sdram_test_component_ram_module
port map(
q => read_data,
data => rmw_temp,
rdaddress => module_input,
rdclken => module_input1,
wraddress => test_addr,
wrclock => clk,
wren => module_input2
);
module_input <= A_WE_StdLogicVector(((CODE = std_logic_vector'("001000000101011101010010"))), test_addr, read_addr);
module_input1 <= std_logic'('1');
module_input2 <= to_std_logic((CODE = std_logic_vector'("001000000101011101010010")));
cke <= zs_cke;
cs_n <= zs_cs_n;
ras_n <= zs_ras_n;
cas_n <= zs_cas_n;
we_n <= zs_we_n;
dqm <= zs_dqm;
ba <= zs_ba;
a <= zs_addr;
cmd_code <= Std_Logic_Vector'(A_ToStdLogicVector(ras_n) & A_ToStdLogicVector(cas_n) & A_ToStdLogicVector(we_n));
CODE <= A_WE_StdLogicVector((std_logic'((cs_n)) = '1'), std_logic_vector'("010010010100111001001000"), txt_code);
addr_col <= a(7 DOWNTO 0);
test_addr <= addr_crb & addr_col;
mem_bytes <= read_data;
rmw_temp(7 DOWNTO 0) <= A_WE_StdLogicVector((std_logic'(dqm(0)) = '1'), mem_bytes(7 DOWNTO 0), zs_dq(7 DOWNTO 0));
rmw_temp(15 DOWNTO 8) <= A_WE_StdLogicVector((std_logic'(dqm(1)) = '1'), mem_bytes(15 DOWNTO 8), zs_dq(15 DOWNTO 8));
rmw_temp(23 DOWNTO 16) <= A_WE_StdLogicVector((std_logic'(dqm(2)) = '1'), mem_bytes(23 DOWNTO 16), zs_dq(23 DOWNTO 16));
rmw_temp(31 DOWNTO 24) <= A_WE_StdLogicVector((std_logic'(dqm(3)) = '1'), mem_bytes(31 DOWNTO 24), zs_dq(31 DOWNTO 24));
-- Handle Input.
process (clk)
begin
if clk'event and clk = '1' then
-- No Activity of Clock Disabled
if std_logic'(cke) = '1' then
-- LMR: Get CAS_Latency.
if CODE = std_logic_vector'("010011000100110101010010") then
latency <= a(6 DOWNTO 4);
end if;
-- ACT: Get Row/Bank Address.
if CODE = std_logic_vector'("010000010100001101010100") then
addr_crb <= Std_Logic_Vector'(A_ToStdLogicVector(ba(1)) & a & A_ToStdLogicVector(ba(0)));
end if;
rd_valid_pipe(2) <= rd_valid_pipe(1);
rd_valid_pipe(1) <= rd_valid_pipe(0);
rd_valid_pipe(0) <= to_std_logic((CODE = std_logic_vector'("001000000101001001000100")));
rd_addr_pipe_2 <= rd_addr_pipe_1;
rd_addr_pipe_1 <= rd_addr_pipe_0;
rd_addr_pipe_0 <= test_addr;
rd_mask_pipe_2 <= rd_mask_pipe_1;
rd_mask_pipe_1 <= rd_mask_pipe_0;
rd_mask_pipe_0 <= dqm;
end if;
end if;
end process;
read_temp(7 DOWNTO 0) <= A_WE_StdLogicVector((std_logic'(mask(0)) = '1'), std_logic_vector'("ZZZZZZZZ"), read_data(7 DOWNTO 0));
read_temp(15 DOWNTO 8) <= A_WE_StdLogicVector((std_logic'(mask(1)) = '1'), std_logic_vector'("ZZZZZZZZ"), read_data(15 DOWNTO 8));
read_temp(23 DOWNTO 16) <= A_WE_StdLogicVector((std_logic'(mask(2)) = '1'), std_logic_vector'("ZZZZZZZZ"), read_data(23 DOWNTO 16));
read_temp(31 DOWNTO 24) <= A_WE_StdLogicVector((std_logic'(mask(3)) = '1'), std_logic_vector'("ZZZZZZZZ"), read_data(31 DOWNTO 24));
--use index to select which pipeline stage drives addr
read_addr <= A_WE_StdLogicVector((((std_logic_vector'("00000000000000000000000000000") & (index)) = std_logic_vector'("00000000000000000000000000000000"))), rd_addr_pipe_0, A_WE_StdLogicVector((((std_logic_vector'("00000000000000000000000000000") & (index)) = std_logic_vector'("00000000000000000000000000000001"))), rd_addr_pipe_1, rd_addr_pipe_2));
--use index to select which pipeline stage drives mask
read_mask <= A_WE_StdLogicVector((((std_logic_vector'("00000000000000000000000000000") & (index)) = std_logic_vector'("00000000000000000000000000000000"))), rd_mask_pipe_0, A_WE_StdLogicVector((((std_logic_vector'("00000000000000000000000000000") & (index)) = std_logic_vector'("00000000000000000000000000000001"))), rd_mask_pipe_1, rd_mask_pipe_2));
--use index to select which pipeline stage drives valid
read_valid <= A_WE_StdLogic((((std_logic_vector'("00000000000000000000000000000") & (index)) = std_logic_vector'("00000000000000000000000000000000"))), rd_valid_pipe(0), A_WE_StdLogic((((std_logic_vector'("00000000000000000000000000000") & (index)) = std_logic_vector'("00000000000000000000000000000001"))), rd_valid_pipe(1), rd_valid_pipe(2)));
index <= A_EXT (((std_logic_vector'("0") & (latency)) - (std_logic_vector'("000") & (A_TOSTDLOGICVECTOR(std_logic'('1'))))), 3);
mask <= read_mask;
zs_dq <= A_WE_StdLogicVector((std_logic'(read_valid) = '1'), read_temp, A_REP(std_logic'('Z'), 32));
--exemplar translate_off
txt_code <= A_WE_StdLogicVector(((cmd_code = std_logic_vector'("000"))), std_logic_vector'("010011000100110101010010"), A_WE_StdLogicVector(((cmd_code = std_logic_vector'("001"))), std_logic_vector'("010000010101001001000110"), A_WE_StdLogicVector(((cmd_code = std_logic_vector'("010"))), std_logic_vector'("010100000101001001000101"), A_WE_StdLogicVector(((cmd_code = std_logic_vector'("011"))), std_logic_vector'("010000010100001101010100"), A_WE_StdLogicVector(((cmd_code = std_logic_vector'("100"))), std_logic_vector'("001000000101011101010010"), A_WE_StdLogicVector(((cmd_code = std_logic_vector'("101"))), std_logic_vector'("001000000101001001000100"), A_WE_StdLogicVector(((cmd_code = std_logic_vector'("110"))), std_logic_vector'("010000100101001101010100"), A_WE_StdLogicVector(((cmd_code = std_logic_vector'("111"))), std_logic_vector'("010011100100111101010000"), std_logic_vector'("010000100100000101000100")))))))));
--exemplar translate_on
end europa;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -