微波EDA网,见证研发工程师的成长! 2025婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌熺紒銏犳灍闁稿骸顦…鍧楁嚋闂堟稑顫岀紓浣哄珡閸パ咁啇闁诲孩绋掕摫閻忓浚鍘奸湁婵犲﹤鎳庢禍鎯庨崶褝韬┑鈥崇埣瀹曠喖顢橀悙宸€撮梻鍌欑閹诧繝鎮烽妷褎宕叉慨妞诲亾鐎殿喖顭烽弫鎰緞婵犲嫷鍚呴梻浣瑰缁诲倸螞椤撶倣娑㈠礋椤撶姷锛滈梺缁樺姦閸撴瑩宕濋妶鍡欑缁绢參顥撶弧鈧悗娈垮枛椤兘骞冮姀銈呭窛濠电姴瀚倴闂傚倷绀侀幉锟犲箰閸℃稑宸濇い鏃傜摂閸熷懐绱撻崒姘偓鎼佸磹閻戣姤鍤勯柤鎼佹涧閸ㄦ梹銇勯幘鍗炵仼闁搞劌鍊块弻娑㈩敃閿濆棛顦ラ梺钘夊暟閸犳牠寮婚弴鐔虹闁绘劦鍓氶悵鏇㈡⒑缁嬫鍎忔俊顐g箞瀵鈽夊顐e媰闂佸憡鎸嗛埀顒€危閸繍娓婚柕鍫濇嚇閻涙粓鏌熼崙銈嗗04闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨奸柟鐧哥秮閺岋綁顢橀悙鎼闂侀潧妫欑敮鎺楋綖濠靛鏅查柛娑卞墮椤ユ艾鈹戞幊閸婃鎱ㄩ悜钘夌;闁绘劗鍎ら崑瀣煟濡崵婀介柍褜鍏涚欢姘嚕閹绢喖顫呴柍鈺佸暞閻濇洟姊绘担钘壭撻柨姘亜閿旇鏋ょ紒杈ㄦ瀵挳濮€閳锯偓閹风粯绻涙潏鍓хК婵炲拑绲块弫顔尖槈閵忥紕鍘遍梺鍝勫暊閸嬫挻绻涢懠顒€鏋涢柣娑卞櫍瀵粙顢樿閺呮繈姊洪棃娑氬婵炶绲跨划顓熷緞婵犲孩瀵岄梺闈涚墕濡稒鏅堕柆宥嗙厱閻庯綆鍓欐禒閬嶆煙椤曞棛绡€濠碉紕鍏橀崺锟犲磼濠婂啫绠洪梻鍌欑閹碱偄煤閵娾晛纾绘繛鎴欏灩閻掑灚銇勯幒鍡椾壕濠电姭鍋撻梺顒€绉撮悞鍨亜閹哄秷鍏岄柛鐔哥叀閺岀喖宕欓妶鍡楊伓22闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨奸柟鐧哥秮閺岋綁顢橀悙鎼闂侀潧妫欑敮鎺楋綖濠靛鏅查柛娑卞墮椤ユ艾鈹戞幊閸婃鎱ㄩ悜钘夌;闁绘劗鍎ら崑瀣煟濡崵婀介柍褜鍏涚欢姘嚕閹绢喖顫呴柍鈺佸暞閻濇牠姊绘笟鈧埀顒傚仜閼活垱鏅堕幍顔剧<妞ゆ洖妫涢崚浼存懚閺嶎灐褰掓晲閸噥浠╁銈嗘⒐濞茬喎顫忓ú顏呭仭闁规鍠楅幉濂告⒑閼姐倕鏋傞柛搴f暬楠炲啫顫滈埀顒勫春閿熺姴绀冩い蹇撴4缁辨煡姊绘担铏瑰笡闁荤喆鍨藉畷鎴﹀箻缂佹ḿ鍘遍梺闈浨归崕鎶藉春閿濆洠鍋撳▓鍨灈妞ゎ參鏀辨穱濠囧箹娴e摜鍘搁梺绋挎湰閻喚鑺辨禒瀣拻濞达絽鎳欒ぐ鎺戝珘妞ゆ帒鍊婚惌娆撴煙鏉堟儳鐦滈柡浣稿€块弻銊╂偆閸屾稑顏� 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨奸柟鐧哥秮閺岋綁顢橀悙鎼闂侀潧妫欑敮鎺楋綖濠靛鏅查柛娑卞墮椤ユ艾鈹戞幊閸婃鎱ㄩ悜钘夌;闁绘劗鍎ら崑瀣煟濡崵婀介柍褜鍏涚欢姘嚕閹绢喖顫呴柣妯荤垹閸ャ劎鍘遍柣蹇曞仜婢т粙鎮¢姘肩唵閻熸瑥瀚粈鈧梺瀹狀潐閸ㄥ潡銆佸▎鎴犵<闁规儳澧庣粣妤呮⒒娴e憡鍟炴い顓炴瀹曟﹢鏁愰崱娆屽亾濞差亝鍊垫鐐茬仢閸旀碍绻涢懠顒€鈻堢€规洘鍨块獮姗€鎳滈棃娑欑€梻浣告啞濞诧箓宕滃☉銏℃櫖婵炴垯鍨洪埛鎴︽煕濞戞ǚ鐪嬫繛鍫熸礀閳规垿鎮欑拠褑鍚梺璇″枙閸楁娊銆佸璺虹劦妞ゆ巻鍋撻柣锝囧厴瀹曞ジ寮撮妸锔芥珜濠电姰鍨煎▔娑㈩敄閸℃せ鏋嶉悘鐐缎掗弨浠嬫煟濡櫣浠涢柡鍡忔櫅閳规垿顢欓懞銉ュ攭濡ょ姷鍋涢敃銉ヮ嚗閸曨垰绠涙い鎺戝亰缁遍亶姊绘担绛嬫綈鐎规洘锕㈤、姘愁樄闁哄被鍔戞俊鍫曞幢閺囩姷鐣鹃梻渚€娼ч悧鍡欌偓姘煎灦瀹曟鐣濋崟顒傚幈濠电偛妫楃换鎴λ夐姀鈩冨弿濠电姴鎳忛鐘电磼鏉堛劌绗掗摶锝夋煠婵劕鈧倕危椤掑嫭鈷掑ù锝呮嚈瑜版帗鏅濋柕鍫濇嫅閼板潡姊洪鈧粔鎾倿閸偁浜滈柟鍝勭Х閸忓矂鏌涢悢鍝ュ弨闁哄瞼鍠栧畷娆撳Χ閸℃浼�濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻橀弻锝夊箣閿濆棭妫勯梺鍝勵儎缁舵岸寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閹冣挃缂侇噮鍨抽幑銏犫槈閵忕姷顓哄┑鐐叉缁绘帗绂掓ィ鍐┾拺缂佸顑欓崕宥夋煕婵犲啰绠炵€殿喖顭峰鎾偄閾忚鍟庨柣鐔哥矊缁夌懓鐣烽鐑嗘晝闁挎棁妫勯埀顒冩硾閳规垿鎮╅崣澶婎槱闂佹娊鏀遍崹鍧楀蓟閻旇櫣鐭欓柟绋垮瀹曞磭绱撴担鍝勑i柟绋款煼婵$敻宕熼娑欐珕闁荤姴娲╃亸娆愮椤栨粎纾藉〒姘搐閺嬫稒銇勯鐘插幋闁靛棔绀侀埥澶愬閳ユ枼鍋撻悜鑺ュ€甸柣銏㈡閻熼偊鍤曢柟鎯板Г閳锋帒霉閿濆牊顏犻悽顖涚⊕缁绘盯宕f径灞解拰閻庤娲橀崝娆忕暦閻戠瓔鏁囨繛鎴灻兼竟鏇炩攽椤旂粨缂氶柛瀣尵閳ь剚鐔幏锟�
首页 > PCB和SI > EDA和PCB设计文库 > 如何快速解决隔离FPGA设计中的错误

如何快速解决隔离FPGA设计中的错误

时间:08-26 来源:3721RD 点击:

如果您的FPGA设计无法综合或者没能按预期在开发板上正常工作,原因往往不明,要想在数以千计的RTL和约束源文件中找出故障根源相当困难,而且很多这些文件还可能是其他设计人员编写的。考虑到FPGA设计迭代和运行时间的延长,设计人员应该在设计流程的早期阶段就找出可能存在的诸多错误,并想方设法重点对设计在开发板上进行验证。

在特定条件下采用更智能的技术来隔离特定错误,找到问题电路的源头并渐进式修复错误,这很重要。为了节省时间,您可以对时钟、约束和模块级接口进行初步设置检查以确保符合设计规范,这样就不必在综合与布局布线(P

Synopsys公司的Synplify Premier和Synplify Pro FPGA设计工具以及Identify RTLDebugger等产品能帮助设计人员完成上述工作。这些工具的特性使得设计人员能快速隔离错误,有效缩短运行时间,并减少开发板启动所需的迭代次数。

精确找到开发板上的问题

如果开发板出现明显的功能性错误,要缩小查找问题根源的范围可能会相当困难。为了进行设计调试,我们应当创建附加电路并保留某些节点,以便我们对设计运行时得到的数据进行探测、检查和分析。下面我们就看看如何用板级调试软件来查找错误。

按下列四步法并利用RTL调试器,您能精确查找问题,并对信号和关注的条件采样,然后将观察结果关联至原始RTL,从而将问题锁定在RTL规范或约束设置范围内。

第一步:指定探测。在RTL中明确要监控哪些信号和条件。在此要声明您所感兴趣的观察点(要观察的信号或节点)和断点(RTL控制流程声明,如IF、THEN和CASE等)。

第二步:通过探测构建设计。利用附加的监控电路--即用于根据您的监控要求捕捉并导出调试数据的智能内部电路仿真器(IICE)--对FPGA设计进行综合。

第三步:分析和调试。设计综合完成之后,运行设计并用RTL调试器观察数据。在开发板上运行测试时,观察点和断点共同触发数据采样,使您能在您所关注的非常明确的条件下观察并调试特定节点的电路的行为。您可将观察到的采样数据写入VCD文件并将其关联到RTL.

第四步:渐进性修复错误(incrementaLfix)。一旦找到了错误所在,就可以通过分级、渐进式流程在RTL或约束中渐进地进行修复。

时序和功能性错误的可视检查

FPGA设计和调试工具还有一大优点,就是能显示RTL和网表级原理图。举例来说,具有互动调试功能的原理图查看器能够显示设计的RTL和网表原理图,便于您进行观察并将时序报告和VCD数据(设计在开发板上运行时产生)关联至RTL源文件。查看器包含一个RTL视图,用来以图示的方式描述设计。该视图在综合RTL编译阶段后提供,由技术独立的加法器、寄存器、大型多路选择器和状态机等组件构成。通过RTL原理图,您可以交叉探测原始RTL,对不符合预定规范的设计进行调整,同时也可以探测到约束编辑器,从而更简便地更新和指定约束(图1)。

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閹冣挃闁硅櫕鎹囬垾鏃堝礃椤忎礁浜鹃柨婵嗙凹缁ㄥジ鏌熼惂鍝ョМ闁哄矉缍侀、姗€鎮欓幖顓燁棧闂備線娼уΛ娆戞暜閹烘缍栨繝闈涱儐閺呮煡鏌涘☉鍗炲妞ゃ儲鑹鹃埞鎴炲箠闁稿﹥顨嗛幈銊╂倻閽樺锛涘┑鐐村灍閹崇偤宕堕浣镐缓缂備礁顑呴悘婵嬫倵椤撶喍绻嗛柕鍫濈箳閸掍即鏌涢悤浣镐簽缂侇喛顕ч埥澶娢熻箛鎾剁Ш闁轰焦鍔欏畷銊╊敊鐠侯煈鏀ㄧ紓鍌氬€风粈渚€顢栭崟顖涘殑闁告挷鐒﹂~鏇㈡煙閹规劦鍤欑痪鎯у悑閹便劌顫滈崱妤€骞嬮梺绋款儐閹瑰洭骞冨⿰鍫熷殟闁靛鍎崑鎾诲锤濡や胶鍙嗛梺鍝勬处濮樸劑宕濆澶嬬厵闁告劘灏欓悞鍛婃叏婵犲嫮甯涢柟宄版嚇瀹曘劍绻濋崒娑欑暭闂傚倷娴囧畷鐢稿窗閸℃稑纾块柟鎯版缁犳煡鏌曡箛鏇烆€屾繛绗哄姂閺屽秷顧侀柛鎾寸懇椤㈡岸鏁愰崱娆戠槇濠殿喗锕╅崢鍏肩濠婂懐纾奸柣鎰靛墮椤庢粌顪冪€涙ɑ鍊愮€殿喗鐓¢、妤呭礋椤戣姤瀚奸梻浣告贡鏋繛鎾棑缁骞樼€靛摜顔曢柣鐘叉厂閸涱厼鐓傞梺杞扮閻楀﹥绌辨繝鍥ч柛娑卞枛濞呫倝姊虹粙娆惧剬闁告挻绻勯幑銏犫攽閸モ晝鐦堥梺绋挎湰缁嬫垵鈻嶉敐鍜佹富闁靛牆绻掗崚浼存煏閸喐鍊愭鐐插暞缁傛帞鈧絽鐏氶弲顒€鈹戦悙鏉戠仸閽冮亶鎮归崶鈺佷槐婵﹨娅i幏鐘诲灳閾忣偆浜堕梻浣藉吹閸o附淇婇崶顒€绠查柕蹇曞Л閺€浠嬫倵閿濆簼绨介柛濠勫仱濮婃椽妫冨ù銈嗙洴瀹曟﹢濡搁妷顔藉枠濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁炬崘顫夐妵鍕冀椤愵澀绮堕梺缁樺笒閻忔岸濡甸崟顖氱闁瑰瓨绻嶆禒鑲╃磼閻愵剙鍔ゆい顓犲厴瀵鎮㈤悡搴n槶閻熸粌绻掗弫顔尖槈閵忥紕鍘介梺瑙勫劤椤曨厼煤閹绢喗鐓欐い鏃傜摂濞堟粓鏌℃担鐟板闁诡垱妫冮崹楣冩嚑椤掍焦娅﹀┑鐘垫暩婵參骞忛崘顔肩妞ゅ繐鍟版す鎶芥⒒娓氣偓閳ь剚绋撻埞鎺楁煕閺傝法肖闁瑰箍鍨归埞鎴犫偓锝庝簻缁愭稑顪冮妶鍡樼闁瑰啿绉瑰畷顐⑽旈崨顔规嫽婵炶揪绲介幉锛勬嫻閿熺姵鐓欓柧蹇e亝鐏忕敻鏌嶈閸撴艾顫濋妸锔芥珷婵°倓鑳堕埞宥呪攽閻樺弶鎼愮紒鐘垫嚀闇夐柨婵嗙墕閳ь兛绮欐俊鎼佸煛閸屾粌寮抽梻浣告惈閸熺娀宕戦幘缁樼厱閹艰揪绱曢敍宥囩磼鏉堚晛浠辨鐐村笒铻栧ù锝呭级鐎氫粙姊绘担鍛靛綊寮甸鍕仭闁靛ň鏅涚粈鍌溾偓鍏夊亾闁告洦鍓涢崢鐢告⒑閹勭闁稿鎳庨悾宄扮暆閳ь剟鍩€椤掑喚娼愭繛鍙夌矒瀵偆鎷犲顔兼婵炲濮撮鎰板极閸ヮ剚鐓熼柟閭﹀弾閸熷繘鏌涢悙鍨毈婵﹦绮幏鍛存嚍閵壯佲偓濠囨⒑闂堚晝绉剁紒鐘虫崌閻涱喛绠涘☉娆愭闂佽法鍣﹂幏锟�...

要将错误操作的源头追溯到RTL,您可以利用RTL调试器在RTL原理图上方实时插入观察到的操作数据。

原理图查看器包括一个网表级技术视图,用于显示综合后的实际设计实现情况。在HDLAnalyst原理图查看器中,该视图基于查找表、寄存器和DSP slice等基本的赛灵思器件原语。您可在原理图中对路径进行交叉探测,追溯到原始的RTL以及综合后和布局布线后的最终时序报告,以便分析和提高整体性能。

在FPGA中原型设计的ASIC门控时钟结构并非FPGA实现中的必要环节,这会导致FPGA资源使用效率低下。解决该问题的有效办法就是用FPGA综合软件转换时钟。

大型设计的调试

在大型设计中探测所有信号是不可能,因为生成的数据量极为庞大,而且探测数据所需的额外调试逻辑也太大。片上调试方法的一个常见弊病是难以提前预测需要对哪些信号进行探测和监控。

一些调试软件通过分治法能够在一定程度上解决这个问题。利用多路复用的采样组,设计人员可以有选择性地进行采样并通过多路复用的路径和共享的IICE在信号组之间切换。这种方法增加了可观察的信号和条件,而且不会增加数据存储要求。您可以即时切换感兴趣的信号组,不必花时间进行重新调整或重新综合新的设计。

不幸的是,在探测和采样数据时用使的调试IICE逻辑会占用包括存储器BRAM在内的芯片资源。您可在SRAM存储卡中对IICE采样数据进行片外存储,以减少片上BRAM的使用。这种方法的另一个好处是能增加采样数据的深度。

我的设计无法综合

设计错误的出现可能导致无法实现有效综合或布局布线。由于存在成千上万的RTL和约束源文件,因此可能需要几个星期才能完成首次综合与布局布线。进行FPGA原型设计时,应让ASIC设计源文件处于"FPGA就绪"状态。举例来说,就是要进行门时钟转换。

在FPGA中原型设计的ASIC门控时钟结构并非FPGA实现中的必要环节,这会导致FPGA资源使用效率低下。解决该问题的有效办法就是用FPGA综合软件转换时钟。例如,门控或生成时钟转换功能可将生成时钟和门控时钟逻辑从顺序组件的时钟引脚转移到使能引脚,这样您就能将顺序组件直接绑定到源时钟,消除偏移问题,并减少设计中所需的时钟源数量,进而节约资源。

在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门上执行门控时钟转换。

"完整"的系列时钟约束包括在所有正确位置定义时钟并在生成的时钟之间定义关系。有时候,时钟会出于某种原因与真正的源断开关联,例如时钟源和时钟目标端间产生了黑盒,这样会造成顺序组件的时钟缺失或时钟约束放置错误,导致首次时钟转换因为缺少时钟约束而失败。在许多情况下,转换失败是由约束不完整造成的。举例来说,门控逻辑中可能存在一个组合回路,应在时钟转换之前利用异常处理约束将其打破。综合编译阶段之后会提供一个门控时钟报告,告诉您有哪些门控和生成时钟已被转换以及被转换时钟的名称、类型、分组和相关约束。另一个时钟列表则显示的是未转换的时钟,并包含故障信息,用于说明原因。图2给出了报告实例。

举例来说,如果设计中有黑盒子,您可以在RTL中指定具体的软件命令,用于为自动化门控时钟转换提供辅助。比方说,采用syn_gatedclk_clock_en指令在黑盒子中指定启用引脚的名称,用syn_gatedclk_clock_en_polarity指令指出黑盒子上时钟使能端口的极性。每个转换实例和驱动实例的时钟引脚都被赋予一个可搜索的属性,从而能在设计数据库中识别,并提取到定制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"。

约束的清除

指定充足且正确的约束将影响到结果质量和功能。约束声明通常应包括三个元素:主时钟和时钟组定义、异步时钟声明、错误和多循环路径声明。

进行综合之前检查约束是一个很好的方法。提供约束查看器的工具能发现语法错误并分析时序约束和实例名称是否适用,警示问题所在。比方说,它会报告通配符扩展后约束如何应用以及在定义时钟约束后产生的时钟关系。它会标出那些由于参数或对象类型无效或不存在而未被应用的时序约束。

进行综合之前,在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选项。

栏目分类

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top