该测试脚本要模拟MCU读/写外部扩展RAM的时序 。 它将作为一个单独的测试模块, 只要在测试主文件中例化好接口,就可以被调用。 常见MCU读/写外部扩展RAM的时序如图3. 6和图3. 7所示 。


该测试模块的脚本如下:
`timescale 1ns/1ps
module mcuram_rdwr(
mcu_ale,mcu_wr_n,mcu_rd_n,mcu_p1,mcu_p0
);
output reg mcu_ale; //MCU读写外部RAM片选信号,低电平有效
output reg mcu_wr_n; //MCU读写外部RAM写选通信号,低电平有效
output reg mcu_rd_n; //MCU读写外部RAM读选通信号,低电平有效
output reg [7:0] mcu_p1; //MCU的p1端口,高8位地址总线
inout [7:0] mcu_p0; //MCU的P0端口,低8位地址总线与8位数据总线复用
//----------------------------------------------------------------------------------------------------//
reg[7:0] mcu_p0_out; //MCU的p0端口数据总线输出寄存器
reg mcu_p0_link; /MCU的p0端口数据方向控制寄存器,1----output,0-------input
assign mcu_p0 = mcu_p0_link ? mcu_p0_out : 8'hzz;
//---------------------------------initial begin----------------------------------------------
//MCU各个信号复位
mcu_ale = 1;
mcu_wr_n = 1;
mcu_rd_n = 1;
mcu_p0_out = 8'hff;
mcu_p0_link =1;
mcu_p1 = 8'hff;
//------------------------------------------------------------------------------------------------
task mcu_wr_task; //模拟MCU写外部RAM时序
input[15:0] wraddr;
input[7:0] wrdata;
begin
#(127-43);
mcu_p0_link =1; //MCU的p0端口为输出
mcu_p0_out = wraddr[7:0]; //送低8位地址
mcu_p1= wraddr[15:8]; //送高8位地址
# 43
mcu_ale = 0; //片选信号
#48;
mcu_p0_out = wrdata; //送写入数据
#23;
mcu_wr_n =0; //MCU读选通
# 400;
mcu_wr_n = 1;
#33;
mcu_p0_out = { $random};
mcu_p1 = {$random};
#(100-33);
mcu_ale =1;
end
endtask
task mcu_rd_task; //模拟MCU读外部RAM时序
input[15:0] rdaddr;
output[7:0] rddata;
begin
#(127-43);
mcu_p0_link = 1; //MCU的P0端口为输出
mcu_p0_out = rdaddr[7:0]; //送低8位地址
mcu_p1 rdaddr[15:8]; //送高8位地址
#43;
mcu_ale = 0; //片选有效
#48;
mcu_p0_out {$random};
#(250-48);
mcu_rd_n = 0; //MCU写选通
#25;
mcu_p0_link = 0; //MCU的p0端口为输入
#(400-25-20);
rddata = mcu_p0; //读取数据
#20;
mcu_rd_n = 1;
mcu_p0_link = 1; //MCU的p0端口为输出
mcu_p0_out = {$random};
mcu_p1 = {$random};
#100;
mcu_ale = 1;
end
endtask
endmodule
根据测试脚本模拟出来的读/写时序波形分别如图3.8和3.9所示。

在这里插入图片描述](https://img-blog.csdnimg.cn/fe319f94b18b400ab2462a83ccb0c3c4.png)
对于这个设计,虽然它已经达到了可以复用的目的,但是在自动化判断方面做的还不够。比如,从图3.6中可以看到,MCU在读取外部存储器过程中,读选通信号RDn拉低后25ns内,P0数据总线上数据必须保持有效并稳定,该状态要一直保持到RDn拉高为止。