⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex_319_tb.v

📁 GPIO (General Purpose Input and Output ports) with microprocessor programmable tri-state bus interfa
💻 V
字号:
`timescale 1 ns/1 ns

module testbench;
reg		reset, clk;
reg	[7:0] 	addr;
reg		rd_n, wr_n;
wire	[7:0]	data, gpio0, gpio1, gpio2, gpio3, gpio4, gpio5;

reg	[7:0] 	data_out;
reg	[7:0]	gp0_i, gp1_i, gp2_i, gp3_i, gp4_i, gp5_i;
reg		data_ctl;
reg		p0_ctl, p1_ctl, p2_ctl, p3_ctl, p4_ctl, p5_ctl;

EX_319_tristatebus_gpio_top EX319_instance(
	.reset(reset), .clk(clk), .addr(addr),
	.rd_n(rd_n), .wr_n(wr_n), .data(data),
	.gpio0(gpio0), .gpio1(gpio1), .gpio2(gpio2),
	.gpio3(gpio3), .gpio4(gpio4), .gpio5(gpio5) );

assign data = (data_ctl==1'b1) ? data_out : 8'hz;

assign gpio0 = (p0_ctl==1'b1) ? gp0_i : 8'hz;
assign gpio1 = (p1_ctl==1'b1) ? gp1_i : 8'hz;
assign gpio2 = (p2_ctl==1'b1) ? gp2_i : 8'hz;
assign gpio3 = (p3_ctl==1'b1) ? gp3_i : 8'hz;
assign gpio4 = (p4_ctl==1'b1) ? gp4_i : 8'hz;
assign gpio5 = (p5_ctl==1'b1) ? gp5_i : 8'hz;

// set up clk with 20 ns period 50 MHz
parameter clkper = 20;
initial
begin
	clk = 1;	// Time = 0
end

always 
begin
	#(clkper / 2)  clk = ~clk;
end

initial
begin
 reset    = 1'b0;		// Time = 0
 addr     = 8'h00;
 rd_n     = 1'b1;
 wr_n     = 1'b1;
 data_ctl = 1'b0;
 p0_ctl   = 1'b0;
 p1_ctl   = 1'b1;		// config gpio1 as input port
 p2_ctl   = 1'b0;
 p3_ctl   = 1'b1;		// config gpio3 as input port
 p4_ctl   = 1'b0;
 p5_ctl   = 1'b1;		// config gpio5 as input port
 data_out = 8'h00;
 gp0_i    = 8'h00;
 gp1_i    = 8'h38;		// drive gpio1 0x38
 gp2_i    = 8'h00;
 gp3_i    = 8'h55;		// drive gpio3 0x55
 gp4_i    = 8'h00;
 gp5_i    = 8'h68;		// drive gpio5 0x68

 #105;				// Time = 105
 reset  = 1'b1;

 #100;				// Time = 205
//--one write cycle-----------------------------------------
 addr     = 8'hF3;		// program gpio0 as output port
 data_ctl = 1'b1;		//	   gpio1 as input port
 data_out = 8'b0000_0101;	//	   gpio2 as output port

 #50;				// Time = 255
 wr_n     = 1'b0;

 #200;				// Time = 455
 wr_n     = 1'b1;

 #50;				// Time = 505
 addr     = 8'h00;
 data_ctl = 1'b0;
 data_out = 8'h00;

 #100;				// Time = 605
//--one write cycle-----------------------------------------
 addr     = 8'hF7;		// program gpio3 as input port
 data_ctl = 1'b1;		//	   gpio4 as output port
 data_out = 8'b0000_0010;	//	   gpio5 as input port

 #50;				// Time = 655
 wr_n     = 1'b0;

 #200;				// Time = 855
 wr_n     = 1'b1;

 #50;				// Time = 905
 addr     = 8'h00;
 data_ctl = 1'b0;
 data_out = 8'h00;

 #100;				// Time = 1005
//--one write cycle-----------------------------------------
 addr     = 8'hF0;		// write aa to gpio0
 data_ctl = 1'b1;
 data_out = 8'haa;

 #50;				// Time = 1055
 wr_n     = 1'b0;

 #200;				// Time = 1255
 wr_n     = 1'b1;

 #50;				// Time = 1305
 addr     = 8'h00;
 data_ctl = 1'b0;
 data_out = 8'h00;

 #100;				// Time = 1405
//--one write cycle-----------------------------------------
 addr     = 8'hF2;		// write bb to gpio2
 data_ctl = 1'b1;
 data_out = 8'hbb;

 #50;				// Time = 1455
 wr_n     = 1'b0;

 #200;				// Time = 1655
 wr_n     = 1'b1;

 #50;				// Time = 1705
 addr     = 8'h00;
 data_ctl = 1'b0;
 data_out = 8'h00;

 #100;				// Time = 1805
//--one write cycle-----------------------------------------
 addr     = 8'hF5;		// write cc to gpio4
 data_ctl = 1'b1;
 data_out = 8'hcc;

 #50;				// Time = 1855
 wr_n     = 1'b0;

 #200;				// Time = 2055
 wr_n     = 1'b1;

 #50;				// Time = 2105
 addr     = 8'h00;
 data_ctl = 1'b0;
 data_out = 8'h00;

 #100;				// Time = 2205
//--one read cycle------------------------------------------
 addr     = 8'hF1;		// read gpio1

 #50;				// Time = 2255
 rd_n     = 1'b0;

 #200;				// Time = 2455
 rd_n     = 1'b1;

 #50;				// Time = 2505
 addr     = 8'h00;

 #100;				// Time = 2605
//--one read cycle------------------------------------------
 addr     = 8'hF4;		// read gpio3

 #50;				// Time = 2655
 rd_n     = 1'b0;

 #200;				// Time = 2855
 rd_n     = 1'b1;

 #50;				// Time = 2905
 addr     = 8'h00;

 #100;				// Time = 3005
//--one read cycle------------------------------------------
 addr     = 8'hF6;		// read gpio5

 #50;				// Time = 3055
 rd_n     = 1'b0;

 #200;				// Time = 3255
 rd_n     = 1'b1;

 #50;				// Time = 3305
 addr     = 8'h00;
end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -