当前位置:网站首页>【深入浅出玩转FPGA学习14----------测试用例设计2】
【深入浅出玩转FPGA学习14----------测试用例设计2】
2022-07-31 00:00:00 【周猿猿】
深入浅出玩转FPGA学习13----------测试用例设计2
可重用MCU读/写设计
该测试脚本要模拟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拉高为止。
边栏推荐
- Debezium error series 20: task failed to create new topic. Ensure that the task is authorized to create topics
- Steven Giesel 最近发布了一个由5部分内容组成的系列,记录了他首次使用 Uno Platform 构建应用程序的经验。
- Learn Scope from a Compilation Perspective!
- 软考总结
- Android security optimization - APP reinforcement
- 2D转换模块&&媒体查询
- Soft Exam Study Plan
- 【LeetCode】55. 跳跃游戏 - Go 语言题解
- mysql中关于存储过程无法实现迁移复制表中数据问题
- 【VisDrone数据集】YOLOV3训练VisDrone数据集步骤与结果
猜你喜欢

binglog日志追踪:数据备份并备份追踪

Apache Doris series: In-depth understanding of real-time analytical database Apache Doris

【LeetCode】64. 最小路径和 - Go 语言题解

web漏洞之需要准备的工作

从编译的角度来学作用域!

Chevrolet Trailblazer, the first choice for safety and warmth for your family travel

.NET Cross-Platform Application Development Hands-on Tutorial | Build a Kanban-style Todo App with Uno Platform

uniapp折叠框二级循环

Steven Giesel 最近发布了一个由5部分内容组成的系列,记录了他首次使用 Uno Platform 构建应用程序的经验。

joiplay模拟器报错如何解决
随机推荐
Android security optimization - APP reinforcement
正则表达式密码策略与正则回溯机制绕过
matplotlib图表多曲线多纵轴绘制工具方法
mysql中关于存储过程无法实现迁移复制表中数据问题
(WebFlux)001、如何自定义注解实现功能
binglog日志追踪:数据备份并备份追踪
How to adjust Chinese in joiplay simulator
In MySQL, the stored procedure cannot realize the problem of migrating and copying the data in the table
joiplay模拟器如何导入游戏存档
Mysql体系化之JOIN运算实例分析
【LeetCode】64. 最小路径和 - Go 语言题解
mysql 中手动设置事务提交
天空云变化案例
leetcode:127. Word Solitaire
The performance management method OKR is used by all companies
【LeetCode】42. 接雨水 - Go 语言题解
leetcode:127. 单词接龙
Game mall table establishment
会员生日提前了一天
Debezium error series 20: task failed to create new topic. Ensure that the task is authorized to create topics