|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 sun_ic 于 2011-5-26 08:09 编辑
电路设计漫谈之18 - 总线设计
这里的总线设计是针对网络设备尤其是大型的通信设备,交换机,或者其它大容量的插卡式电子设备。对于中小型的电子设备或者某些成本是主要考量的产品,以下讨论的一些内容可能不适合。
对于大型的电子设备,在设计中主要要实现以下几点
1)高容量无阻塞的数据总线
2)高速灵活的控制总线
3)可靠性的支持(redundancy,hotwap,reliability,etc)
一个总线系统一般是由系统的背板支持的。背板的设计决定了一个系统最基本的架构。一般的需求是设计一个可扩充的大容量总线系统,即满足目前的指标和功能,还要考虑到几年以后的扩充。因为使用者购买一个系统,开始只是装备一部分容量。随着他们的客户对容量的需求,未来再进行扩容。比如一个交换机,10年前一个卡上可能只支持10个百兆口。几年后客户需要一张卡支持10个千兆口。现在可能需要支持若干10G的口。客户显然希望保护自己的投资,系统厂家能在既有的系统架构上提供高容量的接口板。所以在一开始设计时,总线系统就要考虑未来的容量增长。
一个总线板可以分为对以下几个平台的支持
1)数据总线
2)控制总线(包括状态,冗余,对板卡的控制通信等)
3)电源系统
总线系统早期的采用TDM共享的方式多。一根总线连接所用的板卡。每个板卡在特定的时间间隙传送数据。这种方式由于容量低,信号完整性等问题,已经被无阻塞的点对点总线取代。比如每个板卡有若干条到交换板(或者TRUNK卡)的高速点对点双向串行总线。这样的好处是对大容量的支持,无阻塞,很好的SI特性。总线的速度一般2.5Gbit以上。以前是用专门的SERDES把并行数据转换为高速的串行接口。现在好多ASIC或者FPGA已经集成了高速的SERDES。对于数据交换机,这种SERDES比较简单。对于需要同步的SONET/SDH系统,一般还要有个buffer做timing domain的转换,或者phase delay的补偿等。
控制总线分为高速和低速控制总线。高速控制总线现在一般都用点对点的数据总线,比如Ethernet。在中心控制板上有个多端口的交换芯片。整个系统内各板卡的控制器,控制板的总控制器,都连接在一个LAN上。还见有公司使用ATM协议的。除了LAN总线外,还要有用于调试和制造的一些低速数据总线。比如用RS232作为调试用,I2C或者SPI作为制造用。这些总线一般也是点对点。尤其注意I2C之类的低速总线,虽然它们理论上讲支持共享,但尽量别这么用。即使在一个板卡内,尽量用一个I2C的bridge或者switch来连接不同器件。一般一个系统高速总线反而不怎么出问题(因为一般这是重点,一开始就花了大量时间设计仿真等),那些不怎么注意的低速总线却总不断的出状况。本人设计过2个高速总线系统。每个都是最后的I2C闹出来点事来。
控制总线还包括对冗余状态等的支持。一般每个子卡都有以下专门信号发给控制卡:hardware_ready, software_ready, card_healthiness, card_in,slot_ID等。接受来在主控卡的primary/secondary指示 (用于识别哪个控制卡是active的),switch_over控制(用于控制一个子卡是处于active还是standby)等。这些状态/控制信号也最好是点对点的。
电源系统。采用48V/AC电源分配,还是采用5V等低压分配,各有利弊。一般如果容量大并且功耗高时应采用48V/AC(星型)分配。这样各个板卡的电源隔离(注意48V的电源是不接地的!)。一个板卡出了问题不至于影响其它的。电源可以用几个PCB平面,或者为了节省面积采用buss bar的方式。每个板卡的48V系统都要用hot swap的控制。即电流是逐渐加到板卡上(对板卡的电容充电)。否则电流的突变会引起大的冲击.
最后提几点需要注意的 1)SI 2)冗余 3)连接顺序(mating sequence)
SI的重要性自不必说。PCB的参数应该事先跟厂家拿到。连接器的spice model可以从连接器厂家得到,一般是S参数。实在拿不到自己测试一下建立个模型。其它的器件接口的模型也一般能得到。如果仿真步骤和model正确的话,实际测试的结果应该接近。如果差别较大,除了分析仿真和测试的各个步骤外,首先怀疑的就是模型的可靠性。曾经有一次本人反复检查后怀疑一个ASIC的接受端的model有问题。厂家给的是等效于2pF//50ohm。结果我用一个2pF的电容和50ohm的电阻取代厂家的ASIC,示波器测试的波形眼图跟仿真很接近。但换上ASIC后就差了很大。联系厂家后跟他们讨论要么model不准,要么ASIC制造有问题。最后厂家review后发现是packaing有问题,寄生电容增加了几个pF。后来他们换了foundry厂家。
冗余是比较难支持的一个功能,尤其是database的synchronization。具体到在硬件的总线设计上,要把主备两套系统从总线上完全分开设计。各自一套,尽量不要有公用的信号。有时为了省事,主备两个卡同时驱动一条信号,往往后来会出问题,尤其在开关电和插拔板子的时候。听俺一句劝,尽量用独立的点对点的信号和控制/状态线。不管是高速的还是低速的I2C。
最后是mating sequence。一个板卡的接插件要有几组长度不一的信号管脚。一般连接顺序从先到后是 1)地 2)电源 3)信号。有时再加上板卡的在位信号(最短)。就靠这点距离,板卡可以在系统的参考地面和电源供给都稳定了以后,再启动某些逻辑功能。这对实现无冲击切换(hitless switch),数据完整性保护等很有作用。这时细节决定成败,虽然俺好多情况下不赞成这句话。
(待续)
电路设计漫谈之1-17
http://bbs.eetop.cn/thread-296106-1-1.html |
|