git-svn-id: http://moon:8086/svn/vhdl/trunk@1290 cc03376c-175c-47c8-b038-4cd826a8556b
350 lines
8.0 KiB
VHDL
350 lines
8.0 KiB
VHDL
---------------------------------------------------------------------------------
|
|
--COMMAND FORMAT --
|
|
-- --
|
|
-- write(column address(integer), bank(bit_vector), first data(integer), dqm(bit), cke(bit));--
|
|
-- read(column address(integer), bank(bit_vector), dqm(bit), cke(bit)); --
|
|
-- active(row address(integer), bank(bit_vector), data bus (integer), dqm(bit), cke(bit));--
|
|
-- precharge(bank(bit_vector), address (integer), data bus(integer), dqm(bit), cke(bit)); --
|
|
-- nop(data bus(integer), dqm(bit), cke(bit), cs(bit)); --
|
|
-- burst_term(data bus(integer), dqm(bit_vector), cke(bit)); --
|
|
-- load_array('1'); --
|
|
-- load_mode_reg(register(integer), cke(bit)); --
|
|
-- next_cycle(clk); This is used after every command(incl. nop) to clock --
|
|
-- at the correct clock frequency entered in the clock --
|
|
-- period constant below --
|
|
-- unload_array(row_start(integer), row_end(integer), bank(bit_vector)) --
|
|
-- load_mode_reg(op_code(integer)) --
|
|
-- --
|
|
---------------------------------------------------------------------------------
|
|
|
|
LIBRARY work;
|
|
LIBRARY ieee;
|
|
USE ieee.std_logic_1164.all;
|
|
USE std.textio.all;
|
|
USE work.generate_vectors.all;
|
|
|
|
ENTITY vector_generate IS
|
|
END vector_generate;
|
|
|
|
ARCHITECTURE vector_generate OF vector_generate IS
|
|
|
|
SIGNAL stim_done : BOOLEAN := FALSE;
|
|
SIGNAL clk : BIT := '0';
|
|
CONSTANT clk_start : time := 15 ns;
|
|
CONSTANT clk_period : time := 10 ns;
|
|
CONSTANT Z : INTEGER := -100;
|
|
|
|
BEGIN
|
|
|
|
PROCESS
|
|
|
|
BEGIN
|
|
|
|
WAIT UNTIL clk = '1' AND clk'EVENT;
|
|
|
|
--------------------ENTER COMMANDS BELOW THIS LINE-----------------------------
|
|
--******************DO NOT USE -100 FOR A DQ VALUE*************************----
|
|
--*******************Z WILL PLACE HI-Z ON THE BUS**************************----
|
|
--*******USE next_cycle(clk) FOR ADVANCING TO NEXT CLOCK CYCLE*************----
|
|
|
|
nop(Z, "00", '1', '1'); --Always begin with one nop when using Micron's testbench
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
load_array('1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
precharge("00", 1024, Z, "00", '1');
|
|
|
|
FOR i IN 1 to 2 LOOP
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
END LOOP;
|
|
|
|
next_cycle(clk);
|
|
auto_refresh;
|
|
|
|
FOR i IN 1 TO 8 LOOP
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
END LOOP;
|
|
|
|
next_cycle(clk);
|
|
auto_refresh;
|
|
|
|
FOR i IN 1 TO 8 LOOP
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
END LOOP;
|
|
|
|
next_cycle(clk);
|
|
load_mode_reg(51, '1'); -- 19 / 35 / 51 -> lat=3,bl=8,mode=seq
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
-- Write Section
|
|
|
|
next_cycle(clk);
|
|
active(0, "00", Z, "00", '1'); -- Activate Bank 0
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk); -- Write Bank 0
|
|
write(0, "00", 100, "00", '1');
|
|
|
|
next_cycle(clk);
|
|
nop(101, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
active(0, "01", 102, "00", '1'); -- Activate Bank 1
|
|
|
|
next_cycle(clk);
|
|
nop(103, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(104, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(105, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(106, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(107, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
write(0, "01", 200, "00", '1'); -- Write Bank 1
|
|
|
|
next_cycle(clk);
|
|
precharge("00", 0, 201, "00", '1'); -- Precharge Bank 0
|
|
|
|
next_cycle(clk);
|
|
active(0, "10", 202, "00", '1'); -- Activate Bank 2
|
|
|
|
next_cycle(clk);
|
|
nop(203, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(204, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(205, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(206, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(207, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
write(0, "10", 300, "00", '1'); -- Write Bank 2
|
|
|
|
next_cycle(clk);
|
|
precharge("01", 0, 301, "00", '1'); -- Precharge Bank 1
|
|
|
|
next_cycle(clk);
|
|
active(0, "11", 302, "00", '1'); -- Activate Bank 3
|
|
|
|
next_cycle(clk);
|
|
nop(303, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(304, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(305, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(306, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(307, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
write(0, "11", 400, "00", '1'); -- Write Bank 3
|
|
|
|
next_cycle(clk);
|
|
precharge("10", 0, 401, "00", '1'); -- Precharge Bank 2
|
|
|
|
next_cycle(clk);
|
|
active(0, "00", 402, "00", '1'); -- Activate Bank 0
|
|
|
|
next_cycle(clk);
|
|
nop(403, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(404, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(405, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(406, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(407, "00", '1', '1');
|
|
|
|
-- Read Section
|
|
|
|
next_cycle(clk);
|
|
read(0, "00", "00", '1'); -- Read Bank 0
|
|
|
|
next_cycle(clk);
|
|
precharge("11", 0, Z, "00", '1'); -- Precharge Bank 3
|
|
|
|
next_cycle(clk);
|
|
active(0, "01", Z, "00", '1'); -- Activate Bank 1
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
read(0, "01", "00", '1'); -- Read Bank 1
|
|
|
|
next_cycle(clk);
|
|
precharge("00", 0, Z, "00", '1'); -- Precharge Bank 0
|
|
|
|
next_cycle(clk);
|
|
active(0, "10", Z, "00", '1'); -- Activate Bank 2
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
read(0, "10", "00", '1'); -- Read Bank 2
|
|
|
|
next_cycle(clk);
|
|
precharge("01", 0, Z, "00", '1'); -- Precharge Bank 1
|
|
|
|
next_cycle(clk);
|
|
active(0, "11", Z, "00", '1'); -- Activate Bank 3
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
read(0, "11", "00", '1'); -- Read Bank 3
|
|
|
|
next_cycle(clk);
|
|
precharge("10", 0, Z, "00", '1'); -- Precharge Bank 2
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
precharge("11", 0, Z, "00", '1'); -- Precharge Bank 3
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
next_cycle(clk);
|
|
unload_array(0, 0, "00");
|
|
|
|
next_cycle(clk);
|
|
nop(Z, "00", '1', '1');
|
|
|
|
stim_done <= TRUE; --always include this line at the end of your stimulus
|
|
|
|
-------------------------------------------------------------------------------
|
|
--*************************************************************************----
|
|
END PROCESS;
|
|
|
|
|
|
clock:
|
|
PROCESS
|
|
VARIABLE done_time : time;
|
|
VARIABLE cycle_var : integer := 0;
|
|
BEGIN
|
|
cycle <= 0;
|
|
clk <= '0';
|
|
WAIT for clk_start;
|
|
WHILE not stim_done loop
|
|
clk <= '1';
|
|
cycle <= cycle_var;
|
|
WAIT for clk_period/2;
|
|
cycle_var := cycle_var + 1;
|
|
clk <= '0';
|
|
WAIT for clk_period/2;
|
|
END LOOP;
|
|
|
|
ASSERT (FALSE)
|
|
REPORT "Test Vectors Generated"
|
|
SEVERITY note;
|
|
|
|
WAIT;
|
|
END PROCESS;
|
|
|
|
|
|
END;
|