- added models

git-svn-id: http://moon:8086/svn/vhdl/trunk@1290 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
2015-06-10 19:27:35 +00:00
parent 8eb6b3ff9e
commit 2edaa4d7cb
217 changed files with 152127 additions and 0 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,5 @@
vcom mt48lc4m32b2.vhd
vcom test.vhd
vsim -t ps tb
do wave.do
run -all
@@ -0,0 +1,309 @@
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY tb IS
END tb;
ARCHITECTURE test OF tb IS
COMPONENT mt48lc4m32b2
GENERIC ( -- Timing for -7 CL2
tCK : TIME := 7.500 ns;
addr_bits : INTEGER := 12;
data_bits : INTEGER := 32
);
PORT (
Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');
Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
Clk : IN STD_LOGIC := '0';
Cke : IN STD_LOGIC := '1';
Cs_n : IN STD_LOGIC := '1';
Cas_n : IN STD_LOGIC := '1';
Ras_n : IN STD_LOGIC := '1';
We_n : IN STD_LOGIC := '1';
Dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000"
);
END COMPONENT;
FOR ALL : mt48lc4m32b2 USE ENTITY work.mt48lc4m32b2 (behave);
CONSTANT tCK : TIME := 7.500 ns;
CONSTANT addr_bits : INTEGER := 12;
CONSTANT data_bits : INTEGER := 32;
SIGNAL pDq : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0);
SIGNAL pAddr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
SIGNAL pBa : STD_LOGIC_VECTOR (1 DOWNTO 0);
SIGNAL pClk : STD_LOGIC;
SIGNAL pCke : STD_LOGIC;
SIGNAL pCs_n : STD_LOGIC;
SIGNAL pCas_n : STD_LOGIC;
SIGNAL pRas_n : STD_LOGIC;
SIGNAL pWe_n : STD_LOGIC;
SIGNAL pDqm : STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL stim_done : boolean := false;
SIGNAL clk_done : boolean := false;
BEGIN
u1: mt48lc4m32b2
PORT MAP(
Dq => pDq,
Addr => pAddr,
Ba => pBa,
Clk => pClk,
Cke => pCke,
Cs_n => pCs_n,
Ras_n => pRas_n,
Cas_n => pCas_n,
We_n => pWe_n,
Dqm => pDqm
);
stimulator : PROCESS
PROCEDURE ACTIVE (Ba_in : STD_LOGIC_VECTOR (1 DOWNTO 0);
Addr_in : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
Dq_in : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0)) IS
BEGIN
pCke <= '1';
pCs_n <= '0';
pRas_n <= '0';
pCas_n <= '1';
pWe_n <= '1';
pDqm <= "0000";
pBa <= Ba_in;
pAddr <= Addr_in;
pDq <= Dq_in;
WAIT FOR tCK;
END;
PROCEDURE AUTO_REFRESH IS
BEGIN
pCke <= '1';
pCs_n <= '0';
pRas_n <= '0';
pCas_n <= '0';
pWe_n <= '1';
pDqm <= "0000";
--pBa <= "00";
--pAddr <= (OTHERS => '0');
pDq <= (OTHERS => 'Z');
WAIT FOR tCK;
END;
PROCEDURE BURST_TERM IS
BEGIN
pCke <= '1';
pCs_n <= '0';
pRas_n <= '1';
pCas_n <= '1';
pWe_n <= '0';
pDqm <= "0000";
--pBa <= "00";
--pAddr <= (OTHERS => '0');
pDq <= (OTHERS => 'Z');
WAIT FOR tCK;
END;
PROCEDURE LOAD_MODE_REG (Ba_in : STD_LOGIC_VECTOR (1 DOWNTO 0);
Addr_in : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0)) IS
BEGIN
pCke <= '1';
pCs_n <= '0';
pRas_n <= '0';
pCas_n <= '0';
pWe_n <= '0';
pDqm <= "0000";
pBa <= Ba_in;
pAddr <= Addr_in;
pDq <= (OTHERS => 'Z');
WAIT FOR tCK;
END;
PROCEDURE NOP (Dq_in : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0)) IS
BEGIN
pCke <= '1';
pCs_n <= '0';
pRas_n <= '1';
pCas_n <= '1';
pWe_n <= '1';
pDqm <= "0000";
--pBa <= "00";
--pAddr <= (OTHERS => '0');
pDq <= Dq_in;
WAIT FOR tCK;
END;
PROCEDURE PRECHARGE (Ba_in : STD_LOGIC_VECTOR (1 DOWNTO 0);
Addr_in : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
Dq_in : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0)) IS
BEGIN
pCke <= '1';
pCs_n <= '0';
pRas_n <= '0';
pCas_n <= '1';
pWe_n <= '0';
pDqm <= "0000";
pBa <= Ba_in;
pAddr <= Addr_in;
pDq <= Dq_in;
WAIT FOR tCK;
END;
PROCEDURE READ (Ba_in : STD_LOGIC_VECTOR (1 DOWNTO 0);
Addr_in : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
Dq_in : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0)) IS
BEGIN
pCke <= '1';
pCs_n <= '0';
pRas_n <= '1';
pCas_n <= '0';
pWe_n <= '1';
pDqm <= "0000";
pBa <= Ba_in;
pAddr <= Addr_in;
pDq <= Dq_in;
WAIT FOR tCK;
END;
-- Write
PROCEDURE WRITE (Ba_in : STD_LOGIC_VECTOR (1 DOWNTO 0);
Addr_in : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
Dq_in : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0)) IS
BEGIN
pCke <= '1';
pCs_n <= '0';
pRas_n <= '1';
pCas_n <= '0';
pWe_n <= '0';
pDqm <= "0000";
pBa <= Ba_in;
pAddr <= Addr_in;
pDq <= Dq_in;
WAIT FOR tCK;
END;
BEGIN
-- COMMAND BA ADDR DQ
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
-- We need 100 us power up sequence. I use 10 NOPs here as a required example.
PRECHARGE ("00", "010000000000", "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
AUTO_REFRESH;
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
AUTO_REFRESH;
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
LOAD_MODE_REG ("00", "000000100010");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
ACTIVE ("00", "000000000000", "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
ACTIVE ("01", "000000000000", "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
ACTIVE ("10", "000000000000", "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
ACTIVE ("11", "000000000000", "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
WRITE ("00", "000000000000", "00000000000000000000000000000000");
NOP ( "00000000000000000000000000000001");
NOP ( "00000000000000000000000000000010");
NOP ( "00000000000000000000000000000011");
WRITE ("01", "000000000000", "00000000000000000000000000000100");
NOP ( "00000000000000000000000000000101");
NOP ( "00000000000000000000000000000110");
NOP ( "00000000000000000000000000000111");
WRITE ("10", "000000000000", "00000000000000000000000000001000");
NOP ( "00000000000000000000000000001001");
NOP ( "00000000000000000000000000001010");
NOP ( "00000000000000000000000000001011");
WRITE ("11", "000000000000", "00000000000000000000000000001100");
NOP ( "00000000000000000000000000001101");
NOP ( "00000000000000000000000000001110");
NOP ( "00000000000000000000000000001111");
READ ("00", "000000000000", "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
READ ("01", "000000000000", "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
READ ("10", "000000000000", "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
READ ("11", "000000000000", "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
NOP ( "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
ASSERT false
REPORT "End of Stimulation File Detected!"
SEVERITY note;
stim_done <= true;
WAIT;
END PROCESS;
clock : PROCESS
VARIABLE done_time : time;
BEGIN
pclk <= '0';
WAIT for tCK/2;
WHILE not stim_done loop
pclk <= '1';
WAIT for tCK/2;
pclk <= '0';
WAIT for tCK/2;
END LOOP;
done_time := now + tCK;
WHILE now < done_time LOOP -- one last clock to finish last command
pclk <= '1';
WAIT for tCK/2;
pclk <= '0';
WAIT for tCK/2;
END LOOP;
ASSERT false
REPORT "Suspending clock activity"
SEVERITY note;
clk_done <= true;
WAIT;
END PROCESS;
END test;
@@ -0,0 +1,26 @@
add wave -noupdate -radix default -format Logic /tb/u1/clk
add wave -noupdate -radix default -format Logic /tb/u1/cke
add wave -noupdate -radix default -format Logic /tb/u1/cs_n
add wave -noupdate -radix default -format Logic /tb/u1/ras_n
add wave -noupdate -radix default -format Logic /tb/u1/cas_n
add wave -noupdate -radix default -format Logic /tb/u1/we_n
add wave -noupdate -radix decimal /tb/u1/addr
add wave -noupdate -radix unsigned /tb/u1/ba
add wave -noupdate -radix decimal /tb/u1/dq
add wave -noupdate -radix default -format Logic /tb/u1/dqm
add wave -noupdate -radix decimal /tb/u1/operation
add wave -noupdate -radix decimal /tb/u1/mode_reg
add wave -noupdate -radix default -format Logic /tb/u1/active_enable
add wave -noupdate -radix default -format Logic /tb/u1/aref_enable
add wave -noupdate -radix default -format Logic /tb/u1/burst_term
add wave -noupdate -radix default -format Logic /tb/u1/mode_reg_enable
add wave -noupdate -radix default -format Logic /tb/u1/prech_enable
add wave -noupdate -radix default -format Logic /tb/u1/read_enable
add wave -noupdate -radix default -format Logic /tb/u1/write_enable
add wave -noupdate -radix default -format Logic /tb/u1/burst_length_1
add wave -noupdate -radix default -format Logic /tb/u1/burst_length_2
add wave -noupdate -radix default -format Logic /tb/u1/burst_length_4
add wave -noupdate -radix default -format Logic /tb/u1/burst_length_8
add wave -noupdate -radix default -format Logic /tb/u1/cas_latency_2
add wave -noupdate -radix default -format Logic /tb/u1/cas_latency_3