功能仿真
进行功能仿真首先要检查设计的语法是否正确;其次检查代码是否达到设计的功能要求。下文主要介绍仿真步骤和测试激励的加载。
仿真步骤
1 建立工程
图2 建立工程
包括工程名、存放位置、默认库路径、modelsim配置文件目录、拷贝或关联库,如图2所示。当选择了库名称,测试文件和源文件编译后会出现在word库中。选择拷贝库的话,就会将相关的库文件全部拷贝到当前工程目录。可以独立的对某一个.V文件编写testbench,用以验证某个文件某个模块的某个功能(例如一个project中主要考虑pin的数量和电压、电平,功能单一,但是重复度高,如只需要测试自动关断功能,这个方法适用高效);当然也可以对整个工程进行验证测试。
2 编写/添加源文件和测试文件
如图3所示,添加或者新增源文件和测试文件。
3 仿真库的编译和映射
图4 编译源文件
这里主要的工作是编译源文件,生成相关仿真库文件。
4 启动仿真器并加载设计项层
图5 加载设计
图6 指定仿真顶层文件
5 打开观测窗口,添加信号
图7 添加观测信号
图8 观察结果
6 测试激励的加载
激励的加载有四种方法:
(1)命令行方式
(2)宏文件法
(3)测试文件法
(4)textio 法
时序仿真
时序仿真是FPGA 设计的重要步骤之一,它通常是在做完布局布线后进行,仿真中包含布局布线产生的延时信息。时序仿真的方法和步骤和功能仿真基本相同,但有两点需要注意:一是一般布局布线后生成的网表并不包含timing 数据,会用一个SDF(Standard Delay Format)文件来存储timing数据,它通常是由布局布线工具产生,在做时序仿真时要用到。上面启动仿真器加载时不仅要加载布局布线后生成的源文件,还要加载SDF 文件。二是在用ModelSim SE 版本时,由于不包含特定厂商的库文件,而在做时序仿真时恰恰与特定的器件相关,要用到这些库,为了提高仿真速度,通常需要提前编译这些库,而且不同厂商编译库的方法不尽相同,本文以编译Lattice 公司的库为例,介绍编译库的方法。
时序仿真可以建立在功能的基础上,即添加lattice器件族的仿真库库和SDF标准时延文件。
仿真步骤
1 添加Lattice库文件
编译库文件(D:\ispTOOL8_0\cae_library\simulation\verilog)
图9 库文件选择
选择所需要的库文件目录,CTRL+A选择所有或者选择需要的库文件(.v),点击“Compile”编译,编译结果会存放在工程目录work下面。选择Done结束库编译操作。2 编译生成SDF文件
图10 生成SDF文件
选择“Generate Timing Simulation Files”生成SDF时延文件。
3 添加库文件和SDF文件
图11 添加SDF文件
这里着重强调一点:如图11蓝框里面,一般勾选“Disable SDF warnings”和“Reduce SDF
errors to warnings”。因为之前功能仿真未出错(功能仿真没有必要),这里会报例如不完整等错误,可以忽略不计。
注意事项
1、如何导入外部库(如Altera、Lattice分别对应的Quartus、ispLEVER),上一篇博文做了逐步阐述。注意一点,就是顶层新建库后,simulate选择所有需要的库.v文件编译,最后done就OK了。必须将ini文件只读去掉。
2、 不用的管脚拉成3态;
3、 时序仿真时,sdo容易报错,一般可以在SDF选项时“Disable SDF warning”和“Reduce SDF error to warnings”;
4、 DO文件:Modelsim里面路径都是反斜杠;
5、 # ** Error: (vish-4014) No objects found matching '/data'.解决办法:改modelsim.ini文件中的一个参数:VoptFlow = 0;
6、 WLF文件(wave log format)波形日志格式文件,可以记录,并且可以比较,设置比较公差。
文章评论(0条评论)
登录后参与讨论