📄 tb_else.v
字号:
module tb_else;
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'b1011_1011; //同时决定B口方式
nWR=0;
#5 nWR=1;
PDS=8'hzz;
#5 A=11;
PDS=8'b00001001;
nWR=0;
#5 nWR=1;
PDS=8'hzz; //置位/复位
PCS=8'hzz;
PCS[4]=1'b1;
#5 A=00;
PCS[4]=1'b0;
PAS=8'h55;
#5 PCS[4]=1'b1;
PAS=8'hzz;
#5 nRD=0;
#5 nRD=1; //A口方式1输入
PCS=8'hzz; //可以修改置位/复位位来开关中断,经测试都正确
//时序与P347很符合
#5 PCS[6]=1'b1;
PCS[7]=1'b1;
#5 A=2'b10;
nRD=1'b0;
#5 nRD=1'b1; //读取C口状态,以及最高两位数据位,正确;
PCS=8'hzz;
#5 PCS[2:0]=3'b111;
#5 A=2'b10;
nRD=1'b0;
#5 nRD=1'b1;
PCS=8'hzz; //读取C口状态,以及低三位数据位,正确;
/////////////////////////////////////////////////////
#5 A=11;
PDS=8'b00001101;
nWR=0;
#5 nWR=1;
PDS=8'hzz; //置位/复位
#5 A=11;
PCS=8'hzz;
PDS=8'b1010_0110;
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 PDS[5:4]=2'b11;
A=2'b10;
nRD=1'b0;
#5 nRD=1'b1; //读取C口状态,以及最高两位数据位,正确;
PCS=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 + -