📄 nand_test.v
字号:
//================================
//NAND256 Stimuli file
//================================
`timescale 1ns/1ns
//--------------------------------
module NAND_DRV (
IO ,
CE ,
WE ,
RE ,
WP ,
CLE ,
ALE ,
RY_BY ,
VDD ,
VSS
);
//--------------------------------
inout[7:0] IO ;
input RY_BY ;
output CE ;
output WE ;
output RE ;
output WP ;
output CLE ;
output ALE ;
output VDD ;
output VSS ;
//--------------------------------
reg[7:0] IO_BUF;
reg CE ;
reg WE ;
reg RE ;
reg WP ;
reg CLE ;
reg ALE ;
reg VDD ;
reg VSS ;
//--------------------------------
assign IO = IO_BUF;
//--------------------------------
initial begin
VDD = 1'b0;
VSS = 1'b0;
#100
VDD = 1'b1;
#100;
CE = 1'b1;
RE = 1'b1;
WE = 1'b1;
WP = 1'b1;
CLE = 1'b0;
ALE = 1'b0;
IO_BUF = 8'hzz;
#600;
CE = 1'b0;
//Read Electronic Signature
READ_ES;
#200;
//Read Status Register
READ_SR;
#200;
//Read Memory Array
$display("************************************************************************************************");
READ(8'h01,8'h00,8'h00,8'h00,1); //area b,read block 0,page 0,column 256
#200;
WP = 1'b0;
#200;
PROGRAM(8'h00,8'h00,8'h00,8'h88,256+16); //write '88' to block 0,page 0,column 256~column 527
#600e3;
READ_SR;
#200;
WP = 1'b1;
#200;
READ_B;
PROGRAM(8'h00,8'h00,8'h00,8'h88,256+16); //write '88' to block 0,page 0,column 256~column 527
#600e3;
READ_SR;
#200;
READ(8'h00,8'hff,8'h00,8'h00,256+16+2); //area a,read block 0,page 0,column 255 ~ block 0,page 1,column 0
#200;
$display("************************************************************************************************");
READ(8'h50,8'h00,8'h1f,8'h00,1); //area c,read block 0,page 31,column 512
#200;
READ(8'h50,8'hff,8'h1f,8'h00,1); //area c,read block 0,page 31,column 527
#200;
PROGRAM(8'h00,8'h1f,8'h00,8'h55,16); //write '55' to block 0,page 31,column 512~column 527
#600e3;
READ_SR;
#200;
READ(8'h01,8'hff,8'h1f,8'h00,16+2); //area b,read block 0,page 31,column 511 ~ column 527
#200;
$display("************************************************************************************************");
READ(8'h00,8'h00,8'h02,8'h00,1); //area a,read block 0,page 2,column 0
#200;
PROGRAM(8'h00,8'h02,8'h00,8'haa,528); //write 'aa' to block 0,page 2,column 0~column 527
#600e3;
READ_SR;
#200;
READ(8'h00,8'h00,8'h02,8'h00,528+1); //area a,read block 0,page 2,column 0 ~ block 0,page 3,column 0
#200;
$display("************************************************************************************************");
READ(8'h00,8'h00,8'h80,8'h00,1); //area a,read block 4,page 0,column 0
#200;
PROGRAM(8'h00,8'h80,8'h00,8'h40,1); //write '40' to block 4,page 0,column 0
#600e3;
PROGRAM(8'h00,8'h81,8'h00,8'h40,1); //write '40' to block 4,page 1,column 0
#600e3;
READ(8'h00,8'h00,8'h80,8'h00,1); //area a,read block 4,page 0,column 0
#200;
READ(8'h00,8'h00,8'h81,8'h00,1); //area a,read block 4,page 1,column 0
#200;
$display("------------------------------------------------------------------------------------------------");
READ(8'h50,8'h00,8'h80,8'h00,1); //area c,read block 4,page 0,column 512
#200;
PROGRAM(8'h00,8'h80,8'h00,8'h40,1); //write '40' to block 4,page 0,column 512
#600e3;
PROGRAM(8'h00,8'h81,8'h00,8'h40,1); //write '40' to block 4,page 1,column 512
#600e3;
READ(8'h50,8'h00,8'h80,8'h00,1); //area c,read block 4,page 0,column 512
#200;
READ(8'h50,8'h00,8'h81,8'h00,1); //area c,read block 4,page 1,column 512
#200;
$display("------------------------------------------------------------------------------------------------");
READ(8'h01,8'h00,8'h80,8'h00,1); //area a,read block 4,page 0,column 256
#200;
READ(8'h01,8'h00,8'h81,8'h00,1); //area a,read block 4,page 1,column 256
#200;
PROGRAM(8'h00,8'h80,8'h00,8'h40,1); //write '40' to block 4,page 0,column 256
#600e3;
//PROGRAM(8'h00,8'h81,8'h00,8'h40,1); //write '40' to block 4,page 1,column 256
//#600e3;
READ_B;
PROGRAM(8'h00,8'h81,8'h00,8'h40,1); //write '40' to block 4,page 1,column 256
#600e3;
READ(8'h01,8'h00,8'h80,8'h00,1); //area a,read block 4,page 0,column 256
#200;
READ(8'h01,8'h00,8'h81,8'h00,1); //area a,read block 4,page 1,column 256
#200;
$display("------------------------------------------------------------------------------------------------");
READ(8'h50,8'hff,8'hff,8'hff,2); //area c,read block 2047,page 31,column 527
#200;
PROGRAM(8'hff,8'hff,8'hff,8'h88,1);
#600e3;
READ(8'h50,8'hff,8'hff,8'hff,2); //area c,read block 2047,page 31,column 527
#200;
$display("------------------------------------------------------------------------------------------------");
RESET;
#10e3;
READ(8'h00,8'h00,8'h00,8'h00,528); //area a,read block 0,page 0,column 0 ~ 527
#200;
READ(8'h00,8'h00,8'h21,8'h00,528); //area a,read block 1,page 1,column 0 ~ 527
#200;
WP = 1'b0;
COPY_BACK(24'h000000,24'h002100); //copy block 0,page 0 to block 1,page1,wr protect
#600e3;
READ(8'h00,8'h00,8'h21,8'h00,528); //area a,read block 1,page 1,column 0 ~ 527
#200
WP = 1'b1;
COPY_BACK(24'h000000,24'h002100); //copy block 0,page 0 to block 1,page1,not protect
#600e3;
READ(8'h00,8'h00,8'h21,8'h00,528); //area a,read block 1,page 1,column 0 ~ 527
#200;
$display("------------------------------------------------------------------------------------------------");
VDD = 1'b0;
#100;
VDD = 1'b1;
#100;
WP = 1'b0;
BLOCK_ERASE(8'h20,8'h00); //erase block1,wr protect
#3e6;
READ(8'h00,8'h00,8'h21,8'h00,528); //area a,read block 1,page 1,column 0 ~ 527
#200;
WP = 1'b1;
BLOCK_ERASE(8'h20,8'h00); //erase block1,not protect
#3e6;
READ(8'h00,8'h00,8'h21,8'h00,528); //area a,read block 1,page 1,column 0 ~ 527
#200;
$finish;
end
//=========================================================
// Read Electronic Signature
//=========================================================
task READ_ES;
begin
#100;
CLE = 1'b1;
IO_BUF = 8'h90; //command input
#100;
WE = 1'b0;
#100;
WE = 1'b1; //write enable, data latched in
#100;
CLE = 1'b0;
#100;
ALE = 1'b1;
IO_BUF = 8'h00; //address input
#100;
WE = 1'b0;
#100;
WE = 1'b1; //write enable, data latched in
#100;
ALE = 1'b0;
IO_BUF = 8'hzz; //read data from memory
#100;
RE = 1'b0; //read enable, data output
#100;
RE = 1'b1;
$display("%t,Electronic Signature = [%h]",$realtime,IO);
#100;
RE = 1'b0;
#100;
RE = 1'b1;
$display("%t,Electronic Signature = [%h]",$realtime,IO);
#100;
end
endtask
//#########################################################
//=========================================================
// Read Status Register
//=========================================================
task READ_SR;
begin
#100;
CLE = 1'b1;
IO_BUF = 8'h70; //command input
#100;
WE = 1'b0;
#100;
WE = 1'b1; //write enable, data latched in
#100;
CLE = 1'b0;
IO_BUF = 8'hzz; //read data from memory
#100;
RE = 1'b0; //read enable, data output
#100;
RE = 1'b1;
$display("%t,Status Register = [%b]",$realtime,IO);
#100;
end
endtask
//#########################################################
task READ_A;
begin
#200;
CLE = 1'b1;
IO_BUF = 8'h00; //command input, area a
#200;
WE = 1'b0;
#200;
WE = 1'b1; //write enable, data latched in
#200;
end
endtask
task READ_B;
begin
#200;
CLE = 1'b1;
IO_BUF = 8'h01; //command input, area b
#200;
WE = 1'b0;
#200;
WE = 1'b1; //write enable, data latched in
#200;
end
endtask
task READ_C;
begin
#200;
CLE = 1'b1;
IO_BUF = 8'h50; //command input, area c
#200;
WE = 1'b0;
#200;
WE = 1'b1; //write enable, data latched in
#200;
end
endtask
//=========================================================
// Reset Command
//=========================================================
task RESET;
begin
#200;
CLE = 1'b1;
IO_BUF = 8'hff; //command input, reset
#200;
WE = 1'b0;
#200;
WE = 1'b1; //write enable, data latched in
#200;
end
endtask
//=========================================================
// Read Memory Array
//=========================================================
task READ;
input[7:0] cmd;
input[7:0] addr_1st;
input[7:0] addr_2nd;
input[7:0] addr_3rd;
//input[7:0] addr_4th;
input n;
integer i,n,temp;
reg[12:0] add_bk;
reg[4:0] add_pg;
reg[9:0] add_cl;
begin
#200;
CLE = 1'b1;
IO_BUF = cmd; //command input, area a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -