模拟的有效使用为产品开发团队提供了多种优势。有效模拟的主要好处是更快的上市时间,更高的质量和更低的风险。通过提供增强的可控性和可观察性,精心设计的仿真可以测试在原型调试环境中难以生成的情况。完全控制环境后,您可以轻松检查边界条件。最坏情况可能包括同时发生在实际系统中难以实现的独立功能。您可以在可控模拟中设置这些条件。
模拟还可以对您的设计进行更广泛的观察。无论设备上是否有备用I/O引脚,都可以使用内部信号。您可以在模拟过程中更轻松地探测外部信号。通过几次击键或鼠标点击,您可以使用一个好的逻辑模拟器在几秒钟内探测64位数据总线;尝试使用逻辑分析仪。可能需要在实验室中花费大量时间来设置复杂的监控设计。
可控性和可观察性的这些优势使您可以更快速,更轻松地捕获模拟错误而不是硬件调试。此外,您可以在模拟中比在硬件原型上更快地更改设计。此功能缩短了调试周期并简化了集成,尤其是在集成之前模拟不同模块的情况下。仿真不仅减少了调试周期,而且还需要更少的原型硬件设计更改。对于那些不得不建造第二块原型板的人来说,这个功能是个好消息,因为设计需要做出很多改动。设计一个新的印刷电路板很容易增加几个星期的时间表。使用更高级别的技术,您可以使用仿真来测试基本设计方法的可行性。
常见的模拟错误
一个关键问题是,“什么能阻止模拟效率?”基本问题通常是使用低级方法,例如波形矢量输入,用于大型和复杂的设计。反过来,这种技术会导致系统仿真中的许多典型故障,包括故障覆盖不足和电路响应特性不足。在大型设计中,很难通过低级方法获得适当的故障覆盖,这迫使您手动生成每个向量和测试用例。当矢量生成繁琐且耗时时,可能难以指定所有感兴趣的测试场景。即使您指定了测试用例,也可能难以完成它们。由于大多数使用简单技术的项目使用视觉检查来鉴定电路响应,因此您可能会错过许多可见电路故障。更强大的仿真技术实际上简化了设计验证的任务。有些人认为处理复杂性的唯一方法是层次结构和抽象。建模利用层次结构和抽象,使复杂系统的仿真既可管理又有效。
良好测试平台的目标
良好测试平台的关键要求是完整性,易用性,灵活性,可重用性和运行时效率。这些功能是相互关联的:灵活的设计更易于使用,更易于完成,并且更易于重复使用。
高故障覆盖率对于有效的仿真项目至关重要。良好的模拟策略有助于开发涵盖所有相关操作方案的测试平台。您可以通过使用允许模拟设计人员在相当高的抽象级别工作的技术来最好地实现此目标。如果您可以在宏级别而不是在原子级别指定测试方案,则更容易遵循模拟流程。一个好的模拟技术应该支持高水平的抽象。 VHDL具有许多支持高级行为建模的功能,可轻松满足此要求。基于系统级组件建模的仿真方法自然可以在高级抽象中工作。例如,拥有CPU模型允许您指定总线循环的类型。围绕CPU模型构建测试平台允许您以类似于编写诊断程序的程序员的方式设置测试模式。在高级别,模拟通过设置DMA传输,编程I/O和各种总线操作自然流动。这种方法允许工程师专注于测试的功能需求,将位操作留给硬件模型。
虽然模拟方法应该易于使用,但这种策略涉及陷阱:方法是易于使用的小型设计无法很好地扩展到更复杂的设计。使用预验证功能模型库,您可以轻松构建具有全面时序和数据检查的测试平台。一个好的库在模型本身中具有这些功能。编写测试用例也很容易,因为测试平台的“虚拟系统”模仿了实际硬件的操作。任何了解硬件系统操作的人都可以理解完成测试设计所需的步骤。
良好的模拟方法必须足够灵活,以便在测试系统获得知识或测试要求变化时允许更改模拟。如果测试台等同于一堆“意大利面条代码”,则修改测试台很困难。面向对象的软件技术可用于为计算机程序员提供这种灵活性。将功能嵌入到功能模型组件中为工程师设计复杂的芯片或系统仿真提供了类似的好处。为了易于修改,硬件设计应具有强大的内聚力和松散耦合。设计中的控制路径应该很简单。通过在测试平台中模仿系统设计的结构,您可以轻松复制系统的行为。如果系统设计发生更改,您可以直接修改测试平台模型以确保它与系统匹配。建模还有助于其他方面的灵活性。定义与组件模型关联的功能允许您在一个地方进行更改,这些更改可以在您使用组件的任何位置产生效果。将其与简单测试平台上常见的全局搜索和替换或剪切和粘贴操作进行对比。正确的建模应该产生灵活的仿真架构。
设计重用正在成为缩小深亚微米VLSI设计方法中生产力差距的主要因素。承诺快速上市的高密度FPGA和CPLD需要类似的技术。因为芯片本质上是可重复使用的,所以模拟其行为的仿真模型也是如此。正如设计师习惯性地在许多设计中使用许多相同的组件一样,您也可以重用良好的仿真模型。
一个好的测试平台必须快速执行。与低级方法相比,建模没有固有的优势。正如一个好的汇编语言程序通常比用高级语言编写的程序更快,低级别的测试平台可能比相应的建模仿真更快。对于复杂的仿真,建模的优势远远超过仿真速度的降低。典型FPGA的执行时间小于开发仿真套件所花费的时间。此外,当您根据功能实体或模型正确划分模拟时,可能更容易隔离模拟的耗时部分并优化这些部分。通常,精心设计的建模测试平台不必比低级测试平台慢得多。此外,尽管低级建模中的各个仿真周期可以更快地执行,但是使用更高级别的技术提供完全仿真设计的总体目标更快,因为故障覆盖更有效并且更不容易出错。换句话说,使用较低级别的技术需要更长的时间来获得更高级别技术提供的故障覆盖率。
图1a显示了典型的简单测试平台的框图。在清单1的代码示例中,代码结构简单而扁平。被测单元被实例化为一个组件,一个进程控制主测试序列。内联代码生成电路激励,多个等待语句控制主序列时序。或者,您可以在传输语句中的条件之后使用多个来控制时序。 VHDL仿真的大多数新手用户通过检查结果波形来验证电路响应。这样的测试平台通常很少或没有电路性能的限定。
此测试平台缺乏功能划分使得实现复杂控制变得困难。例如,您可能希望改变控制信号时序,以验证被测单元是否能够容忍其输入上允许的所有变化。对testbench代码的检查表明,单个等待语句等待clk_period 会影响所有后续信号分配的时序。当它们的定时是交互式时,可能难以管理各种刺激信号的定时。当有人将这些等待语句多次复制并粘贴到大型进程中时,这种情况会变得更糟。设计越复杂,这些方法就越不合适。静态时序方案通常无法处理交互式芯片接口。实现这种握手的需要通常是驱动工程师考虑建模的首要原因。进程可以使用条件顺序语句, if-then-else 或 case 语句,积极与被测单位互动。虽然您可以在不构建模型的情况下执行此握手,但您不会统一结构和功能。模型构建的规则是有用的,因为它立即表明测试平台的功能应该模仿被测系统的交互性。
等待与传输语句
使用HDL模拟器最具挑战性的方面之一是时间概念。在VHDL中,程序员将代码广泛地分类为并发或顺序。多个顺序代码块同时执行,并使用敏感列表或等待语句来调整其执行速度。在一个过程中,软件会调度事件,但在程序遇到wait语句之前,模拟速度不会更快。您可以使用多个等待语句来控制各种信号的排序,但这种方法会导致各个信号的时序相互作用,从而使其控制变得复杂。类似地,您可以使用传输延迟规范来计时信号转换,但这些规范控制单个信号上的一系列转换的时序,与所有其他信号无关。您仍然需要等待语句来加速模拟,但是由于一个或多个等待语句,时间推进时,传输语句中的时序顺序会滚动模拟事件轮。这些等待语句可能位于代码的任何部分。使用传输语句单独指定信号转换更容易,但在调试期间逐步调试代码通常更难解开时间。
您可以使用控制信号排序和定时的两种方法试验台。当一组信号重复并同时改变时,等待语句最容易使用。这种情况通常是在每个时钟周期内同时改变的同步信号。在建模异步接口时,例如使用Intel风格的微处理器,您可能需要单独调整信号。使用等待语句延迟下游所有信号的应用,这种方法涉及一个复杂的问题。单独的传输语句允许您为每个信号指定一系列转换延迟,为每个信号定义波形。虽然这种技术可以解耦信号时序,但它也使得更加难以可视化各个时序的排序。例如,如果关键要求是保证写入选通结束时的地址保持时间,则可能更容易使用等待语句将模拟定时轮向前移动写入选通的无断言时间和地址巴士。您可能希望尝试找出适合您的偏好和设计要求的内容。在调试期间,多个等待语句比传输语句更容易一步,但传输语句对于描述相同的行为更为紧凑。通过建模的模块化,可以很容易地使用最适合的每种机制。
您可以通过添加检查被测单元响应的语句来略微改进这个简单模型(图1b)。在这样一个简单的方案中,自动检查数据是一种喜忧参半的祝福。使用简单的测试平台,很难有足够的控制来完成验证电路响应所需的所有检查。只是在正确的时间对数据进行采样可能很困难。当程序强制模拟的所有代码驻留在平面模型中的一个进程中时,检查建立 - 保持时间和所有其他重要参数是一项艰巨的任务。通过设置多个进程来检查信号,参数或接口,您可以在某种程度上解决这种情况,但是这个临时进程很难控制,管理和维护。由于混合了结构和功能,因此很难在新应用中重复使用这些设计。
关键建模特性
基于建模的测试平台背后的基本思想是创建围绕被测单元的所有板级组件的功能模型(图2)。顶级文件通常包含结构化VHDL代码,它将各种模型连接在一起作为实例化组件。至少一个组件是被测单元。其他组件是板上其他设备的功能等同物。在此示例中,您需要模拟莱迪思CPLD。该设计是33 MHz i960RP微处理器和双组SRAM之间的接口。它允许系统通过交替访问两组SRAM来以半个总线速度访问存储器。 CPLD是被测单元,但您必须为CPU,时钟,收发器和SRAM建模。 SRAM模型可以在每个访问周期检查来自被测单元的所有信号。您可以轻松地将所有必需的设置,保持和脉冲宽度检查放入SRAM模型中。将这些检查放入一个简单的结构中是很困难的,特别是当您需要将所有其他检查包含在测试中时。设计人员的任务更容易,功能模型中嵌入了信号检查。
功能系统建模的一个有趣方面涉及定义整体控制机制。在一个简单的测试平台中,测试设计者最自然地将主要测试过程置于层次结构的顶层,通常是在包含一个文件的测试平台中。在基于模型的测试平台中,设计中的数据流控制器与实际系统中的控制器平行。对于智能卡,该控制器是CPU或微控制器。您可能会通过系统总线控制从属适配器卡。在此示例中,i960处理器是系统控制器,模拟自然地流经CPU模型。主要控制过程甚至不在测试平台的顶层;它嵌入在CPU模型中。对于那些仅使用简单测试平台的人来说,这种情况可能看起来很奇怪,但这是建模的自然结果。
在这个例子中,内存和SRAM控制器都是从设备。由于CPU模型驱动模拟,因此设计人员只需要使用一种方法来指定总线周期序列,以便将数据路由到设计中。 CPU模型生成所有单独的总线信号。通过在更高级别处理模拟,设计人员可以处理系统级功能并让模型处理细节。生成模型后,您可以比使用低级方法更快地开发复杂的功能模拟。
建模通常将控制路径功能的验证与数据路径功能的验证分开。简单方法合并这些功能,再次使模拟控制问题复杂化。该模型通常验证控制路径功能。使用SRAM模型,您可以轻松确定需要进入模型的代码,以验证控制信号是否正常运行。将时序检查放入SRAM模型允许您在模型访问SRAM时将检查放在一个活动的位置。您可以在行为模型中实现其他控制路径计时和功能验证。您有时可以在模型中内部测试数据路径功能,如CRC生成器/检查器的情况。通常,在更高的抽象级别检查数据路径更合理。在这种情况下,让CPU模型执行写回读周期以验证存储器子系统的操作更方便。 CPU模型验证数据完整性。您执行验证的方式与为微处理器编写自检代码的方式大致相同。对于功能齐全的CPU模型,您可以使用为系统自检而开发的相同代码,并进行有限的修改以运行模拟;反之亦然。
幸运的是,您无需使用神秘的方法来开始设计建模测试平台。与面向对象编程不同,测试平台建模不需要工程师考虑系统设计的方式进行批发范式转换。由于测试台模拟的结构是硬件设计,因此构建具有功能模型的测试平台需要工程师通过多年使用原理图和实验室设备开发的相同分析方法。您只需使用VHDL设计中的功能组件替换电路板上的组件,然后找出如何为每个组件建模。当硬件工程师通常编写诊断代码时,计划模拟就像计划原型调试的早期阶段一样。
当您在全公司范围内采用建模时,建模是最有利的。您必须设计,实施和验证您不购买的任何型号。您必须在低抽象级别验证模型,明确地查看详细的功能和时序。使用模型测试设计的工程师可以是验证模型的同一工程师。因为建模涉及函数的封装,所以这种情况有助于防止自我实现的预言,其中测试平台设计者使系统设计者做出的假设假设持续存在。您可以组织模型构建,将其计划到设计计划中,并将其划分为设计团队工程师。您应该建立标准以确保生成的模型的一致性和质量。这种方法确保了预验证模型库的存在,这些模型是提高设计团队的仿真能力和效率的宝贵资源。
如果开发复杂模型的努力超出了工程组的能力范围,应该考虑从外部来源获取模型。标准合规性通常要求完全验证和合规的模型。所有标准总线型号,包括PCI,SCSI,VME和ISA,以及知识产权(IP)供应商经常提供的型号都可用。 Synopsys的逻辑建模部门提供各种总线接口模型,有助于验证标准总线设计的合规性和互操作性。许多其他第三方供应商也提供各种核心供应。您可以在Web上找到令人印象深刻的非商业模型源列表(参考文献1,2和3)。
建模和抽象
VHDL的发明者将该语言设想为纯粹的建模语言。用于逻辑综合的VHDL的早期采用者存在问题,因为许多有用的建模构造不适合于合成。其次,VHDL规定您实现Verilog的许多必要功能,例如类型转换,作为库函数。相比之下,您可以使用全范围的VHDL建模功能来生成行为仿真模型。您可以指定复杂行为,而不遵守综合支持的RTL约定。您甚至可以使用VHDL的数学函数对模拟和机械系统进行建模。 (VHDL目前正在考虑的模拟扩展主要是语言当前可用数学函数的扩展。)因为您不需要合成仿真模型,所以可以使用许多高级行为结构来简化函数模型生成。根据执行它们的组件定义函数会产生功能分解,从而鼓励更高级别的抽象。该技术将功能规范与低级操作细节分离,并简化了编写测试程序的过程。表1和表2汇总了VHDL的许多特性和属性,这些特性和属性对于生成建模仿真很有用。
虽然VHDL本身不是VHDL的一个特性,但大多数VHDL和Verilog仿真包允许用户接口可执行程序到模拟。这些程序通常用C或C ++编写,允许用户在没有使用VHDL模型的速度或空间开销的情况下实现复杂的行为。例如,在C中建模大型SRAM模型允许操作系统资源实现数据存储。如果操作系统可以缓存数据并在必要时将其交换到磁盘,则可以建模超过PC或工作站上可用RAM大小的内存。或者,您可以使用C对系统进行建模,并使用模拟器允许C程序访问模拟器中的组件模型。对于大型模拟,这种方法可能比VHDL更快,但需要包括VHDL和C开发工具的环境。这种方法可能有助于工程师在分区之前使用C语言模拟系统并将其交给电路设计人员进行实施。
什么是配置?
VHDL定义了一个配置设计单元,它大致类似于印刷电路板组件的部件列表。您需要配置,因为给定实体可能涉及多个体系结构。 VHDL关键字配置指定的配置声明标识体系结构与每个实体的配对或绑定。除非指定多个体系结构,否则不需要显式配置。配置对模拟最有用;综合工具通常不支持它们。
1987 VHDL标准的文件I/O功能有限。 1993版增加了语法增强功能和新功能,以扩展语言的文件I/O功能。您可以通过各种方式使用VHDL文件I/O功能。主要用途是检索和应用刺激向量;存储响应向量和预期响应以进行比较;格式化报告;然后读取自定义的测试语言文件,然后程序解析。
您可以使用具有更高抽象级别的测试语言文件读取来控制模拟。因为您在功能级别指定命令,所以根据其编程响应每个命令的功能模型执行详细实现。这种强大的技术可以在很高的层次上推动模拟。您可以最大程度地利用系统级知识,因为您可以在最方便检查系统功能的级别上进行控制。当文本文件确定控制流时,自定义测试语言将变为特定于模拟。 VHDL模拟解释代码。您可以快速生成和检查新的测试用例,因为您不需要编译新代码,因为它不是VHDL测试平台的一部分。表3显示了最常见的基本文件I/O命令。表4显示了标准文本I/O包中添加的常用命令。
使用模型设计测试平台
IEEE提供的资源,包括在线笔记,是编写行为模型的优秀指南(参考文献4,5和6)。关键点是在多个抽象层次上建模系统,隐藏系统结构,关注行为和功能,忽略顶层抽象时序,遵循软件工程的标准实践,简化维护和重用,构造设计,定义每个组件以具有强大的内聚力,定义松散耦合的组件集,使用自上而下的迭代细化,以及使用抽象数据类型来隐藏和封装数据。
使用VHDL,系统设计人员可以在多个抽象级别对电路建模。在VHDL中进行建模时,遵循软件工程的标准实践非常重要。否则,即使对于编写模型的人来说,模型也难以维护。此外,为了帮助重用模型,您应该仔细考虑并重新使用,甚至创建一次性模型。典型的模型设计和编码实践包括结构设计;迭代地将模型的高级视图细化到最终形式;使用抽象数据类型来隐藏和封装数据;并组织各个模型组件,使它们与极少的接口信号松散耦合,并具有强大的内聚力,在同一架构体中保持强相关的功能。
在图3中,原理图链接了CPLD的设计基于SRAM的控制器,用于设计中所有其他主要组件的模型。该Ramix Corp CPLD设计针对的是莱迪思M4A5-192/96-7VC器件。 Ramix选择此部件是因为内部延迟的速度锁定使器件能够以132 MHz的有效内部频率工作。该设计需要在66 MHz时钟的两个边沿上进行状态更改。使用最高速度会将可用频率推至180 MHz左右。
CPU模型生成总线周期来控制仿真。表5列出了指定测试序列的特殊指令。指令很简单,并在所需的总线操作之后建模。对所有汇编语言操作代码进行建模可能过于复杂,而且不太有用。该模型仅需要10条指令,这些指令包括设置给定操作的地址和数据。通过这些指令,您可以检查所有各种读取和写入SRAM的模式。测试平台使用简单的命令组合来实现所有必需的测试方案。该模型有两个实现。更简单的模型将测试序列嵌入到模型本身中,实现为每次更改测试时必须编译的VHDL代码。此过程违反了将高级任务与低级任务分离的愿望。在第二个过程中,测试语言解析引擎驱动模拟。文本解析引擎似乎增加了额外的复杂性,但它在灵活性和易用性方面具有优势。由于外部文本文件包含测试序列,因此程序无需在运行之前编译序列。此功能可让您快速轻松地添加测试方案。实际上,该方法提供了一种独立于应用程序的仿真语言,您可以在i960 CPU上需要此功能的任何系统中使用该语言。
存在几种实现SRAM模型的选项。您可以将模型实现为数组,只需根据位置地址将数据存储在数组位置即可。另一种选择是构建一个可以将地址和内存数据传输到磁盘文件以便以后验证的模型。此示例不要求内存通过设计传递大量数据。工程师使用两个16字深的数组设计存储器来存储数据 - 一个存储在模型的较低地址空间,另一个存储在顶端。设计人员实现了第二个阵列,允许RAM访问从一个页面滚动到另一个页面。该设计使用SRAM地址索引到数组中。该模型响应标准写使能,输出使能,片选,地址和数据RAM控制信号。该设计在执行合法写周期时将数据存储在阵列中,并在执行合法读周期后检索数据。除了存储和检索数据外,该模型还可以检查SRAM时序要求。您可以选择时间参数为none,minimum,typical或maximum。最小访问时间无关紧要,因此设计人员将其设置为零延迟。
芯片选择解码模型是一种简单的组合解码器功能,无需参数检查。该模型复制了电路的功能和传播延迟时序。您可以选择延迟为无,最小,典型或最大。锁存收发器模型是一种简单的顺序模型,具有有限的参数检查功能,可用于数据设置和保持。
该电路的简单功能需要简单的测试用例。您可以通过写入SRAM并读取数据来完成i960型号的每种总线周期类型。测试用例包括单次写入然后读取,存储区0或1启动,突发写入然后读取,存储区0或1启动,有或没有CPU等待状态,有或没有SRAM分页符,以及与页面中断重叠CPU等待状态。这些相对简单的情况足以测试存储器控制CPLD的功能。 CPU模型通过在回读时验证写入的数据是否相同来检查数据路径。 SRAM模型需要适当的控制信号来存储和检索数据,检查控制信号。这些模型的定时检查分布在整个身上。 CPU,SRAM和锁存收发器模型都包含代码以验证正确的信号时序。如果测试不符合所需的设置,保持或脉冲时序,则检测到错误的模型会报告每个错误。您可以使用CPU模型中的基本指令在模型中构建新场景。
您可以从行为模型测试平台轻松检查列表。最后一行告诉是否存在任何错误。如果没有错误,您的工作就完成了。如果发生故障,快速检查会显示位置,以及有关故障位置和原因的线索。每次运行模拟时,测试平台都会自动运行所有检查。
-
模拟
+关注
关注
7文章
1420浏览量
83878 -
建模
+关注
关注
1文章
299浏览量
60715 -
PCB打样
+关注
关注
17文章
2968浏览量
21630 -
华强PCB
+关注
关注
8文章
1831浏览量
27702 -
华强pcb线路板打样
+关注
关注
5文章
14629浏览量
42951
发布评论请先 登录
相关推荐
评论