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

📄 tb_8253.v

📁 设计一个可编程间隔定时器
💻 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 + -