我的設(shè)計無法綜合
設(shè)計錯誤的出現(xiàn)可能導致無法實現(xiàn)有效綜合或布局布線。由于存在成千上萬的RTL和約束源文件,因此可能需要幾個星期才能完成首次綜合與布局布線。進行FPGA原型設(shè)計時,應(yīng)讓ASIC 設(shè)計源文件處于“FPGA就緒”狀態(tài)。舉例來說,就是要進行門時鐘轉(zhuǎn)換。
在 FPGA中原型設(shè)計的ASIC門控時鐘結(jié)構(gòu)并非FPGA實現(xiàn)中的必要環(huán)節(jié),這會導致FPGA資源使用效率低下。解決該問題的有效辦法就是用FPGA綜合軟件轉(zhuǎn)換時鐘。例如,門控或生成時鐘轉(zhuǎn)換功能可將生成時鐘和門控時鐘邏輯從順序組件的時鐘引腳轉(zhuǎn)移到使能引腳,這樣您就能將順序組件直接綁定到源時鐘,消除偏移問題,并減少設(shè)計中所需的時鐘源數(shù)量,進而節(jié)約資源。
在Synplify Premier 軟件中啟用門控時鐘選項:
– 選擇Project->Implementation Options
– 在GCC & Prototyping Tools 標簽中點擊Clock Conversion checkbox
或在TCL中使用以下命令
set_option -fix_gated_and_generated_ clocks 1
在Synplify Pro/Premier 中執(zhí)行門控和生成時鐘轉(zhuǎn)換,而set_option -conv_mux_xor_gated_clocks 1則針對基于Synopsys HAPS 的設(shè)計在Synplify Premier 時鐘樹的多路選擇器或OR 門上執(zhí)行門控時鐘轉(zhuǎn)換。
“完整”的系列時鐘約束包括在所有正確位置定義時鐘并在生成的時鐘之間定義關(guān)系。有時候,時鐘會出于某種原因與真正的源斷開關(guān)聯(lián),例如時鐘源和時鐘目標端間產(chǎn)生了黑盒,這樣會造成順序組件的時鐘缺失或時鐘約束放置錯誤,導致首次時鐘轉(zhuǎn)換因為缺少時鐘約束而失敗。在許多情況下,轉(zhuǎn)換失敗是由約束不完整造成的。舉例來說,門控邏輯中可能存在一個組合回路,應(yīng)在時鐘轉(zhuǎn)換之前利用異常處理約束將其打破。綜合編譯階段之后會提供一個門控時鐘報告,告訴您有哪些門控和生成時鐘已被轉(zhuǎn)換以及被轉(zhuǎn)換時鐘的名稱、類型、分組和相關(guān)約束。另一個時鐘列表則顯示的是未轉(zhuǎn)換的時鐘,并包含故障信息,用于說明原因。圖2 給出了報告實例。
舉例來說,如果設(shè)計中有黑盒子,您可以在RTL中指定具體的軟件命令,用于為自動化門控時鐘轉(zhuǎn)換提供輔助。比方說,采用 syn_gatedclk_clock_en 指令在黑盒子中指定啟用引腳的名稱,用syn_gatedclk_clock_en_polarity 指令指出黑盒子上時鐘使能端口的極性。每個轉(zhuǎn)換實例和驅(qū)動實例的時鐘引腳都被賦予一個可搜索的屬性,從而能在設(shè)計數(shù)據(jù)庫中識別,并提取到定制 TLC/Find 腳本生成報告中。
端口不匹配
設(shè)計包含公司內(nèi)外部提供的文件。在設(shè)計中進行IP 實例化或預(yù)驗證分級模塊時,經(jīng)常會出現(xiàn)“端口不匹配”錯誤,而且難以檢測,特別是出現(xiàn)在混合語言設(shè)計中更是如此。舉例來說,如果頂層VHDL實體 “Top”實例化Verilog 模塊“sub”,那么頂層VHDL聲明sub 有4 位端口,而實際Verilog 模塊只有3 位端口。就Synplify Premier 軟件而言,會立即將其標記為不匹配,并在單獨的日志報告中通過超級鏈接引用該錯誤。
視圖work.sub.syn_black_box 和視圖work.sub.verilog 之間的接口不匹配
細節(jié):
========
源視圖work.sub.syn_black_box 中的以下位端口在目標視圖work.sub.verilog 中不存在。
=======================================
Bit Port in1[4]
Bit Port in2[4]
Bit Port dout[4]
多級層次中,如何將不匹配問題追蹤到問題模塊的RTL定義呢?工具應(yīng)以某種方式給所有模塊實例打標簽,比方說采用orig_inst_of 屬性。屬性的值包括模塊的原始RTL名稱,可方便地檢索至RTL。例如,假設(shè)sub_3s 導致端口不匹配錯誤,那么我們就能用以下TCL命令找回RTL模塊的原始名稱“sub”:get_prop -prop orig_inst_of {v:sub_3s} 返回值為“sub”。
約束的清除
指定充足且正確的約束將影響到結(jié)果質(zhì)量和功能。約束聲明通常應(yīng)包括三個元素:主時鐘和時鐘組定義、異步時鐘聲明、錯誤和多循環(huán)路徑聲明。
進行綜合之前檢查約束是一個很好的方法。提供約束查看器的工具能發(fā)現(xiàn)語法錯誤并分析時序約束和實例名稱是否適用,警示問題所在。比方說,它會報告通配符擴展后約束如何應(yīng)用以及在定義時鐘約束后產(chǎn)生的時鐘關(guān)系。它會標出那些由于參數(shù)或?qū)ο箢愋蜔o效或不存在而未被應(yīng)用的時序約束。
進行綜合之前,在Synplify Pro/Premier 軟件中生成名為projectName_cck.rpt 的約束檢查器報告:
Synplify Pro/Premier GUI: Run -> Constraint check
或采用TCL命令:project -run constraint_check
注意,要避免潛在的MetA不穩(wěn)定性,應(yīng)運行“異步時鐘報告”,提醒您注意那些在一個時鐘域啟動而在另一個時鐘域中結(jié)束的路徑。
在Synplify Pro/Premier 軟件中生成時鐘同步報告projectName_async_clk.rpt.csv:
Synplify Pro/Premier GUI:Analysis->Timing Analyst并選擇Generate Asynchronous Clock Report 選項。
采用TCL命令: set_option -reporting_async_clock
正確的方法是確保您充分且全面地對設(shè)計進行約束,而且不會過度約束(過度會導致運行時間延長,生成關(guān)鍵路徑錯誤報告)。確保您已完全指定多周期和錯誤路徑,并且已為得到的時鐘設(shè)置了約束(set_multicycle_path,set_false_path)。
評論