實例分析:如何快速找到並解決隔離FPGA設計中的問題
發布時間:2013-10-26 責任編輯:sherryyu
如果您的FPGA設計無法綜合或者沒能按預期在開發板上正常工作,原因往往不明,要想在數以千計的RTL和約束源文件中找出故障根源相當困難,而且很多這些文件還可能是其他設計人員編寫的。考慮到FPGAshejidiedaiheyunxingshijiandeyanchang,shejirenyuanyinggaizaishejiliuchengdezaoqijieduanjiuzhaochukenengcunzaidezhuduocuowu,bingxiangfangshefazhongdianduishejizaikaifabanshangjinxingyanzheng。
在特定條件下采用更智能的技術來隔離特定錯誤,找到問題電路的源頭並漸進式修複錯誤,這很重要。為了節省時間,您可以對時鍾、約束和模塊級接口進行初步設置檢查以確保符合設計規範,這樣就不必在綜合與布局布線(P&R)時浪費大量時間。
Synopsys 公司的Synplify Premier 和Synplify Pro FPGA設計工具以及Identify RTLDebugger dengchanpinnengbangzhushejirenyuanwanchengshangshugongzuo。zhexiegongjudetexingshideshejirenyuannengkuaisugelicuowu,youxiaosuoduanyunxingshijian,bingjianshaokaifabanqidongsuoxudediedaicishu。
精確找到開發板上的問題
如(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設計進行綜合。
第三步:分析和調試。設計綜合完成之後,運行設計並用RTL調tiao試shi器qi觀guan察cha數shu據ju。在zai開kai發fa板ban上shang運yun行xing測ce試shi時shi,觀guan察cha點dian和he斷duan點dian共gong同tong觸chu發fa數shu據ju采cai樣yang,使shi您nin能neng在zai您nin所suo關guan注zhu的de非fei常chang明ming確que的de條tiao件jian下xia觀guan察cha並bing調tiao試shi特te定ding節jie點dian的de電dian路lu的de行xing為wei。您nin可ke將jiang觀guan察cha到dao的de采cai樣yang數shu據ju寫xie入ruVCD 文件並將其關聯到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綜合軟件轉換時鍾。
大型設計的調試
zaidaxingshejizhongtancesuoyouxinhaoshibukeneng,yinweishengchengdeshujuliangjiweipangda,erqietanceshujusuoxudeewaitiaoshiluojiyetaida。pianshangtiaoshifangfadeyigechangjianbibingshinanyitiqianyucexuyaoduinaxiexinhaojinxingtancehejiankong。
一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的deIICE 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 zhilingzhichuheihezishangshizhongshinengduankoudejixing。meigezhuanhuanshilihequdongshilideshizhongyinjiaodoubeifuyuyigekesousuodeshuxing,congernengzaishejishujukuzhongshibie,bingtiqudaodingzhi 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]
約束的清除
指定充足且正確的約束將影響到結果質量和功能。約束聲明通常應包括三個元素:主時鍾和時鍾組定義、異步時鍾聲明、錯誤和多循環路徑聲明。
jinxingzonghezhiqianjianzhayueshushiyigehenhaodefangfa。tigongyueshuzhakanqidegongjunengfaxianyufacuowubingfenxishixuyueshuheshilimingchengshifoushiyong,jingshiwentisuozai。bifangshuo,tahuibaogaotongpeifukuozhanhouyueshuruheyingyongyijizaidingyishizhongyueshuhouchanshengdeshizhongguanxi。tahuibiaochunaxieyouyucanshuhuoduixiangleixingwuxiaohuobucunzaierweibeiyingyongdeshixuyueshu。
進行綜合之前,在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或約束故障解決方案可能需要好幾個小時才能看出結果。我們來看看如何利用分級“分治法”設計方法和“錯誤繼續”功能在單次綜合迭代中發現多個錯誤,從而減少迭代次數。
weisuoduanyunxingshijian,mokuaihualiuchengbibukeshao。zhezhongliuchengzhichishejibaocun,nengsuodingyijingzhengmingyouxiaodeshejibufen。zhichimokuaihualiuchengdegongjunengbangzhuninzaijinxingzongheqianchuangjianRTLfenqu,yejiushibianyidian。yixieruanjianhainengbangzhushejirenyuanjiangyouguzhangdeshejibufenbianchengheihezi,chedijianggaibufendaochubingzuoweidulideshejizixiangmujinxingzaijiagong。yidanjiejuewenti,zixiangmuhainenggouyiwangbiaoxingshitongguozixiaershangdeliuchenghuoyongzuoweiRTL通過自上而下的流程整合回原設計,甚至還能綜合利用自上而下和自下而上兩種流程。
要集成和調試大型設計,應盡早在設計進程中發現錯誤的說明。舉例來說,“錯誤繼續”功能可提供涉及每個綜合通過信息的組合錯誤報告。“錯誤繼續”能容許非致命的非語法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)。
通過導出模塊隔離問題
您nin可ke將jiang故gu障zhang模mo塊kuai作zuo為wei完wan全quan獨du立li的de綜zong合he項xiang目mu導dao出chu,以yi便bian專zhuan門men對dui該gai模mo塊kuai進jin行xing調tiao試shi。導dao出chu過guo程cheng會hui產chan生sheng隔ge離li的de綜zong合he項xiang目mu,其qi中zhong包bao含han所suo有you該gai模mo塊kuai的de源yuan文wen件jian、語(yu)言(yan)標(biao)準(zhun)和(he)編(bian)譯(yi)庫(ku),以(yi)及(ji)所(suo)含(han)文(wen)件(jian)的(de)目(mu)錄(lu)路(lu)徑(jing)和(he)路(lu)徑(jing)順(shun)序(xu),以(yi)達(da)到(dao)對(dui)該(gai)模(mo)塊(kuai)進(jin)行(xing)單(dan)獨(du)綜(zong)合(he)與(yu)調(tiao)試(shi)的(de)目(mu)的(de)。如(ru)前(qian)一(yi)節(jie)所(suo)示(shi),出(chu)現(xian)錯(cuo)誤(wu)的(de)模(mo)塊(kuai)會(hui)自(zi)動(dong)在(zai)設(she)計(ji)數(shu)據(ju)庫(ku)中(zhong)標(biao)出(chu)錯(cuo)誤(wu)屬(shu)性(xing),並(bing)在(zai)設(she)計(ji)原(yuan)理(li)圖(tu)中(zhong)突(tu)出(chu)顯(xian)示(shi),便(bian)於(yu)對(dui)該(gai)模(mo)塊(kuai)進(jin)行(xing)查(zha)找(zhao)和(he)提(ti)取(qu)。
為了導出模塊及其所有相關源文件進行隔離調試,應首先在Synplify Pro/Premier 軟件GUI 中(圖4)的設計分級視圖或RTL視圖中選擇設計模塊或實例,然後點擊右鍵並在彈出菜單中選擇“Generate Dependent File List”。
相關閱讀:
菜鳥必看!學習FPGA常見的四大誤區
http://m.0-fzl.cn/gptech-art/80021601
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
- 築基AI4S:摩爾線程全功能GPU加速中國生命科學自主生態
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall



