Verilog键盘扫描程序的testbench怎么写?

Verilog键盘扫描程序的testbench怎么写?,第1张

modulemul3_testbench//定义一个没有输入输出端口的测试平台rega2,a1,a0,b2,b1,b0//被测模块的input端口,改为对应的reg寄存器做输入信号wirep5,p4,p3,p2,p1,p0//被测模块的output端口,改为对应的wire型initialbegin//初始化所有输入信号的寄存器值a2=0a1=0a0=0b2=0b1=0b0=0#50//一般延迟较长时间后,应该使复位信号不复位系统正常工作,但你没有复位信号end//初始化模块结束后一般时序电路仿真是产生时钟信号,//这是纯组合逻辑没有时钟信号就省略了//然后就可以根据你所需要验证的功能在此位置编写initial块或always块给reg型//的输入信号赋值的相关逻辑,观察wire型输入信号的值//---------------------------调用被测对象,格式如一般元件调用-------------------mul3DUT(.a2(a2),.a1(a2),.a0(a0),.b2(b2),.b1(b2),.b0(b0),.p5(p5),.p4(p4),.p3(p3),.p2(p2),.p1(p1),.p0(p0))endmodule//最后的提示,你的程序里定义了整数型变量,其实是不好的用法,甚至不能被正确综合,//可以用等值的reg型变量来替代,即使你定义成整数型,实际上也是被综合成reg型的,//另外,一般可综合代码中最好不要用for语句,个人认为你的代码会完全功能不正常的

从程控放大电路的实际应用来讲,楼主所作的方案没有什么必要。当然,就题目来讲,一个经典的4*4矩阵键盘可以一键输入0~F的信息,还是很有价灶滚棚值的。原来也没有作过这方面的东西,尝试着在网络上找了别人的文档,感觉如下链接交待的最好,它不仅有4*4矩阵键盘外围电路的示意图,也有关于代码的流程图说明(当然对于verilog设计--即作为硬件来讲,把它表述成为状态图会更好),还有隐则对于所设计模块接口信号的简单说明。可以备桥一起学习一下。

我知道的已有3种:

1:设计一个20ms的循环定乱族时器,20ms扫描一次,key_reg[1:0]用于扫描纪录并用来判断下降沿。

2:参见特权同学的消抖方法。

3:自己刚学时写的:在系统时钟上升沿,用if语句对key低电平(有效电平)判断,低的话cnt +1,加到20ms的值时,就让20ms的值付给cnt,只要禅稿按键一直按着,cnt就是20ms的值,else if判断cnt是否等于20ms值,若果是,则设置key_flag位有效,else 语句key_flag无效。这样可保证一次按键哗袭弊只有一个系统时钟的有效信号。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12318307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存