📄 tb_top_8255.v
字号:
////////////////////////////////////////////////////////
// 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 + -