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

📄 tb_a8255.v

📁 采用Verilog语言实现了8255A的功能
💻 V
字号:
/*
   //*************************************************************************
   // Project Name: 8255A的功能设计和分析
   // Module Name :	A8255
   // Author:		    张文涛
   // Created:		  2006-10-25
   // Modified:     2006-10-26
   // Revision:		  1.1
   //
   //*************************************************************************
   //需要改进的地方:
   //
   //需要注意的地方:
   //*************************************************************************
*/
module  tb_A8255;
  reg       clk;
  reg       rst; 
  reg       nCS;
  reg       nWR;
  reg       nRD;
  reg[1:0]  A;
  reg[7:0]  PAS;
  reg[7:0]  PBS;
  reg[7:0]  PCS;
  reg[7:0]  PDS;
  
  wire[7:0] PA;
  wire[7:0] PB;
  wire[7:0] PC;
  wire[7:0] PD;
  
  assign PA=PAS;
  assign PB=PBS;
  assign PC=PCS;
  assign PD=PDS;
  
  initial
    fork
    	clk=0;
    	rst=0;
    	nCS=0;
    	nWR=1;
    	nRD=1;
    	A=00;
    	PAS=8'hzz;
    	PBS=8'hzz;
    	PCS=8'hzz;
    	PDS=8'hzz;
    	#350 $stop;
    join
  
    initial
    begin
    	#1 rst=1;
    	#3 rst=0;
    	/////////////////////////////////////
    	
    	#5 A=11;
    	   PDS=8'b10011011;
    	   nWR=0;
    	#5 nWR=1;
    	   PDS=8'hzz;
    	#5
    	   PAS=8'h55;
    	   A=00;
    	   nRD=0;
    	   PDS=8'hzz;
    	#5 nRD=1; 
    	   PAS=8'hzz;                   //A口方式0输入
    	////////////////////////////////////
    	
    	#5 A=01;
    	   nRD=0; 
    	   PBS=8'h66;
    	#5 nRD=1;                       //B口方式0输入
    	   PBS=8'hzz;
    	////////////////////////////////////
   
         
      #5 A=10;
         PCS=8'hAA;
         nRD=0;
      #5 nRD=1;                       //C口作IO口,高低均输入(分别测试高低位,均正确)
         PCS=8'hzz;
      //////////////////////////////////// 
        	
    	#5 A=11;
    	   PDS=8'b1000_0000;
    	   nWR=0;
    	#5 nWR=1;
    	   PDS=8'hzz;
    	#5 PDS=8'hAA;
    	   A=00;
    	   nWR=0;
    	#5 nWR=1;                        //A口方式0输出
    	   PDS=8'hzz;
    	   PAS=8'hzz;
    	/////////////////////////////////////
    	#5 PDS=8'hBB;
    	   A=01;
    	   nWR=0;
    	   PBS=8'hzz;
    	#5 nWR=1;                        //B口方式0输出
    	   PDS=8'hzz;
    	////////////////////////////////////
    	
    	#5 A=10;
    	   PDS=8'hCC;
    	   nWR=0;
    	   PCS=8'hzz;
    	#5 nWR=1;                        //C口作IO口,高低均输出(分别测试高低位,均正确)
    	   PDS=8'hzz;
    	   
    	//////////////////////////////////////////////
    	//////////方式0全部正确,以下是方式1//////////
    	/////////////////////////////////////////////
    	
    	#5 A=11;
    	   PDS=8'b00001001;
    	   nWR=0;
    	#5 nWR=1;  
    	   PDS=8'hzz;                    //置位/复位
    	    
    	#5 A=11;
    	   PDS=8'b1011_0110;             //同时决定B口方式
    	   nWR=0;
    	#5 nWR=1;
    	   PDS=8'hzz;
    	   PCS=8'hzz;
    	   PCS[4]=1'b1;
    	#5 A=00;
    	   PCS[4]=1'b0;
    	   PAS=8'hff;
    	#5 PCS[4]=1'b1;
    	   PAS=8'hzz;
    	#5 nRD=0;
    	#5 nRD=1;                       //A口方式1输入
    	                                //可以修改置位/复位位来开关中断,经测试都正确
    	                                //时序与P347很符合)
    	                                
    //////////////////////////////////////////////
      #5 A=11;
    	   PDS=8'b0000101;
    	   nWR=0;
    	#5 nWR=1;  
    	   PDS=8'hzz;                    //置位/复位
    	   
    	   PCS[2]=1'b1;
    	#5 A=01;
    	   PCS[2]=1'b0;
    	   PBS=8'hBB;
    	#5 PCS[2]=1'b1;
    	   PBS=8'hzz;
    	#5 nRD=0;
    	#5 nRD=1;                       //B口方式1输入
    	                                //可以修改置位/复位位来开关中断,经测试都正确
    	                                //时序与P347很符合)    
      #5 A=02;
         PCS=8'hzz;
         nRD=0;
      #5 nRD=1'b1;
    
    /////////////////////////////////////////////////////
    
      #5 A=11;
    	   PDS=8'b00001101;
    	   nWR=0;
    	#5 nWR=1;  
    	   PDS=8'hzz;                    //置位/复位
    	    
    	#5 A=11;
    	   PCS=8'hzz;
    	   PDS=8'b1010_0110;             //同时决定B口方式
    	   nWR=0;
    	#5 nWR=1;
    	   PDS=8'hzz;
    	   PCS[6]=1'b1;
    	   
    	#5 A=00;
    	   nWR=0;
    	   PDS=8'h99;
    	#5 nWR=1;
    	   PDS=8'hzz;
    	#5 PCS[6]=1'b0;
    	#5 PCS[6]=1'b1;                  //A口方式1输出
    	                                 //可以修改置位/复位位来开关中断,经测试都正确
    	                                 //时序与P348很符合)
    	   
    /////////////////////////////////////////
        
      #5 A=11;
    	   PDS=8'b00000101;
    	   nWR=0;
    	#5 nWR=1;  
    	   PDS=8'hzz;                    //置位/复位    
    	#5 A=11;
    	   PCS=8'hzz;
    	   PDS=8'b1010_0100;             //同时决定B口方式
    	   nWR=0;
    	#5 nWR=1;
    	   PDS=8'hzz;
    	   PCS[2]=1'b1;
    	   
    	#5 A=01;
    	   nWR=0;
    	   PDS=8'h88;
    	#5 nWR=1;
    	   PDS=8'hzz;
    	#5 PCS[2]=1'b0;
    	#5 PCS[2]=1'b1;                  //B口方式1输出
    	                                 //可以修改置位/复位位来开关中断,经测试都正确
    	                                 //时序与P348很符合)
    	                                                             
   //////////////////////////////////////////////////////////////
   //////////////方式2///////////////////////////////////////////
   //////////////////////////////////////////////////////////////
      #5 A=11;
    	   PDS=8'b0000_1101;
    	   nWR=0;
    	#5 nWR=1;  
    	   PDS=8'hzz;                    //置位/复位   
    
      #5 A=11;
    	   PDS=8'b0000_1001;
    	   nWR=0;
    	#5 nWR=1;  
    	   PDS=8'hzz;                    //置位/复位
    	       	    
    	#5 A=11;
    	   PCS=8'hzz;
    	   PDS=8'b1101_0100;            
     	   nWR=0;
    	#5 nWR=1;
    	   PDS=8'hzz;
    	   PCS[4]=1'b1;
    	   PCS[6]=1'b1;
    	   
    	#5 A=00;
    	   nWR=0;
    	#5 nWR=1;
    	#5 PCS[4]=1'b0;
    	   PAS=8'h22;
    	#5 PCS[4]=1'b1;
    	   PAS=8'hzz;
    	#5 PCS[6]=1'b0;
    	   PDS=8'hEE;
    	#5 PCS[6]=1'b1;
    	   PDS=8'hzz;             
    	#5 nRD=1'b0;
    	#5 nRD=1'b1;
    	     //A口方式2输出
    	                                 //可以修改置位/复位位来开关中断,经测试都正确
    	                                 //时序与P348很符合)

     
      #5 A=10;
    	   PCS=8'hzz;            
     	   nRD=0;
    	#5 nRD=1;
    	   PDS=8'hzz;

end
    
  A8255 AA   (
             .rst(rst),
             .nCS(nCS),
             .nWR(nWR),
             .nRD(nRD),
             .A(A),
             .PA(PA),
             .PB(PB),
             .PC(PC),
             .PD(PD)
             );
endmodule

⌨️ 快捷键说明

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