仿真都不会,玩什么FPGA?

Posted by NingHeChuan on April 4, 2019

仿真都不会,玩什么FPGA?

仿真警告,本文只针对于在校学生即初学者,实际工程项目复杂,本文涉及个别方法可能无效。

初学者觉得麻烦不喜欢仿真,没经过充分的仿真,就直接下板子,找不到问题然后靠猜!实际上耗费更多的时间,一些细小的问题,眼睛盯着代码是不容易查出来的。

工具

ISE Isim、Vivado Xsim、Modelsim/Questasim等

Modelsim/Questasim Windows平台下最好用的仿真软件,没有之一。级联起来更方便,Xilinx和Altera的工具里也会直接生成自动化仿真的do文件,用户可以进行修改直接使用即可。

Vivado&ISE&Quartus II调用Modelsim级联仿真

Vivado级联Modelsim仿真Re-launch问题

工具的玄学问题

遇到代码完全没有错误,但就是跑不出来波形。这个时候一定要记住,一定是自己操作不当,仿真环境没有配好,或者库文件未添加等问题,不要怪到工具头上。

注意看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文件,用户可以进行修改直接使用即可。

Modelsim中使用TCL脚本编写do文件实现自动化仿真

SV验证UVM验证方法学

听说目前有验证FPGA的系统用SV+UVM方法学验证,这是现在主流的IC验证方法,是一个专门的知识体系了,我们菜鸟们都当了解一下了。

找个台阶下

本文涉及的三脚猫功夫,实际工程项目可以学到更多技巧,工程师大哥们可以忽略,有啥技巧欢迎留言指导。

image

image