不少時候,咱們拿到已有的東西理所固然的用了,其實,你真的對你所使用的東西瞭解嗎?編譯
再次犯下這樣的錯誤,是由於在把代碼從Altera 的CycloneV移植到Xilinx的Spartan6上,我遇到了很是奇怪的問題:test
在modelsim下,對Xilinx平臺下的代碼進行功能仿真,發現工程中Xilinx的IP核所有都有異常, 亂七八糟的錯。model
爲此,還向FAE求助?可是最終的問題是出如今timescale上,這裏,對timescale進行一次詳細的梳理,爲了不之後程序
還會出現相似的錯誤im
timescale是Verilog HDL 中的一種時間尺度預編譯指令,它用來定義模塊的仿真 時的時間單位和時間精度。格式以下:異常
`timescale 仿真時間單位/時間精度文件
注意:用於說明仿真時間單位和時間精度的 數字只能是一、十、100,不能爲其它的數字。並且,時間精度不能比時間單位還要大。最多兩則同樣大。好比:下面定義都是對的:時間
`timescale 1ns/1ps工作
`timescale 100ns/100nstime
下面的定義是錯的:
`timescale 1ps/1ns 仿真的單位時間是不能小於時間精度的!
時間精度就是模塊仿真時間和延時的精確程序,
回頭講講爲啥我仿真IP核會工做異常,由於個人testbench中,定義了兩個timescale,
timescale 1ps/1ps
timescale 1ns/1ps
源文件中的
timescale 1ns/1ps
最終的結果就致使modelsim 仿真Xilinx的IP功能時序混亂了!