運用智能的調試和綜合技術(shù)隔離FPGA設計中的錯誤
“完整”的系列時(shí)鐘約束包括在所有正確位置定義時(shí)鐘并在生成的時(shí)鐘之間定義關(guān)系。有時(shí)候,時(shí)鐘會(huì )出于某種原因與真正的源斷開(kāi)關(guān)聯(lián),例如時(shí)鐘源和時(shí)鐘目標端間產(chǎn)生了黑盒,這樣會(huì )造成順序組件的時(shí)鐘缺失或時(shí)鐘約束放置錯誤,導致首次時(shí)鐘轉換因為缺少時(shí)鐘約束而失敗。在許多情況下,轉換失敗是由約束不完整造成的。舉例來(lái)說(shuō),門(mén)控邏輯中可能存在一個(gè)組合回路,應在時(shí)鐘轉換之前利用異常處理約束將其打破。綜合編譯階段之后會(huì )提供一個(gè)門(mén)控時(shí)鐘報告,告訴您有哪些門(mén)控和生成時(shí)鐘已被轉換以及被轉換時(shí)鐘的名稱(chēng)、類(lèi)型、分組和相關(guān)約束。另一個(gè)時(shí)鐘列表則顯示的是未轉換的時(shí)鐘,并包含故障信息,用于說(shuō)明原因。圖2 給出了報告實(shí)例。

舉例來(lái)說(shuō),如果設計中有黑盒子,您可以在RTL中指定具體的軟件命令,用于為自動(dòng)化門(mén)控時(shí)鐘轉換提供輔助。比方說(shuō),采用syn_gatedclk_clock_en 指令在黑盒子中指定啟用引腳的名稱(chēng),用syn_gatedclk_clock_en_polarity 指令指出黑盒子上時(shí)鐘使能端口的極性。每個(gè)轉換實(shí)例和驅動(dòng)實(shí)例的時(shí)鐘引腳都被賦予一個(gè)可搜索的屬性,從而能在設計數據庫中識別,并提取到定制TLC/Find 腳本生成報告中。
端口不匹配
設計包含公司內外部提供的文件。在設計中進(jìn)行IP 實(shí)例化或預驗證分級模塊時(shí),經(jīng)常會(huì )出現“端口不匹配”錯誤,而且難以檢測,特別是出現在混合語(yǔ)言設計中更是如此。舉例來(lái)說(shuō),如果頂層VHDL實(shí)體“Top”實(shí)例化Verilog 模塊“sub”,那么頂層VHDL聲明sub 有4 位端口,而實(shí)際Verilog 模塊只有3 位端口。就Synplify Premier 軟件而言,會(huì )立即將其標記為不匹配,并在單獨的日志報告中通過(guò)超級鏈接引用該錯誤。
視圖work.sub.syn_black_box 和視圖work.sub.verilog 之間的接口不匹配
細節:
========
源視圖work.sub.syn_black_box 中的以下位端口在目標視圖work.sub.verilog 中不存在。
=======================================
Bit Port in1[4]
Bit Port in2[4]
Bit Port dout[4]
多級層次中,如何將不匹配問(wèn)題追蹤到問(wèn)題模塊的RTL定義呢?工具應以某種方式給所有模塊實(shí)例打標簽,比方說(shuō)采用orig_inst_of 屬性。屬性的值包括模塊的原始RTL名稱(chēng),可方便地檢索至RTL。例如,假設sub_3s 導致端口不匹配錯誤,那么我們就能用以下TCL命令找回RTL模塊的原始名稱(chēng)“sub”:get_prop -prop orig_inst_of {v:sub_3s} 返回值為“sub”。
約束的清除
指定充足且正確的約束將影響到結果質(zhì)量和功能。約束聲明通常應包括三個(gè)元素:主時(shí)鐘和時(shí)鐘組定義、異步時(shí)鐘聲明、錯誤和多循環(huán)路徑聲明。
進(jìn)行綜合之前檢查約束是一個(gè)很好的方法。提供約束查看器的工具能發(fā)現語(yǔ)法錯誤并分析時(shí)序約束和實(shí)例名稱(chēng)是否適用,警示問(wèn)題所在。比方說(shuō),它會(huì )報告通配符擴展后約束如何應用以及在定義時(shí)鐘約束后產(chǎn)生的時(shí)鐘關(guān)系。它會(huì )標出那些由于參數或對象類(lèi)型無(wú)效或不存在而未被應用的時(shí)序約束。
進(jìn)行綜合之前,在Synplify Pro/Premier 軟件中生成名為projectName_cck.rpt 的約束檢查器報告:
Synplify Pro/Premier GUI: Run -> Constraint check
或采用TCL命令:project -run constraint_check
注意,要避免潛在的MetA不穩定性,應運行“異步時(shí)鐘報告”,提醒您注意那些在一個(gè)時(shí)鐘域啟動(dòng)而在另一個(gè)時(shí)鐘域中結束的路徑。
在Synplify Pro/Premier 軟件中生成時(shí)鐘同步報告projectName_async_clk.rpt.csv:
Synplify Pro/Premier GUI:Analysis->Timing Analyst并選擇Generate Asynchronous Clock Report 選項。
采用TCL命令: set_option -reporting_async_clock
正確的方法是確保您充分且全面地對設計進(jìn)行約束,而且不會(huì )過(guò)度約束(過(guò)度會(huì )導致運行時(shí)間延長(cháng),生成關(guān)鍵路徑錯誤報告)。確保您已完全指定多周期和錯誤路徑,并且已為得到的時(shí)鐘設置了約束(set_multicycle_path,set_false_path)。
縮短調試時(shí)間
實(shí)施潛在的RTL或約束故障解決方案可能需要好幾個(gè)小時(shí)才能看出結果。我們來(lái)看看如何利用分級“分治法”設計方法和“錯誤繼續”功能在單次綜合迭代中發(fā)現多個(gè)錯誤,從而減少迭代次數。
為縮短運行時(shí)間,模塊化流程必不可少。這種流程支持設計保存,能鎖定已經(jīng)證明有效的設計部分。支持模塊化流程的工具能幫助您在進(jìn)行綜合前創(chuàng )建RTL分區,也就是編譯點(diǎn)。一些軟件還能幫助設計人員將有故障的設計部分變成黑盒子,徹底將該部分導出并作為獨立的設計子項目進(jìn)行再加工。一旦解決問(wèn)題,子項目還能夠以網(wǎng)表形式通過(guò)自下而上的流程或用作為RTL通過(guò)自上而下的流程整合回原設計,甚至還能綜合利用自上而下和自下而上兩種流程。
要集成和調試大型設計,應盡早在設計進(jìn)程中發(fā)現錯誤的說(shuō)明。舉例來(lái)說(shuō),“錯誤繼續”功能可提供涉及每個(gè)綜合通過(guò)信息的組合錯誤報告。“錯誤繼續”能容許非致命的非語(yǔ)法HDL編譯問(wèn)題和某些映射錯誤,因此設計人員可在每次綜合迭代中分析并完成盡可能多的設計內容。為了在帶有SynplifyPro/Premier GUI 的Synplify Premier 軟件中調用“錯誤繼續”功能,應啟用項目視圖左側的Continue-on-Error 選項。
在TCL中:set_option –continue_on_error 1
用屬性is_error_blackbox=1 標記故障模塊和帶接口錯誤的實(shí)例父模塊,如圖3 所示。

用TCL找到所有“故障實(shí)例”:
c_list [find -hier -inst * -filter
@is_error_blackbox==1]
用TCL列出所有“故障模塊”:
get_prop -prop inst_of [find -hier -inst
* -filter @is_error_blackbox==1]
要查看將被關(guān)入黑盒子或導出的故障模塊,請查找HDLAnalyst RTL視圖中的紅色塊(圖3)。
評論