当前,随着人们对于集成电路的性能要求越来越高,其复杂度日益提升。如何在集成电路板复杂度保持不变的情况下优化板上芯片的布局,以节省出宝贵的板上空间去放置其他必需的芯片,尽可能地降低因布局空间而产生的制板成本以及芯片数量产生的成本,是电路板设计者所要考虑的一个重要问题。
对于板级之间的信号传输,最常见也是最基本的做法就是直接传输,即有多少路信号需要传输,就用相同线宽的传输电缆或者相同引脚数的转接口,类似于并行总线,而在需要传输的信号路数比较多的情况下,这种做法就使得需要的传输线缆线宽很宽,或者转接口的引脚数众多,带来制作成本上升、使用不方便等问题。
1 CPLD模拟SGPIO总线
1.1 CPLD模拟SGPIO总线的优点
众所周知,串行总线与并行总线相比具有结构简单、占用I/O引脚少及成本低等优点,利用串行总线替代并行总线来实现数据传输也有多种实现形式。本文提出的一种实现形式是利用CPLD模拟SGPIO总线协议来实现并行数据的串行传输,并将其用于板级之间的数据通信。本设计的优点在于:(1)4路串行总线完成多路并行数据的传输,简化了传输电缆,节约了成本;(2)只需一块CPLD芯片就能完成很多块串并数据转换集成芯片的功能,既节省芯片成本,又节省板上布局空间;(3)在相同时钟频率和相同传输电缆长度的情况下,其数据传输率快于I2C串行总线,因为同一时间段内,SGPIO总线有两根串行信号线单向传输信号。
1.2 SGPIO总线的数据传输[2]
SGPIO总线框图如图1所示。
共有4根信号线,分别定义如下。
SClock:由启动设备驱动的时钟线。SFF 8485中SCLK最大值为100 kHz,SGPIO总线用于其他应用时,SCLK由设备本身支持的最大时钟和传输电缆长度所限定。
SLoad:由启动设备驱动,与SClock同步,该信号指出位流就要结束并将要重新启动新一轮的位流,用来指示一帧新数据的开始。
SDataOut:由启动设备驱动,发往目标设备的串行信号。
SDataIn:由目标设备驱动,发往启动设备的串行信号。
利用SClock和SLoad信号来控制两路串行信号SDataOut、SDataIn的单向传输。
SClock时钟脉冲由启动设备发出,启动设备应使用SClock的上升沿来发送SLoad和SDataOut信号,目标设备使用SClock的上升沿来发送SDataIn信号;目标设备应使用SClock的下降沿来锁存SLoad和SDataOut信号,启动设备应使用SClock的下降沿来锁存SDataIn信号。当不使用SGPIO总线时(如在复位期间),启动设备应当将SClock设置为“1”(即置它为三态)。
SLoad信号指出位流就要结束并将要重新启动新一轮的位流。当SLoad设置为“1”时的时钟周期是该轮位流的最后一个时钟周期。当不使用SGPIO总线时(如在复位期间),启动设备应当将SLoad设置为“1”(即置它为三态)。当正在使用SGPIO总线,但没有进行位流交换时,启动设备应当将SLoad设置为“0”。这就让目标设备知道启动设备还没有被撤除,仍然在线。
2 两种串行传输实现形式
基于上面对于SGPIO总线协议的介绍,设计出CPLD模拟SGPIO总线协议来实现并行数据的串行传输原理框图,并与串并数据转换集成芯片作板上空间、芯片数量方面的对比。原理框图如图3所示。
由图3可以看到,左右两边框图里的电路实现的功能是一样的,即并行数据串行传输。所不同的是,对于一路SGPIO总线而言,右边一颗CPLD芯片就实现了74LV595、74LV165、74LVC07(可选)3颗芯片的功能。图3中使用了3路SGPIO总线,也就是说,右边一颗CPLD芯片可以实现9颗串并数据转换集成芯片的功能,这个优势是显而易见的。只要所选用的CPLD芯片有足够的GPIO引脚以及产生足够的时钟信号,那么就能实现多路SGPIO总线进行更多路并行信号的传输。对于板级之间的数据通信,每路SGPIO总线只需一根4线宽的传输电缆就能完成多路并行信号的板级传输,同时还能保证一定的传输速率。
3 功能设定及时序仿真
设定图3中右边板有8路并行信号输入到CPLD进行并串转换,CPLD输出符合SGPIO总线协议的SDataOut、SCLK、SLoad 3路信号,与此同时,左边板中由SCLK和SLoad信号控制的74LV165输出符合SGPIO总线信号时序关系的SDataIn信号。由于本文中SGPIO总线使用的重复性,因此只做一路4线SGPIO总线的功能验证。采用Lattice Diamond IDE进行了Verilog HDL代码编写和综合,采用Mentor公司的ModelSim Plus SE进行时序仿真,选用Lattice MachXO2系列中LCMXO2-640HC-4TG100C。CPLD时序仿真波形如图4所示。
图4中的信号依次定义如下[3]:
(1)parallel_serial_clock为8路并行信号输入CPLD进行串行转换时的时钟信号(上升沿有效);
(2)RSTn为CPLD复位信号(“0”有效);
(3)parallel_databus_input为8路并行信号输入,测试值设定为10100111;
(4)data_ready为8路并行输入信号准备就绪(“1”有效);
(5)LOAD_XMT_shftreg为8路并行输入信号准备装载到CPLD中数据移位寄存器(“1”有效);
(6)sending_ready为CPLD输出串行数据准备就绪(“1”有效);
(7)SDataOut为8路并行输入信号经由CPLD转换输出的串行信号;
(8)SCLK为CPLD输出的与parallel_serial_clock同步、同频率的时钟信号;
(9)SLoad为CPLD输出的,符合SGPIO总线时序要求的数据帧指示信号(“1”有效);
(10)SDataIn为由SCLK和SLoad控制下的74LV165输入到CPLD的8 bit串行信号。
从图4中可以看到,并行输入信号8b′1010 0111经由CPLD转换,在SDataOut信号中以位流形式输出,在sending_ready信号有效期间的时钟有效沿到来之时,SDataOut信号开始输出“0”(起始位),“1”“1”“1”“0” “0”“1”“0”“1”,“1”(停止位),而SLoad信号恰好在SDataOut信号前一个时钟有效沿完成有效跳变(维持一个时钟周期);与此同时,在SLoad信号有效的下一个时钟有效沿,SDataIn信号开始以位流形式输入到CPLD。SDataOut、SCLK、SLoad、SDataIn信号符合SGPIO总线协议中4线的时序关系。至此,时序仿真波形验证了CPLD模拟SGPIO总线进行并行数据串行传输的可行性。
CPLD器件的资源使用情况如图5所示。其中,PIO为主要IO单元;SLICE为物理逻辑单元;IOLOGIC为IO逻辑单元;GSR为CPLD内核控制寄存器。
由图5可知,本设计经综合、适配、布局布线后,占用器件资源情况良好,比较精简,下载到CPLD器件后,在10 MHz时钟频率下运行正常。
本文利用CPLD来模拟SGPIO总线,实现了一种并行数据的串行传输方式,并将其用于板级之间的通信,只需要一根或多根4线宽的传输线缆就能完成板级间的多路乃至更多路信号的通信,在保证一定传输速率的前提下,减少了传输线宽,同时也给芯片密集度越来越高的电路板节省了宝贵的布局空间,具有实际应用价值。
参考文献
[1] Wikipedia. SGPIO[EB/OL]. http://en.wikipedia.org/wiki/SGPIO, 2012-09-11.
[2] SFF Committee. SFF-8485 specification for serial GPIO (SGPIO) Bus. Revision 0.7[S].2006.
[3] CILETTI M D. Verilog HDL高级数字设计[M].张雅琦,李锵,等译.北京:电子工业出版社,2005.