片上系统 (SoC) 设计方法允许设计人员从较小的工作模块或系统创建复杂的硅系统。通过提供一种在更大的环境中轻松支持专有功能的方法,该环境包括许多现有的设计组件,SoC设计向更广泛的受众开放了硅设计工艺。
芯片设计复杂性趋势继续遵循摩尔定律,远远超出许多专家认为的终点。采用90纳米特征尺寸的系统正在设计中,而0.13微米的芯片正在生产中。复杂的设计现在包括2000万个逻辑门,或在1平方厘米的芯片上包含2亿个晶体管。相比之下,几年前,200万个逻辑门或1000万个晶体管还是常见的。
嵌入式系统开发人员已经接受了SoC设计,因为它允许手机、PDA和GPS等大批量产品用单个芯片取代昂贵的电路板。尽管SoC设计在嵌入式领域很常见,但迄今为止,它们主要集中在简单的设计上。这种简单性已不再能满足许多高端产品所期望的复杂性。在不久的将来,高端PDA设备和先进的相机将通过提供包含多个处理器和高速I/O系统的芯片来扩展其功能。
只有当您能够管理由此产生的系统复杂性并在合理的时间内生产出可工作的系统时,单个芯片上的复杂系统的真正可能性才有用。从头开始的2000万逻辑门设计很容易需要200名工程师花费三到五年时间进行架构设计、设计、验证和构建。普遍的看法是,产品设计周期需要大约一年才能在市场上具有竞争力。
SoC设计的价值在于承诺在他人工作的基础上进行构建。为了获得成功,设计团队需要获得大部分设计和软件,然后添加相对较小的专有部分,从而独特地定义产品。图1包括通信芯片的常见架构。该图说明了一个设计,其中包含多个处理器、到主机计算机的控制接口、存储器接口、高速数据接口和其他逻辑。
SoC的理想候选产品将是包含专有处理器,但使用标准I/O接口的产品。另一个候选产品可能使用标准处理器,但添加专有逻辑块,这既可以添加独特的功能,也可以加快整体处理速度。这些逻辑块,包括处理器、I/O接口和存储器接口,通常被称为IP核,因为每个都包含知识产权 (IP)。本文探讨了当今设计人员面临的许多设计和系统挑战,包括关于芯片架构以及如何对这些复杂系统进行编程的决策。
设计流程和方法被广义地定义为设计团队用于构建其设计的工具和方法。简化的流程如图2所示。尽管设计流程各不相同,但对于单个设计而言,流程必须明确定义并得到良好支持至关重要。理解这些方法对于理解整体SoC设计非常重要。
当今设计规范的方法几乎总是寄存器传输语言 (RTL),通常是Verilog或VHDL。这些语言类似于编程语言,但更具限制性。综合程序读取RTL并将其直接转换为在硅上实现的电路。综合程序已经发展到设计人员信任结果的程度。仿真程序读取RTL,让设计人员执行功能并证明或反驳设计的正确性。这种仿真流程是设计验证方法的关键。
设计工具的存在是为了增强SoC设计过程的各个方面,包括高级规范和最终电路级之间的形式验证、时序验证、评估设计物理正确性的工具以及允许快速进行测试规范开发的复杂软件工具套件。新的工具产品允许设计人员将预期状态和值表示为断言,这些断言作为监视器插入到仿真规范中。
当今可用的许多IP核由商业供应商或大型组织内的IP组提供。大多数IP核以寄存器传输语言指定,可以是硬核或软核。软IP表示核未映射到硅上;因此,无法保证其所有物理或时序特性。
IP核的常见定义是具有明确定义的接口的设计功能。许多IP核最初是特定芯片的设计模块,用于处理明确定义的功能部分,然后演变为标准功能部分,可用于多个芯片。
IP核的一些示例包括I/O系统,如Infiniband、PCI-X、以太网和商品接口,如存储器控制器。单个设计上的模块与IP核之间的区别在于,芯片之间的信号协议和时钟定义可能存在显着差异。IP核需要足够灵活才能处理差异。
提供有用的IP的供应商通常在为其IP提供设计抽象方面取得成功。特别是,数据、控制和时钟的标准接口是他们成功的关键。标准的尝试包括AMBA总线接口或开放内核协议 (OCP),但许多内核仍然提供专有接口。
尽管SoC设计吸引人的部分是能够构建在现有IP模块之上,但最终芯片是一个系统,必须基于高质量的系统设计。挑战在于,根据定义,IP模块在没有系统知识的情况下完成;因此,将系统组合在一起可能会产生许多复杂性。系统设计人员必须决定整体系统设计,创建整体通信策略,并指定和实现全局信号系统。
芯片的全局通信方法变为系统总线或IP模块之间的一组专有路径。图3说明了系统级通信的四种选择。
创建现有IP核和系统通信工具之间的接口通常需要花费大量设计时间。最后一个观察结果是,设计人员可能想要或打算实现一种互连架构,但被迫支持关键IP的替代方案。实际上,系统通常会包含多个I/O架构——例如——包括系统总线,但有一些直接连接。
除了决定全局通信之外,设计人员还必须做出全局时钟和协议决策。最具挑战性的全局决策之一是系统时钟。最简单的系统选择是拥有单个系统范围的时钟,但每个IP模块都旨在支持特定的时钟速度。保证软IP的特定时钟速度是一项挑战。
设计的不同部分通常支持或需要不同的时钟速度。图4所示的示例包括一个以250 MHz运行的处理器内核。高速I/O需要100 MHz的时钟,此要求是I/O标准定义的一部分。调试接口速度较慢,需要1 MHz的时钟。系统设计人员可以决定让系统总线以CPU速度运行,或者可能有其他要求指示其自身的独特速度。在最坏的情况下,系统设计人员必须为每个内核创建唯一的时钟域,从而产生大量额外的同步设计工作。更频繁选择的解决方案是为许多IP使用通用时钟,并为少数特定内核提供唯一的时钟域,从而最大限度地减少系统级设计工作。
除了时钟规范外,IP核还包括数据和控制接口,或协议接口。如果设计重用是IP核开发的主要目标,那么这种数据的表示将在大量IP之间是通用的——例如,由一家系统总线公司定义的协议。许多标准组织已在该领域取得进展,尤其是虚拟套接字接口联盟 (VSIA)。但现实情况是,今天可用的许多(即使不是大多数)IP核都具有由原始设计决定的专有接口。一些IP供应商为其流行的IP包含到更常见的接口之一的桥接,例如AMBA总线或OCP。
但是,系统设计人员必须了解所有协议信号的定义和时序。许多系统都失败了,因为在设计的一部分中读取使能信号被反转,或者控制信号被假定为在时钟的上升沿而不是下降沿。对于SoC设计人员来说,即插即用IP核集的梦想仅仅是梦想。将这些IP模块连接在一起始终需要大量的设计工作。
尽管复杂的硅硬件对当今所有公司来说都是一个挑战,但真正的产品挑战在于系统级别,当前的产品包括硬件和软件。许多芯片公司对特定系统所需的软件工程师数量感到沮丧。通常,它比所需的芯片设计人员数量多一倍以上。本节介绍系统设计人员为图1所示的原型系统开发应用程序时面临的一些复杂性。
让我们暂时假设示例芯片上的处理器是标准的,例如MIPS或ARM提供的处理器,或者是Tensilica等IP供应商提供的处理器,从而确保产品开发人员无需创建应用程序开发环境。但是,即使新芯片可以使用现有的软件开发环境,产品架构师也需要为应用程序开发人员开发编程模型。例如,一种选择可能是在每个独立的处理器上运行标准操作系统,并为应用程序开发人员提供完整的应用程序灵活性。然后,应用程序开发人员面临着协调这些处理器之间所有活动的任务。更常见的方法是为应用程序开发人员提供具有多个线程的单个处理器的模型,每个线程都映射到一个单独的处理器。此模型限制了对每个处理器的访问,但也限制了可能在应用程序级别发生的潜在同步问题的数量。
此编程模型仅为处理器提供通用开发环境。实际上,芯片是一个更大的系统,包括复杂的通信系统,这些系统必须在开发环境中建模,或者限制为为应用程序开发人员定义的单一方法。在任何情况下,标准开发环境几乎永远不是标准的,因为它必须扩展以适应此新系统上可用的所有功能。因此,任何产品周期都必须包括应用程序开发阶段以及对应用程序开发人员使用的开发工具的非平凡投资。
在使用SoC的嵌入式设备中,最普遍的问题之一是设备驱动程序。选择用于构建系统的IP核会影响将使用哪些设备驱动程序,而将内核连接在一起的存储器架构决定了整个系统的通信机制。
在嵌入式术语中,电路板的设备驱动程序集称为板级支持包 (BSP)。许多嵌入式操作系统公司已经为流行的电路板提供BSP,并且将来这些肯定会出现在更常见的SoC上。尽管对于那些在其办公桌上放置了SoC项目的人来说,这起初可能看起来令人欣慰,但它不太可能提供太多帮助。SoC范例的力量部分在于能够将不同的设备粘合在一起以创建全新的产品。这意味着,虽然可能有一组预构建的参考设计设备驱动程序,但产品开发人员不太可能在其系统中使用完整的参考设计;实际上,几乎总是需要进行重大更改。参考设计只是参考;它们很少用于最终产品。
随着构建SoC变得越来越容易,每个SoC都将与其他SoC不同,起初只是在小方面有所不同。最终,这些差异将扩大,并将给设计人员、实施人员和集成人员带来大部分麻烦。
解决至少部分此问题的关键是接口的正确设计。当前用于指定和实现软件接口的技术远未达到即插即用的理想状态。尽管大多数操作系统都提供设备驱动程序接口标准,但每个标准都略有不同,这使得驱动程序重用几乎不可能。即使是具有共同血统的系统,如FreeBSD、NetBSD和OpenBSD项目,也无法在二进制级别共享驱动程序。
进一步的复杂性在于设备驱动程序和操作系统内核使用的内存模型通常使用共享内存缓冲区来提高速度。产品软件会将内存中的特定区域定义为在多个软件组件之间共享,这种使用模型通常称为DMA或直接内存访问。顶级程序会将数据块放入缓冲区,然后将指向此缓冲区的指针交给另一个软件组件(例如,网络堆栈)。以这种方式让不同的组件拥有相同的内存在可以随时挂起或重新配置的系统中无法很好地工作。在这种系统中跟踪和回收内存很困难,并且几乎总是通过临时机制处理。
最后,面对“电路板启动”的人员(正如这个过程所称)面临的问题是,调试支持通常是最小的。在早期阶段使用示波器调试系统以及用打印语句替换标准调试器的情况并不少见。如今,更高级的工具,如直接与CPU插槽 (JTAG) 对话的源代码级调试器和显示任务随时间执行情况的软件示波器,可以简化电路板启动过程。不幸的是,这些工具通常依赖于实际工作的未调试设备驱动程序。因此,全新的硬件和全新的软件是相互关联的,并且通常一个问题可能表现为另一个问题。这导致芯片设计人员和软件开发人员之间的互相指责和分歧。
这些问题不仅困扰着围绕SoC构建产品的人员,也困扰着希望销售其IP核的公司。与桌面世界不同,在嵌入式世界中,有大量的操作系统选项可供支持,并且一半的嵌入式市场仍然开发自己的操作系统。IP核制造商应该为其客户提供哪些设备驱动程序(如果有)?系统的成功很大程度上取决于最新设备的软件驱动程序的可用性。这是Linux在开源操作系统中占据主导地位的真正原因:您可以找到几乎所有购买的产品的驱动程序。
存在其他模型来处理这种设备复杂性,其中一种模型已被Apple在其OS X操作系统中使用。Apple有幸控制其盒子的内部硬件,并且只需通过明确指定的硬件接口(USB、FireWire、以太网和802.11)与外部设备通信。其方法是为其中一个开源Unix版本 (FreeBSD) 完全重做设备层。显然,这些解决方案不适用于一般的SoC世界,但某些具有狭窄市场领域的供应商可能会利用它。
处理软件内部通信复杂性的另一种方法是构建基于消息传递系统的软件,但消息传递模型在软件社区中尚未取得重大进展。在消息传递中,两个软件模块之间的每次通信都使用消息协议(如网络协议)完成。这创建了非常强大的接口,但可能会带来性能问题。这种编程模型也不是很常见,因此聘请编写消息传递代码的工程师并不容易。只有一个商业嵌入式操作系统使用消息传递,并且在开源世界中不存在。
基于SoC的设计的软件有其自身的一系列问题,如本节所述。在这些问题得到解决之前,每个基于SoC的设计都需要对设备驱动程序软件进行大量投资,才能使产品获得成功。
尽管此处提出的挑战是真实的,但事实是,大大小小的公司都在定期创建SoC设计。支持通用I/O系统的IP,如以太网MAC、USB和PCI,已成为商品。MIPS和ARM的CPU在许多设计中 регулярно 使用。
复杂的设计已成为现实,标准正在努力赶上它们。这是一个激动人心的时刻,可能性越来越多。IP标准和软件接口的问题是真实存在的,它们正在阻碍IP和嵌入式市场的发展。SoC设计对于构建日益复杂的设备来说太有吸引力了,因此很可能非常聪明的人会弄清楚需要发生什么,并使其成为现实。
TELLE WHITNEY,博士,是妇女与技术研究所的总裁兼首席执行官。在加入该研究所之前,她曾担任工程副总裁,并且是可编程通信领域初创公司Malleable Technologies的创始管理团队成员,并且曾在Actel Corporation担任软件主管。Whitney共同创立了女性计算领域Grace Hopper Celebration of Women in Computing (GHC) 会议,这是女性计算领域最大的技术会议。她是的秘书/财务主管。
GEORGE NEVILLE-NEIL在各种环境中从事网络和嵌入式操作系统工作。他的兴趣是网络协议、操作系统和基于组件的计算。
最初发表于 Queue 第 1 卷,第 2 期—
在数字图书馆中评论本文
George W. Fitzmaurice, Azam Khan, William Buxton, Gordon Kurtenbach, Ravin Balakrishnan - 通过多样化的设备社会实现情境数据访问
自ATM和杂货店UPC结账台等“信息家电”问世以来,已经过去了十年以上。对于办公环境,Mark Weiser于1991年开始阐明UbiComp的概念,并确定了该趋势的一些显着特征。嵌入式计算也变得越来越普遍。例如,微处理器发现自己嵌入到看似传统的笔中,这些笔可以记住它们写了什么。汽车中的防抱死制动系统由模糊逻辑控制。
Rolf Ernst - 将所有内容整合在一起
随着嵌入式系统复杂性的日益增加,越来越多的系统部件被重用或供应,通常来自外部来源。这些部件的范围从单个硬件组件或软件进程到硬件-软件 (HW-SW) 子系统。它们必须与新开发的部件合作并共享资源,以满足所有设计约束。简单来说,这就是集成任务,理想情况下,它应该是一个即插即用的过程。然而,这在实践中并没有发生,不仅因为接口和通信标准不兼容,而且还因为专业化。
Homayoun Shahri - 硬件和软件之间界限的模糊
在技术的推动下,芯片上可提供数百万个门电路,一种新的设计范例正在兴起。这种新范例允许在一个芯片上集成和实现整个系统。
Ivan Goddard - 嵌入式系统中的劳动分工
嵌入式应用程序越来越需要比单个处理器(即使是大量流水线的处理器,使用高性能架构,如超长指令字 (VLIW) 或超标量)所能提供的更多的处理能力。简单地提高时钟频率在嵌入式世界中通常是令人望而却步的,因为更高的时钟频率需要成比例的更多功率,而功率在嵌入式系统中通常是稀缺的商品。多处理,即应用程序在两个或多个处理器上同时运行,是在固定功率预算内获得更多处理器周期的自然途径。