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

📄 tb_top_8255.v

📁 用Verilog实现8255芯片功能
💻 V
📖 第 1 页 / 共 3 页
字号:
             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;
//------13----A口输出,B口输入,C口上半部输出,下半部输入--------------------------
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10000011;
      #10    cs_n=1;
             link_bus_cpu=0;              
      //----------写A口--------------
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hf0;
      #10    cpu_data=8'h0f;
      #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;                    
      //从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; 
//------14----A口输出,B口输入,C口上半部输入,下半部输出-------------------------- 
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10001010;
      #10    cs_n=1;
             link_bus_cpu=0;              
      //----------写A口--------------
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hf0;
      #10    cpu_data=8'h0f;
      #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; 
      //从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'h0f;
      #10    cpu_data=8'h11;
      #10    cpu_data=8'h03;
      #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_upper=1;
     #40     cs_n=1;
             lk_bus_c_upper=0;
     //--------对C口进行置位复位---------
      #10    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b00000000;
     #10     cs_n=1;
     #10     cs_n=0;
             cpu_data=8'b00000101;
     #10     cpu_data=8'b00000111;
     #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'h0f;
      #10    cpu_data=8'h13;
      #10    cpu_data=8'h07;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0;
//------15----A口输出,B口输出,C口上半部输入,下半部输出-------------------------- 
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10001000;
      #10    cs_n=1;
             link_bus_cpu=0;              
      //----------写A口--------------
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hf0;
      #10    cpu_data=8'h0f;
      #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; 
      //---------写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;
             a0=0;
             a1=1;
             rd_n=0;
             wr_n=1;
             lk_bus_c_upper=1;
     #40     cs_n=1;
             lk_bus_c_upper=0;
     //--------对C口进行置位复位---------
      #10    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b00000000;
     #10     cs_n=1;
     #10     cs_n=0;
             cpu_data=8'b00000101;
     #10     cpu_data=8'b00000111;
     #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'h0f;
      #10    cpu_data=8'h13;
      #10    cpu_data=8'h07;
      #10    cs_n=1;
             cpu_data=8'b10101010;
      #10    cs_n=0;
      #10    cs_n=1;
             link_bus_cpu=0;
//------15----A口输出,B口输出,C口上半部输出,下半部输入-------------------------- 
      //----------------写入控制字---
      #20    cs_n=0;
             a1=1;
             a0=1;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'b10000001;
      #10    cs_n=1;
             link_bus_cpu=0;              
      //----------写A口--------------
      #10    cs_n=0;
             a1=0;
             a0=0;
             wr_n=0;
             rd_n=1;
             link_bus_cpu=1;
             cpu_data=8'hf0;
      #10    cpu_data=8'h0f;
      #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;             
      //---------写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'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;
      
      #10    $stop;            
      end
//与8255的数据总线和A、B、C口总线的数据的产生     
 assign data_bus=(link_bus_cpu)?cpu_data:8'hzz;
 assign a_bus=(link_bus_a)?a_per_data:8'hzz;
 assign b_bus=(link_bus_b)?b_per_data:8'hzz;
 assign c_bus[3:0]=(lk_bus_c_lower)?c_per_data[3:0]:4'hz;
 assign c_bus[7:4]=(lk_bus_c_upper)?c_per_data[7:4]:4'hz;
 always #25  a_per_data=a_per_data+2;
 always #25  b_per_data=b_per_data+2;
 always #25  c_per_data=c_per_data+2;   
 
 top_8255  abcd(//input control signal
                .rst_n(rst_n),
                .cs_n(cs_n),
                .a1(a1),
                .a0(a0),
                .wr_n(wr_n),
                .rd_n(rd_n),
                //data bus
                .data_bus(data_bus),
                .a_bus(a_bus),
                .b_bus(b_bus),
                .c_bus(c_bus)
                );         
 endmodule
     

⌨️ 快捷键说明

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