2011年10月29日 星期六

驗證計畫(九)

测试平台方法

使用测试平台方法,有兩種注入測試值的方法

一種是直接使用手工寫作的直接測試例
另一種是設定範圍的隨機值產生的測試例。目前,测试平台自动化最好的方法是覆盖率驱动的基于随机的方法

1. 手工寫作的直接測試例
这种方法适用于测试用例数量较少的情况,如果测试用例的总数在
几百件以内,那么这种方法是可行并可管理的。但随着测试用例数目的增加,测试平台的数目
也会增加。一个有上千个测试用例的项目如果使用直接的测试平台会需要超过一年的时间来完
成。对于一个有更大数目测试用例的项目,有必要使用隨機值產生的測試例

2. 覆盖率驱动的可约束的随机验证方法
在随机验证时,设计输入的是有效的单个操作,如一个读周期或一个以太网数据包。这些操作的顺序和时序以及输送的数据内容是随机的。通过附加的约束,可以控制随机的测试平台朝特定功能的验证发展。

心疾

心不放下,要藥何用
心若放下,有何需藥
心自是藥,藥即是心
心藥無藥,放藥放心


聽論心得

2011年10月28日 星期五

驗證計畫(八)

可验证的设计

1. 确认那些难以验证的功能
在验证计划的这一步,我们要确认那些难以验证的功能。它们之所以难以验证,是因为所
选择的设计划分缺乏对这些功能的可控制能力或可观察能力。將特別難以驗證的部份IP化,
在整合前就將內部細節完整的驗證過,是解決此類問題的良好方法歐。

2. 修改设计来帮助验证
将验证计划提前的好处是你仍有机会修改设计的实现。如果一些功能被证明在目前设计的
结构和功能集里是难以验证的,就可以修改设计,增加一些附加的功能来辅助验证。硬件工程
师无疑会抱怨这些实际并不需要增加的功能,但他们还能有什么选择呢?这些功能在系统集成
的实验里被证明总是有用的。這是大部分Designer最討厭作的事,因為普通designer都會直覺得認為自己設計的已經是最佳化的,無法再去改變了。其實最大的原因是懶的改了。
針對驗證所修改的設計才是真正可以當作IP來reuse 。因此所需花的心力就會成倍數增加,
最好是在RTL 中嵌入block 的assertion,以確保內部自我測試的完整性。

3. 提供状态预加载功能
如果设计中包含很长的计数器或复位后成百上千个周期后才能达到的状态条件,那么就要
确保它们可以通过内存映射的寄存器预先加载任意值。理想情况下,可以通过相同的寄存器组
回读它们的值。提供可轉入特殊模式或狀態的觸發方法,此法可以針對可能的狀態作直接的測試。如Green/test/sleep mode 的直接進入方法。此法最好不要用force的方式來介入。


4. 提供数据通道旁通的路径
如果没有对所有操作数详细控制,那么很长的数据通道的正确实现也会难以验证。例如,
语音合成器是一个简单的数字信号处理设计,它有对随机噪声整形的数据通道  。虽然可以
控制完整的系数并应用到数据样本上以形成特定的声音,但无法控制一个关键元素:最先的
输入数据。那是一个随机数。为了正确验证这个数据通道的操作,需要控制它的初始输入值。
此法有點類似法3,但是此法是為了加快或直接測試一個大型運算系統的中後部的單元。在直接使用旁通的方法來注入測試值到某一系統單元,可以節省不少測試的時間。此時最好有完整的比對模型可以針對此類驗證提供良好的比對數值。

5. 提供采样点
如果可观察能力而不是可控制能力是个难点,可以通过内存映射的寄存器加入一些可读出
的采样点,这样可以方便一些功能的验证。如果分配给设计的地址空间很宝贵,这些采样点可
以用多路选择器共享同一地址空间,用第二个地址来选择当前的采样点。
針對某一資料區塊,可以在測試中提供不同的讀取方法,以利作比對之用。

6. 提供错误注入机制
如果设计包含错误和异常检测机制,你可能想提供一种方法强制发生错误检测或异常检
测。例如,在验证中断屏蔽能力时,如果要强制设计进入每一个异常条件,那么验证是十分费
时的。如果一个简单的寄存器写操作可以手工地触发相同的中断,那么验证起来就容易多了。
基本上注入的數值我們是採用隨機方式,但如果我們已大約知道某一數值範圍是較容易出錯的地方,可將隨機比重加強於較易出錯之處。又如果設計中有加入容錯機制,我們可以將注入的數值再加上一個隨機的高斯雜訊值,來測試設計的強健性。

当然,异常条件对中断的触发仍然需要验证。要仔细地考虑把错误注入包含进设计的决定。如果这仅仅是为了硬件的验证,那么可能不会出现在给软件工程师的说明书里。当一个器件的驱动程序写入一个它认为无害的值时,这个功能可能会被偶然地打开。

此文中的藍色部分的,是本人工作上所遇到的情況與想法。若是有誤請勿見怪

2011年10月27日 星期四

驗證計畫(七)

给功能驗證分配优先级

1. 一些功能对于设计功能的正确性或满足市场要求来说是“必须拥有”的,完成这些功能的验证开启了成功完成整个项目的大门,而验证这些功能的测试平台是最关键的部分。“必须拥有”的功能需要对所有可能的配置和使用选项进行彻底的验证。

2. “应该拥有”的功能对于商业上成功的设计来说是第二位的。它们也许只是简单地提供功
能上的扩展或与其他竞争产品的差别。它们的主要验证目标是验证基本功能的正确操作,在时
间和资源允许的条件下对这些功能进行更详细的验证。如果时间进度压力很大,迫使资源都被
分配去验证更为重要的功能,那么这些功能的验证会被取消。

3. “最好拥有”的功能是可选的。只有在时间允许的条件下,才会用最简单的方式验证它们。
按照现实的设计进度表,这些功能永远不会被验证!

如果迫于进度压力需要取消计划中的一些验证项目,那么对待验证的功能划分优先级可以
使项目经理做出明智的决定。削减验证任务可以先从不重要的功能开始。如果项目完成的日期
对进度提出了更高的要求,使我们要放弃一些“必须拥有”功能的验证,那要保持清醒的头脑
来做这些决定,因为这些功能定义的优先级和最初的市场目标一样重要。削减对“必须拥有”
的功能的验证需要小心认真地对项目的市场目标进行重新评估。

Scientific Linux

可以取代Red Hat Enterprise Linux的open linux版本

與Centos相比,內容整理的更完整,

目前Red Hat正式版在4x系列
只出到4.8  而內部升級版為4.9

而Scientific Linux已經有釋出4.9

5x系列
Scientific Linux的內部更為完整
包含有designer常用的nedit
省掉了許多麻煩

請參考wiki
http://zh.wikipedia.org/wiki/Scientific_Linux

2011年10月26日 星期三

難倒老外

只有華人能懂的笑話


“方便”是什麼?

有一剛學過點兒中文的美國老外來到中國,中國朋友請他吃飯。 到了飯店落座,中國朋友說:「對不起,我去方便一下。」 見老外不明白,在座的中國朋友告訴他說「方便」 在中文口語裏是「上廁所」的意思。 哦,老外意會了。 ! 席中,中國朋友對老外說:「希望我下次到美國的時候,你能幫助提供些方便。」 老外納悶了:他去美國,讓我提供些廁所幹嗎? 道別時,另一位在座的中國朋友熱情地對老外說:「我想在你方便的時候請你吃飯。」 見老外驚訝發愣,中國朋友接著說:「如果你最近不方便的話,咱們改日。……」 老外無語。 「……咱找個你我都方便的時候一起吃飯。」 老外隨即倒地!


「乳」字的解釋
一位老師正在向老外學生解釋「乳」字的含義:乳即是小的意思,比如乳鴿、乳豬等。 講解完後,老師要求老外學生用乳字造句。 老外學生:因為現在房價太高了,所以我家只能買得起50平方米的乳房。 老師冒著冷汗說:「再造一個!」 老外學生:我年紀太小,連一米寬的乳溝都跳不過去! 老師冷汗如雨下說:「再造一個!」 老外學生:老師我真的想不出來了,我的乳頭都快想破了!


「意思」的意思 
某老外苦學漢語10年,到中國參加漢語考試。
試題為,! 請解釋下文中每個「意思」的意思 :
阿呆給領導送紅包時,兩個人的對話頗有意思。
領導:「你這是什麼意思?」
阿呆:「沒什麼意思,意思意思。」
領導:「你這就不夠意思了。」 !
阿呆:「小意思,小意思。」
領導:「你這人真有意思。」
阿呆:「其實也沒有別的意思。」
領導:「那我就不好意思了。」
阿呆:「是我不好意思。」

於是老外淚流滿面,交白卷回國了。

驗證計畫(六)

从设计规范到功能驗證

编写验证计划的第一步是确定要被验证的功能。从规范文档中可以列举出它所描述而且
要被验证的所有功能。其他的项目组成员,尤其是系统结构和RTL设计师,进一步补充待验证
的功能,对不熟悉设计目的和特点的人,这些新增的功能在设计规范中可能不是非常明显。在
选择了某个特定的实现后,其他的某些功能可能会变得重要起来。

在“The Art of Verification”一书中,提出了一种系统的方法来提取有意义和相关的功能,首先观察1. 接口(interface),然后是2. 功能,最后是由3. 选定结构确定的边界情况(boundary)。

1. 列举基于接口的功能
对于待验证设计的每个接口,列举出必须验证的每个功能。基于接口的功能可以由以下问
题获得:
● 必须采用哪些事务激励?(input value)
● 值的范围是多少? (contraints)
● 事务的次序是怎样的? (sequence order)
● 相关的事务比例是多少? (weight)
● 设计应该能承受什么样的协议违返? (assertion)
● 这个接口与其他接口之间,或与内部设计结构之间有什么相关的相互影响?(assertion)
● 一个接口的事务是否需要与其他接口同步?(async )


2. 确定基于用途的功能
根据设计中的主要数据通路 (spec. define),列举出每个必须验证的变换和选择。基于用途的功能可以由以下问题获得:
● 所有有关的配置是什么?
● 可能发生的数据变换有哪些?
● 变换的顺序是什么?
● 触发变换的敏感数据值是什么?(event /irq)
● 影响每个变换的敏感值是什么?
● 变换后的数据在哪里终止?
● 数据顺序是怎样被影响的?
● 存在着什么错误检测机制,它们是怎样触发的?
● 错误机制怎样报告错误?
● 对错误的数据会发生什么?(anti-error value)

3. 列出基于结构的功能
在对设计的结构有了详细了解的基础上,给设计增加压力,将其推向极限的条件。
基于结构的功能可以由以下问题获得:
● 可以使一个缓冲器发生溢出或下溢吗?如果可以,会发生什么现象?(overflow )
● 哪里是资源的瓶颈?(bottleneck)
● 对这些资源的多个请求可能同时发生吗?(multi-request)
● 一个变换的路径是否会影响、阻止或阻塞其他的变换?


在驗證items标注各个功能
应该对每个功能进行标注,并加上简短的描述,描述部分要包括需要验证的条件和期望的
结果,而不是它是如何实现的。每个功能都应该与规范文档中详细描述它的那个部分或段落相
对应,规范文档最好也能与验证计划中的功能列表相对应。为每个功能确定适当的验证级别,
当出现问题时,功能标签应该以错误信息形式给出,把功能标签包含到错误信息中将有助于确
定哪部分可能出错和最终评定是否真正出错。(assertion items description)

为功能确定适当的验证级别
在列举功能时,要注意将它们包含在验证计划的适当验证级别中。有些功能适合在元件
(单元、可重用或ASIC)级验证,而有些必须在系统级验证。多数情况下,验证设计中的一个关键功能或模块总是与大量功能相关。如果实现那个功能或包含那个模块的单元没有被单独验\证,就需要重新考虑你的验证方法了,这可能暗示着为达到必要的可信度这个单元需要被单独验证。

2011年10月25日 星期二

在windows XP-32bits上使用虛擬PC來安裝64bits的客體

因為在Virtual Box及VMWare在安裝64bits的作業系統上是需要

1. 處理器必須支援硬體輔助虛擬化技術,例如Intel Virtualization Technology(Intel VT)、AMD Virtualization(AMD-V)或VIA VT等,皆是硬體輔助虛擬化技術。

2. 主機板必須啟用處理器所提供的硬體輔助虛擬化技術,有些板子預設關閉了這項功能,因此必須進到BIOS開啟,而且每家廠商在BIOS設定的位置、所用的名稱也各不相同(例如在我Asus P5B-E Plus的AMI BIOS設定,是以Intel VT專案代號Vanderpool Technology稱之)。細節可查閱廠商提供的手冊或直接詢問廠商。
也可以參考網址
http://www.microsoft.com/taiwan/windows/virtual-pc/support/configure-bios.aspx


如果想要知道我的Intel處理器是否支援 Intel® 虛擬化技術?
可以參考
http://www.intel.com/support/tw/processors/sb/cs-030729.htm



驗證計畫(五)

系统级验证

验证的重点是交互
单独的元件在由个人或组来规划和设计的过程中,都要假设它们将与其他元件相互影响。
这些由不同人给出的假设是错误的主要来源之一。系统级的验证因而着重考虑各个元件之间的
交互,而不是每个元件的功能实现问题,后者在元件级验证中会得到更好的验证。系统验证工
程师假设每个元件在功能上都是正确的。
因此各個單獨components/IPs的驗證要先完成,才有可能作系统级验证。

由于系统是逻辑划分的,它可以由任意个数的元件组成,而不必在意它们的物理位置。使
用和验证哪个系统取决于当前感兴趣和有意义的测试用例。为了减少前面的仿真过程,最好采
用可能的最小系统来执行指定的测试用例。然而,系统的数量有可能非常巨大,这时候需要定
义一组“标准”系统。在多个测试用例中可以采用相同的系统,即使这个系统包含了在某些情
况下并不需要的元件。(這是指Platfrom IP的觀念)

在系統級的驗證中包含了 FPGA及ASIC 設計的整合驗證
FPGA驗證中也一併需考慮到量產時的系統版的問題考量,
而ASIC驗證中則需考慮到除Normal狀態下的可能Power問題

2011年10月24日 星期一

驗證計畫(四)

可重用元件的验证Reusable Components Verification

只要可以不被修改地用于不同的设计中,就可以被稱作Reusable元件,
元件可以是RTL, Verification Unit, Firmware Codes, Layout Block ...

可重用元件被用在许多设计中,当对它们进行修改、问题修复或者增强扩展时,必须确保
它们向后兼容这可以由一个回归套件完成,回归套件用于验证元件在修改后的兼容性。除非
修改不是功能上的,否则无法采用常规的验证方法来比较修改前后是否相同。由于加入了新功
能或者修复了问题,新版本的设计与先前的设计不再等同。
也就是說,如果沒有向後相容的機制,就不會是可Reusable Component.

如果潜在的用户对一个元件的性能和可靠性的信任程度低于他们自己能够设计的元件,那
么这个元件是不可能被重用的。只有通过详尽、记录完好的验证过程,对元件正确性和健壮性
的展示才可能提升用户对产品的信任度。如此才可真正稱作為Reusable IP

2011年10月23日 星期日

驗證計畫(三)

单元级验证 Unit-Level  Verification

设计单元是逻辑上的划分。它们被用于帮助实现或综合过程,它们可小(例如FIFO 或状
态机)可大(PCI从接口或 DSP 数据路径)。由于实现的细化能够突出初始设计中的各个缺陷,设计单元的接口和功能也会随时间而改变。通常没有独立的规范文档来对每一个设计单元进行核实。

由于这些设计单元通常总是处于持续的变化状态,它们最好采取一种自组织的验证过程。
设计者自己验证该单元的基本操作,这种验证的目的是为了保证RTL级代码中没有语法错误,
它的基本功能也是有效的。并不需要创建一个可回归的测试套件和达到高的代码覆盖率。

在任何项目中设计单元的数目都是巨大的,因而在该层次上实现验证将会非常浪费时间,前面的验证资源将会花超长的时间用于对无数常常变化的接口创建激励发生器和响应监视器,编写众多简单测试平台的工作量并不比编写几个复杂测试平台的工作量小。而且ASIC 或 FPGA 级的验证仍然需要验证这些设计单元的合成。

在当今大规模和复杂的 ASIC 和 FPGA 中,很可能无法在 ASIC 或 FPGA 划分的验证中获
得必要的功能覆盖,而且不是所有的单元都是等同创建的。对于敏感性和功能复杂度高的单元
来说,进行单元级验证从而获得足够的可控性和可观测性,以达到所要求的可信度可能会更有
效。最理想的是每个在单元级被验证的功能单元都有它自己的规范文档

如果设计特别复杂,需要进行一些单元级验证,那么在设计时就应该尽可能考虑到单元级
验证的相关性和完整性。要将设计合理划分,使待验证的功能被完整地包含在单元内,而且可
以在单个基础上进行验证。验证完成后,可以假设这些功能能够工作在更高层次的验证任务
中。如果单元层次的待验证功能需要与其他单元相交互,那么需要在完全包含这些功能的更高
层次中进一步验证,以确保在合并后仍能正确实现。