Testbench,便是测验渠道的意思,详细概念就多不介绍了,信任略懂FPGA的人都知道,编写Testbench的首要意图是为了对运用硬件描绘言语(HDL)规划的电路进行仿真验证,测验规划电路的功用、部分功用是否与预期的方针相符。初学者往往把写RTL代码当成要点,不肯写Testbench,包括小朱同学也是,只是运用Quartus II自带的仿真发生几个鼓励,然后调查一下最终输出的波形就完事了,乃至某些时分直接忽视仿真,拿单片机在线调试那一套来抵挡FPGA,直接把代码下载到板子里看作用,若与预期不符,再修正代码,再次下载到板子,如此重复,直到某一天真实玩不下去了。
同志们,FPGA真不带这么玩的!赶忙制止自己运用Quartus II自带的仿真,甭画波形图了,你画成大师也没用(也成不了大师,Quartus II只能做极初级的仿真)!假如你立志从事FPGA职业,那么会写Testbench才你的敲门砖,并且别想着去公司写RTL代码了,向毛主席确保,公司一定是让你来写Testbench的。再赶忙把你的FPGA开发板有多远扔多远(别丢,仍是要用的),FPGA不是单片机,学习FPGA并不那么需求开发板。打个比如,学习FPGA是两万五千里长征,那么运用开发板连三千里都占不到,远远不到。关于FPGA,仿真验证才是中心,这么讲吧,验证占到整个规划作业的70%,前仿真、后仿真、功用仿真、时序仿真、行为级仿真、RTL级仿真、归纳后仿真、门级仿真、布局布线后仿真……好吧,别晕,本篇只讲Testbench,Modelsim仿真我们下篇再评论。
一个最根本的Testbench包括三个部分,信号界说、模块接口和功用代码。借用一下特权同学总结的编写Testbench的三个根本过程:
1、对被测验规划的顶层接口进行例化;
2、给被测验规划的输入接口增加鼓励;
3、判别被测验规划的输出相应是否满意规划要求。
逐渐处理编写Testbench的这三点:
首要“对被测验规划的顶层接口进行例化”,这一步相对比较简单,例化便是,但端口多时也够喝一壶的,并且要分wire、reg,有时会弄错,别难过,其实能够偷个懒,经过Quartus II主动生成一个Testbench的模板,挑选Processing -> Start -> Start Test Bench Template Writer,等候完成后翻开方才生成的Testbench,默许是保存在simulation\Modelsim文件夹下的.vt格式文件。这一步就不多讲了,偷闲就挺好。
其次“给被测验规划的输入接口增加鼓励”,一般时序规划必定涉及到最根本的两个信号——clk、rst_n(时钟、复位),必定有童鞋会讲能够没有rst_n,是能够没有,但何须呢,让代码更强健一点不很好嘛,别钻牛角尖。下面霸占clk、rst_n的写法:
首要先讲一下timescale,由于想要进行仿真首要要规则时刻单位,并且最好在Testbench里边一致规则时刻单位,而不要在工程代码里界说,由于不同的模块假如时刻单位不同或许会为仿真带来一些问题,而timescale自身对归纳也便是实践电路没有影响。 `timescale 1ns/ 1ps表明仿真的单位时刻为1ns,精度为1ps。
clk大体上有三种写法 :
上述三种代码的意图便是发生体系时钟,给clk一个初值后,不断重复履行:每10ns翻转一次clk,然后生成一个周期为20ns,频率50MHz的方波信号。榜首、二种根本相似,第三种比较简单,少了一个initial,放在了always里初始化。
三种办法都无一例外地给clk赋了初值,由于信号的缺省值为Z,假如不赋初值,则反相后仍是Z,时钟就一向处于高阻Z状况。小朱同学一般选中榜首种,看个人喜爱。
依据复位方法的不同,rst_n一般有两种写法: