本帖最后由 磕磕碰碰 于 2021-8-15 20:01 编辑
最近在使用芯路恒的AC6102开发板上进行AD9226、DDR2串口数据采集系统的调试中遇到了一个问题,在建立起仿真后,观察仿真的数据发现与DDR2相关的信号都没有相关的数据,时钟信号也没用建立起来,对各种信号分析后都没有发现问题所在。 在寻求技术帮助后发现,在仿真建立的过程中忽略了一个非常重要的细节,在设置`timescale的时间单位时超出了FPGA的适用范围 FPGA的最大频率一般只能达到几百MHz ,如果设置`timescale的时间单位为200ps,那么就翻转一次,意味着fpga要工作在5g的频率下,而我设置的时间单位为1ps,这显然是不符合设计要求的。对时间单位进行修改后,仿真可以正常运行 通过这次的调试,对`timescale对在仿真中的应用有了更深刻的认识。也总结timescale在仿真中的一些影响。 1、timescale 的用法 `timescale是Verilog中的预编译指令,指定位于它后边的module的时间单位和时间精度,直到遇到新的`timescale指令或者`resetall指令。但在一个module内部不可以编写`timescale命令! 2、timescale 的时间单位和时间精度 timescale包含时间单位和时间精度两部分。设定格式为`timescale timeunit / timeprecision,需要注意的是timeunit和timeprecision由值1、10、和100以及单位s、ms、us、ns、ps和fs组成。 如果设定`timescale 1ns/1ps,1ns就是时间单位,1ps就是时间精度,在仿真或者模块中的如#10是相对时间,等价于#10ns,当精度高于timescaled的时间精度,而被四舍五入,比如#10.4321会被认为是#10.432ns。 3. timescale时间精度对仿真时间的影响 `timescale的时间精度设置会影响仿真时间,如下面两种设置,后一种设置精度仿真时间会更长占用更多的内存,在满足设计需求的情况下应尽量将时间精度设置得更大一些。 `timescale 1ns / 1ns `timescale 1ns / 1ps 对于复杂的设计,为了加快仿真速度,可在不同模块设置中设置不同的timescale 单位和精度。例如时钟周期较大的模块的timescale可以设置的较大,加快该模块的仿真速度。
|