如何快速解決隔離FPGA設(shè)計(jì)中的錯(cuò)誤
如果您的FPGA設(shè)計(jì)無(wú)法綜合或者沒(méi)能按預(yù)期在開(kāi)發(fā)板上正常工作,原因往往不明,要想在數(shù)以千計(jì)的RTL和約束源文件中找出故障根源相當(dāng)困難,而且很多這些文件還可能是其他設(shè)計(jì)人員編寫(xiě)的??紤]到FPGA設(shè)計(jì)迭代和運(yùn)行時(shí)間的延長(zhǎng),設(shè)計(jì)人員應(yīng)該在設(shè)計(jì)流程的早期階段就找出可能存在的諸多錯(cuò)誤,并想方設(shè)法重點(diǎn)對(duì)設(shè)計(jì)在開(kāi)發(fā)板上進(jìn)行驗(yàn)證。
本文引用地址:http://2s4d.com/article/189506.htm在特定條件下采用更智能的技術(shù)來(lái)隔離特定錯(cuò)誤,找到問(wèn)題電路的源頭并漸進(jìn)式修復(fù)錯(cuò)誤,這很重要。為了節(jié)省時(shí)間,您可以對(duì)時(shí)鐘、約束和模塊級(jí)接口進(jìn)行初步設(shè)置檢查以確保符合設(shè)計(jì)規(guī)范,這樣就不必在綜合與布局布線(xiàn)(P
Synopsys公司的Synplify Premier和Synplify Pro FPGA設(shè)計(jì)工具以及Identify RTLDebugger等產(chǎn)品能幫助設(shè)計(jì)人員完成上述工作。這些工具的特性使得設(shè)計(jì)人員能快速隔離錯(cuò)誤,有效縮短運(yùn)行時(shí)間,并減少開(kāi)發(fā)板啟動(dòng)所需的迭代次數(shù)。
精確找到開(kāi)發(fā)板上的問(wèn)題
如果開(kāi)發(fā)板出現(xiàn)明顯的功能性錯(cuò)誤,要縮小查找問(wèn)題根源的范圍可能會(huì)相當(dāng)困難。為了進(jìn)行設(shè)計(jì)調(diào)試,我們應(yīng)當(dāng)創(chuàng)建附加電路并保留某些節(jié)點(diǎn),以便我們對(duì)設(shè)計(jì)運(yùn)行時(shí)得到的數(shù)據(jù)進(jìn)行探測(cè)、檢查和分析。下面我們就看看如何用板級(jí)調(diào)試軟件來(lái)查找錯(cuò)誤。
按下列四步法并利用RTL調(diào)試器,您能精確查找問(wèn)題,并對(duì)信號(hào)和關(guān)注的條件采樣,然后將觀察結(jié)果關(guān)聯(lián)至原始RTL,從而將問(wèn)題鎖定在RTL規(guī)范或約束設(shè)置范圍內(nèi)。
第一步:指定探測(cè)。在RTL中明確要監(jiān)控哪些信號(hào)和條件。在此要聲明您所感興趣的觀察點(diǎn)(要觀察的信號(hào)或節(jié)點(diǎn))和斷點(diǎn)(RTL控制流程聲明,如IF、THEN和CASE等)。
第二步:通過(guò)探測(cè)構(gòu)建設(shè)計(jì)。利用附加的監(jiān)控電路——即用于根據(jù)您的監(jiān)控要求捕捉并導(dǎo)出調(diào)試數(shù)據(jù)的智能內(nèi)部電路仿真器(IICE)——對(duì)FPGA設(shè)計(jì)進(jìn)行綜合。
第三步:分析和調(diào)試。設(shè)計(jì)綜合完成之后,運(yùn)行設(shè)計(jì)并用RTL調(diào)試器觀察數(shù)據(jù)。在開(kāi)發(fā)板上運(yùn)行測(cè)試時(shí),觀察點(diǎn)和斷點(diǎn)共同觸發(fā)數(shù)據(jù)采樣,使您能在您所關(guān)注的非常明確的條件下觀察并調(diào)試特定節(jié)點(diǎn)的電路的行為。您可將觀察到的采樣數(shù)據(jù)寫(xiě)入VCD文件并將其關(guān)聯(lián)到RTL.
第四步:漸進(jìn)性修復(fù)錯(cuò)誤(incrementaLfix)。一旦找到了錯(cuò)誤所在,就可以通過(guò)分級(jí)、漸進(jìn)式流程在RTL或約束中漸進(jìn)地進(jìn)行修復(fù)。
時(shí)序和功能性錯(cuò)誤的可視檢查
FPGA設(shè)計(jì)和調(diào)試工具還有一大優(yōu)點(diǎn),就是能顯示RTL和網(wǎng)表級(jí)原理圖。舉例來(lái)說(shuō),具有互動(dòng)調(diào)試功能的原理圖查看器能夠顯示設(shè)計(jì)的RTL和網(wǎng)表原理圖,便于您進(jìn)行觀察并將時(shí)序報(bào)告和VCD數(shù)據(jù)(設(shè)計(jì)在開(kāi)發(fā)板上運(yùn)行時(shí)產(chǎn)生)關(guān)聯(lián)至RTL源文件。查看器包含一個(gè)RTL視圖,用來(lái)以圖示的方式描述設(shè)計(jì)。該視圖在綜合RTL編譯階段后提供,由技術(shù)獨(dú)立的加法器、寄存器、大型多路選擇器和狀態(tài)機(jī)等組件構(gòu)成。通過(guò)RTL原理圖,您可以交叉探測(cè)原始RTL,對(duì)不符合預(yù)定規(guī)范的設(shè)計(jì)進(jìn)行調(diào)整,同時(shí)也可以探測(cè)到約束編輯器,從而更簡(jiǎn)便地更新和指定約束(圖1)。
要將錯(cuò)誤操作的源頭追溯到RTL,您可以利用RTL調(diào)試器在RTL原理圖上方實(shí)時(shí)插入觀察到的操作數(shù)據(jù)。
原理圖查看器包括一個(gè)網(wǎng)表級(jí)技術(shù)視圖,用于顯示綜合后的實(shí)際設(shè)計(jì)實(shí)現(xiàn)情況。在HDLAnalyst原理圖查看器中,該視圖基于查找表、寄存器和DSP slice等基本的賽靈思器件原語(yǔ)。您可在原理圖中對(duì)路徑進(jìn)行交叉探測(cè),追溯到原始的RTL以及綜合后和布局布線(xiàn)后的最終時(shí)序報(bào)告,以便分析和提高整體性能。
在FPGA中原型設(shè)計(jì)的ASIC門(mén)控時(shí)鐘結(jié)構(gòu)并非FPGA實(shí)現(xiàn)中的必要環(huán)節(jié),這會(huì)導(dǎo)致FPGA資源使用效率低下。解決該問(wèn)題的有效辦法就是用FPGA綜合軟件轉(zhuǎn)換時(shí)鐘。
大型設(shè)計(jì)的調(diào)試
在大型設(shè)計(jì)中探測(cè)所有信號(hào)是不可能,因?yàn)樯傻臄?shù)據(jù)量極為龐大,而且探測(cè)數(shù)據(jù)所需的額外調(diào)試邏輯也太大。片上調(diào)試方法的一個(gè)常見(jiàn)弊病是難以提前預(yù)測(cè)需要對(duì)哪些信號(hào)進(jìn)行探測(cè)和監(jiān)控。
一些調(diào)試軟件通過(guò)分治法能夠在一定程度上解決這個(gè)問(wèn)題。利用多路復(fù)用的采樣組,設(shè)計(jì)人員可以有選擇性地進(jìn)行采樣并通過(guò)多路復(fù)用的路徑和共享的IICE在信號(hào)組之間切換。這種方法增加了可觀察的信號(hào)和條件,而且不會(huì)增加數(shù)據(jù)存儲(chǔ)要求。您可以即時(shí)切換感興趣的信號(hào)組,不必花時(shí)間進(jìn)行重新調(diào)整或重新綜合新的設(shè)計(jì)。
不幸的是,在探測(cè)和采樣數(shù)據(jù)時(shí)用使的調(diào)試IICE邏輯會(huì)占用包括存儲(chǔ)器BRAM在內(nèi)的芯片資源。您可在SRAM存儲(chǔ)卡中對(duì)IICE采樣數(shù)據(jù)進(jìn)行片外存儲(chǔ),以減少片上BRAM的使用。這種方法的另一個(gè)好處是能增加采樣數(shù)據(jù)的深度。
我的設(shè)計(jì)無(wú)法綜合
設(shè)計(jì)錯(cuò)誤的出現(xiàn)可能導(dǎo)致無(wú)法實(shí)現(xiàn)有效綜合或布局布線(xiàn)。由于存在成千上萬(wàn)的RTL和約束源文件,因此可能需要幾個(gè)星期才能完成首次綜合與布局布線(xiàn)。進(jìn)行FPGA原型設(shè)計(jì)時(shí),應(yīng)讓ASIC設(shè)計(jì)源文件處于“FPGA就緒”狀態(tài)。舉例來(lái)說(shuō),就是要進(jìn)行門(mén)時(shí)鐘轉(zhuǎn)換。
在FPGA中原型設(shè)計(jì)的ASIC門(mén)控時(shí)鐘結(jié)構(gòu)并非FPGA實(shí)現(xiàn)中的必要環(huán)節(jié),這會(huì)導(dǎo)致FPGA資源使用效率低下。解決該問(wèn)題的有效辦法就是用FPGA綜合軟件轉(zhuǎn)換時(shí)鐘。例如,門(mén)控或生成時(shí)鐘轉(zhuǎn)換功能可將生成時(shí)鐘和門(mén)控時(shí)鐘邏輯從順序組件的時(shí)鐘引腳轉(zhuǎn)移到使能引腳,這樣您就能將順序組件直接綁定到源時(shí)鐘,消除偏移問(wèn)題,并減少設(shè)計(jì)中所需的時(shí)鐘源數(shù)量,進(jìn)而節(jié)約資源。
在Synplify Premier軟件中啟用門(mén)控時(shí)鐘選項(xiàng):
–選擇Project->Implementation Options
–在GCC Prototyping Tools標(biāo)簽中點(diǎn)擊Clock Conversion checkbox
或在TCL中使用以下命令
set_option -fix_gated_and_generated_ clocks 1
在Synplify Pro/Premier中執(zhí)行門(mén)控和生成時(shí)鐘轉(zhuǎn)換,而set_option -conv_mux_xor_gated_clocks 1則針對(duì)基于Synopsys HAPS的設(shè)計(jì)在Synplify Premier時(shí)鐘樹(shù)的多路選擇器或OR門(mén)上執(zhí)行門(mén)控時(shí)鐘轉(zhuǎn)換。
“完整”的系列時(shí)鐘約束包括在所有正確位置定義時(shí)鐘并在生成的時(shí)鐘之間定義關(guān)系。有時(shí)候,時(shí)鐘會(huì)出于某種原因與真正的源斷開(kāi)關(guān)聯(lián),例如時(shí)鐘源和時(shí)鐘目標(biāo)端間產(chǎn)生了黑盒,這樣會(huì)造成順序組件的時(shí)鐘缺失或時(shí)鐘約束放置錯(cuò)誤,導(dǎo)致首次時(shí)鐘轉(zhuǎn)換因?yàn)槿鄙贂r(shí)鐘約束而失敗。在許多情況下,轉(zhuǎn)換失敗是由約束不完整造成的。舉例來(lái)說(shuō),門(mén)控邏輯中可能存在一個(gè)組合回路,應(yīng)在時(shí)鐘轉(zhuǎn)換之前利用異常處理約束將其打破。綜合編譯階段之后會(huì)提供一個(gè)門(mén)控時(shí)鐘報(bào)告,告訴您有哪些門(mén)控和生成時(shí)鐘已被轉(zhuǎn)換以及被轉(zhuǎn)換時(shí)鐘的名稱(chēng)、類(lèi)型、分組和相關(guān)約束。另一個(gè)時(shí)鐘列表則顯示的是未轉(zhuǎn)換的時(shí)鐘,并包含故障信息,用于說(shuō)明原因。圖2給出了報(bào)告實(shí)例。
舉例來(lái)說(shuō),如果設(shè)計(jì)中有黑盒子,您可以在RTL中指定具體的軟件命令,用于為自動(dòng)化門(mén)控時(shí)鐘轉(zhuǎn)換提供輔助。比方說(shuō),采用syn_gatedclk_clock_en指令在黑盒子中指定啟用引腳的名稱(chēng),用syn_gatedclk_clock_en_polarity指令指出黑盒子上時(shí)鐘使能端口的極性。每個(gè)轉(zhuǎn)換實(shí)例和驅(qū)動(dòng)實(shí)例的時(shí)鐘引腳都被賦予一個(gè)可搜索的屬性,從而能在設(shè)計(jì)數(shù)據(jù)庫(kù)中識(shí)別,并提取到定制TLC/Find腳本生成報(bào)告中。
評(píng)論