复杂模块接口的独立设计
扫描二维码
随时随地手机看文章
一、引言
在越来越发达的通讯世界里,新产品、新设备层出不穷,随之而来的问题是各产品与设备之间的接口也越来越多样化,虽然标准化组织定义了许多接口标准,比较著名的接口协议如USB,PCI等,但是由于各种接口的性能、价格、应用范围等因素的不同,新的接口协议仍旧层出不穷,如何设计接口一直是困扰着电子工程师,尤其是对复杂的接口协议,问题尤为突出。在国外,已经推出用于接口设计的专用软件。
在过去的一年多时间里,我们对高性能串行总线IEEE-1394(2000A)做了研究,并设计了基于IEEE-1394(2000A)的物理层和链路层芯片。在芯片设计的过程中,我们对IEEE-1394(2000A)芯片中的PHY/link接口进行了研究和设计,并探寻到了一些接口设计的经验。现在我们以IEEE-1394接口为例,把心得拿出来与大家分享,希望能够起到抛砖引玉的结果。
二、接口功能结构分析
接口的主要功能就是使数据通过接口使之能够在不同模块或系统间自由流动,达到数据共享的目的。应用接口的原因多种多样的。通常的情况是由于模块之间协议不匹配使得我们采用接口。另外还有各式各样的原因使得我们不得不采用接口技术,如传输环境恶劣,需要接口把数据按照一定的协议使之能够安全地传输。这方面的一个典型的例子是GSM系统和CDMA的空中接口协议。而在IEEE-1394协议中,定义接口主要用于连接相同厂商或不同厂商的1394串行总线接口的物理层和链路层专用集成电路(ASIC),并为1394系统未来的升级提供支持。国内电子工程师应当在系统设计过程中借鉴这方面的经验。
总而言之,随着各种新设备,新产品的产生,接口的广泛应用是不言而喻的,它需要我们针对不同的情况,高效快捷地解决数据互连的问题。
在应用接口的环境中,情况总是这样:模块A的数据输入和输出采用一种接口协议M,而模块B的数据输入和输出采用另外一种接口协议N,因此数据无法在模块A和模块B之间直接传递,模块A和模块B也不能直接互连。
通常的解决方法是这样的:在模块A和模块B之间进行加上一个接口。这样,接口把模块A发来的数据用协议M接收下来,再在接口中把数据分解出来,按照协议N组成数据包,把数据包发送到模块B,这样模块B就能够接收下到所有模块A发来的数据包。
三、复杂模块接口的独立设计
通常我们说某个接口复杂主要指的是接口连接协议很复杂,通常它必须高速处理很多寄存器和多种封装形式复杂数据的存取。对接口设计者来说,必须与接口连接模块的设计者充分地沟通,以得到足够的信息,才能设计出有效的接口连接模块A和模块B。这势必需要接口设计者和模块A、B的设计者多次沟通,以共同制定接口的设计方案。这样的沟通需要很多时间,并可能引起设计交接时的扯皮,所以必须制定设计小组之间的接口文档。这样复杂的工作流程很难保证设计的高效和高正确率。
在设计实现中,我们更改了通常的接口设计结构,如图3所示,在这种结构的支持下,我们能够很快捷地设计出我们需要的接口,在进行很少的几次讨论之后,各模块的设计者都明白如何进行模块间的连接,使得我们在较短时间内设计出这个复杂接口。
我们可以看到与一般意义的接口功能结构图的区别在于在接口与模块之间增加了一个发送接收缓冲区,用以存储接口在连接传输数据时需要模块提供的数据,包括相应寄存器的值和需要传送的数据包。
在接口设计时只要和PHY模块设计者商定好,把需要的信息放在那个寄存器地址下,合作制定好寄存器和发送接收数据包列表就可以了。甚至可以由设计者直接向接口双方模块提供一个寄存器和发送接收数据包清单就可以。这样接口设计者可以有更大的发挥空间,由此使得接口设计者能够细致分析接口需求,设计出性能更好的接口。
下面,我们以IEEE-1394总线物理层和链路层芯片间的PHY/link接口为例来讨论一下接口的独立设计。
四、高性能串行总线IEEE-1394简介
IEEE-1394A 它不仅仅是一项只能在某些领域使用的新技术,它有着广泛的市场空间,甚至有可能成为未来的总线标准。尽管IEEE-1394A目前还没有被PC厂商广泛采用,但是它在数字图像领域内的重要作用已经为世人所关注。作为一种数据传输的开放式技术标准,IEEE-1394A被应用在许多领域。目前,IEEE-1394技术使用最广的还是数字图像领域,支持的产品包括数字相机或摄像机等。然而IEEE-1394的潜在市场远非这些,无论在计算机硬盘还是在网络互连等方面,该协议都有其广阔的用武之地。总体上,IEEE-1394A具有廉价,占用空间小,速度快,支持热插拔,支持同步和异步传输等特点。
从系统结构而言,IEEE-1394系统分为应用层、管理层,事务层、链路层(link)和物理层(PHY)几个部分。物理层和链路层由于相对稳定,性能要求较高,往往做成ASIC,其余部分通常由相关软件来完成。
这里定义的接口用于连接相同厂商或不同厂商的1394串行总线接口的物理层和链路层专用集成电路(ASIC),并为1394系统未来的升级提供了支持。在IEEE-1394A中,PHY/link层接口单列成一章,足见其重要性。本文在IEEE-1394A的基础上,提出了这种接口的解决方案,性能经过验证达到了该协议中所要求的指标。
五、复杂数字逻辑EDA简介
EDA(Electronic Design Automation),是在计算机平台上,利用软件开发工具进行数字,模拟,数模混合电子电路设计的方法,是电子设计领域中最具活力和最有发展前途的一项技术。其中数字逻辑设计已经比较成熟。与传统的设计方法相比,EDA工具缩短了设计周期,降低了开发成本,提高了设计的可靠性。
IEEE-1394A的PHY/link接口的复杂逻辑设计,采用了先进的EDA技术,进行 Top-Down的设计。逻辑设计的结果通过FPGA/CPLD验证后,进一步制成ASIC。图5是基本EDA逻辑设计流程。
复杂逻辑的开发需要两部分工具:1)逻辑仿真和综合工具; 2)FPGA/CPLD布局布线工具;
FPGA/CPLD都是可编程逻辑器件,生产厂家较多,型号各异。其中比较典型的就是Xilinx公司的FPGA(现场可编程门阵列)器件系列和Altera公司的CPLD(复杂可编程逻辑器件)器件系列。采用 FPGA/CPLD芯片进行系统开发,具有以下几个优点:
可实现强大功能。随着VLSI工艺的不断提高,其单片逻辑门数已达到百万门级,内嵌多种特殊模块,所能实现的功能也越来越强,同时也可以实现系统集成。
研发投入低。FPGA/CPLD芯片在出厂之前都做过可靠的测试,设计人员只需通过相关的软硬件环境来完成芯片的功能设计,所以节省了许多潜在的花费。
开发周期短,采用EDA设计方法,设计人员不需要具备专门的IC深层次知识,在较短的时间内就可完成电路的逻辑设计和芯片的制作,快速将产品推向市场。
可在线编程。基于SRAM/FLASH的FPGA/CPLD,用户可以反复地编程、擦除、使调试/升级都十分方便,亦可用同一芯片实现不同的功能。
FPGA/CPLD开发工具包括软件和编程器,开发软件一般有芯片生产厂家提供,也有一些优秀的第三方软件可以选用。EDA开发软件包括输入工具、编译器仿真工具、综合工具、及布局布线、版图设计等工具。Verilog 高级硬件描述语言的使用,使逻辑设计输入更为简化,更为准确。
在设计测试中使用的EDA工具有:硬件描述语言Verilog,仿真工具ModelSim,综合工具Synplify,布局布线工具Maxplus等。设计测试采用ALTERA公司的ACEX1K系列低价位的CPLD芯片,它具有3万基本逻辑单元多,位内嵌存储单元,基本可以满足一般的逻辑设计要求。
六、接口结构功能简介
接口分别属于IEEE-1394节点系统的物理层和链路层模块,是物理层和链路层的子模块,负责物理层和链路层的控制信号、数据包和状态报告的传输。物理层和链路层之间主要依靠Ctrl[1:0]、Dn[n:0]、LReq、LPS、LinkOn和SClk 六组信号线来进行传输控制信号和其间的多种数据包。
链路层取得接口控制权时,可能需要传输的包括:读数据请求包(RdReg)、写数据请求包(WrReg)、立即仲裁请求数据包(ImmReq)、公平仲裁请求数据包(FairReq)、优先仲裁请求数据包(PriReq),和等时仲裁请求数据包(IsoReq)。
物理层取得接口控制权时,除了可能传输总线上传来的所有的数据包,还可能传输状态信息包和读请求响应包。
在1394总线系统中,物理层/链路层主要实现物理层和链路层模块之间的定时服务,数据请求,数据服务,仲裁请求和仲裁服务。
Ctrl[1:0]是该接口的控制信号。相同的信号随接口控制权所属模块不同而不同。Dn[n:0]是接口的数据线,用来传输接口的数据包,也是该接口独具特色的一点。它支持S100,S200和S400和更高的速度,数据总线的带宽与总线速度相适应:在以100Mbps传输时,接口只用D[0:1]来传输数据,传输速度每增加100Mbps,传输数据时接口将多用两根数据线。由于项目要求系统传输最高速度为400Mbps,所以接口中共有八根数据线。这样,如果加快传输速度,只是物理层芯片模拟部分提高处理频率,在整个芯片数字部分,数据时钟频率保持不变,与串行总线速度相独立,使得未来的系统升级成为可能。LReq信号线来传输请求信号,包括读写寄存器请求和仲裁请求等,根据请求,物理层响应传输操作。
LPS是用于指示链路层电源和功能是否正常。
另外,协议中还规定了该接口配有Direct数字微分编码器(digital differentiators)选通端,用以增加对物理层和链路层芯片之间隔离的支持。根据接口模块独立设计的思想,该接口实现过程中,主要技术难点主要有以下几点:
接口与上下层模块之间的握手协议需要仔细的设计。由于该接口传输的数据包大小不一,使接口同上下层模块内部的连接变得复杂,这部分协议没有提及,必须自己小心地设计该协议,目标是使上下层模块同接口的连接简明扼要,并且高效,尽可能地减少接口到相应模块的传输延迟,这样物理层和链路层的握手等动作所消耗的时间也将相应减少,得到更高的数据吞吐量。
接口传输多种格式和功能的数据包,传送不同的数据包时,物理/链路层接口的动作和响应都不同。如果处理不当,会极大地增加了接口实现时的复杂度和规模。
规范定义的Ctrl和Dn定时匹配成为很主要的矛盾。接口依靠Ctrl[1:0]来传输和识别控制信号,以产生相应动作。在物理层把接口控制权交接给链路层时,协议中要求不超过两个周期。但在系统中,各层发送和识别控制信号需要一定的时间,接口必须尽可能少地减少这个时间,使响应模块识别控制信号。
以下将针对以上几个难点简述我们在项目中的实现方法。
七、接口和物理/链路模块的握手协议
物理层/链路层模块和接口的握手协议在IEEE-1394A中没有定义,给设计者留下了思考的空间。1394总线系统本身旨在提供一种高速的数据传输方式, 而物理/链路接口处于所有数据流必经的通路,所以在设计协议时,我们的目标是尽可能地减小数据流通过接口的延迟,以避免接口的“瓶颈”效应。
基于以上的考虑,我们考虑了这种方案:
(注:由于物理层和链路层模块处于对等的地位,限于篇幅,我只描述物理层模块的情形,链路层模块以此类推。)
在上述方案中,各引脚功能定义如下:
Preq_En[1:0]是物理层数据包传输使能位,而且代表请求的优先级。2 'b00代表无请求,2 'b01代表该请求具有最高的优先级,可以终止现在的正在操作的请求,2 'b10代表请求优先级较低,它将等待接口正在处理的请求完成后再执行。
Preq_Data[31:0]是物理层请求数据,包含请求类型,包长度,速度及相关参数。0~15位请求相关数据,16~31位数据包长度及格式信息,最大情况支持65536个32位字节组成的数据包(可以容纳协议中最大的数据包)。
Preq_Pkt[31:0]是物理层数据包输入端口,一次能够输入一个32位字节。
PktUpdt_Req是数据包输入端口数据更新请求位,物理数据包输入端口上的字节已经传输完毕,请求更新数据以便传输。
Link_Pkt[31:0]是链路层数据包输出端口。
Link_Pkt_On是链路层数据包到达指示。用以判断链路层的新数据是否被传输完毕。
INTF_Busy是接口物理层模块忙指示,1表明此时接口忙。用以判断总线上的数据包(物理层接收的数据包)是否可以向链路层传输。
在总线数据包即将向链路层传输时,接口先置位INTF_Busy,阻止在此操作的同时,阻止其他的总线数据包向上传输。与此同时,置位Preq_En,设置请求使能和优先级。接着当接口物理层模块做好准备后,置位PktUp-dt_Req,物理层模块检测到该信号置位后,立即把数据放在Preq_Data上。接口物理层层模块传输完后,再次置位PktUpdt_Req以得到数据包的下一个字节,同时接口内部计数器加一,在重复该过程,直至该数据包被传输完毕。当链路层有数据包要求传至总线上时,接口物理层模块转交总线控制权,同时置位INTF_Busy,阻止总线上的数据包上传。当接口物理层模块接收到数据包的第一个32位字节后,置位Li-nk_Pkt_On,同时置位Link_Pkt。物理层模块检测到Link_Pkt_On后读取Link_Pkt上得到第一个32位数据包,计数器加一,重复此过程,直至该数据包接收完毕。
在实际的应用过程中,我们采取了提前准备数据的方法,在每个32位字节最后一位开始传输的同时,发出更新数据的请求,使数据包从物理层模块传输到链路层模块的过程中,基本上没有握手协议上的延迟。
设计之初,我们曾经考虑过把请求数据位用一个控制数据包代替,并把所有数据一次性地读到一个ram中去,并用ram的读写协议进行操作。
容易看出,改进后的协议在处理大的数据包时显现出了无法比拟的优势,付出的代价是增加了握手信号的数量,由于这些信号线处于模块内,相对增加的成本微乎其微。
八、多个数据包处理状态机化简合并
在协议中规定接口必须完成传输多种格式和功能的数据包。对各种数据包,其传输方式也各不一样。类似地,对接口物理层模块的每种请求相应的操作也都不一样。我们考察各种请求操作流程后,我们对这些流程进行的多次化简归纳,最后采用了如下这种状态机。
在接口物理层模块和链路层模块实现时,我们采用了一个主状态机和一个从状态机的结构。
采用了主状态机和从状态机的结构,不仅很大程度上简化了状态机,而且是结构清晰,其次操作相近的仲裁请求包被合为一类,并依据请求类型来编写从控制状态机。在实现过程中,在主从状态机的前提下我们开始使用另外一种依据Ctrl控制线的状态编写从控制状态机。从综合后的结果来比较,现在的这个改进状态机节省了50%以上的资源。从这点看,可见同样的功能,不同的设计会产生截然不同的效果。
九、Ctrl和Dn定时匹配
在IEEE-1394A协议中要求支持数字微分编码器(digital differe-ntiators),所以接口引入了微分编码延迟。此时,从数字信号产生到接口相应信号线上的延迟如果超过半个SClk时钟周期,可以依据IEEE1394-2000A协议推断出:对应的接收模块不能准确地接收到有效信号。所以数字微分编码器的设计成为了整个设计的“瓶颈”之一。
十、结束语
把复杂协议内部模块间的接口独立出来进行设计,是一种加快和简化设计过程、提高设计可重用性和可维护性的好方法,值得重视和推广。目前国外产品一般采用锁相环(PLL)技术,把外部时钟倍频至SClk的八倍频以作为系统的工作频率,而本接口设计只有部分电路用了SClk的两倍频,在很大程度上降低了对元器件的要求和系统的功耗。
PHY/link接口在IEEE-1394协议中具有非常重要的作用,对芯片处理速度的提高有较大的影响。本文通过对该接口的分析,提出了解决该接口设计难点的方案。以上方案经过FPGA布线后仿真测试,证明是切实可行的。