仿真都不会,玩什么FPGA?
仿真警告,本文只针对于在校学生即初学者,实际工程项目复杂,本文涉及个别方法可能无效。
初学者觉得麻烦不喜欢仿真,没经过充分的仿真,就直接下板子,找不到问题然后靠猜!实际上耗费更多的时间,一些细小的问题,眼睛盯着代码是不容易查出来的。
工具
ISE Isim、Vivado Xsim、Modelsim/Questasim等
Modelsim/Questasim Windows平台下最好用的仿真软件,没有之一。级联起来更方便,Xilinx和Altera的工具里也会直接生成自动化仿真的do文件,用户可以进行修改直接使用即可。
Vivado&ISE&Quartus II调用Modelsim级联仿真
工具的玄学问题
遇到代码完全没有错误,但就是跑不出来波形。这个时候一定要记住,一定是自己操作不当,仿真环境没有配好,或者库文件未添加等问题,不要怪到工具头上。
注意看Consol和Transcript窗口打印的信息,查看error和warning,查找原因。
直接法
直接在TestBench里写激励,Input输入数据,看Output的波形输出。结果错误查看产生结果的条件是否正确,逐级向上排查。边看波形边修改。单个模块个个排除,再复杂的系统也是这样找错误,熟练掌握了发现还挺好玩的。
简化法
仿真流水灯将计数器限制常数设置为数百ns。
仿真Uart,将的发送波特率设置为50Mhz / 16或更高 / 16,接收是发送的16倍采样,就是50Mhz或更高。
仿真视频图像采集系统,拿一帧是640x480的像素举例,在代码中可以将分辨率设置成16x4,模拟摄像头时序输出行场信号和像素数据,输入给系统,主要观察整个系统视频流的流动过程是否有数据丢失,和信号的同步问题。
将系统中的时间参数改小,提高仿真效率。
函数任务法
利用Verilog本身支持的系统函数,$time、$fopen、$fclose、$display()、$fscanf、$random等等。
在Consol或Transcript窗口打印的信息,再次提高仿真效率。
还可自己对应不同的仿真情况,自己编写任务和函数。
仿真模型法
利用仿真模型提高仿真的能效,笔者用过的仿真模型有EEPROM、SDRAM、AD、DA等模块。
还可自己编写仿真模型,根据芯片器件手册模拟芯片时序,一般经典芯片都可以在网上搜索到仿真模型。
技巧:凑、猜、蒙
根据标准协议的时序,凑
查不出来问题,猜
修改了很多次都得不到正确结果,多加一个计数器,或多缓存一个周期输出等
TCL脚本+do文件
用TCL语言编写do文件,一劳永逸全自动化仿真,告别鼠标点点点。
记一些常用的命令,在Consol和Transcript窗口直接输入。如restart、run xxns/us/ms/s、do sim.do等等。sim.do文件为TCL语言编写的do文件。
Xilinx和Altera的工具里也会直接生成仿真的do文件,用户可以进行修改直接使用即可。
SV验证UVM验证方法学
听说目前有验证FPGA的系统用SV+UVM方法学验证,这是现在主流的IC验证方法,是一个专门的知识体系了,我们菜鸟们都当了解一下了。
找个台阶下
本文涉及的三脚猫功夫,实际工程项目可以学到更多技巧,工程师大哥们可以忽略,有啥技巧欢迎留言指导。