原创 仿真时注意timescale

2011-4-9 14:49 4289 6 6 分类: 工程师职场

今天在FPGA中加入模块dcm,用Xilinx的CORE Generator产生模块dcm_loc,然后把相应的vhd文件加入工程中,打算用modelsim仿真一下。没想到在run时竟然会出现错误:

仿真时注意timescale - 初心 - 我的学习日志

 

# ** Fatal: (SIGFPE) Floating point exception.

#    Time: 0 ns  Iteration: 0  Process: /tb_crk_oi2_1v/cr_oi2_knx1v_top_inst/dcm_loc_inst0/dcm_sp_inst/determine_phase_shift File: E:/Xilinx/12.3/ISE_DS/ISE/vhdl/src/unisims/primitive/DCM_SP.vhd

# Fatal error in Process determine_phase_shift at E:/Xilinx/12.3/ISE_DS/ISE/vhdl/src/unisims/primitive/DCM_SP.vhd line 1302

#

# HDL call sequence:

# Stopped at E:/Xilinx/12.3/ISE_DS/ISE/vhdl/src/unisims/primitive/DCM_SP.vhd 1302 Process determine_phase_shift

#

 

一时不知道怎么回事。请教公司的高手过来解决,结果他看了半天也不知道怎么回事。然后就把他自己电脑用modelsim6.2i仿真成功的一个模块发给我,但是到我自己的电脑上,modelsim6.5仍然报这个错误。以为是库的原因,把他的库拿过来仿了半天仍然错。。。

 

仔细检查modelsim给的提示,发现前面有个warning 

仿真时注意timescale - 初心 - 我的学习日志

** Warning: (vsim-3479) Time unit 'ps' is less than the simulator resolution (1ns).

意思就是模块的时间精度为ps,而仿真器设置的1ns,有可能会有错误。

verilog中时间精度比较好设置,在文件开头使用

`timescale time_unit / time_precision

就可以实现了。

比如

`timescale 1ns/100ps

意思就是时间延迟单位是1ns,时间精度为100ps

而在vhdl中就没有相应的设置了。请教了下同事,告知可以在仿真器中设置相应的时间单位。vsim命令下:

仿真时注意timescale - 初心 - 我的学习日志 

将图上相应位置改为ps,则time_unit就被设置为ps6.5中默认的单位应该是ns6.2中默认可能是ps,所以在同事的机器上就会不出错,在我这里就会出错了。

命令行下加入-t ps,如:

vsim -t ps work.tb_crk_oi2_1v

总结:

modelsim仿真时,时间单位和时间精度还是需要注意的,很多错误可能由于时间单位设置不同而没有仿真到,更有可能仿真出来的结果是错误的,更极端的就像我今天的情况连仿真都无法继续进行。尤其是在verilog语言中,2module可能是不同的人编写,他们设置的timescale就有可能不同,这种情况下很容易发生错误,而导致不必要的时间浪费,效率降低。而在vhdl中无法设置timescale,这就需要在仿真时写do文件或tcl文件时注意time_unit,为保证正确尽量将时间单位都进行设置。

另外,modelsim中给出的warning也是很重要的,也许你的错误就出现在这里。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条