tag 标签: 可编程逻辑

相关帖子
相关博文
  • 热度 2
    2023-7-24 00:09
    315 次阅读|
    0 个评论
    使用可编程逻辑进行高效且有效的 DSP 设计 IP 语音 (VoIP) 已成为有线和无线电信设备制造商增长快的应用之一。VoIP 不仅为终用户提供了经济实惠的语音通话接入,而且还使媒体网关设计人员能够设计出满足多种不同目的的设备——这种情况通常会给双方带来成本效益。 IP 语音 (VoIP) 已成为有线和无线电信设备制造商增长快的应用之一。VoIP 不仅为终用户提供了经济实惠的语音通话接入,而且还使媒体网关设计人员能够设计出满足多种不同目的的设备——这种情况通常会给双方带来成本效益。 如果是网络电话、 然而,事实恰恰相反。随着 VoIP 获得越来越多的认可,设备制造商的利润率因应用程序的竞争性质以及设计 IPPBX 和网络的高成本而被化。多服务访问节点 (MSAN)在许多不同的通道密度下。工程成本不断上升,产品价格不断下降。 尽管许多公司已经设计了专有的硬件/软件媒体网关解决方案,但他们必须做出妥协才能提供具有成本竞争力的产品。因此,大多数 VoIP 功能目前使用 D SP 技术来提供,但也面临着一系列新的挑战。 作为媒体网关或网络电话交换机设计师们面临着一项艰巨的任务,即在时间敏感、不断变化的环境中将具有成本效益的产品推向市场,高科技的困境随之而来:性能与功能。DSP技术的主要问题是找到性能和 接口 的完美平衡。 例如,设计人员经常发现,只有市场上非常高端的 DSP 才能支持他们复杂的应用/接口,包括SGMII 以太网或快速IO。 因此,当需要在大型系统中互连这些 DSP 时,通常会使用现场可编程门阵列( FPGA ) 将设备粘合在一起并执行诸如数据包传输背压或数据包分类等功能。这就是可编程逻辑进入硬件设计的地方。 应用程序可移植性是使用可编程逻辑的 DSP 的关键价值之一。相同的底层媒体处理技术可以在多种应用领域实现性能结果,例如: – 大型媒体网关 – IP PBX – HMP 媒体服务器卸载 – MSAN / 接入设备 尽管所有 VoIP 应用程序的基本功能集可能相同,需要相同的编 解码器 和语音质量功能列表,但每个应用程序所需的接口可能完全不同。 例如,专为基于主机的媒体处理 (HMP) 卸载而设计的 PCI 卡需要一个PCI Express 接口,而 aMSAN 可能需要一个轻量级接口来连接以太网 PHY 和T1/E1 帧器,以及板上各种组件的大量粘合逻辑。 对于设计人员而言,DSP 的优点之一是其固有的能力,可以使解决方案变得,而不是现成的、一招多用的小马。这种技术灵活性使设计人员能够探索更具成本效益的做事方式,但他们通常可以发现他们受到 DSP 支持的限制。 这就是可编程逻辑“FPGA”提供额外增强功能的地方。例如,在 IP PBX 中,USB(而不是以太网)是低成本系统的理想互连方式。 USB 集线器设备不仅在设计上可热插拔,而且比以太网交换机更便宜、更简单,这意味着系统的基本成本更低。此外,随着系统的发展,“尤其是基于刀片的系统,增量成本会降低,因为对于添加到系统中的每个处理刀片,都可以使用带有 USB 接口的非常简单、低成本的 RISC 处理器。 遗憾的是,提供给 VoIP 网关市场的大多数 DSP 不提供 USB 支持,使设计人员只能采用高成本的产品模型。令人高兴的是 FPGA 供应商为此类接口提供了 IP 内核,从而允许更新、成本更低的创新。 在完美的世界中,媒体网关设计人员将能够准确获得所需的接口,而无需购买功能齐全的 DSP 所需的成本和副作用。但如今,大多数高端 DSP 都具有多个高速接口(其中许多是不需要的),并且具有非常大的封装和非常多的引脚数。 这些大型封装是密集球栅阵列 (BGA),价格昂贵,并且需要具有大量层的印刷电路板(PCB),这些都会导致设计延迟。 尽管一些制造商尝试将 FPGA 与 DSP 结合起来以实现设计涅槃——特别是在 DSP 接口被认为不足或需要定制的情况下——但这种解决方案可能有点过头了。它增加了不必要的成本和电路板空间,只是为了纠正 DSP 中的缺陷。 将可编程逻辑(FPGA)添加到全功能 DSP 的方法是让每个设备发挥其擅长的作用。在该方法中,DSP仅充当DSP。 物理封装包含高性能、多核器件,并使用单个存储器接口与 FPGA 进行通信(下图 1)。在这种情况下,DSP 内部的接口没有任何承载成本,从而将面积和功耗保持在限度。 DSP 供应商为每个主要应用提供交钥匙 FPGA 设计,然后可以根据需要由 OEM 进行定制。所使用的 FPGA 可以是高端器件,也可以是非常小的低成本器件,具体取决于目标应用。 图 1:连接 DSP 和 FPGA 的单个存储器接口 在成本敏感、时间紧迫的市场中,FPGA/DSP 方法的优势是其灵活性。如有必要,FPGA 可以在现场重新编程。此外,FPGA 始终是每个新工艺节点发布的器件之一。 因此,它们始终支持具有功耗性能的 I/O 技术。随着互连标准的不断发展,可以非常快速地将设计重新定位到的结构,无论是 PCI Express、RapidIO 还是专有接口。买电子元器件现货上唯样商城 当设计人员评估新产品时,重要的是要考虑解决方案的总成本,而不是真空地总结每个设备的成本。DSP 和 FPGA 相结合的方法可节省许多成本。例如,有多种可用的以太网标准:MII、RMII、GMII、RGMII、SGMII等。 在决定如何将多个 VoIP DSP 互连在一起时,硬件设计人员可以从大量以太网交换机 IC 中进行选择,或者考虑 FPGA 解决方案。如果某个以太网交换机提供了理想的价格点,但不支持DSP提供的接口,那么必须使用更昂贵的交换机。 成本节省可以进一步扩展到电气接口之外。例如,许多大型 OEM 使用专有标头或标志来帮助对数据包流量进行分类。 使用 FPGA 前端,这变得微不足道,并且可以通过从 DSP 卸载某些任务来大大提高性能。这种类型的标头操作由 FPGA 在硬件中完成。这提供了确定性的性能,并将设计控制权掌握在 OEM 手中。 媒体网关 DSP 通常包含一个 T DM 接口,该接口连接到时隙交换器 (TSI) 或 T1/E1 成帧器。通常,DSP 和这些基于 TDM 的设备或 TDM 背板之间已经存在 FPGA。 目前使用 FPGA 是因为需要定制逻辑,或者是因为 FPGA 提供更可靠的 I/O,可以承受背板上常见的高压尖峰。这些 FPGA 任务现在可以合并到前端 FPGA 中,从而节省更多资金和电路板面积。 媒体网关应用正在以前所未有的速度出现。目前正在开发的 VoIP 产品可能需要在几个月内适应视频应用。其他应用“例如无线”也即将出现。 因此,使用 FPGA 前端的另一个主要优势是让每天都面临着想象未来任务的设计人??员的生活变得更加轻松。 当今的 DSP 制造商发布的产品具有针对细分市场的特定应用的功能集和接口。因此,很容易找到可以充当通用 TDM 到 VoIP 网关的 DSP。 然而,如果设计人员面临构建高性能网真视频 IP 会议单元的挑战,那么 DSP 的选择就非常有限。 在 DSP 之间传递压缩或未压缩视频流所需的带宽量是巨大的。为这个市场或任何其他新兴市场寻找具有正确接口的 DSP 相当困难且成本高昂。 借助允许访问 I/O 技术以及符合标准的 IP 模块的 FPGA 前端,设计人员可以灵活地选择正确的接口,而无需更改 DSP 软件。在拥有大型 FPGA 团队的组织中,设计人员可能会选择开发专用接口来满足当今客户的需求并提供竞争优势。 价格压力增加和设计周期缩短等挑战继续困扰着媒体网关设计人员。然而,使用与 FPGA 紧密耦合的 DSP 的设计人员能够准确获得所需的接口,而无需增加成本或调试无用的 I/O 组。
  • 热度 24
    2015-9-12 14:58
    1333 次阅读|
    0 个评论
    在过去25年里,微控制器的内部外设发生了巨大的变化。最初许多微控制器只包含RAM、ROM,也许还有基本的定时器。随着微控制器的发展,更多的外设被基础到这种单价不超过一美元的器件中。定时器/计数器、PWM和包括UART、SPI和I2C在内的标准串行接口常用于这些廉价的微控制器。另一个重大变化是32位CPU正在取代同一价格范围的8位器件。 但是即便有如此丰富的特性,对于廉价微控制器而言,随时都存在微控制器厂商不能迅速支持的项目专用硬件接口或新的第三方接口。往往这要求设计人员使用外部硬件或是通过位拆裂在固件中实现接口。位拆裂使用固件触发IO端口,一般可用于实现串行接口。如果要监测端口以解码串行数据的时候,也可以使用这种方法。无论是使用外部硬件还是位拆裂来实现接口,都会产生额外的设计成本。虽然增加外部硬件带来的成本是明显的,但使用软件实现串行接口可能也会要求使用速度更快因而也更加昂贵的CPU。 大多数通用微控制器今天都支持SPI、UART和I2C接口,但仍然有很多时候,某些内部用户可编程逻辑会非常有用。Atmel、赛普拉斯、Microchip和NXP等多家公司已经把部分用户可定义逻辑添加到自己的部件上,用于修复部分此类问题。这些器件主要是带附加逻辑的微控制器。CPU仍然是主要的处理器件,附加逻辑的作用是提高CPU的工作效率。这类器件常见于成本敏感性产品中,但也在低级任务中用作小型协处理器,以减轻主处理器的负担,从而提升效率。 另一方面FPGA也正在朝着类似的目标前进,虽然是从另一个方向。赛灵思和Altera多年来一直在添加软硬核处理器以创建片上系统。FPGA方法一般成本较高,但如果项目需要大量定制逻辑,这就是一种高成本效益的方法。这些器件对于构建ASIC、小批量产品的原型而言极具价值。这类应用的上市时间至关重要,而较大型产品需要持续的硬件灵活性。 微控制器搭配逻辑与FPGA搭配CPU,这两种器件类型都能为现场提供硬件灵活性。一旦基于闪存的器件成为常规,现场升级就会成为标准。最早设计人员只能够升级固件,但现在硬件(逻辑)和固件都能够在现场轻松实现升级。从计算机鼠标到高速网络路由器等设备均能够重新编写设备的固件和硬件,从而进行现场升级。 上文提及的四家公司(Atmel、赛普拉斯、Microchip和NXP)均可提供“胶连”逻辑,帮助减轻主处理器的负荷,或是无需使用外部逻辑。就提供的逻辑模块类型和这些逻辑模块彼此互联的方式以及与定时器、UART和IO引脚等板载模块互联的方式而言,每家公司都采取了不同的方法。 因此有必要了解这些厂家各自是如何实现内部可编程逻辑的,以便为选择最适合自己项目的解决方案做出最佳决策。只要一个简单的内部AND或者OR门控就足以避免使用外部组件,或是改善CPU性能。所有四种方法都支持用定制逻辑门控输入和输出信号。这类方法可借助时钟门控输入,以便使用计数器测量外部时钟频率。这四类逻辑模块均支持的一个简单例子是一种调制UART输出,使之用于IR通信的方法。在此例中,不仅有图1所示的内部AND门控,还能够将来自时钟或计数器的信号及UART TX输出路由到AND门控。 图1 简单调制的UART Atmel XMEGA定制逻辑(XCL) Atmel XCL模块内置两个LUT(查找表)模块,配套两个8位定时器/计数器模块。这两个LUT不必连接到定时器/计数器模块,而是与UART、EVENT模块或IO引脚互联。这两个LUT可用作两个独立的2输入单元或一个单独的3输入单元。该逻辑模块可配置为组合逻辑,如AND、NAND、OR、NOR、XOR、XNOR、NOT或MUX功能。它们也可配置为顺序逻辑功能,例如D触发器、D锁存器或RS锁存器。由于能够与其它逻辑模块和IO引脚互联,这些简单的LUT模块能够方便地让设计人员避免使用某些外部逻辑,或者节省CPU周期。例如Atmel XCL模块应用手册(AT01084)解释了如何配置XCL模块,以避免在产生额外CPU开销或使用外部逻辑的情况下,为UART输出提供曼彻斯特编码。AVR XMEGA E器件内置一个XCL模块。 图2 Atmel的XMEGA定制逻辑(XCL) Microchip可配置逻辑单元(CLC) Microchip CLC允许用户从八路输入中选择最多四个信号。这些输入可以是两个IO引脚、内部时钟、外设或寄存器位的组合。这四个信号随后路由到可编程逻辑模块中。该逻辑模块可编程为AND-OR、OR-XOR、4输入AND、S-R锁存器的8种组合之一,也可配置为4种其它触发器组合之一。Microchip在其《可配置逻辑单元提示与技巧》应用手册中给出了部分实例。其中的实例之一演示了如何配置这些模块以解码正交信号。在不使用这些额外的逻辑模块情况下,CPU需要以高得多的速率采样信号,才能避免正处于转换阶段的信号发生伪旋转,让CPU只被有效转换中断。Microchip PIC10(L)F320/322器件每个都包含一个CLC模块,而每个CLC模块都包含四个图3所示的模块。 图3 Microchip的可配置逻辑单元(4个中的一个) NXP模式匹配引擎 NXP提供的用户可配置逻辑被称为模式匹配引擎。该逻辑模块的输入可选择最大八个GPIO输入。这八个输入可为复杂的布尔表达生成乘积项。这些输出可用于触发中断,驱动特殊IO引脚,或是路由到下一个逻辑模块或slice。其它特性则支持上升或下降信号以及反相信号的边缘检测。该附加硬件经配置后,只有发生复杂(或简单)事件组合时才中断CPU。NXP LPC81x器件内置一个模式匹配引擎。 图4 NXP引脚中断/模式匹配引擎 下一页: 赛普拉斯PSoC通用数字模块(UDB) 赛普拉斯PSoC通用数字模块(UDB) 赛普拉斯通过使用通用数字模块或UDB,采用更先进的方法在上文介绍的其他三个厂商的方法和FPGA之间独树一帜。一个UDB由两个12C4 PLD和一个数据通路构成。PLD可用于控制数据通路的操作和数据流,也可用作通用逻辑和状态机。数据通路是一种能提供8位功能(AND、OR、ADD、SUB、INC、DEC、XOR)、移位功能(左和右)以及供数据排队的两个4字节FIFO的定制模块。这些模块也可以结合在一起提供16位、24位或32位功能。 UDB的输入和输出可路由到任何GPIO、外设/组件IO、中断等。UDB、固定功能模拟和数字模块以及GPIO之间的互联都使用数字信号接口(DSI)处理。UDB经编程可实现为任何功能,包括从简单的逻辑门到计数器和PWM以及UART和I2C外设等通用串行接口。 就利用UDB实现设计而言,用户可以选择多种选项。既可把简单的逻辑门布局在原理图中,也可在Verilog中实现设计。还可提供定制图形界面,无需使用Verilog即可实现设计。PSoC 3、PSoC 4和PSoC 5系列微控制器可包含4个到24个此类逻辑模块(UDB)。 图5 赛普拉斯PSoC通用数字模块(UDB) 定制接口实例 最近我注意到Worldsemi生产的一些RGB LED很有意思。部件编号分别为WS2811、WS2812和WS2812B,但它们工作方式一致。只需要一个GPIO引脚,您就可以驱动1,000个或者更多的此类部件。这相当令人感兴趣,因为我能够用一个GPIO引脚控制如此大数量的RGB LED。连接这些LED的接口不是SPI、UART或I2C,而是定制接口。通信信号采用异步信号,每一位开始于上升沿。数据为1或0由下图所示的高脉冲长度决定。 图6 WS2811/12数据0/1时序 每个部件需要24位数据,每一种颜色(红、绿、蓝)为下列格式的8位。 图7 WS2811/12数据格式 WS2811/12部件采用DIN(数据输入)和DOUT(数据输出)信号,以便简单地进行串行连接。每个部件都保留其看到的头24位数据,然后把剩余数据从DOUT引脚输出。参见下面的图8。 图8 连接多个WS2811/12部件 当数据流启动后,每个部件将看到持续的数据流。如果数据信号的上升沿不超过50微秒,部件会锁存数据,将紧邻的24位数据视为自己的数据,并将其余数据重新发送出去。 图9 数据流闲置时间超过50微秒时器件复位 正如您所看到的,其原理并不复杂,但它并不能轻松地适配到标准的微控制器硬件上。我确实发现有人使用SPI接口来维持时序,但这要求每个真实的数据位使用至少三个SPI数据位,对于通过位拆裂获得CPU性能而言优势不大。由于时序并不严格,如果您在固件中实现接口(位拆裂),CPU将专门用于翻转驱动信号直至LED全部更新。这意味着您需要禁用所有中断,在整个过程中不对任何其它输入做出响应。如果您有1,000个LED,则更新时间为(0.40微秒+0.85)*24位*1,000个LED=30,000微秒或30毫秒。这可能并不是什么问题,但如果您要以30Hz的频率更新LED,将几乎占用100%的CPU! 在编写代码时,我习惯于在不得不较长时间禁用中断的地方避免阻塞代码或条件,特别在系统中有用户接口或是需要与其它处理器通信的情况下尤为如此。我的目的是尽量减轻CPU的负担,让硬件完成大部分工作,就如同今天常见的内部UART或SPI模块所做的工作一样。赛普拉斯PSoC UDB有几项特性能让这项工作变得非常简便。每个UDB在数据通路中有两个4字节FIFO和一个移位器。在实现UART时,您可将一个FIFO用作TX缓存,另一个用作RX缓存。对于WS2811/12,我只需要一个输出FIFO和移位器。我决定配置硬件,为每个器件每次生成一次中断。中断处理器将加载24位(3字节)数据,直到FIFO为空时返回。采用这种方法,可以每30微秒中断一次,而不必以150毫微秒或更短间隔禁用全部中断和位拆裂。我决定使用的微控制器是赛普拉斯PSoC CY8C4245AXI。该微控制器大批量采购价格约为一美元,有四个UDB,运行频率为48MHz,足以满足此项工作所需的速度和硬件要求。 设计使用了PSoC提供的四个UDB中的两个。一个用于使用FIFO缓冲数据和移位数据,这样每个器件的全部24位(3字节)可一次性写入。第二个UDB可使用两个比较输出创建PWM。一个比较输出用于创建逻辑0,另一个用于创建逻辑1。该串行数据可用于控制数字多路复用器,选择波形1或0。敬请参见下图10的方框图。 图10 WS2811/12接口使用PSoC UDB的方框图 UDB中四个PLD(每个UDB有2个)的大多数乘积项可用于控制数据通路,生成中断,提供状态和控制功能,但这也使用了这种低成本微控制器中一半的UDB资源。 接下来的工作是明确这一附加硬件能为设计节省多少CPU开销。以1,000个LED组成的阵列为例,其刷新频率为30Hz。如果设计使用固件对接口进行位拆裂操作,会差不多占用100%的CPU资源。使用PSoC器件中的可编程硬件仍然可以做到每30微秒中断一次,虽然这也是较重的负荷,但运行在48MHz的ARM Cortex-M0足以应付。为测试CPU开销,我创建了一个简单的环路,以大约30Hz的频率刷新显示器。在主环路中,我触发了一个引脚,然后使用示波器计算40毫秒内的触发数量。然后我禁用中断,再次运行项目,并比较结果。与使用固件中的位拆裂造成的几乎100%的CPU占用相比,持续显示刷新只占用大约12%的CPU资源。这样另外88%的CPU周期可用于外部通信和用户界面。如果为设计添加DMA,该开销可能会从12%下降到2%或更低。我使用的最廉价PSoC(约1美元)只包含UDB但未包含DMA,不过一些较大型的部件确实内置有DMA。 随后我实际制作了一个由60x16个LED(960个LED)网格组成的真正RGB LED板,用于测试该组件。该组件的运行符合预期,可用作显示基本的直线、矩形、圆圈以及文本的图形界面。 图11 使用960个RGB LED制作的广告牌 无论是大型LED板还是简单的定制界面,部分内部可编程硬件会给设计性能造成重大影响。不是每一种定制界面都需要多字节FIFO或全硬件状态机,但拥有这种灵活性能为您提供更多设计选择、提高性能,或是让现有设计迅速适合产品需求。
  • 热度 22
    2015-3-24 13:54
    2048 次阅读|
    0 个评论
      众所周知,功能验证在芯片的整个设计周期中占用的时间最多。尽管目前有许多技术可用于减少验证时间,但最终应当如何选择?答案并不简单明了,而且经常令人迷惑并要付出高昂的代价。   一个项目中需要使用的工具和技术必须在设计周期的初期就确定下来,以便获得新验证方法费用预算的准确信息。经常有公司因为错误估计了运转这些新型工具和技术所需的设计和技术的复杂性而浪费大量的资金和资源。   产品的抽象级越高,越容易设计;同样的,抽象级越高,越容易犯严重的错误。一个架构上的缺陷可能会导致整个芯片的损害,而在门级网表中的连线错误可以通过重制解决。   例如,Verilog 为设计者提供了一种相对容易的接口,以便他们在相当抽象的层次上进行设计。当设计曾经作为制约性的瓶颈时,Verilog 为设计生产率带来了指数增长,并且大大推动了复杂芯片的发展。但是如果设计者不了解在复杂的设计周期中语言上的细微差别,就很容易犯错。在验证成为瓶颈的今天,同样的观点也适用于许多验证技术和语言。   本文将对时下流行的验证技术(形式验证、随机、定向、有约束的随机、断言、属性检验)与语言(SystemC、C/C++、 S ystemVerilog、Open-VERA、E 等)进行全面评述,还将分析在传统的数字ASIC 设计流程中应当在何时采用何种验证技术和语言。   验证瓶颈   尽管事实表明如今设计生产率的增长速度仍然低于芯片复杂度的增长速度,然而现在需要面对的瓶颈已不再是设计时间,而是验证时间。最近的统计数据表明,对一个复杂逻辑芯片而言,整个产品周期中 60_70% 的时间都用于验证工作。如何使用新的工具和技术对设计中的复杂功能进行验证已经成为缩短总体的产品时间所需要面对的挑战。   由于以下原因,可以说验证瓶颈在某种程度上是设计抽象级逐步提高造成的结果:   1) 在较高的抽象水平上进行设计,易于构建高度复杂的产品功能。设计复杂度的提高造成验证工作的成倍增加;   2) 在设计、转换以及映射到最终产品的过程中,应用更高的抽象级进行设计会带来信息损失和解释错误的问题。例如,采用HDL 级设计并将其转换到门级的综合过程,需要进行验证以确保转换的正确性以及使设计意图完全得到体现。提高抽象级还带来了代码解释问题,在仿真时要通过这些代码对设计进行描述,以确保所写的代码真实反映了功能规范。   其它影响验证问题的因素还包括:   1) 由于设计中硬件与软件、模拟与数字等共存而造成的功能复杂度增加;   2) 对系统可靠性的要求增高,使得对验证工作的要求也增加,以确保在系统环境下,芯片功能可以顺利执行。   统计数据表明,验证问题现实存在,而且让公司付出了高昂的成本:   1)由于设计错误造成的芯片缺陷:在需要进行重制的芯片中,有82%是由于逻辑与功能缺陷设计错误。这意味着验证过程没有覆盖边角情况,缺陷一直隐藏在设计过程中直到流片。   2)由于规范错误造成的芯片缺陷:在需要进行重制的芯片中,有47%是由于逻辑与功能规范不正确或不完整,有32%是由于规范发生了改变。   3)重用IP 和外来IP 的问题:所有失败的芯片中,有14%是由于在重用或外来的IP 中存在错误。   4)重制的后果:重制费会高达10 万美元,还会延误产品的推出,由于使用这些有缺陷的芯片而导致的系统失败也会增加成本。   为了提高验证生产率,EDA 行业提出了一个与解决设计瓶颈类似的解决方案——抽象化的理念。诸如 Verilog 和 VHDL 等高层次的语言被用于验证芯片,这些语言包括各种指令如任务指令和线程指令(fork/join 语句),以及控制结构(while 语句)。这提供了更强的数据控制力,以便对所有边角设计进行充分验证。然而,这些指令不能被综合,因此不会被用作实际设计代码的一部分。   随着复杂度与日俱增,能够验证具有不同抽象级的复杂设计的新语言被创建出来,支持这些新的验证语言的技术和工具也随之诞生。   所有这一切意味着芯片厂商必须对新的工具作出评估,必须针对这些新的工具和技术对工程师进行培训,在公司的研发费用成本结构中必须包括新的工具和资源,公司在总体上必须在短时间内克服学习曲线问题,另外,还需要对这些工具进行风险评估,以及考虑新工具与已有技术的集成和协同工作的能力。   验证与确认(Validation)   除了验证问题之外,芯片公司还要面对确认时间问题。Kropf 将“确认”定义为“通过检查实现行为以获得对规范的信心的过程”。在验证和确认之间,有一种观点认为,“确认能够确保这是正确的设计,而验证则是确保这个设计是正确的”;另外一种观点认为,“验证指硅片成为成品之前的测试(Verilog/VHDL 仿真等),确认指硅片成为成品之后的测试(在实验室里测试电路板上的芯片)”。   无论是确认还是验证,若要保证硅片满足规范要求,要完成以下两个步骤:1)通过文件或建模,芯片规范得到了正确的解释;2)以上解释得到了正确的理解与实现(一般是通过 HDL),综合入硅片,并封装成为芯片。   本文认为第二步是验证,第一步是确认。目前业界流行的设计流程如图1 所示,此流程可保证以上两个步骤的要求得以满足。根据待实现功能的复杂程度不同,可以跳过一些步骤或者增加一些步骤。例如,如果某一项设计是纯粹面向硬件的,不涉及驱动或软件,那么可以从抽象级3 直接跳到抽象级1,锁相环设计即为一例。   当设计按照抽象级逐步推进时,要注意必须一直保持等效性,以确保最低层的抽象级能满足系统规范的要求。例如:   1)当 C 模型被置于一个系统环境并能够满足规范中所描述的所有系统要求时,芯片规范(一般是一个文本文件)与其 C 模型之间就达到了等效。这在实质上是功能等效。   2)通过比较 C 模型与HDL 实现的输出,可以在规范的C 模型与其 HDL 实现之间建立等效关系。在没有 C 模型的情况下,可使用“期望数据模型”。这在实质上也是功能等效。   3) HDL 实现与门级(综合后的)之间通过应用“逻辑等效性检验”可以建立等效关系。这时,由于设计采取的形式是纯粹的逻辑门,而且功能能够被表示为逻辑表达式,因此,这在实质上是逻辑等效。   现有验证技术及发展趋势   动态功能验证   使用最为广泛的功能验证方法是动态的,之所以被称为动态是因为输入图形/激励信号是在一段时间(几个时钟周期)内生成并应用于设计的,相应结果会被用于与参考/黄金模型进行比较,以检验其与规范之间的一致性。   仿真器通常用于计算所有的信号值,并将其与指定的期望值进行比较。目前,有两类可供选择的仿真器:   1)基于周期的仿真器:这类仿真器不管在时钟周期内发生了什么事情,它只是在每个周期内对单脉冲信号进行一次求值,由于执行时间很短这类仿真器的速度通常很快。   2)基于事件的仿真器:这类仿真器在时钟周期内或者在时钟边界捕获事件,并在设计中传播这些事件,直到系统达到稳态。   目前可使用的验证方法及技术如图2 所示。   随机/定向功能验证   在一个有时间限制的仿真过程中,动态仿真器只能验证芯片的典型行为,而不能验证所有可能的行为,这是动态仿真的主要缺陷。出现这个问题的主要原因是对芯片的定向测试是针对已知的测试空间,而不是未知的测试空间进行的。即使是仅对已知测试空间的测试也要花费很长时间。例如,假设推出每个运算数需要一个时钟,为了验证一个能对两个 32 位操作数进行加和运算的简单加法器的测试空间就需要 232x232 个时钟周期。随着逻辑运算越来越复杂,验证空间也会相应增加。因此出现了随机动态仿真,通过为设计提供随机激励信号来增加验证的测试空间,这样能够使验证覆盖的功能空间最大化。但当设计规模很大且非常复杂时,随机测试空间会变得无限。为了解决这个问题,更高级的验证语言,如 Open-VERA、E 与SVL (SystemC 验证库)被推出。这些语言引入了诸如约束随机激励信号、随机激励信号分配与电抗性测试平台等概念。伴随着这些语言的运用,出现了一些用于对其进行解释的工具,如VERA、Specman 与 OSCI 内核( Concentric System Studio ,CCSS)。   除了引入随机化功能以外,新的验证语言和工具还通过减少公司在构建不同测试场合/方案所花费的时间,来提高生产率。例如,测试方案可以采用最高的抽象级来编写,并能够通过采用功能强大的面向对象型结构而扩展至任何较低的抽象级。   当应用动态验证时,通常需要估计所覆盖的、可以量化的功能空间,包括:经过验证的代码行数(行覆盖率),经过测试的逻辑表达式个数(表达式覆盖率),一个 FSM 设计中能够达到的状态数(FSM 覆盖率),在一个仿真运行中可以双向变换的端口及寄存器数目(变换覆盖率),以及设计代码中覆盖的逻辑通道数目(通道覆盖率)。以上可以使用 Code Coverage 及Lint 工具来实现。   断言   设计者将断言用作一个占位符,用来描述与设计相关联的假设及工作特性(包括暂时的特性)。如果设计满足或未满足规范或假设,则断言将会在一个动态仿真过程中被触发。断言还可在形式/静态功能验证环境中使用。   混合功能验证   在该方法中通常执行动态仿真,仿真结果被用作静态验证的输入。在静态验证过程中,在设计中传播的是逻辑方程式/符号,而不象在动态仿真中那样传递数值。这种方法虽然不像形式验证详尽周全,但却具有比纯动态仿真更高的效率。   静态功能验证   在静态功能验证中,不向设计施加输入激励,而是将设计映射在一个图形结构中,用双择判决图(BDD)或其他数学表示方法来描述所有时间周期内的设计功能。利用这种图形结构来证实或反驳属性可以验证这些数学表达式,这是通过顺着或逆着信号流来传递数值,以确定数学结构中的矛盾式来完成的。   现有的工具通过以下两种方式来满足静态验证市场的需求:   1) 使用断言:这是在模型/设计当中规范并公式化的设计约束(使用SystemVerilog、Open-VERA、Verilog 和VHDL 等设计/验证语言)。   2) 使用属性:这允许使用属性语言(如PSL 和Sugar)对属性进行规范。   等效性验证   为了确认门级表示法与HDL 实现是相同的,需要实施等效性检验,使用匹配点并比较这些匹配点之间的逻辑。检验中会生成一个数据结构并比较在相同的输入模式下得出的输出数值模式,如果这些输出数值模式不相同,那么表示法(这里指门级和RTL 级)就不是等效的。   当表示法中的一个经过了某种类型的变换时,等效性检验有时会在两个门级网表或两个RTL级实现之间进行。   造成设计表达式差异的一些实际原因包括:   1) 综合算法/探索式方法:根据对综合工具的约束条件(区域、 时间、功率)不同,综合工具会对逻辑运算进行优化,以得到适当的门级表式。为此,综合工具将采用探索式方法和逻辑最小化算法。   2) 抽象级:在采用HDL 来实现设计时,由于语言的局限性或是缺乏(不具备)对综合工具如何解释特定语言结构并将其变换为门级表式的预测能力,因此,HDL 实现有可能与设计者意图存在一定的差异。    影响验证技术的趋势和力量   技术视角   设计错误可能出现在模块接口处或是在模块内部,它们最终会集成在一起形成芯片。举例而言,那些在模块级没有被发现的缺陷在应用动态仿真时会在子系统或系统级上显露出来。使用静态功能验证,模块开发的每一步都会得到详尽的验证,从而确保子系统/系统质量和可靠性从根本上得到提高。有人认为,使用静态/形式功能验证,能够更快地找到更多的缺陷。   另一方面,使用静态功能验证也存在以下缺陷:   1)现有的工具只能在模块级运行;   2)通常不能处理大型设计(一般只能处理100~150K 的门电路);   3)不能处理高度复杂的设计;   4)现有的形式验证工具有时会出现时间无限的问题(这主要是因为它们往往是基于一套探索程序,而不是任一算法)。这意味着形式功能验证在一些情况下可能会比动态仿真花费更长的时间;   5)设计必须被写为可综合的RTL 形式。   除了上述技术上的挑战外,基于断言的形式功能验证的两个竞争标准(PSL 对SystemVerilog)也带来了额外的问题。目前倾向于将静态功能验证方法用于验证足够成熟以备综合的模块,动态验证(随机和定向)用于严格验证集成前的模块。   目前,动态仿真还将继续主宰功能验证领域,直到形式验证工具提供一种更成熟的方法。    语言视角   可以观察到这样一个趋势,就是将设计和验证语言结合在一起。这将极大地促进生产率,改进系统可靠性以及提高设计质量,因为使用多种工具和语言引发的不明确和误解问题将得到消除。   在这一结合实现之前,公司要继续依赖现有的高级设计语言(Verilog 和VHDL),并选择是使用专有验证语言(Open-VERA、E 等),还是过去流行的Verilog 和VHDL 。SystemC 与其他高级设计描述语言在设计流程中扮演着重要角色,其中涉及硬/软件折衷以及在硬件上运行软件的设计(如SoC)。另外,它们也可用于架构建模及确认,当可以为应   用事务模型的验证使用架构模型组件时,也可以使用 SystemC。   选择正确的验证方法的标准   在当前缩短上市时间和迫切要求低成本的环境下,工程师正在设法解决设计复杂性问题。那些在新技术上投入更多研发精力的公司,其研发费用的使用更有效率,产品上市时间更短,公司成长更快,盈利更高。另外,公司必须在其特有需求与核心价值的基础上评估方法和技术。在将新技术引进其工具流程时,它们应当考虑以下问题,并做出适当的权衡。   1)在某个生产线中,公司是市场领先者还是追随者?   2)基础设施、工具和方法是集中式的还是分布式的?   3)新验证技术的评估是针对第一代产品进行的吗?   4)新验证技术对成本和产品上市时间有何直接和间接影响?   5)新的工具能否处理不同的设计能力?   6)工具的易用性如何?   7)可为新的工具提供什么水平的文档和支持?   8)新的工具和方法与公司内部现有的工具和方法之间是否具有互操作性?   9)新工具的投资回报率(ROI)如何?(包括在服务、培训、咨询、计算和人力资源方面的投资)   10)新的工具是否能够支持处于多个不同地理位置的设计?   11)公司需要考虑的问题中,最为重要的问题之一可能是:我们雇用的设计师和验证工程师是否对新的工具抱有成见?(即设计师不愿意学习和接受新的技术)公司在做出关于工具、语言和方法的决策时可以采用以下介绍的简单权衡方法。   产品视角   主要从事存储器芯片或存储器密集型(相对于逻辑密集型而言)芯片生产的公司讶SRAM 和DRAM 公司可能根本不需要进行大量的逻辑验证。这些芯片大多是定制的。虽然这些产品中有些规模会很大,但它们的逻辑复杂性并不高,因而不支持在公司内部配备大量逻辑验证工具的计划。不过,存储器密集型设计在其他方面提出了挑战,例如布线、工艺变化以及功率等。   那些制造纯ASIC 芯片,在芯片上不运行任何软件的公司可能无须在硬件或是软件实现上进行权衡或是实施测试以捕获运行于硬件之上的软件。例如,只具有硬件的SERDES 芯片所要求的验证和建模方法与同时具有硬件和软件的SoC 是不同的。对于拥有多种产品线的大公司来说,验证方法必须满足各种产品的不同要求。   系统视角   过去,逻辑芯片供应商不负责对芯片是否满足参考系统的功能和性能要求进行验证, 而如今的系统厂商在批量订货之前都要求芯片供应商实施系统参考验证。这就要求芯片公司在一个它们不熟悉的附加抽象级上对芯片进行建模和验证,这需要架构模型、参考模型、复杂应用级的测试以及精细的测试平台配置。面对这些不同类型的挑战,公司有两种选择,一是采用现有的语言、技术和方法,这将耗费大量的时间和精力;另一种就是采用新技术(如VERA、Specman 等)。此外,芯片供应商还必须确保所使用的参考模型和验证套件是在一个与客户的相应模型和套件兼容的环境中完成的,例如,应用客户的软件开发套件(SDK)和仿真器也能够进行同样的测试。   方法学视角   在芯片集成之前,可以将静态功能验证与动态仿真结合起来,在一个高置信度水平上验证模块级的功能。通过确认动态仿真正在持续验证功能空间的主要边角,可以有效地实施系统级验证。   首先执行随机仿真可以在验证的初始阶段发现大量的缺陷,然后对随机模拟加以约束以确定测试空间已经被完全覆盖的做法或许相对容易一些。应考虑在功能覆盖度量上对约束驱动型验证进行细化。功能覆盖率这一术语被用于描述对被覆盖的功能空间进行量化的参数,相反地,代码覆盖率则被用于量化一个给定的测试套件对已实现的设计进行覆盖的程度。定向仿真随后可被用于在验证周期末期覆盖边角测试空间。   断言和属性可在静态功能验证期间起作用(在模块级上),并可在动态仿真环境中被重用(在模块级和系统级上)。如果模块转变为IP,那么断言和属性也是有用的,因为断言将在IP 被重用时持续不断地检查其属性。   结语   随着时间的推移,具有更小特征尺寸(90nm 和 65nm)的器件将投产。目前,公司正在致力于解决诸如布线、串扰和软错误的设计问题。一旦这些设计瓶颈得到了解决且随着芯片厂商在越来越小的芯片上封装越来越多的逻辑,验证问题的出现就是意料中的事了。新型工具和方法的不断引进提高了设计生产率。提高设计(SystemC 和SystemVerilog) 和验证(Open-VERA、E 和 SystemC)的抽象化程度以满足日益增长的复杂度要求是不可避免的。   目前从SystemVerilog 的推出能够看到设计和验证语言的融合趋势。   验证持续扮演着重要角色,它能够提高产品质量,使硅芯片一次成功,从而间接影响总体的产品时间。SystemC 和建模语言将继续为逻辑密集型产品提供架构验证。通过使用属性、断言以及推出形式验证工具,生产率得到了进一步提高。但目前工程师仍旧依赖并信任动态仿真,因为它能够验证大型和高度复杂的设计。最终的趋势可能是:形式验证占据主要地位,动态仿真仍用于完整性检查。
  • 热度 26
    2015-3-24 11:47
    1105 次阅读|
    0 个评论
    Schematic Entry(原理图输入) 曾几何时,原理图就是工程师们的一切,一张羊皮图纸,一支自动铅笔,一把直尺,一个绿色逻辑模版,一块橡皮擦,一块金属擦除模板,直到上世纪80年代,计算机的出现,使原理图的制作技术得到了一个大的飞跃。到上世纪80年代中期,在原理图技术正在发生转变的时候,FPGA登上了历史舞台。随着FPGA的容量越来越大,原理图变得越来越复杂和笨拙,这就好像几年前ASIC设计所经历的事情一样。到了上世纪90年代,日渐增长的复杂度迫使工程师们学习Verilog和VHDL语言来使用大容量的器件,现在,这项流行的技术已经基本取代了原理图输入。但是,在Xilinx Vivado设计套件的IP集成工具中,我们可以看到原理图输入的新的形式,在这里,IP模块以一种图形化的视图形式出现,而不用再去考虑IP内部的复杂度,图形化设计又重新在设计中占有了一席之地。 FPLA,PAL和GAL在1975年,Signetics(西格尼蒂克)公司出品的第一代可编程逻辑器件被称为FPLA(现场可编程逻辑阵列)。FPLA的特点是尺寸大、速度慢、价格昂贵、不易使用,并且功耗很大,这些特点导致它无法在商业领域获得成功。MMI(Monolithic Memories Inc)推出简化改进后的FPLA,又称为PAL(可编程阵列逻辑),是第一个获得成功的可编程逻辑器件,改进之后,不可以对或阵列进行编程,这样大大简化了片上的互连以及可编程的熔断点。MMI制造的双极型PAL非常便宜,这也助长了“blow-and-go”工程设计模式(不需要做任何仿真)的滋长,许多设计工程师的工作台上都有一小堆用过的PAL器件来提醒自己更加细心的工作。(我把我用坏的PAL器件放在一个纸杯中)PAL器件获得巨大成功,以至于国家半导体、TI和AMD等公司都开始提供管脚兼容的器件。在上世纪80年代,双极型PAL发展成了基于EPROM的GALs(通用阵列逻辑),并最终演变成CPLD。 熔丝映射 我们并不总是用HDL语言来配置可编程逻辑。工程师们曾经使用熔丝图来直接表现片上的熔断点和互连,根据逻辑等式,可以在PAL数据手册的片上互连图上进行标注,以此来表示哪些熔丝需要熔断,哪些保持不变,然后需要手工把熔丝图转换为一个包含“0”和“1”字符串的二进制编程文件,这个文件可以告诉器件编程人员哪些熔丝需要熔断,哪些保持不变。幸运的是,熔丝图编程方法很快就不再被人们所采用。这是一张MMI熔丝图,出自EETimes的“How It Was: Programmable Logic”,作者是Max Maxfield。该文是基于Aubrey Kagan的口述整理而成,他是一家位于多伦多,从事工控接口和开关电源设计的公司(Emphatec)的工程主管。 MMI熔丝图 ABEL(高级布尔表达式语言) 由Data I/O公司在1984年4月份提出的一种早期的硬件描述语言。在那个时代里,ABEL与CUPL和PALASM同台竞争。Data I/O公司拆分ABEL产品线,成立一个名为Synario设计系统的EDA公司,然后,又在1997年把Synario卖给了MINC公司。MINC是一家专注于开发FPGA开发工具的公司,该公司在1998年倒闭,Xilinx收购了MINC的部分资产,这其中就包括了ABEL语言和工具集,ABEL成为Xilinx Webpack工具套件的一部分。点击此处阅读Michael Holly撰写的ABEL语言的历史,Michael Holly是Data I/O公司最早的开发人员之一。 CUPL(通用可编程逻辑的编译器) 加州圣何塞的Assisted Technology最早研发出CUPL,并在1983年9月份对外发布。出于可移植性的考虑,CUPL是用C语言开发而成,它是最早的商业化设计工具,可以支持多个PLD系列,Personal CAD Systems (P-CAD)在1985年收购了Assisted Technology以及CUPL,可编程器件供应商Logical Devices后来收购了CUPL,然后转手卖给了Altium,在上世纪90年代,CUPL出现在Altium公司的Protel设计系统中,现在是以一个设计插件的形式存在。Logical Devices仍然提供PAL/PLD设计软件,用于基于PROM/ EPROM可编程逻辑器件,这个软件就是CUBEL,它是在早期的CUPL和ABEL硬件描述语言的基础上开发而成。 PALASM 上世纪80年代早期,MMI公司的John Birkner合作开发了“PAL汇编语言”,以此来取代熔丝图编程。它最初是用Fortran IV编写而成,可以运行在大型主机或者微机上。Birkner创立了Structured Design公司,该公司提供SD20 PAL编程器,用于第一代20个管脚的MMI双极型PAL器件,后面又推出SD20/24编程器,增加了对24个管脚的PAL器件的支持。Structured Design的器件编程器使用内嵌的PALASM编译器,不需要使用微机,程序可以保存在SD20的Exatron “Stringy Floppy”磁带驱动器中,或者通过RS-232串行接口来输入和输出,通常情况下,RS-232是与PC机进行连接。 Data I/O器件编程器 当需要一个通用的器件编程器,既可以用于EPROM,也可以用于可编程逻辑器件,那么就需要了解Data I/O公司,它制造出了最早的商用编程器。Data I/O成立于1969年,在整个70年代,为了适应可编程器件日益提高的复杂度,它推出了一系列处理能力不断增强的产品。在80年代,Data I/O推出Model 29型号的编程器,它能够使用UniPak适配器来对EPROM进行编程,也可以使用一个LogicPak插件适配器来对PLD器件进行编程。Data I/O现在提供为生产线设计的大容量、高速度的器件编程器。 Data I/O Model 29B编程器外加LogicPak适配器。图片来源: Michael Holley UV擦除器 最早的可编程逻辑器件使用片上可编程熔丝,它们只能一次性编程,导致工程师的桌上经常会出现一堆烧坏的器件,一些PLD供应商很快意识到可擦除的PLD器件会更加受到市场欢迎,他们改进了UV EPROM单元用于PLD器件,这样,也就意味着绝大部分的设计实验室需要有一个UV擦除器来负责擦除可编程逻辑器件中的内容。UV擦除器曾经相当昂贵,但是现在在亚马逊只要不到20美金就能买到买到一个简单的UV擦除器。 德州仪器TTL数据手册 如果你是一个上世纪70年代的数字设计工程师,那么有着橘黄色封面的TI TTL数据手册就是你的设计圣经。在手册里,你能够找到设计数字系统所能用到的所有模块。在1971年TI 7400系列逻辑器件首次引入微处理器概念之前,许多系统都是基于没有微处理器的TTL器件或者其他LSI的器件来开发的。最早的用于可编程逻辑器件的IP模块是TI TTL数据手册及其补充部分描述的更加复杂的部件,设计人员使用这种内嵌数字模块的可编程逻辑,可以简化整个系统的实现,这些数字模块就是IP重用的早期原型。 经过了大概40年,这本TI TTL数据手册(1976年前后)仍然摆在我的书架上 图片来源:Steve Leibson
相关资源