摘 要: ST-BUS是广泛应用于E1通信设备内部的一种模块间通信总线。结合某专用通信系统E1接口转换板的设计,本文对ST-BUS总线进行了介绍,讨论了ST-BUS总线接口收发模块的设计方法,给出了Verilog HDL实现和模块的时序仿真图。
关键词:ST-BUS;Verilog HDL;接口模块;E1;CPLD
引言
随着数字技术的迅速发展,现代通信系统已成为一个庞大的综合化数字网络。电信核心网络除了提供传统电话服务外,还为其它专用通信(比如警用集群通信等)提供中继服务。电信系统一般从交换机引出E1信号线路以供其它专用通信系统接入。为了满足电信网的接入规范,E1终端设备内部常采用一种被称为ST-BUS的总线来对需要接入通信网的各路用户数据进行排队,以便统一与E1信号进行转换,充分利用E1线路资源。由于批量生产的接口芯片都是针对某些特定标准接口而设计,无法满足E1通信的特殊需要。为满足多种特殊接口与电信线路间进行数据交换的需要,增加系统可重配置的灵活性,本文在所涉及项目中的E1接口转换板的设计中采用了可编程器件实现了多种特殊接口的混合接入。为了简化问题,文中主要介绍ST-BUS总线接口收发模块的Verilog HDL设计。
ST-BUS基本原理
ST-BUS(Serial Telecom BUS,串行通信总线)是卓联半导体公司根据电信应用的需要而定义的一种重要的通信设备内部总线通信协议,它可以将多路信息(包括音频、视频、控制信息以及其它数据等)进行复接或解复接,以便统一进行信号转换,实现本地设备与电信E1线路间的数据交换。随着通信系统越来越复杂,电信设备常有局部部件的淘汰或者更新换代。为了提高设备兼容性也便于系统升级,电信设备广泛采取了模块化设计方法,而ST-BUS就是将各功能模块连接起来协同工作的一种总线标准。所以,不论模块的功能和外部接口怎样,只要具备ST-BUS总线接口,都可以方便地嵌入到特定的通信系统中。
根据卓联对ST-BUS的信号及时序规范所作的定义,ST-BUS是一种传输数字信息的高速同步串行通信总线,总线接口所需信号有帧同步信号、位时钟信号和串行数据信号。帧同步信号主要有类型0和类型1两种:类型0的同步脉冲仅出现在帧的开头,如图1所示,总线上各部件将之作为重要参考信号并由此决定何时开始接收或发送数据流;类型1的同步脉冲需要维持一个完整的时隙周期(即8个位时钟周期),在此期间部件也要接收或发送信息数据,这种同步方式较少应用。ST-BUS定义了4种标准时钟频率,即16.384MHz、8.192MHz、4.096MHz和2.048MHz,其中每一种时钟频率均可作为部件的内部时钟,不过任意时刻只能选择其一,自适应系统在设计时采用了自动选择模式。除频率2.048MHz外,其它时钟频率总是数据速率的两倍,即支持最大数据速率为8.192Mbps。如果ST-BUS数据速率为2.048Mbps,那么时钟可以是2.048MHz或4.096MHz。由图1可知,一个完整ST-BUS的帧周期为125ms,而每帧又根据数据速率分为几种不同的时隙总数。但是,为了与E1信号的时隙相对应,E1终端子系统常采用每帧32时隙的信号方式。
ST-BUS收发模块设计与仿真
为了实现ST-BUS总线与各种不同(总线)接口之间的可靠数据传输,下面讨论同步模式下ST-BUS接口模块的设计,并在部分Verilog HDL描述中以注解方式进行详细说明。根据ST-BUS总线协议,ST-BUS接口模块可大致分为接收模块、发送模块和控制模块(含数据交换)三部分,分别完成ST-BUS总线数据的接收、发送和控制(包括与其它接口单元进行数据交换)等功能。要实现某种特定接口(如RS-232等)与ST-BUS总线之间的数据通信,则需要将该接口单元的I/O信号及控制信号接到ST-BUS接口的控制模块,通过控制模块来控制收发时序以及在ST-BUS中所占用的时隙位置及数目,而在实际应用中,各路数据对应的时隙位置及数目常通过外部控制接口设置。为简化问题,这里仅讨论ST-BUS接口收发模块设计,且假定时隙设置是固定的。
如图1所示,ST-BUS总线的数据收发遵守以下规则:发送端在时钟C2的上升沿发送,而接收端则在C2的下降沿采数据,且同步脉冲在0时隙开始的第一个C2上升沿处保持低电平。
图1 类型0帧同步ST-BUS总线信号时序
ST-BUS接收模块
ST-BUS接收模块主要根据控制模块所设置的ST-BUS时隙等参数接收所需时隙的数据,并将接收到的数据送给控制模块,其原理结构框图如图2(a)所示。
图2 ST-BUS收发模块的原理结构框图
根据时钟等信号的提供方式,模块的工作模式常分为主动模式和被动模式两种。由于图2(a)所示的接收模块所需时钟与同步信号均来自外部,因此该模块处于被动模式;相反,如果时钟和同步信号由模块产生,则模块处于主动模式。
被动模式下ST-BUS接收模块的基本工作原理为:上电后,在时钟稳定的情况下,模块首先检测同步信号;在非同步状态下,除同步检测以外的其它部件均不能工作;检测到同步后(即在同步状态下),模块启动时隙定位和数据位定位的计数器工作,此时,模块根据参数设置进行数据接收。另外,图2(a)中的时隙定位和数据位定位在本设计中采用2个计数器实现,也可以合并为单计数器实现。ST-BUS总线接收操作的关键之处在于前一帧的最后一时隙(即31时隙)与当前帧的第一时隙(即0时隙)之间的切换操作,因为需要同时检测同步信号,而一旦同步信号没有检测到,则模块会进入失步状态。接收模块的Verilog HDL实现(信号和常数声明从略,且代码已简化,下同)可以划分为以下三部分。
(1)同步检测
if(!f0) begin file://同步信号低电平有效
f0_flag<=1; file://置同步标志
bitcounter<=bitsofbyte-1;//时隙内的数据位数减法计数器复位
bytecounter<=0; end
file://时隙数加法计数器复位
(2)定位计数
if(f0_flag) file://判断同步状态
begin case(bitcounter) file://根据数据位计数值进行时隙切换
0:begin
bitcounter<=bitsofbyte-1;
file://数据位计数器复位
bytecounter<=bytecounter+1;
file://时隙通道计数器递增
end
default:bitcounter<=bitcounter-1; file://时隙内位计数器递减
endcase end
(3)接收数据(含标志及使能信号产生)
if(bytecounter==byte_pos1) begin file://检查第1通道
din2<=8'bZ;
file://释放通道2暂存单元
receive2_flag<=0;
file://清除通道2接收标志
din1<=din1<<1;
file://移位准备接收下一位数据
din1[0]<=dr; file://读入数据位
if(bitcounter==0) begin receive1_flag<=1;end//接收完整通道数据置标志
end
else if(bytecounter==byte_pos2)
file://多通道接收(同上)
……
else begin
file://当前通道不接收数据,则释放暂存单元并清除接收标志
din1<=8'bZ;din2<=8'bZ;receive1 _flag<=0;receive2_flag<=0;end
根据ST-BUS总线收发规则及接收模块基本工作原理,为了31时隙与0时隙的可靠切换,设计中采用状态转换与数据接收分开的方法,也即以上模块可由2个always语句实现,一个采用C2上升沿实现状态转换,一个采用C2下降沿实现数据接收。在Altera公司提供的Quartus II 5.0SP1集成开发环境下,利用MAX7000S系列最低性能的CPLD器件作综合后的时序仿真结果如图3(a)所示。图中第一通道为0时隙,第二通道为31时隙。
a)ST-BUS接收模块仿真
b)ST-BUS发送模块仿真
图3 ST-BUS收发模块综合后的时序仿真结果(C2时钟为10MHz)
ST-BUS发送模块
ST-BUS发送模块主要将控制模块送来的数据按照所设置的时隙进行发送,也就是将一般数据信号转换为ST-BUS总线信号,其原理结构框图如图2(b)所示。
发送模块可工作于两种模式,即主动模式和被动模式。图中细的虚线部分(除去相应的实线部分)表示工作于主动模式的连接,此时,时钟和同步信号均由模块内部产生;若除去细的虚线部分,则模块工作于被动模式。在本文涉及的E1接口板设计中,系统采用了自动模式选择的工作方式。图中同步的作用,在主动模式时为同步发生,在被动模式时为同步检测。
被动模式下ST-BUS发送模块的基本工作原理与接收模块类似,所不同之处在于数据传输方向相反。与接收模块一样,图2(b)中的时隙定位和数据位定位也可以合并采用单计数器实现。ST-BUS总线发送操作的关键之处也在于前一帧31时隙与当前帧0时隙之间的切换,因为需要同时检测同步信号,并且状态转换和总线数据加载都在C2上升沿完成。发送模块的Verilog HDL实现可划分为两部分,与接收模块划分不同,这里已把发送数据的操作嵌入到了同步检测和定位计数当中,当然也可严格按功能块划分。
(1)同步检测及数据发送
if(!f0) begin file://同步信号低电平有效
f0_flag<=1;//同步状态标志
bitcounter<=bitsofbyte-1;//位计数器复位
bytecounter<=0; file://时隙计数器复位
if(byte_pos1==0) file://通道1为时隙0,则开始发送数据
begin dx<=data1[7]; file://先送高位到ST-BUS总线
dout1<=data1<<1; file://移位准备下一位待发数据
dout2<=data2;end file://准备下一通道待发数据
else if(byte_pos2==0)//通道2为时隙0,则开始发送数据(同通道1)
……
else dx<=1'bZ; end file://如果没有选择0时隙,则输出高阻,释放总线
(2)定位计数及数据发送
if(f0_flag) file://判断同步状态
begin case(bitcounter)
0:begin bitcounter<=bitsofbyte-1;//位计数器复位
if(bytecounter==(bytes_per_frame-1)) bytecounter<=0;//时隙计数满则复位
else bytecounter<=bytecounter +1;//时隙计数器递增
if(bytecounter==byte_pos1-1)
file://通道1发送数据
begin dx<=dout1[7];
file://发送数据的最高位
dout1<=dout1<<1; end
file://移位准备下一位待发数据
else if(bytecounter==byte_pos2-1) file://通道2发送数据(同通道1)
……
else dx<=1'bZ;end
file://非占用通道则释放总线
default:begin
bitcounter<=bitcounter-1;
file://位计数递减
……
file://同前面通道1、通道2发送数据
end endcase end
根据ST-BUS总线收发规则及发送模块基本工作原理,发送模块各功能块均采用C2上升沿,或者采用C2下降沿转换状态而采用C2上升沿发送数据。对前者,以上发送模块可用1个或2个always语句完成;对后者,以上发送模块则至少需用2个always语句实现,并将数据发送从以上两部分中分离出来。采用类似接收模块的方法,对发送模块单独综合后作时序仿真,结果如图3(b)所示。值得注意的是,为了说明模块设计对于通道设置顺序的无关性,图中第一通道为31时隙,第二通道为0时隙。
ST-BUS控制模块
ST-BUS控制模块主要完成ST-BUS总线的收发控制与协调,同时也负责与外部接口的数据交换功能,这部分代码因涉密不再列出,这里仅简单介绍一下其功能。
控制模块的功能划分大致分为以下5部分:外部接口时钟产生及管理,控制收发模块与控制模块的数据交换,控制接口模块与其它接口的数据交换,对速率不匹配的数据作缓存(FIFO),提供对外通信接口供用户设置参数。根据实际应用情况,以上所列的功能可以适当取舍或调整。如果速率匹配,则可以舍弃第4部分;如果参数固化,则可舍弃第5部分。
结语
基于MAX7000S系列CPLD器件分析收发模块的最高工作性能可知,接收模块的位时钟C2最高工作频率可达21.74MHz,而发送模块的位时钟C2最高工作频率则达到32.26MHz,完全符合设计要求。本文所设计的ST-BUS接口模块具有很强的通用性、可扩展性和可移植性,利用MAX7000S系列CPLD器件成功实现了ST-BUS与UART、RS-232、RS-485等接口单元的顺利对接,并已成功应用于某专用集群通信设备的E1接口板,完成了多路不同接口的数据复接通信,运行状况良好。