📄 i8253.tbench.v
字号:
`define COUNTER0 0`define COUNTER1 1`define COUNTER2 2`define MODE 3`define D {D7,D6,D5,D4,D3,D2,D1,D0}`timescale 1ns / 1nsmodule test; reg A0, A1, RD_, WR_, CS_, CLK0, CLK1, CLK2, GATE0, GATE1, GATE2; wire D7, D6, D5, D4, D3, D2, D1, D0, OUT0, OUT1, OUT2; reg [7:0] DREG; assign `D = DREG; I8253 U(A0, A1, RD_, WR_, CS_, D7, D6, D5, D4, D3, D2, D1, D0, CLK0, CLK1, CLK2, GATE0, GATE1, GATE2, OUT0, OUT1, OUT2); task write; input [1:0] register; input [7:0] data; begin A1 = register[1]; A0 = register[0]; CS_ = 0; #50 DREG = data; #100 WR_ = 0; #400 WR_ = 1; #50 CS_ = 1; end endtask initial if ($test$plusargs("monitor")) begin : monitor integer f; f = $fopen("I8253.out"); $fmonitor(f,$stime,,"CS_:%b RD_:%b WR_:%b D:%h", CS_, RD_, WR_, `D,, "CLK0:%b GATE0:%b CNT0:%h OUT0:%b", CLK0, GATE0, U.C0.COUNT, OUT0,, "CLK1:%b GATE1:%b CNT1:%h OUT1:%b", CLK1, GATE1, U.C1.COUNT, OUT1,, "CLK2:%b GATE2:%b CNT2:%h OUT2:%b", CLK2, GATE2, U.C2.COUNT, OUT2); end initial begin CLK0 = 0; forever begin #150 CLK0 = 1; #250 CLK0 = 0; end end initial begin CLK1 = 0; forever begin #150 CLK1 = 1; #250 CLK1 = 0; end end initial begin CLK2 = 0; forever begin #150 CLK2 = 1; #250 CLK2 = 0; end end initial begin CS_ = 1; RD_ = 1; WR_ = 1; GATE0 = 1; GATE1 = 1; GATE2 = 1; #10 $display("Writing Mode #0 -- LSB Load, Mode 0, Binary"); write (`MODE, 'b00010000); #800 $display("Writing Mode #1 -- LSB Load, Mode 0, Binary"); write (`MODE, 'b01010000); #800 $display("Writing Mode #2 -- LSB Load, Mode 0, Binary"); write (`MODE, 'b10010000); #800 $display("Writing Counter #0 -- Count = 4"); write (`COUNTER0, 'h04); #800 $display("Writing Counter #1 -- Count = 3"); write (`COUNTER1, 'h03); #800 GATE1 = 0; $display("Writing Counter #2 -- Count = 3"); write (`COUNTER2, 'h03); #800 $display("Writing Counter #2 -- Count = 2"); write (`COUNTER2, 'h02); GATE1 = 1; #2000 GATE0 = 0; GATE1 = 0; GATE2 = 0; $display("Writing Mode #0 -- LSB Load, Mode 1, Binary"); write (`MODE, 'b00010010); #800 $display("Writing Counter #0 -- Count = 3"); write (`COUNTER0, 'h03); #800 $display("Writing Mode #1 -- LSB Load, Mode 1, Binary"); write (`MODE, 'b01010010); #800 $display("Writing Counter #1 -- Count = 3"); write (`COUNTER1, 'h03); #800 $display("Writing Mode #2 -- LSB Load, Mode 1, Binary"); write (`MODE, 'b10010010); #800 $display("Writing Counter #2 -- Count = 2"); write (`COUNTER2, 'h02); #400 GATE0 = 1; #400 GATE0 = 1; GATE1 = 1; GATE2 = 1; #400 GATE1 = 0; GATE2 = 0; #400 $display("Writing Counter #2 -- Count = 4"); write (`COUNTER2, 'h04); #400 GATE1 = 1; #800 GATE2 = 1; #2000 GATE0 = 1; $display("Writing Mode #0 -- LSB Load, Mode 2, Binary"); write (`MODE, 'b00010100); #800 $display("Writing Counter #0 -- Count = 3"); write (`COUNTER0, 'h03); #800 $display("Writing Mode #1 -- LSB Load, Mode 2, Binary"); write (`MODE, 'b01010100); #800 $display("Writing Counter #1 -- Count = 3"); write (`COUNTER1, 'h03); #800 $display("Writing Mode #2 -- LSB Load, Mode 2, Binary"); write (`MODE, 'b10010100); #800 $display("Writing Counter #2 -- Count = 4"); write (`COUNTER2, 'h04); GATE1 = 0; #400 GATE1 = 1; #400 $display("Writing Counter #2 -- Count = 5"); write (`COUNTER2, 'h05); #1600 $display("Writing Mode #0 -- LSB Load, Mode 3, Binary"); write (`MODE, 'b00010110); #800 $display("Writing Mode #1 -- LSB Load, Mode 3, Binary"); write (`MODE, 'b01010110); #800 $display("Writing Mode #2 -- LSB Load, Mode 3, Binary"); write (`MODE, 'b10010110); #800 $display("Writing Counter #0 -- Count = 4"); write (`COUNTER0, 'h04); #800 $display("Writing Counter #1 -- Count = 5"); write (`COUNTER1, 'h05); #800 $display("Writing Counter #2 -- Count = 4"); write (`COUNTER2, 'h04); #1600 GATE2 = 0; #800 GATE2 = 1; #1600 GATE1 = 0; $display("Writing Mode #0 -- LSB Load, Mode 4, Binary"); write (`MODE, 'b00011000); #800 $display("Writing Mode #1 -- LSB Load, Mode 4, Binary"); write (`MODE, 'b01011000); #800 $display("Writing Mode #2 -- LSB Load, Mode 4, Binary"); write (`MODE, 'b10011000); #800 $display("Writing Counter #0 -- Count = 3"); write (`COUNTER0, 'h03); #800 $display("Writing Counter #1 -- Count = 3"); write (`COUNTER1, 'h03); #800 $display("Writing Counter #2 -- Count = 3"); write (`COUNTER2, 'h03); #1200 GATE1 = 1; #400 $display("Writing Counter #2 -- Count = 2"); write (`COUNTER2, 'h02); #2000 $display("Writing Mode #0 -- LSB Load, Mode 0, BCD"); write (`MODE, 'b00010001); #800 $display("Writing Mode #1 -- LSB Load, Mode 0, BCD"); write (`MODE, 'b01010001); #800 $display("Writing Mode #2 -- LSB Load, Mode 0, BCD"); write (`MODE, 'b10010001); #800 $display("Writing Counter #0 -- Count = 11"); write (`COUNTER0, 11); #800 $display("Writing Counter #1 -- Count = 3"); write (`COUNTER1, 3); #400 GATE1 = 0; #400 $display("Writing Counter #2 -- Count = 3"); write (`COUNTER2, 3); #800 $display("Writing Counter #2 -- Count = 2"); write (`COUNTER2, 2); GATE1 = 1; #10000 $display("Writing Mode #0 -- LSB/MSB Load, Mode 5, Binary"); write (`MODE, 'b00111010); #50 $display("Writing Counter #0 -- Count = 5"); write (`COUNTER0, 'h05); write (`COUNTER0, 'h00); #25 GATE0 = 0; #50 GATE0 = 1; #1025 GATE0 = 0; #50 GATE0 = 1; #1000 $finish; endendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -