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

📄 tb_top_8255.v

📁 用Verilog实现8255芯片功能
💻 V
📖 第 1 页 / 共 3 页
字号:
////////////////////////////////////////////////////////
//         8255A的顶层模块的测试文件tb_top_8255.v     //
//                      2006.11. 6                    //
//                    cheng fangmin                   //
//function:          测试文件                         //
////////////////////////////////////////////////////////
`timescale 1ns/1ns
module tb_top_8255();
   //  control signal
   reg rst_n,cs_n,a1,a0,wr_n,rd_n;
   
   // 与总线配合的寄存器。
     // CPU总线的
     wire[7:0] data_bus;
     reg[7:0] cpu_data;
     reg link_bus_cpu;
     //A口总线
     wire[7:0] a_bus;
     reg[7:0] a_per_data;
     reg link_bus_a;
     //B口总线
     wire[7:0] b_bus;
     reg[7:0] b_per_data;
     reg link_bus_b;
     //B口总线
     wire[7:0] c_bus;
     reg[7:0] c_per_data;
     reg lk_bus_c_upper,lk_bus_c_lower;
     
  initial 
     begin
        rst_n=1;
        cs_n=1;
        a1=0;
        a0=0;
        wr_n=1;
        rd_n=1;
       //
       cpu_data=8'h00;
       link_bus_cpu=0;
       //
       a_per_data=8'h00;
       link_bus_a=0;
       //
       b_per_data=8'h00;
       link_bus_b=0;
       //
       c_per_data=8'h00;
       lk_bus_c_upper=0;
       lk_bus_c_lower=0;
      #10 rst_n=0;
//------------------复位后查看8255的状态(A、B、C口是否为输入)------------
      #10 rst_n=1;
             link_bus_a=1;//外设有数据输入
             link_bus_b=1;
             lk_bus_c_upper=1;
             lk_bus_c_lower=1;
      //从A口读数据。
      #10 cs_n=0;
             a1=0;
             a0=0;
             wr_n=1;
             rd_n=0;
      #20    cs_n=1;
             link_bus_a=0;
      //从B口读数据
      #20    cs_n=0;
             a0=1;
      #20    cs_n=1;
             link_bus_b=0;
      //从C口读数据
      #20    cs_n=0;
             a1=1;
             a0=0;
      #20    cs_n=1;
             lk_bus_c_upper=0;
             lk_bus_c_lower=0;
//------1----A口输入,B口输出,C口输出--------------------------
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10010000;
      #10    cs_n=1;
             link_bus_cpu=0;
      //----------读A口--------------
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=1;
             rd_n=0;
             link_bus_a=1;
      #40    cs_n=1;
      #10    cs_n=0;
             link_bus_a=0;
      //---------写B口---------------
      #10    cs_n=0;
             a1=0;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hff;
      #10    cpu_data=8'h10;
      #10    cpu_data=8'h01;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0;
      //--------写C口-------------------
      #10    cs_n=0;
             a1=1;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hff;
      #10    cpu_data=8'h10;
      #10    cpu_data=8'h01;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0;
      //--------对C口进行置位复位---------
      #10    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b00001110;
     #10     cs_n=1;
     #10     cs_n=0;
             cpu_data=8'h01;
     #10     cpu_data=8'b00001101;
     #10     cs_n=1;
             link_bus_cpu=0;
     //--------再写C口-------------------
     #10     cs_n=0;
             a1=1;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hff;
      #10    cpu_data=8'h10;
      #10    cpu_data=8'h01;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0;        
//------2----A口输入,B口输出,C口输入--------------------------                                                         
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10011001;
      #10    cs_n=1;
             link_bus_cpu=0;              
      //----------读A口--------------
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=1;
             rd_n=0;
             link_bus_a=1;
      #40    cs_n=1;
      #10    cs_n=0;
             link_bus_a=0;
      //---------写B口---------------
      #10    cs_n=0;
             a1=0;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hff;
      #10    cpu_data=8'h10;
      #10    cpu_data=8'h01;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0;
      //----------读C口--------------
      #10    cs_n=0;
             a1=1;
             a0=0;
             wr_n=1;
             rd_n=0;
             lk_bus_c_lower=1;
             lk_bus_c_upper=1;
      #40    cs_n=1;
      #10    cs_n=0;
             lk_bus_c_lower=0;
             lk_bus_c_upper=0;
//------3----A口输入,B口输入,C口输入--------------------------
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10011011;
      #10    cs_n=1;
             link_bus_cpu=0;
             //外设有数据输入 
             link_bus_a=1;
             link_bus_b=1;
             lk_bus_c_upper=1;
             lk_bus_c_lower=1;
      //从A口读数据。
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=1;
             rd_n=0;
      #20    cs_n=1;
             link_bus_a=0;
      //从B口读数据
      #20    cs_n=0;
             a0=1;
      #20    cs_n=1;
             link_bus_b=0;
      //从C口读数据
      #20    cs_n=0;
             a1=1;
             a0=0;
      #20    cs_n=1;
             lk_bus_c_upper=0;
             lk_bus_c_lower=0;
//------4----A口输入,B口输入,C口输出--------------------------            
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10010010;
      #10    cs_n=1;
      //从A口读数据。       
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=1;
             rd_n=0;
             link_bus_a=1;
      #40    cs_n=1;
             link_bus_a=0;
      //从B口读数据
      #10    cs_n=0;
             a0=1;
             link_bus_b=1;
      #40    cs_n=1;
             link_bus_b=0;
      //--------写C口-------------------
      #10    cs_n=0;
             a1=1;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hff;
      #10    cpu_data=8'h10;
      #10    cpu_data=8'h01;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0;
      //--------对C口进行置位复位---------
      #10    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b00001110;
     #10     cs_n=1;
     #10     cs_n=0;
             cpu_data=8'h01;
     #10     cpu_data=8'b00001101;
     #10     cs_n=1;
             link_bus_cpu=0;
     //--------再写C口-------------------
     #10     cs_n=0;
             a1=1;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hff;
      #10    cpu_data=8'h10;
      #10    cpu_data=8'h01;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0;
//------5----A口输入,B口输入,C口上半部输出,下半部输入--------------------------
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10010011;
      #10    cs_n=1;
      //从A口读数据。       
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=1;
             rd_n=0;
             link_bus_a=1;
      #40    cs_n=1;
             link_bus_a=0;
      //从B口读数据
      #10    cs_n=0;
             a0=1;
             link_bus_b=1;
      #40    cs_n=1;
             link_bus_b=0;
     //-----C口上半部输出------
      #10    cs_n=0;
             a1=1;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hf0;
      #10    cpu_data=8'h10;
      #10    cpu_data=8'h01;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0;
      //----C口下半部输入------
      #10    cs_n=0;
             a0=0;
             a1=1;
             rd_n=0;
             wr_n=1;
             lk_bus_c_lower=1;
     #40     cs_n=1;
             lk_bus_c_lower=0;
     //--------对C口进行置位复位---------
      #10    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b00001111;
     #10     cs_n=1;
     #10     cs_n=0;
             cpu_data=8'b00001110;
     #10     cpu_data=8'b00001101;
     #10     cs_n=1;
             link_bus_cpu=0;
     //-----再C口上半部输出------
      #10    cs_n=0;
             a1=1;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hf0;
      #10    cpu_data=8'h10;
      #10    cpu_data=8'h01;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0; 
//------6----A口输入,B口输入,C口上半部输入,下半部输出--------------------------                            
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10011010;
      #10    cs_n=1;
      //从A口读数据。       
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=1;
             rd_n=0;
             link_bus_a=1;
      #40    cs_n=1;
             link_bus_a=0;
      //从B口读数据
      #10    cs_n=0;
             a0=1;
             link_bus_b=1;
      #40    cs_n=1;
             link_bus_b=0;
     //-----C口下半部输出------
      #10    cs_n=0;
             a1=1;

⌨️ 快捷键说明

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