實例分析:如何快速找到並解決隔離FPGA設計中的問題
發布時間:2013-10-26 責任編輯:sherryyu
如果您的FPGA設計無法綜合或者沒能按預期在開發板上正常工作,原因往往不明,要想在數以千計的RTL和約束源文件中找出故障根源相當困難,而且很多這些文件還可能是其他設計人員編寫的。考慮到FPGAshejidiedaiheyunxingshijiandeyanchang,shejirenyuanyinggaizaishejiliuchengdezaoqijieduanjiuzhaochukenengcunzaidezhuduocuowu,bingxiangfangshefazhongdianduishejizaikaifabanshangjinxingyanzheng。
在特定條件下采用更智能的技術來隔離特定錯誤,找到問題電路的源頭並漸進式修複錯誤,這很重要。為了節省時間,您可以對時鍾、約束和模塊級接口進行初步設置檢查以確保符合設計規範,這樣就不必在綜合與布局布線(P&R)時浪費大量時間。
Synopsys 公司的Synplify Premier 和Synplify Pro FPGA設計工具以及Identify RTLDebugger 等deng產chan品pin能neng幫bang助zhu設she計ji人ren員yuan完wan成cheng上shang述shu工gong作zuo。這zhe些xie工gong具ju的de特te性xing使shi得de設she計ji人ren員yuan能neng快kuai速su隔ge離li錯cuo誤wu,有you效xiao縮suo短duan運yun行xing時shi間jian,並bing減jian少shao開kai發fa板ban啟qi動dong所suo需xu的de迭die代dai次ci數shu。
精確找到開發板上的問題
如ru果guo開kai發fa板ban出chu現xian明ming顯xian的de功gong能neng性xing錯cuo誤wu,要yao縮suo小xiao查zha找zhao問wen題ti根gen源yuan的de範fan圍wei可ke能neng會hui相xiang當dang困kun難nan。為wei了le進jin行xing設she計ji調tiao試shi,我wo們men應ying當dang創chuang建jian附fu加jia電dian路lu並bing保bao留liu某mou些xie節jie點dian,以yi便bian我wo們men對dui設she計ji運yun行xing時shi得de到dao的de數shu據ju進jin行xing探tan測ce、檢查和分析。下麵我們就看看如何用板級調試軟件來查找錯誤。
按下列四步法並利用RTL調試器,您能精確查找問題,並對信號和關注的條件采樣,然後將觀察結果關聯至原始RTL,從而將問題鎖定在RTL規範或約束設置範圍內。
第一步:指定探測。在RTL中明確要監控哪些信號和條件。在此要聲明您所感興趣的觀察點(要觀察的信號或節點)和斷點(RTL控製流程聲明,如IF、THEN 和CASE 等)。
第二步:通過探測構建設計。利用附加的監控電路——即用於根據您的監控要求捕捉並導出調試數據的智能內部電路仿真器(IICE)——對FPGA設計進行綜合。
第三步:分析和調試。設計綜合完成之後,運行設計並用RTLtiaoshiqiguanchashuju。zaikaifabanshangyunxingceshishi,guanchadianheduandiangongtongchufashujucaiyang,shininnengzaininsuoguanzhudefeichangmingquedetiaojianxiaguanchabingtiaoshitedingjiediandedianludexingwei。ninkejiangguanchadaodecaiyangshujuxieruVCD 文件並將其關聯到RTL。
第四步:漸進性修複錯誤(incrementaLfix)。一旦找到了錯誤所在,就可以通過分級、漸進式流程在RTL或約束中漸進地進行修複。
時序和功能性錯誤的可視檢查
FPGA設計和調試工具還有一大優點,就是能顯示RTL和網表級原理圖。舉例來說,具有互動調試功能的原理圖查看器能夠顯示設計的RTL和網表原理圖,便於您進行觀察並將時序報告和VCD 數據(設計在開發板上運行時產生)關聯至RTL源文件。查看器包含一個RTL視圖,用來以圖示的方式描述設計。該視圖在綜合RTL編譯階段後提供,由技術獨立的加法器、寄存器、大型多路選擇器和狀態機等組件構成。通過RTL原理圖,您可以交叉探測原始RTL,對不符合預定規範的設計進行調整,同時也可以探測到約束編輯器,從而更簡便地更新和指定約束(圖1)。

要將錯誤操作的源頭追溯到RTL,您可以利用RTL調試器在RTL原理圖上方實時插入觀察到的操作數據。
原理圖查看器包括一個網表級技術視圖,用於顯示綜合後的實際設計實現情況。在HDLAnalyst 原理圖查看器中,該視圖基於查找表、寄存器和DSP slice 等基本的賽靈思器件原語。您可在原理圖中對路徑進行交叉探測,追溯到原始的RTL以及綜合後和布局布線後的最終時序報告,以便分析和提高整體性能。
在FPGA中原型設計的ASIC 門控時鍾結構並非FPGA實現中的必要環節,這會導致FPGA資源使用效率低下。解決該問題的有效辦法就是用FPGA綜合軟件轉換時鍾。
大型設計的調試
在zai大da型xing設she計ji中zhong探tan測ce所suo有you信xin號hao是shi不bu可ke能neng,因yin為wei生sheng成cheng的de數shu據ju量liang極ji為wei龐pang大da,而er且qie探tan測ce數shu據ju所suo需xu的de額e外wai調tiao試shi邏luo輯ji也ye太tai大da。片pian上shang調tiao試shi方fang法fa的de一yi個ge常chang見jian弊bi病bing是shi難nan以yi提ti前qian預yu測ce需xu要yao對dui哪na些xie信xin號hao進jin行xing探tan測ce和he監jian控kong。
一(yi)些(xie)調(tiao)試(shi)軟(ruan)件(jian)通(tong)過(guo)分(fen)治(zhi)法(fa)能(neng)夠(gou)在(zai)一(yi)定(ding)程(cheng)度(du)上(shang)解(jie)決(jue)這(zhe)個(ge)問(wen)題(ti)。利(li)用(yong)多(duo)路(lu)複(fu)用(yong)的(de)采(cai)樣(yang)組(zu),設(she)計(ji)人(ren)員(yuan)可(ke)以(yi)有(you)選(xuan)擇(ze)性(xing)地(di)進(jin)行(xing)采(cai)樣(yang)並(bing)通(tong)過(guo)多(duo)路(lu)複(fu)用(yong)的(de)路(lu)徑(jing)和(he)共(gong)享(xiang)的(de)IICE zaixinhaozuzhijianqiehuan。zhezhongfangfazengjialekeguanchadexinhaohetiaojian,erqiebuhuizengjiashujucunchuyaoqiu。ninkeyijishiqiehuanganxingqudexinhaozu,bubihuashijianjinxingzhongxintiaozhenghuozhongxinzonghexindesheji。
不幸的是,在探測和采樣數據時用使的調試IICE 邏輯會占用包括存儲器BRAM 在內的芯片資源。您可在SRAM 存儲卡中對IICE 采樣數據進行片外存儲,以減少片上BRAM 的使用。這種方法的另一個好處是能增加采樣數據的深度。
[page]
我的設計無法綜合
設計錯誤的出現可能導致無法實現有效綜合或布局布線。由於存在成千上萬的RTL和約束源文件,因此可能需要幾個星期才能完成首次綜合與布局布線。進行FPGA原型設計時,應讓ASIC 設計源文件處於“FPGA就緒”狀態。舉例來說,就是要進行門時鍾轉換。
在 FPGA中原型設計的ASIC門控時鍾結構並非FPGA實現中的必要環節,這會導致FPGA資源使用效率低下。解決該問題的有效辦法就是用FPGA綜zong合he軟ruan件jian轉zhuan換huan時shi鍾zhong。例li如ru,門men控kong或huo生sheng成cheng時shi鍾zhong轉zhuan換huan功gong能neng可ke將jiang生sheng成cheng時shi鍾zhong和he門men控kong時shi鍾zhong邏luo輯ji從cong順shun序xu組zu件jian的de時shi鍾zhong引yin腳jiao轉zhuan移yi到dao使shi能neng引yin腳jiao,這zhe樣yang您nin就jiu能neng將jiang順shun序xu組zu件jian直zhi接jie綁bang定ding到dao源yuan時shi鍾zhong,消xiao除chu偏pian移yi問wen題ti,並bing減jian少shao設she計ji中zhong所suo需xu的de時shi鍾zhong源yuan數shu量liang,進jin而er節jie約yue資zi源yuan。
在Synplify Premier 軟件中啟用門控時鍾選項:
– 選擇Project->Implementation Options
– 在GCC & Prototyping Tools 標簽中點擊Clock Conversion checkbox
或在TCL中使用以下命令
set_option -fix_gated_and_generated_ clocks 1
在Synplify Pro/Premier 中執行門控和生成時鍾轉換,而set_option -conv_mux_xor_gated_clocks 1則針對基於Synopsys HAPS 的設計在Synplify Premier 時鍾樹的多路選擇器或OR 門上執行門控時鍾轉換。
“完整”dexilieshizhongyueshubaokuozaisuoyouzhengqueweizhidingyishizhongbingzaishengchengdeshizhongzhijiandingyiguanxi。youshihou,shizhonghuichuyumouzhongyuanyinyuzhenzhengdeyuanduankaiguanlian,lirushizhongyuanheshizhongmubiaoduanjianchanshengleheihe,zheyanghuizaochengshunxuzujiandeshizhongqueshihuoshizhongyueshufangzhicuowu,daozhishoucishizhongzhuanhuanyinweiqueshaoshizhongyueshuershibai。zaixuduoqingkuangxia,zhuanhuanshibaishiyouyueshubuwanzhengzaochengde。julilaishuo,menkongluojizhongkenengcunzaiyigezuhehuilu,yingzaishizhongzhuanhuanzhiqianliyongyichangchuliyueshujiangqidapo。zonghebianyijieduanzhihouhuitigongyigemenkongshizhongbaogao,gaosuninyounaxiemenkongheshengchengshizhongyibeizhuanhuanyijibeizhuanhuanshizhongdemingcheng、類型、分組和相關約束。另一個時鍾列表則顯示的是未轉換的時鍾,並包含故障信息,用於說明原因。圖2 給出了報告實例。

舉例來說,如果設計中有黑盒子,您可以在RTL中指定具體的軟件命令,用於為自動化門控時鍾轉換提供輔助。比方說,采用 syn_gatedclk_clock_en 指令在黑盒子中指定啟用引腳的名稱,用syn_gatedclk_clock_en_polarity 指zhi令ling指zhi出chu黑hei盒he子zi上shang時shi鍾zhong使shi能neng端duan口kou的de極ji性xing。每mei個ge轉zhuan換huan實shi例li和he驅qu動dong實shi例li的de時shi鍾zhong引yin腳jiao都dou被bei賦fu予yu一yi個ge可ke搜sou索suo的de屬shu性xing,從cong而er能neng在zai設she計ji數shu據ju庫ku中zhong識shi別bie,並bing提ti取qu到dao定ding製zhi TLC/Find 腳本生成報告中。
端口不匹配
設計包含公司內外部提供的文件。在設計中進行IP 實例化或預驗證分級模塊時,經常會出現“端口不匹配”錯誤,而且難以檢測,特別是出現在混合語言設計中更是如此。舉例來說,如果頂層VHDL實體 “Top”實例化Verilog 模塊“sub”,那麼頂層VHDL聲明sub 有4 位端口,而實際Verilog 模塊隻有3 位端口。就Synplify Premier 軟件而言,會立即將其標記為不匹配,並在單獨的日誌報告中通過超級鏈接引用該錯誤。
視圖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]
多級層次中,如何將不匹配問題追蹤到問題模塊的RTL定義呢?工具應以某種方式給所有模塊實例打標簽,比方說采用orig_inst_of 屬性。屬性的值包括模塊的原始RTL名稱,可方便地檢索至RTL。例如,假設sub_3s 導致端口不匹配錯誤,那麼我們就能用以下TCL命令找回RTL模塊的原始名稱“sub”:get_prop -prop orig_inst_of {v:sub_3s} 返回值為“sub”。
[page]
約束的清除
指定充足且正確的約束將影響到結果質量和功能。約束聲明通常應包括三個元素:主時鍾和時鍾組定義、異步時鍾聲明、錯誤和多循環路徑聲明。
進jin行xing綜zong合he之zhi前qian檢jian查zha約yue束shu是shi一yi個ge很hen好hao的de方fang法fa。提ti供gong約yue束shu查zha看kan器qi的de工gong具ju能neng發fa現xian語yu法fa錯cuo誤wu並bing分fen析xi時shi序xu約yue束shu和he實shi例li名ming稱cheng是shi否fou適shi用yong,警jing示shi問wen題ti所suo在zai。比bi方fang說shuo,它ta會hui報bao告gao通tong配pei符fu擴kuo展zhan後hou約yue束shu如ru何he應ying用yong以yi及ji在zai定ding義yi時shi鍾zhong約yue束shu後hou產chan生sheng的de時shi鍾zhong關guan係xi。它ta會hui標biao出chu那na些xie由you於yu參can數shu或huo對dui象xiang類lei型xing無wu效xiao或huo不bu存cun在zai而er未wei被bei應ying用yong的de時shi序xu約yue束shu。
進行綜合之前,在Synplify Pro/Premier 軟件中生成名為projectName_cck.rpt 的約束檢查器報告:
Synplify Pro/Premier GUI: Run -> Constraint check
或采用TCL命令:project -run constraint_check
注意,要避免潛在的MetA不穩定性,應運行“異步時鍾報告”,提醒您注意那些在一個時鍾域啟動而在另一個時鍾域中結束的路徑。
在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
正確的方法是確保您充分且全麵地對設計進行約束,而且不會過度約束(過度會導致運行時間延長,生成關鍵路徑錯誤報告)。確保您已完全指定多周期和錯誤路徑,並且已為得到的時鍾設置了約束(set_multicycle_path,set_false_path)。
縮短調試時間
實施潛在的RTL或約束故障解決方案可能需要好幾個小時才能看出結果。我們來看看如何利用分級“分治法”設計方法和“錯誤繼續”功能在單次綜合迭代中發現多個錯誤,從而減少迭代次數。
為wei縮suo短duan運yun行xing時shi間jian,模mo塊kuai化hua流liu程cheng必bi不bu可ke少shao。這zhe種zhong流liu程cheng支zhi持chi設she計ji保bao存cun,能neng鎖suo定ding已yi經jing證zheng明ming有you效xiao的de設she計ji部bu分fen。支zhi持chi模mo塊kuai化hua流liu程cheng的de工gong具ju能neng幫bang助zhu您nin在zai進jin行xing綜zong合he前qian創chuang建jianRTL分fen區qu,也ye就jiu是shi編bian譯yi點dian。一yi些xie軟ruan件jian還hai能neng幫bang助zhu設she計ji人ren員yuan將jiang有you故gu障zhang的de設she計ji部bu分fen變bian成cheng黑hei盒he子zi,徹che底di將jiang該gai部bu分fen導dao出chu並bing作zuo為wei獨du立li的de設she計ji子zi項xiang目mu進jin行xing再zai加jia工gong。一yi旦dan解jie決jue問wen題ti,子zi項xiang目mu還hai能neng夠gou以yi網wang表biao形xing式shi通tong過guo自zi下xia而er上shang的de流liu程cheng或huo用yong作zuo為weiRTL通過自上而下的流程整合回原設計,甚至還能綜合利用自上而下和自下而上兩種流程。
要集成和調試大型設計,應盡早在設計進程中發現錯誤的說明。舉例來說,“錯誤繼續”功能可提供涉及每個綜合通過信息的組合錯誤報告。“錯誤繼續”能容許非致命的非語法HDL編譯問題和某些映射錯誤,因此設計人員可在每次綜合迭代中分析並完成盡可能多的設計內容。為了在帶有 SynplifyPro/Premier GUI 的Synplify Premier 軟件中調用“錯誤繼續”功能,應啟用項目視圖左側的Continue-on-Error 選項。
在TCL中:set_option –continue_on_error 1
用屬性is_error_blackbox=1 標記故障模塊和帶接口錯誤的實例父模塊,如圖3 所示

用TCL找到所有“故障實例”:
c_list [find -hier -inst * -filter
@is_error_blackbox==1]
用TCL列出所有“故障模塊”:
get_prop -prop inst_of [find -hier -inst
* -filter @is_error_blackbox==1]
要查看將被關入黑盒子或導出的故障模塊,請查找HDLAnalyst RTL視圖中的紅色塊(圖3)。
通過導出模塊隔離問題
ninkejiangguzhangmokuaizuoweiwanquandulidezonghexiangmudaochu,yibianzhuanmenduigaimokuaijinxingtiaoshi。daochuguochenghuichanshenggelidezonghexiangmu,qizhongbaohansuoyougaimokuaideyuanwenjian、yuyanbiaozhunhebianyiku,yijisuohanwenjiandemululujinghelujingshunxu,yidadaoduigaimokuaijinxingdanduzongheyutiaoshidemude。ruqianyijiesuoshi,chuxiancuowudemokuaihuizidongzaishejishujukuzhongbiaochucuowushuxing,bingzaishejiyuanlituzhongtuchuxianshi,bianyuduigaimokuaijinxingzhazhaohetiqu。
為了導出模塊及其所有相關源文件進行隔離調試,應首先在Synplify Pro/Premier 軟件GUI 中(圖4)的設計分級視圖或RTL視圖中選擇設計模塊或實例,然後點擊右鍵並在彈出菜單中選擇“Generate Dependent File List”。
相關閱讀:
菜鳥必看!學習FPGA常見的四大誤區
http://www.0-fzl.cn/gptech-art/80021601
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
- 三星上演罕見對峙:工會集會討薪,股東隔街抗議
- 摩爾線程實現DeepSeek-V4“Day-0”支持,國產GPU適配再提速
- 築牢安全防線:智能駕駛邁向規模化應用的關鍵挑戰與破局之道
- GPT-Image 2:99%文字準確率,AI生圖告別“鬼畫符”
- 機器人馬拉鬆的勝負手:藏在主板角落裏的“時鍾戰爭”
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall

