📄 tb_a8255.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 + -