• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > 技术文章 > 验证复用技术确保设计符合预定要求

验证复用技术确保设计符合预定要求

录入:edatop.com    点击:

系统级芯片是由已经设计好的模块组成的,设计人员事先已考虑到了各个方面,并对每一部分都进行了检验,现在只需要把这些模块组合起来,集成为一个完整的系统即可。但问题是怎样使集成好的系统能像各个模块一样可靠完整呢?怎样以最快的速度完成呢?如何才能在一项工作完成之后再集成另一个芯片时,尽管每一步都不同也不会觉得又是完全从头开始呢?本文介绍利用验证复用技术对芯片进行测试,确保设计符合原来预定的要求。

在设计复用中,验证就像汽车的刹车一样,我们都知道如何制作结构模块,怎样使接口标准化并使用兼容的后端流程,但恰恰是验证使我们无法再高兴下去。的确,我的模块和你的模块都有很好的测试平台和测试软件,然而将它们放在一起时,却需要新的测试平台和全新的测试,每一个集成步骤都好像要重新来过。验证不像其它设计任务那样可以累积,这就是为什么随着设计变得越来越大,花在验证上的时间也越来越多。下面介绍一些方法使验证工作能够重复使用,这样项目的集成就是可以预测的而不是掉入一个无底洞。我们以国家半导体公司的Geode GX2为例,许多此类想法都是针对Geode系列集成处理器开发的,而GX2项目也证明了这种方法非常成功。

验证环境包含许多部分,如测试平台组件、测试软件、随机测试生成器、测试计划、规定条件和覆盖范围分析,要想解决集成瓶颈,上述所有部分在下一结构层次也必须可重复使用,这些验证部分的建立和调试时间将比花在设计模块本身上面的还要多,如果不能重复利用,这部分工作将难以想象。

验证复用既不简单也不轻松,需要做大量工作以使验证环境不仅好而且可以复用,但结果是很明显的。下面首先介绍在模块级如何进行验证,然后说明需要验证组合模块时如何复用模块验证工作。

测试平台组件

测试平台组件可以激励设计并观察评估其反应特性。测试平台必须是针对待测模块的,我们发现通过将测试平台以某种规范方式组织起来,并使各组件之间通信方式标准化之后,将可在下一级集成时再利用这些组件。

一个模块规范测试平台包括测试阅读器、处理器、监视器、仿真器和检验器。测试阅读器读取测试语言并将其转化为一系列命令转给处理器,处理器驱动待测模块输入信号,监视器观察模块的反应特性并按照事件序列做出报告。

仿真器是设计参考模块,我们用C++编写仿真程序,这些仿真程序是对事件处理精确而不是对周期精确。给仿真程序输入和处理器相同的命令序列,它将产生我们认为模块应该具有的反应序列。

检验器得到从仿真程序输出的事件数据流和从监视器输出的事件数据流,将两者进行比较并将不匹配作为错误报告出来。

许多设计人员习惯于在测试平台中使用监视器和处理器,却将仿真器和检验器视为额外的工作。编写自查测试或使用判定语句和智能监视器来查找错误确实比较简单,但我们发现编写仿真程序和傻瓜式监视器及检验器常常比编写智能监视器更加简单,它使得测试不必检查其自身,这样随机测试更加容易。图1:带有存储控制器和显示控制器的混合式测试平台。闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...

这种测试平台组织方法的真正优越性还体现在集成上。例如可以凑出一个测试平台,用另一个模块的仿真程序来驱动处理器而不用自己的测试程序,这样可以在不更改模块的前提下运行另一模块的所有测试。或者也可以使用两个监视器、两个仿真器和两个检验器分别说明两个模块,如果原模块输入是点对点来自于另一个模块,则只要去掉原处理器运行另一个模块测试程序即可;如果原模块输入是多路驱动器总线,则可以保留两个处理器同时进行两个测试,每个测试的内容从各模块测试程序中选取。通过在模块级测试平台上做一些额外工作,可以得到能在集成测试平台使用的组件。

这种复用性能可一直延伸到结构最上层,通过将仿真器和处理器混合匹配在一起,你可以测试任意组合形式模块而无需设计新的测试平台组件。

Geode GX2设计小组针对每个主要模块使用一种测试平台,如存储器控制器、PCI接口、处理器内核和显示控制器(图1),我们将各部件组合起来做成组合模块测试平台,到项目收尾阶段我们使用了40个不同的测试平台,这些测试平台都共享测试组件。

测试计划

每一个验证环境都应该有一个测试计划,建议你将它写下来。测试计划就像锻炼一样:我们知道应该做,但有时就是不想做,因为太麻烦。计划做好后应将整个小组集合起来,集思广益讨论测试方法,要经常这样做而且越早越好。测试计划也应是可重复利用的,我们选择一个可以描述极端情况的简单格式,然后记下这些情况是否已被考虑,以及由哪个测试完成。如果测试计划使用通用语言,还可以有一些工具能根据计划追踪进度,并且在到达集成时将测试计划累积起来。

有关验证一个很困难且无法回避的事实是,没有什么可以替代用手工仔细编写的测试程序。这是一种劳动密集型工作,其编写和调试非常单调乏味。但如果谁要能够编写覆盖极端情况的测试程序,那么他将是一个很好的逻辑设计师,事实上模块设计师应该编写大部分测试程序,在数字设计中黑盒测试和白盒测试都很重要。

我们设计了一个C++应用程序接口作为外围模块测试语言,而将X86汇编语言用于处理器内核。但是具体的测试语言要根据设计类型决定,测试语言越少越好,这一点很重要,最好是只有一种。如果不同的模块可以用同一语言进行测试,那么在硬件运行这些测试或今后设计采用新模块组合时可以节约大量人工。

验证的一个重要部分是随机测试,对Geode GX2我们编写了上千条测试程序并生成了更多的随机测试。我们对想得到的任何事情进行随机处理:中断、停止、调试中断、探测、存储器延迟、I/O延迟、仲裁形式等等,如果随时都可以用两种方法,那么确保两个都做,并在两者之间进行均衡。

设计中有些地方只有逻辑设计师知道,他们需要将这些部分作为规定内容进行编码,然后在每次仿真时都可自动进行检查。规定内容就像一个微型监视器,它可检查一些条件并且在违反这些条件时使测试失效。例如你可以规定两个信号不能在同一时刻出现,或一个信号不能在另一个信号的六个周期内出现,或FIFO不能溢出等等。无论怎样规定和定义数字接口,我们总要假设接口是怎样使用的,并经常在口头上对其它设计师讲清这些假设。我们应该做一些额外的工作将假设作为一个规定写到设计中去,这样两年后当你不认识的人使用你的设计时,或者接口协议有轻微改变时,都可以容易地取消这些规定直接解决问题。

一些设计人员喜欢这种规定是因为它们使调试变得十分简单,而有些人则必须要经过劝说他们才会使用。其实这是很值得的,它将使你的设计更加完善。由于它们是模块RTL逻辑的一部分,所以对集成复用并不重要。这种规定的另一个好处是可将它们提供给静态规则检查器,我们在Geode GX2上使用了等效检查器而不是静态规则检查器。正式检验工具在特性和处理复杂性方面发展得很快,即使有好的测试计划、好的测试平台和随机测试,验证也只是一个没有覆盖范围分析的开环过程,只有覆盖范围分析能告诉你所做的工作状况怎样并显示哪些地方仍需要关注。最为成熟的覆盖工具是代码覆盖工具,它能检查所有已编写并正在使用的代码,或设计中正在摆动的每一个信号、设计中每个翻转的触发器等等。Geode GX2小组使用的代码覆盖工具结果在90%到99%之间,我们还计划了一个功能覆盖工具但后来没有时间和资源来实现它。

总而言之,只在模块自身环境下对其进行测试集成是不够的,需要运行一些高级测试,必须在集成以后再利用验证组件(包括测试程序、测试生成器、测试平台设备、覆盖范围分析等等)对每个模块进行彻底的测试。当可以重复利用所有这些工作时,这种集成就将仅仅只是集成而不是全部再从头设计。

作者:Will Walker

高级工程经理

国家半导体公司

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:SoC设计中基于PCI子系统的一体化验证解决方案
下一篇:倒装芯片焊点的可靠性研究

闂傚倷娴囬褏鎹㈤幇顔藉床闁归偊鍠掗崑鎾愁潩椤愩垹绁梺闈涙閸婂骞戦崟顒傜懝妞ゆ牗纰嶅▍濠囨⒒娓氣偓濞佳囨晬韫囨稑鐒垫い鎺戝閽冪喖鏌曢崼婵愭Ч闁稿鍔嶉妵鍕冀閵婏妇娈ゆ繝鈷€鍕闁哄矉缍侀獮妯兼喆閸曨厹鈧﹪姊洪悷鏉挎Щ妞ゆ垵顦甸妴浣割潨閳ь剟骞冮姀銈呭窛濠电姴瀚▓顔剧磽閸屾艾鈧绮堟笟鈧、鏍箣閿曗偓缁狀垶鏌ㄩ悤鍌涘 | More...
微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图