最近学习了特权同学的《深入浅出玩转fpga》书中的testbench写法,下面梳理和总结一下:
笔记10
1、首先是testbench的整体的概念,理解为与设计v文件的输入输出形成一个环路。
2、搭建简单的testbench:可分为3个步骤;关于input要改为reg,output变为wire。理解为驱动下一级由一个d触发器打一拍增加扇出能力。接受到的信号进来后变成wire型。initial和always同时执行,但initial只执行一次。关于始终产生有多种写法。
当然,上面讲的testbench中的很多语法都是不可综合的!
笔记11
1、使用task进行封装,比如显示用的多种task,里面还有verilog语言中的系统任务$display等,可以参照夏宇闻的书去查怎么用
2、关于变量的定义,有个小地方需要注意,在2个always块中都有相同变量的时候,需要通过注明块名来消除影响。比如for语句中的i
3、结构化testbench,作者给了个例子,多个module封装,有了函数的概念,顶层直接例化即可
4、读写紊乱状态:testbench2个always块中既读又写,这样就会有问题,可以非阻塞赋值。或者延时?
5、防止同时调用task:pc是顺序式的,testbench的verilog语法却是基于并行的。要注意,不要用c语言的思维去写testbench,虽然最后可能在pc上就是按代码的流程在仿真
笔记12
1、作者写了关于串口的一个仿真的例子,网页上也有。也比较好懂。
2、关于乘法器全覆盖,里面有关于文件的操作,后面准备自己时间一下这个例子。(int常用在testbench中定义for中的i)
3、可重用mcu设计,还没有认真看,明天会去实践这几个。
感受:
1、看只是看,具体还得通过例子自己去跑modelsim分析每条线是否这样变
2、自己接触过很牛逼完整成熟的c代码,但是对于verilog代码和testbench是否可以做到这样呢?没人带,自己还没有见识到那一层
3、对modelsim这个工具的使用很受限,明天得好好研究下这个软件。光是软件学习就很费工夫!!!
4、特权给的串口的例子还是很简单,自己仿真出了些问题,并且有些细节没有想清楚,需通过仿真来深挖。等各个常见的部件学完了准备看下开源的or1200,看这些个部件是怎么集成在总线上的。
5、道法术,自己还在术的层面上爬行,需要时间投入才能从质变到量变
后面会写一篇关于testbench及modelsim的文章。然后是串口分析(是各种功能完整的串口而不是特权简单的即收即发的串口)的文章。