引言
从最初的计算机和电话开始,互联网络一直是电子工程的关键构成。在超大规模集成(VLSI)电路时代,由于MOS晶体管的驱动特性以及片内互联相对较大的电容,互联网络变得尤其重要。
芯片内部用于连接功能单元的互联网络对芯片性能有很大的影响,甚至是决定性的影响。总线虽然是一种最简单的互联,但从容量或者电源角度看,却是较差的选择,因为驱动总线以最大速率工作时需要的电源和空间随总线电容呈指数增大。而且,多点连接网络也不是一种好选择,因为即使每次只需要一次对话,或者会话限于最近的邻居之间,也必须驱动整条总线。交叉是不错的解决方案,其最大容量由底层器件和布线技术决定。一般而言,多方会话的最佳解决方案是采用交叉网络。
现状
目前的片内总线直接源自计算机系统中使用的系统宽度总线(实际上进行了精简)。尽管我们知道这类总线的确发挥了作用,但它明显在设计上受限于以前的商用目的和技术水平,也就是便宜的布线、昂贵的芯片,而互联比逻辑速度快。
现在,情况发生了变化。现代大规模IC的速度一般受限于互联,而不是逻辑。采用了多时钟域和波传播技术的芯片就充分证明了这一点。在众所周知的“摩尔定律”(常常被错误地引用)作用下,现在可以提供丰富的逻辑门,而大部分工程师并不知道该如何使用这么多的资源。对于这一窘境,可以反过来考虑电路和系统设计:便宜的逻辑和互联,而布线恰恰相反。
总线导致了总线标准的发展——很自然地产生于目前的商业和技术环境。不同生产商的各种IC需要通过印刷电路板进行通信,因此需要为逻辑电平、电流驱动和信号极性建立标准。各种引脚和信号标准(例如,晶体管到晶体管逻辑,即TTL)导致了引脚组标准,也就是总线标准的产生。信号标准简化了不同元件之间的连接,总线标准实现了各种微处理器、外设和存储器的连接。这样产生了将整个电路板看成是一种插入模块的电路板级标准(例如,VME、S-100、Futurebus、PCI等)。实际上,在很多情况下,这些电路板级标准已经超出了供应商专用芯片级伪标准的范围。
虽然引脚级、芯片级和电路板级总线实现了电气兼容性,但并不能保证各构成部分之间能够实际对话。可以说电路能够工作,而协议较弱。但是标准并没有解决系统体系结构和数据流的问题,因此,标准只是很好地解决了那些琐碎的问题,例如怎样发送连续的“1”和“0”字符串。
与很多法律、政策和规章相似,总线标准也得贯彻其效用。但是,总线一经采用,就开始过时了。总线的严密性成为其弱点。总线标准对信号、协议、带宽和应用模型的变化适应性不强。总线在本质上变化很慢,很快就不能适应意外的变化。它阻碍了创新;延误了原创。虽然总线能够顽强地支撑下去,但是如果不具有连续性,那就一无是处了。当然,在不断发展变化的标准化大海中,它仍然是稳稳竖立的灯塔。没有确定的规范,元件生产商应怎样遵循标准呢?
其他考虑
总线的替代方案有很多,都曾在各种计算机、芯片、电路板、ASIC和FPGA中得到成功应用。如同总线不是解决所有互联问题的灵丹妙药,这些替代方案也不是万能的。如果能避免标准总线固定的程序安排和时间进度,那就有可能为设计开辟新的坦途,为普通项目带来一些创意和创新。
总线和网络
目前总线体系结构的替代方案其实也不过是一类不同的总线。准确地说,是不同的互联拓扑,例如网络、交换架构或者交叉结构。这些互联拓扑成功地应用在很多芯片、电路板和系统级产品中,变得越来越流行。随着芯片和系统级体系结构的变化,其互联逻辑随之变化。
如图1所示,总线拓扑一般采用点对点或者点对多点会话结构。这些总线也是源自引脚或者电路板级接口的标准化要求,这样,各种供应商的芯片能够实现互通。总线可以有多个主机(发起一次会话,发送或者接收数据),但是每次只有一个主机处于活动状态。在总线的定义上,其本质就具有独占性。每次只有一个主机能够使用总线;所有其他主机必须等待。因此,在任何总线规范中,总线仲裁(例如,共享机制)成为最重要的组成部分。
图1 传统的总线拓扑(略)
虽然每次只有一个主机处于活动状态,但是大部分总线支持多主机。主机竞争使用总线,发起一次会话,等待从机(或者在“多呼”会话中的多个从机)的响应,然后释放总线。主机可以发起第二次会话,也可以通过仲裁,把总线控制权交给其他主机。这种安排会导致系统瓶颈,等待使用总线大大降低了系统性能。
有些更高级的总线支持分割会话,下一次会话的开始和前一次会话的结束相互重叠,从而减少仲裁或者会话延迟的开销。虽然这样从整个会话时间中去掉了一些多余的周期,但却无助于解决所有总线根本上存在的单主机问题。
在ASIC或者FPGA中,采用片内布线资源很容易实现芯片级总线。标准芯片架构技术在芯片顶层提供相对平直的金属层,方便了总线的实现(也易于实现分布电源和全局时钟信号)。
网络拓扑和传统的总线非常相似。网络也是针对在共享介质上的点对点或者点对多点会话而设计的,也采用了对总线的仲裁控制(通常使用碰撞探测和重试算法)。而且,邻近的会话过程还可以稍微重叠,以节省时间。除了物理实现以外,网络和总线是非常相似的。
交换架构
交叉交换及其更通用的同类技术--交换架构,比标准总线即简单又复杂。交叉交换提供多主机和多从机芯片或者系统多点对多点会话机制。与总线和网络不同,交叉和交换架构支持多路同时会话。除了每次只有一个主机进行会话的情况之外,这种结构大大提高了带宽。在这种情况下,传统的总线或者网络能正常工作。在更常见的多主机随机发起会话(一般是同时的)的情况下,交换架构(如图2所示)会产生更好的结果。
图2 交换架构拓扑(略)
多主机的情况非常普遍,甚至是在只有一个微处理器或者一个处理器内核的系统中。据Gartner/Dataquest的研究,芯片系统(SoC)中的处理器数量平均大概是3.5个,并且这一数字还在增长。换句话说,大部分芯片都含有多个处理器,其中“处理器”被定义为执行软件的RISC、CISC、视频或者网络处理器。
即使是只有一个微处理器的芯片也通常含有一个以上的处理器“内核”。Intel著名的Core 2 Duo以及类似的处理器在一个硬件芯片上含有两个甚至更多的异类处理器。Freescale(Motorola)的双处理器QUICC和PowerQUICC通信芯片已经推出了10余年的时间。网络和通信市场无厂芯片公司在每一芯片系列中都推出了具有4个、10个甚至更多处理器的器件。绝非偶然,这些器件也在内部采用了交换架构。
交叉交换之所以这样命名,是因为它以前采用的是互相垂直放置的交叉金属条结构。垂直的开关或者继电器对之间建立了电气连接。由于X方向的任何金属条都能够连接到Y方向的金属条,因此,有时候也称其为X-Y交叉。交叉交换结构在电信设备上非常普遍,在实现任意连接上发挥了重要作用。
交换架构不但提高了系统总带宽,而且还避免了仲裁延时以及总线开销问题。总线是单一资源,而交换架构是共享的。只要两个主机没有同时寻址同一个从机(反之亦然),就可以同时进行任意数量的会话。当出现资源冲突时,交换架构仲裁的作用和其他共享资源的情况一样;除非出现冲突,否则不需要进行仲裁。
因此,交换架构具有更好的带宽和更低的延时。在很多高性能设计中,处理器提取代码、存储数据,或者接收数据,并不希望出现共享总线中的时间代价问题,因此,存储器延时非常重要。当多个主机能够同时寻址多个从机时,也会提高总带宽(即,主机/从机同时会话的数量)。
Amdahl定律阐述了存储器带宽必须随着处理器数量的增加而增大。而半导体存储器带宽的发展跟不上处理器对带宽需求的增长。存储器成为阻碍性能的瓶颈,这种不平衡导致产生了各种工作方式,包括多级缓冲、写数据通路、可写代码存储,以及不同的指令集等。每一个芯片设计人员的首要工作就是如何打开这一存储器瓶颈。继续挖掘共享总线会适得其反。
实现互联
和其他互联一样,交换架构在实现时 也必须注意底层硬件的性能。早期的交叉交换结构的确如此。现在的交换架构使用半导体逻辑门和金属布线层。和总线相比,交换架构不依靠金属层,而是更多的采用逻辑门。因此,这种结构不太适合应用在电路板上,而是FPGA等含有丰富逻辑资源的芯片的理想选择。“硬”ASIC处于二者之间,它倾向于采用大量金属层,而逻辑相对较少,除非专门针对交换架构进行设计,一般情况下,它更适合总线。
在有大量逻辑的FPGA中,交换架构应用得非常好,它发挥FPGA的性能,也符合业界发展趋势。设计人员转向“软”硬件IP(知识产权),交换架构本质上是“软”的,能够和设计中的其他软IP很好地协同工作。而总线,被定义得非常严密,控制得非常严格。因此,交换架构更容易综合,更适应现有的(以及未来的)功能模块。
如果没有固定总线接口,功能模块或者组件能够更快地发展,不会受到总线的限制。这对IP设计人员、IP用户以及IP本身都是好消息。交换架构成为“IP集成基础”,而替代总线;它以更灵活的方式连接芯片的各个区域。
交换架构还利用了EDA工具取得的进展。它是更抽象的互联形式,比Verilog总线模型的抽象级更高。互联的细节被提取出来,设计人员可以把精力放在数据流和体系结构上,而不是总线时序和延时。
提高抽象级
软件开发人员已经习惯于在工具中详细说明自己的设计构思。他们采用的方式从二进制表示,到指令助记符,直到C和Java等高级语言。开发人员并不用指定每个变量存储在什么地方,以及是怎么安排的,而是由编译器完成这一工作。提取出细节后,开发人员能够集中精力处理流控制、计算和逻辑,而编译器正确地实现所有的变量、寄存器、算法操作、存储等等。C语言开发人员甚至不用知道“字”是16位还是64位,这并不重要。
良好的硬件开发工具,例如较好的编译器,通过很少的操作就可以把设计人员的想法在目标硬件中实现。和编译器一样,开发工具掌握了底层平台的结构和资源。这样,工具完成了两项任务:帮助设计人员从细节中解脱出来,比设计人员更好地实现映射。过多的指定或者约束通常会导致较差的硬件(或者软件),因为这样会使编译器无法进行自己的工作。良好的编译器不仅仅是翻译,而是起到了优化的功能。
在今天的环境中,总线规范过多地约束了硬件工具能够提供的“解决方案空间”。让工具自由地发挥底层硬件解决方案的功能不仅使工作更容易,而且更好。特别是在FPGA逻辑丰富的环境中,总线无助于完善器件的功能。互联可能不是很理想,但总是必须的。无论是采用总线、交换架构、网络还是其他拓扑结构,这些都是设计芯片其他部分(也可能是系统的其他部分)的基础。如果做的好,它可以帮助实现系统的很多目标。做的不好(或者不合适),设计人员必须应对各种限制,而无法高效工作。
解决方法
Altera SOPC Builder软件提供的解决方案自动处理IP和设计模块的集成,满足了设计人员在更高抽象层工作的需求。SOPC Builder支持具有流和存储器映射接口的组件,提供的系统设计互联架构能够实现设计中数据面和控制面的集成。互联架构支持从机侧仲裁,实现多主机总线同时访问,提高了主机侧仲裁方案的系统性能。
它还可以进一步管理好拓扑,提高桥接性能。设计人员或者系统规划人员从对性能要求较低的域中分离出性能和吞吐量更好的系统域。SOPC Builder的流接口为数据包处理、流复用和DSP数据等宽带应用提供了大吞吐量、低延时互联。存储器映射系统互联架构使用最少的FPGA逻辑资源来支持数据通路复用、地址解码、等待状态生成,外设地址对齐(包括支持自然或者动态总线宽度调整),以及中断优先级分配等。图3所示为SOPC Builder系统互联体系结构,它和图2中的交换架构相一致。
图3 SOPC Builder系统互连架构(略)
每次当您在系统中加入新组件或者改变外设访问优先级时,SOPC Builder都能够自动生成新的最佳系统互联架构。由于SOPC Builder自动生成了系统互联架构,您可以迅速方便地对系统进行修改,以提高性能或者增加功能。Altera ? Quartus ? II设计软件订购版和网络版均提供SOPC Builder。 |