?? stimulus1.txt
字號:
`timescale 1ns / 1ps
module stimulus
(
clk,
reset_n,
sys_add,
sys_adsn,
sys_r_wn,
sysd,
sys_dmsel,
sys_dly_200us,
sys_init_done,
sys_rdyn
);
`include "ddr_par.v"
//---------------------------------------------------------------------
// outputs & registers
//
output clk;
output reset_n;
output [RA_MSB:CA_LSB] sys_add;
output sys_adsn;
output sys_r_wn;
output sys_dly_200us;
output sys_rdyn;
output [DSIZE/8-1:0] sys_dmsel;
input sys_init_done;
inout [DSIZE-1:0] sysd;
reg clk_int;
reg clk_en;
reg reset_n;
reg [RA_MSB:CA_LSB] sys_add;
reg sys_adsn;
reg sys_r_wn;
reg [DSIZE-1:0] sysd_i;
reg [DSIZE/8-1:0] sys_dmsel;
reg write_en;
reg sys_dly_200us;
wire clk;
wire [DSIZE-1:0] sysd;
reg [2:0] add_i;
reg [CA_MSB-CA_LSB:0] col_gen;
reg [BA_MSB-BA_LSB:0] ba_gen;
reg [RA_MSB-RA_LSB:0] row_gen;
reg [DSIZE-1:0] data_gen;
wire [DSIZE-1:0] sysd_read;
integer ik;
//=============================================================================
// parameters -- change to whatever you like
//=============================================================================
parameter clock_time = 100;
parameter reset_time = 1000;
parameter clk_period = tCK;
//---------------------------------------------------------------------
// tasks
//
task write;
input [RA_MSB:CA_LSB] addr;
input [DSIZE-1:0] data;
begin
#1;
sys_add = addr;
sys_adsn = 0;
sys_r_wn = 0;
write_en = 1'b1;
#clk_period;
sys_adsn = 1;
sysd_i = data;
add_i = 0;
// Depending upon the burst length
// NUM_CLK_WRITE can be 2, 4 and 8
wait (!sys_rdyn);
#1;
$display ("Write data %h", data);
repeat (NUM_CLK_WRITE-1) begin
@ (posedge clk);
#1;
add_i = add_i + 1'b1;
sysd_i = data + add_i;
end
wait (sys_rdyn);
//#(clk_period * (num_clk_write + num_clk_wait + 4));
sysd_i = {DSIZE {1'bz}};
write_en = 1'b0;
sys_r_wn = 1;
sys_add = {RA_MSB+1{1'bz}};
end
endtask
task read;
input [RA_MSB:CA_LSB] addr;
input [DSIZE-1:0] data;
begin
#1;
sys_add = addr;
sys_adsn = 0;
sys_r_wn = 1;
#clk_period;
sys_adsn = 1;
add_i = 0;
// Depending upon the burst length
// NUM_CLK_READ can be 2, 4 and 8
wait (!sys_rdyn);
#1;
repeat (NUM_CLK_READ) begin
@ (posedge clk);
if (sysd_read === (data + add_i)) $display ("At %t, DATA READ=%h", $time, sysd_read);
else $display ("ERROR: At %t, DATA READ=%h, DATA SHOULD BE=%h", $time, sysd_read, (data + add_i));
add_i = (add_i + 1'b1);
end
wait (sys_rdyn);
sys_r_wn = 1;
sys_add = {RA_MSB+1{1'bz}};
end
endtask
assign sysd = write_en ? sysd_i : {DSIZE {1'bz}};
//---------------------------------------------------------------------
// code
//
initial begin
sys_r_wn <= #1 1'b1;
sys_adsn <= #1 1'b1;
sys_dly_200us <= #1 1'b0;
clk_int <= #1 1'b0;
reset_n <= #1 1'b0;
sys_add <= #1 {RA_MSB+1 {1'b1}};
sysd_i <= #1 {DSIZE {1'bz}};
sys_dmsel <= #1 {DSIZE/8 {1'b0}};
clk_en <= #1 1'b0;
write_en <= #1 1'b0;
#clock_time;
clk_en <= #1 1'b1;
#reset_time;
@(posedge clk);
$display($time,"ns : coming out of reset");
reset_n <= #1 1'b1;
// #200000;
#200 ;
sys_dly_200us <= #1 1'b1;
@(posedge sys_init_done);
#500;
repeat (210) @ (posedge clk);
@(negedge clk);
ik = 0;
data_gen = {DSIZE {1'b0}};
col_gen = {CA_MSB-CA_LSB {1'b0}};
ba_gen = {BA_MSB-BA_LSB {1'b0}};
row_gen = {RA_MSB-RA_LSB {1'b0}};
repeat (100) begin
row_gen = row_gen + 1;
ba_gen = ba_gen + 1'b1;
write({row_gen,ba_gen, col_gen+10'h000}, data_gen);
write({row_gen,ba_gen, col_gen+10'h100}, (data_gen+1*NUM_CLK_WRITE));
write({row_gen,ba_gen, col_gen+10'h200}, (data_gen+2*NUM_CLK_WRITE));
write({row_gen,ba_gen, col_gen+10'h300}, (data_gen+3*NUM_CLK_WRITE));
read({row_gen,ba_gen, col_gen+10'h000}, data_gen);
read({row_gen,ba_gen, col_gen+10'h100}, (data_gen+1*NUM_CLK_READ));
read({row_gen,ba_gen, col_gen+10'h200}, (data_gen+2*NUM_CLK_READ));
read({row_gen,ba_gen, col_gen+10'h300}, (data_gen+3*NUM_CLK_READ));
ik = ik +1;
data_gen = data_gen + 4*NUM_CLK_READ + 1;
end
$finish;
end
always
#(clk_period/2.0) clk_int <= ~clk_int;
assign clk = clk_en & clk_int;
assign #(2.5) sysd_read = sysd;
endmodule
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -