實例分析:如何快速找到並解決隔離FPGA設計中的問題
發布時間:2013-10-26 責任編輯:sherryyu
如果您的FPGA設計無法綜合或者沒能按預期在開發板上正常工作,原因往往不明,要想在數以千計的RTL和約束源文件中找出故障根源相當困難,而且很多這些文件還可能是其他設計人員編寫的。考慮到FPGA設(she)計(ji)迭(die)代(dai)和(he)運(yun)行(xing)時(shi)間(jian)的(de)延(yan)長(chang),設(she)計(ji)人(ren)員(yuan)應(ying)該(gai)在(zai)設(she)計(ji)流(liu)程(cheng)的(de)早(zao)期(qi)階(jie)段(duan)就(jiu)找(zhao)出(chu)可(ke)能(neng)存(cun)在(zai)的(de)諸(zhu)多(duo)錯(cuo)誤(wu),並(bing)想(xiang)方(fang)設(she)法(fa)重(zhong)點(dian)對(dui)設(she)計(ji)在(zai)開(kai)發(fa)板(ban)上(shang)進(jin)行(xing)驗(yan)證(zheng)。
在特定條件下采用更智能的技術來隔離特定錯誤,找到問題電路的源頭並漸進式修複錯誤,這很重要。為了節省時間,您可以對時鍾、約束和模塊級接口進行初步設置檢查以確保符合設計規範,這樣就不必在綜合與布局布線(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設計進行綜合。
第三步:分析和調試。設計綜合完成之後,運行設計並用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綜合軟件轉換時鍾。
大型設計的調試
在(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資源使用效率低下。解決該問題的有效辦法就是用FPGAzongheruanjianzhuanhuanshizhong。liru,menkonghuoshengchengshizhongzhuanhuangongnengkejiangshengchengshizhonghemenkongshizhongluojicongshunxuzujiandeshizhongyinjiaozhuanyidaoshinengyinjiao,zheyangninjiunengjiangshunxuzujianzhijiebangdingdaoyuanshizhong,xiaochupianyiwenti,bingjianshaoshejizhongsuoxudeshizhongyuanshuliang,jinerjieyueziyuan。
在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 門上執行門控時鍾轉換。
“完整”的(de)係(xi)列(lie)時(shi)鍾(zhong)約(yue)束(shu)包(bao)括(kuo)在(zai)所(suo)有(you)正(zheng)確(que)位(wei)置(zhi)定(ding)義(yi)時(shi)鍾(zhong)並(bing)在(zai)生(sheng)成(cheng)的(de)時(shi)鍾(zhong)之(zhi)間(jian)定(ding)義(yi)關(guan)係(xi)。有(you)時(shi)候(hou),時(shi)鍾(zhong)會(hui)出(chu)於(yu)某(mou)種(zhong)原(yuan)因(yin)與(yu)真(zhen)正(zheng)的(de)源(yuan)斷(duan)開(kai)關(guan)聯(lian),例(li)如(ru)時(shi)鍾(zhong)源(yuan)和(he)時(shi)鍾(zhong)目(mu)標(biao)端(duan)間(jian)產(chan)生(sheng)了(le)黑(hei)盒(he),這(zhe)樣(yang)會(hui)造(zao)成(cheng)順(shun)序(xu)組(zu)件(jian)的(de)時(shi)鍾(zhong)缺(que)失(shi)或(huo)時(shi)鍾(zhong)約(yue)束(shu)放(fang)置(zhi)錯(cuo)誤(wu),導(dao)致(zhi)首(shou)次(ci)時(shi)鍾(zhong)轉(zhuan)換(huan)因(yin)為(wei)缺(que)少(shao)時(shi)鍾(zhong)約(yue)束(shu)而(er)失(shi)敗(bai)。在(zai)許(xu)多(duo)情(qing)況(kuang)下(xia),轉(zhuan)換(huan)失(shi)敗(bai)是(shi)由(you)約(yue)束(shu)不(bu)完(wan)整(zheng)造(zao)成(cheng)的(de)。舉(ju)例(li)來(lai)說(shuo),門(men)控(kong)邏(luo)輯(ji)中(zhong)可(ke)能(neng)存(cun)在(zai)一(yi)個(ge)組(zu)合(he)回(hui)路(lu),應(ying)在(zai)時(shi)鍾(zhong)轉(zhuan)換(huan)之(zhi)前(qian)利(li)用(yong)異(yi)常(chang)處(chu)理(li)約(yue)束(shu)將(jiang)其(qi)打(da)破(po)。綜(zong)合(he)編(bian)譯(yi)階(jie)段(duan)之(zhi)後(hou)會(hui)提(ti)供(gong)一(yi)個(ge)門(men)控(kong)時(shi)鍾(zhong)報(bao)告(gao),告(gao)訴(su)您(nin)有(you)哪(na)些(xie)門(men)控(kong)和(he)生(sheng)成(cheng)時(shi)鍾(zhong)已(yi)被(bei)轉(zhuan)換(huan)以(yi)及(ji)被(bei)轉(zhuan)換(huan)時(shi)鍾(zhong)的(de)名(ming)稱(cheng)、類型、分組和相關約束。另一個時鍾列表則顯示的是未轉換的時鍾,並包含故障信息,用於說明原因。圖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]
約束的清除
指定充足且正確的約束將影響到結果質量和功能。約束聲明通常應包括三個元素:主時鍾和時鍾組定義、異步時鍾聲明、錯誤和多循環路徑聲明。
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或約束故障解決方案可能需要好幾個小時才能看出結果。我們來看看如何利用分級“分治法”設計方法和“錯誤繼續”功能在單次綜合迭代中發現多個錯誤,從而減少迭代次數。
為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)為(wei)RTL通過自上而下的流程整合回原設計,甚至還能綜合利用自上而下和自下而上兩種流程。
要集成和調試大型設計,應盡早在設計進程中發現錯誤的說明。舉例來說,“錯誤繼續”功能可提供涉及每個綜合通過信息的組合錯誤報告。“錯誤繼續”能容許非致命的非語法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、語(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://0-fzl.cn/gptech-art/80021601
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
- e絡盟與Same Sky簽署全球分銷協議,拓展高性能元器件版圖
- 告別“偏色”煩惱:光譜傳感器如何重塑手機攝影的真實色彩
- 從“掃描”到“洞察”:Hyperlux ID iToF技術如何攻克30米測距極限
- 解鎖算力芯片的“速度密碼”:SmartDV全棧IP方案深度解析
- 發燒友福音!XMOS推出32段EQ調節與一鍵升頻功能
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall


