仿真是我們在驗證邏輯功能的常用手段。通過仿真,我們可以提早發(fā)現(xiàn)一些隱含的邏輯Bug。仿真一般分為功能仿真和時序仿真,有的時候也稱作前仿真和后仿真。這兩者的主要區(qū)別是在功能仿真里暫時忽略了邏輯延時和布局布線延時,仿真的模型相對簡單,仿真的運行速度更快??梢杂脕眚炞C功能的正確性。時序仿真通過反標(biāo)的方式將加入延時信息,這樣仿真的結(jié)果更接近實際芯片的工作情況。但正因為如此,時序仿真的模型更為復(fù)雜,需要計算的信息更多,運行的時間更長。一般情況下,我們首先通過邏輯仿真驗證功能,然后再運行時序仿真驗證時序的正確性。當(dāng)然現(xiàn)在也有一些做法是在做功能仿真的時候,人為的設(shè)定一些延時,雖然不能百分之百的擬合實際的芯片運行情況,但可以覆蓋大多數(shù)的應(yīng)用場景。帶來的好處是仿真的運行比時序仿真要快很多。
各個EDA公司都有自己的仿真工具,針對FPGA/CPLD來說,用的比較多的是Modelsim和Aldec。無論用哪個仿真工具,有一個細節(jié)經(jīng)常會被初學(xué)者會忽略。在設(shè)計好testbench后,編譯都沒有問題,但在開始仿真的時候,軟件會報類似這樣的錯誤:
Fatal Error: ELAB2_0036 Unresolved hierarchical reference to"PUR_INST.PURNET" from module"tb_cdr_tb.UUT.top_cdr_u.receive_top_u.serial_data_in.FF_3" (modulenot found).
Fatal Error: ELAB2_0036 Unresolved hierarchical reference to"GSR_INST.GSRNET" from module "tb_cdr_tb.UUT.top_cdr_u.receive_top_u.serial_data_in.FF_3"(module not found).
這是因為在芯片工作的時候,內(nèi)部有PUR(Power Up Reset)和GSR(Global Set/Reset)模塊產(chǎn)生上電復(fù)位信號和接入全局復(fù)位/置位信號。這個信號在做綜合的時候是自動生成并加入的設(shè)計中的,但在仿真的時候編譯并不會加入這兩個模塊。所以如果要做仿真,一定要在你的testbench中加入這樣一段描述:
PUR PUR_INST(.PUR(1'b1));
GSRGSR_INST(.GSR(1'b1));
這樣就可以繼續(xù)你的仿真工作了。
文章出處:【微信公眾號:FPGA之家】
責(zé)任編輯:gt
-
芯片
+關(guān)注
關(guān)注
455文章
50851瀏覽量
423977 -
仿真
+關(guān)注
關(guān)注
50文章
4087瀏覽量
133649
原文標(biāo)題:仿真的時候不要忘了PUR和GSR
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論