关键词:
fpga , led
七、 测试平台设计
本实验主要对led的输出和输入与复位的关系进行测试仿真,通过仿真,即可验证设计的正确性和合理性。相关testbench的代码如下:
以下是代码片段:
`timescale 1ns/1ns
module led_driver_tb;
reg rst_n;
reg [3:0] sig;
wire [3:0] led;
led_driver
#( /*参数例化*/
.width (4)
)
led_driver_inst(/*端口例化*/
.rst_n(rst_n),
.sig(sig),/*off on on off*/
.led(led)
);
initial begin
rst_n = 0;
sig = 4'b1010;
#100;
rst_n = 1;
#40 sig = 4'b0001;
#40 sig = 4'b0010;
#40 sig = 4'b0011;
#40 sig = 4'b0100;
#40 sig = 4'b0101;
#40 sig = 4'b0110;
#40 sig = 4'b0111;
#40 sig = 4'b1000;
#40 sig = 4'b1001;
#40 sig = 4'b1010;
#40 sig = 4'b1011;
#40 sig = 4'b1100;
#40 sig = 4'b1101;
#40 sig = 4'b1110;
#40 sig = 4'b1111;
#40;
$stop;
end
endmodule
由testbench中可以看出,初始值给sig赋了一个初始值,系统处于复位状态,100ns后,复位过程结束,系统进入正常工作状态,sig信号每隔一定时间变化一次。因此,只需要观察led信号与sig信号的关系,即可验证设计的正确与否。
八、 仿真分析
由上图仿真结果可知,当复位信号为低电平时,led输出全部为1,则所有led熄灭,当复位信号为高电平时,则led输出与sig信号一致,证明设计正确无误。对于顶层模块,仿真没有什么太大的实际意义,因此不做仿真。
九、 下板验证
手头暂无开发板,板级验证略。
十、 总结
可能很多初学fpga,又看过其它一些资料的同学会对小梅哥的这种组织方式感觉不太习惯,认为本来一个代码模块就能搞定的事儿被我硬生生拆成了两个,增加了系统的复杂性。其实,我这里主要是强调了一种建模的思想,我们所做的模块一定要具有灵活性和通用性,当其它设计中需要用到该外设时,只需要关心其内部端口就行了,在顶层例化时只需要将对应信号接到该端口上就能实现功能了,不用再专门为了特定应用再写一次。目前系统简单,可能大家还看不出这种方式的优势,随着以后的设计越来越复杂,大家就能很明显的看到这种设计方式的优势所在了。
NetApp和Hammerspace最近开始谈论“无存储” 是个噱头吗
现代摩比斯发布最新虚拟空间触控技术
WebRTC和WebRTC安全漏洞和注意事项
OrCAD初学者想知道的42道问题汇总
苹果与安卓争夺安防算法store 成功的商城需具备四要素
小梅哥和你一起深入学习FPGA之点亮LED灯(下)
什么是工业物联网和工业互联网和互联网+时代?
“特斯拉”攻击——MCU抗干扰实验系列专题(10)
基于嵌入式实时操作系统μC/OS—II1的手持瓦斯检测仪的设计
SMT贴片加工厂对车间的环境要求有哪些
区块链技术或将迎来突破性进展
如何使热插拔与电子熔丝相结合
无线耳机是如何普及的
增量式编码器/绝对式编码器的原理及优缺点
小米立式风冷无线充30W明天到货 售价199元
GSMA eSIM如何提高物联网项目的灵活性和效率
Adreno GPU 矩阵乘法——第1讲:OpenCL优化
消费电子芯片与车规芯片两者有什么不同?
价格酣战将持续 中央空调未来或将成为决定空调品牌格局的胜负手
什么是Mutex互斥锁