📄 tb_8253.v
字号:
///////////////////////////////////////////////////////////////////////
// //
// File name : 8253_tb.v //
// Title : //
// Library : WORK //
// : //
// Purpose : testbench for 8253 //
// : //
// Created On : 2007-7-15 //
// : //
// Comments : //
// : //
// Assumptions : none //
// Limitations : none //
// Known Errors : none //
// Developers : xl //
// : //
// Notes : //
// //
///////////////////////////////////////////////////////////////////////
`timescale 1ns/1ns
//----------------------------------------------------------
//load least significant byte
//----------------------------------------------------------
module tb_8253();
wire [7:0] data;
reg [7:0] data_tmp;
wire out_0;
wire out_1;
wire out_2;
reg rd;
reg wr;
reg a0;
reg a1;
reg rst_n;
reg clk_0;
reg gate_0;
reg clk_1;
reg gate_1;
reg clk_2;
reg gate_2;
initial begin
clk_0=0;
forever #5 clk_0=~clk_0;
end
initial begin
clk_1=0;
forever #5 clk_1=~clk_1;
end
initial begin
clk_2=0;
forever #5 clk_2=~clk_2;
end
initial begin
rd = 1;wr = 1;{a1,a0}=0;data_tmp=0;
/*1、 对单个计数器读写数据的测试*/
gate_0=1;gate_1=1;gate_2=1;
#10 write(8'b00_01_000_0,2'b11);//写控制字
#10 write(8'd40,2'b00);
#10 write(8'b01_11_000_0,2'b11);//写控制字
#10 write(8'd40,2'b01);
#10 write(8'd40,2'b01);
#10 write(8'b10_01_000_0,2'b11);//写控制字
#10 write(8'd40,2'b10);
#50 write(8'b00_00_000_0,2'b11);//锁存
#5 read(2'b00);
#40 write(8'b01_00_000_0,2'b11);//再锁存
#5 read(2'b01);
#5 read(2'b01);
#40 write(8'b10_00_000_0,2'b11);//再锁存
#5 read(2'b10);
#100 $finish;
/*2、 对BCD和二进制工作的测试
#10 write(8'b00_01_000_0,2'b11);//写控制字
#10 write(8'h20,2'b00);
#300 write(8'b00_01_000_1,2'b11);//写控制字
#10 write(8'h20,2'b00);
#700 $finish;
#700 $finish;*/
/*3、 对计数值位数的测试
#10 write(8'b00_01_000_0,2'b11);//写控制字
#10 write(8'd10,2'b00);
#300 write(8'b00_10_000_0,2'b11);//写控制字
#10 write(8'd1,2'b00);
#3500 write(8'b00_11_000_1,2'b11);//写控制字
#10 write(8'd50,2'b00);
#10 write(8'd0,2'b00);
#700 $finish;*/
/*模式0
gate_0=1;
#10 write(8'b00_01_000_0,2'b11);//写控制字
#10 write(8'd4,2'b00);
#50 write(8'b00_01_000_0,2'b11);//写控制字
#10 write(8'd4,2'b00);
#25 gate_0=0;
#20 gate_0=1;
#100 $finish;*/
/*模式1
gate_0=1;
#10 write(8'b00_01_001_0,2'b11);//写控制字
#10 write(8'd6,2'b00);
#30 gate_0=0;
#10 gate_0=1;
#60 write(8'b00_01_001_0,2'b11);//写控制字
#10 write(8'd6,2'b00);
#8 gate_0=0;
#5 gate_0=1;
#25 gate_0=0;
#5 gate_0=1;
#100 $finish;*/
/*模式2
gate_0=0;
#8 write(8'b00_01_010_0,2'b11);//写控制字
#10 write(8'd8,2'b00);
#50 gate_0=1;
#50 write(8'b00_01_010_0,2'b11);//写控制字
#10 write(8'd6,2'b00);
#100 gate_0=0;
#50 gate_0=1;
#700 $finish;*/
/*模式3
gate_0=1;
#10 write(8'b00_01_011_0,2'b11);//写控制字
#10 write(8'd20,2'b00);
#120 gate_0=0;
#50 gate_0=1;
#700 $finish;*/
/*模式4
gate_0=1;
#10 write(8'b00_01_100_0,2'b11);//写控制字
#10 write(8'd7,2'b00);
#120 gate_0=0;
#100 write(8'b00_01_100_0,2'b11);//写控制字
#10 write(8'd7,2'b00);
#18 gate_0 =1;
#700 $finish;*/
/*模式5
gate_0=1;
#10 write(8'b00_01_101_0,2'b11);//写控制字
#10 write(8'd9,2'b00);
#30 gate_0=0;
#10 gate_0 =1;
#200 gate_0=0;
#10 gate_0 =1;
#30 gate_0=0;
#30 gate_0 =1;
#700 $finish;*/
/*
gate_0=1;gate_1=1;gate_2=1;
#10 write(8'b00_01_000_0,2'b11);//写控制字
#10 write(8'd20,2'b00);
#10 write(8'b01_01_000_0,2'b11);//写控制字
#10 write(8'd20,2'b01);
#10 write(8'b10_01_000_0,2'b11);//写控制字
#10 write(8'd20,2'b10);
#700 $finish;*/
end
initial begin
rst_n = 0;
#1 rst_n = 1;
#3 rst_n = 0;
end
assign data=rd?data_tmp:8'bz;
C8253 C8253(
//input
.rst_n(rst_n),
.rd(rd),
.wr(wr),
.a0(a0),
.a1(a1),
.clk_0(clk_0),
.gate_0(gate_0),
.clk_1(clk_1),
.gate_1(gate_1),
.clk_2(clk_2),
.gate_2(gate_2),
.data(data),
//output
.out_0(out_0),
.out_1(out_1),
.out_2(out_2)
// .data_out(data_out)
);
initial begin
$fsdbDumpfile ("tb_8253.fsdb");
$fsdbDumpvars ();
end
task read;
input [1:0] addr;
begin
#10 rd = 1;wr = 1; {a1,a0}=addr;
#5 rd = 0;
#10 rd = 1;
end
endtask
task write;
input [7:0] word;
input [1:0] kind;
begin
#10 rd = 1;wr = 1;{a1,a0}=kind;data_tmp=word;
#5 wr = 0;
#10 wr = 1;
end
endtask
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -