您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

加速验证SoC芯片设计压缩仿真时间的新方法

发布日期:2011-06-06

arm soc arm soc 验证 arm7仿真器 arm仿真器 arm仿真软件

    验证巨大的SoC计划要淹灭极大的本钱和时间。据证明,验证一个计划所需的时间会随着计划大小的增长而成倍增长。在已往的几年中,出现了很多的技能和东西,使验证工程师可以用它们来处理惩罚这类题目。但是,这些技能中很多基于动态仿真,并寄托电路操纵来发明计划题目,因此计划者仍面对为计划创建鼓励的题目。

  计划者可以利用运行在处理惩罚器上的固件作为验证仿真鼓励的一部分,这也是如今通常采取的要领----利用全成果处理惩罚器模型。与在HDL中编写鼓励相比,固件作为鼓励速率更快,并且更容易创建。在一个全成果处理惩罚器模型上实行代码的缺点是模型运行较慢,因此只有少量软件会利用这个技能实行。很多固件实行由取指令操纵和内存读写周期构成,验证代价很低。在逻辑仿真器中屏蔽这些低代价操纵,而连续实行寄存器和内存映射I/O周期,可以在最低限度淘汰验证包围率的同时,明显进步实行速率。

  在仿真环境中可以或许更快速地实行代码重要有两个长处。起首,快速仿真意味着成果验证仿真可以利用更多的代码。诊断步伐、驱动步伐、固件以及某些环境下部分应用步伐代码都可用于验证题目。其次,由于仿真运行速率加快,因此可以或许实行更多的验证。很多计划者会选择运行附加测试,而不是运行较少的CPU仿真时间。大多数验证都受到可以或许用于运行仿真的CPU时间的限定。

  要是固件用来作为验证的一部分,它将对计划起推举措用。这个鼓励将是切合实际的,它通过典范的操纵使计划得到测试。为计划创建鼓励的挑衅之一是怎样估算出典范的计划操纵,并将其在测试平台上编码。利用实际的软件可为验证工程师打扫这个题目。但是,运行作为测试平台的代码不大概提供大量鼓励,分外是不克不及包围大部分验证空间。因此,计划者必要利用别的的技能提供分外鼓励,以遍历计划的全部边界环境。

  计划者利用传统的直接测试和别的验证技能可以或许增长用固件作鼓励源的环境。内存分区可用于过滤仿真进程中不须要的总线周期,从而进步性能。本文将先容一个计划实例,利用作为鼓励的代码和基于断言的验证,通过该实例来形貌利用传统验证技能无法发明的计划错误。

  办理验证挑衅

  如今,电子工程师面对的验证挑衅不绝加剧。为了更好地阐发这些挑衅,本文中先容了一个大略的实例。该实例是一个在250×250像素矩阵上表现RGB数值的图形输出配置。它包括一个映射到处理惩罚器的寄存器接口。相干寄存器有:“行”—包括待刻画像素行地点信息的一个8位寄存器;“列”—包括待刻画像素列地点信息的一个8位寄存器;“像素”:----包括待刻画像素RGB值的一个8位寄存器;“大小”----包括待刻画像素矩形大小的一个8位寄存器(此中1表现写入单个像素,2表现刻画一个2×2的正方形,以此类推最大值为16);“状态”---可以或许读取和返回配置状态信息的一个8位寄存器。

  利用直接测试

  验证此样本配置的第一步是测试全部行和列是否精确定址。要测试全部大小的像素是否可以或许被写入,还要测试差别颜色值的代表样点。典范的像素组合也要被测试,如从右上方像素立即更改为左下方像素。利用雷同的要领可测试全部角对组合。还应该测试种种组合中有序和无序增减的行地点和列地点。全部这些测试可以通过编写和编译一个运行在全成果处理惩罚器模型上的大略步伐来完成,大概利用一个孕育产生总线周期和BFM的大略测试平台。别的还要思量测试那些大概影响计划的非常条件。测试时可将行地点或列地点设置为一个大于249的值,或是定义一个大小高出硬件支持的像素。

  这些都是在接口级完成的明显测试,在内部布局举行的雷同验证测试和在接口级实现的验证战略是很雷同的。显然,要测试整个验证空间,纵然只是一个计划模块的接口,也不大概像前述的样本配置一样大略。大概的操纵是250行×250列×224色×16大小,或16.7×1016 。全部操纵的组合数是这个数值的平方,或大于1034 。这里真正的挑衅是创建那些可以或许揭发计划题目的组合,并将这些题目标识为必要立即存眷的区方面。

  利用断言揭发早期题目

  由于对计划驱动了鼓励,因此断言可以赶早发明题目。要添加的断言包括不克不及高出249(行地点和列地点的最大大概值)的行地点和列地点,以及不克不及高出16的大小字段。确定断言并采取HDL包围阐发后,必要对计划驱动鼓励。这可以通过束缚随机测试实现。束缚随机测试孕育产生反馈到测试平台的配置处理惩罚事件,表明被辨认的测试点已被包围。要是计划空间非常大,束缚随机测试就不克不及包括测试点没有包围的边界条件。这种测试不消创建利用HDL包围东西到达100%包围的鼓励。但是,在计划中遍历全部状态并包围全部条件并不克不及包管配置被完全验证。

       软件代码作为鼓励

  对付一个高出1034个组合的验证空间来说,让实际的配置操纵实行全部必须组合是不太大概的。应当把重点放在配置会运行的那些操纵上,对那些理论上大概不会利用的操纵要淘汰耗费时间。最大略快捷的要领是找到可驱动配置的现有代码。这大概是诊断代码,驱动步伐代码或应用步伐级算法。每个如许的代码均提供了差别的验证级别,并揭发了差别范例的题目,因此,应当实行得到和利用全部范例的代码。对付新的计划,代码很大概不存在;但对付下一代产品的计划,一些代码通常可以得到。

    要是这些代码存在,计划的鼓励在险些不淹灭精力或本钱的环境下就可以得到。要是代码不存在,但相助方乐意在计划周期前期创建代码,那么也可以轻松地创建鼓励。末了,要是验证团队必要创建代码,通过编写C代码来为计划创建巨大多样的鼓励比利用任意别的语言都更容易。

  假设表现

  利用假设表现,必要运行刻画种种测试模式和色彩组合的诊断代码以确保连接。也可以运行驱动步伐代码,它可以连接至一个大略的画图应用步伐,该应用步伐可利用一些代表样本的像素将驱动步伐调解至得当位置。末了,采取终极利用这个配置的应用步伐,并画出几幅图像。每种范例的代码会以差别的方法运用计划,从而能发明利用其他要领时不容易检测到的题目。

  硬件/软件协同验证

  很多硬件和验证工程师(乃至在某些方面软件工程师)以为,运行应用步伐的任意部分不会加快计划验证。终究,要是针对配置测试驱动步伐,并针对驱动步伐测试了应用步伐,就无需举行进一步验证。但是这些工程师不会思量在尚未体系地测试全部软件的环境下颁布产品,也不会担当在未经体系测试的环境下颁布要去tapeou的硬件计划。体系级协同验证测试全部的可选组件,包括硬件、软件、或两者的组合,从而揭发在疏散环境下不会被发明的题目。

  软件包围范畴

  运行软件提供了一个切合实际的鼓励,但它不大概为验证空间提供充足宽的包围范畴。软件通常是一遍一到处重复只具有些微差别的相似操纵。因此,这种要领应当连合别的现有验证技能一起利用。同时,运行大量的软件通常不会改进验证结果。在不捐躯验证结果的环境下,通过对软件举行少量修改,可以或许收缩较长的代码操纵。比方,在上述表现配置实例中,向全部位置写数据的诊断步伐可以或许被收缩为只写前3行和末了3行。如许做不会淘汰包围范畴,却能使测试速率加快45倍。

  分别内存体系

  将代码作为计划鼓励运行时,无疑会令人增长对计划被全面验证的总体信心。并且,在大多数环境下,它能袒露别的验证要领遗漏的计划缺陷。但是,在逻辑仿真中运行代码黑白常慢的。逻辑仿真器通常以10Hz到100Hz的速率实行操纵。在如许的性能程度条件下,只有少量的代码可以或许运行。

        以实行代码时孕育产生的电路举动为例,连续的九条ARM指令会孕育产生15个总线周期。在这15个总线周期中,只有2个和硬件操纵有关。剩余的13个只支持代码的实行,不会对测试的配置孕育产生任意影响。固然,基于处理惩罚器高速缓存温和冲区的设置,并非全部的这些总线周期都能得到处理惩罚器上的外部信号。但是,纵然总线周期不通过外部驱动,它们也必要由整个电路的仿真器来处理惩罚的时钟。低落仿真性能的不是总线周期的电路举动,而是计划中附加的时钟驱动。

  把处理惩罚器的内存体系支解为I/O空间、代码空间和数据空间时,可退出这些总线周期,只将I/O周期参加到逻辑仿真中。通过过滤逻辑仿真器中的代码和数据周期,他们可以或许在不占用仿真时间的环境下得到处理惩罚。这使得仿真速率加快。只管全成果处理惩罚器模型实行全部的总线周期和指令,但逻辑仿真只在总线周期处于某一特定范畴内时才会举行。如许,逻辑仿真只存眷专门针对被验证配置的总线周期。

  不参加逻辑仿真的分区内存可以形貌为已被软件图像预先初始化的“超等高速缓存”。这种“超等高速缓存”充足大,能容纳全部的软件图像和全部数据,并提供无穷的快速访问。可以或许安排在平凡高速缓存中而不影响计划操纵的内存,都可以寂静地安排在这个“超等高速缓存”中。直接由硬件访问的内存地区是不可缓存的,且必须建模为硬件仿真的一部分,以向硬件提供访问这些内存地区的权限。

  加强的性能

  回到假设表现模块,利用AMBA总线周期驱动寄存器输入和读取寄存器输出。结果,诊断和驱动步伐代码的仿真时间淘汰了10倍以上,小型画图步伐的仿真时间淘汰了30倍。步伐所作的谋略不但是将像素复制到屏幕上。它将像素和过去的图像举行比较,只有当数值变革时才写入像素和地点。当软件的巨大性增长时,性能因素也随着进步。仿真吞吐量的增长是由于不必要运行与总线周期相干的时钟。要是软件完成更大的谋略量,性能进步会更大。

  利用附加的计划模块

  这篇文章形貌了单个计划模块鼓励的代码应用步伐。由于代码和数据空间的内存没有被建模为硬件的一部分,因此可以在完玉成部计划之前,在一个单独的计划模块上运行这种范例的测试。它不必要计划完备的内存子体系并作为仿真的一部分运行。当运行一些模块级测试时,有须要将附加的硬件组件和I/O数据流建模为仿真运行的一部分。利用雷同的过滤技能,可以把给定内存地区的内存处理惩罚事件发送给恣意的C函数。这可以通过创建一个基于地点范畴的回调函数实现。如许,没有建模为HDL的软件必要的组件可以或许用大略的C函数更换。同样,对I/O端口的读写可以通过根本的C函数连接到主机文件和I/O体系。

        对付包括很多硬件计划的体系级仿真,也可以利用雷同的要领。对付这种环境,硬件模块被更换的越少,在逻辑仿真器中出现的举动就会更多。

         结语

  本文先容了一种利用软件作为鼓励以加快体系级验证的要领。利用的鼓励是切合实际的,并易于快速创建。对计划实行此鼓励可赶早揭发题目,不然,这些题目大概要比及创建假造原型后才会被发明。进步性能的关键在于过滤出与硬件操纵无关的代码和数据引用,并在分区内存存储中处理惩罚。这种要领能使验证工程师办理日益增长的成果验证挑衅。Questa验证平台可以主动把固件输入到测试平台,加缓存指令操纵与内存引用实行,并提供源代码级的调试环境。