ST-BUS總線接口模塊的Verilog HDL設(shè)計
摘 要: ST-BUS是廣泛應(yīng)用于E1通信設(shè)備內(nèi)部的一種模塊間通信總線。結(jié)合某專用通信系統(tǒng)E1接口轉(zhuǎn)換板的設(shè)計,本文對ST-BUS總線進行了介紹,討論了ST-BUS總線接口收發(fā)模塊的設(shè)計方法,給出了Verilog HDL實現(xiàn)和模塊的時序仿真圖。
關(guān)鍵詞:ST-BUS;Verilog HDL;接口模塊;E1;CPLD
引言
隨著數(shù)字技術(shù)的迅速發(fā)展,現(xiàn)代通信系統(tǒng)已成為一個龐大的綜合化數(shù)字網(wǎng)絡(luò)。電信核心網(wǎng)絡(luò)除了提供傳統(tǒng)電話服務(wù)外,還為其它專用通信(比如警用集群通信等)提供中繼服務(wù)。電信系統(tǒng)一般從交換機引出E1信號線路以供其它專用通信系統(tǒng)接入。為了滿足電信網(wǎng)的接入規(guī)范,E1終端設(shè)備內(nèi)部常采用一種被稱為ST-BUS的總線來對需要接入通信網(wǎng)的各路用戶數(shù)據(jù)進行排隊,以便統(tǒng)一與E1信號進行轉(zhuǎn)換,充分利用E1線路資源。由于批量生產(chǎn)的接口芯片都是針對某些特定標準接口而設(shè)計,無法滿足E1通信的特殊需要。為滿足多種特殊接口與電信線路間進行數(shù)據(jù)交換的需要,增加系統(tǒng)可重配置的靈活性,本文在所涉及項目中的E1接口轉(zhuǎn)換板的設(shè)計中采用了可編程器件實現(xiàn)了多種特殊接口的混合接入。為了簡化問題,文中主要介紹ST-BUS總線接口收發(fā)模塊的Verilog HDL設(shè)計。
ST-BUS基本原理
ST-BUS(Serial Telecom BUS,串行通信總線)是卓聯(lián)半導(dǎo)體公司根據(jù)電信應(yīng)用的需要而定義的一種重要的通信設(shè)備內(nèi)部總線通信協(xié)議,它可以將多路信息(包括音頻、視頻、控制信息以及其它數(shù)據(jù)等)進行復(fù)接或解復(fù)接,以便統(tǒng)一進行信號轉(zhuǎn)換,實現(xiàn)本地設(shè)備與電信E1線路間的數(shù)據(jù)交換。隨著通信系統(tǒng)越來越復(fù)雜,電信設(shè)備常有局部部件的淘汰或者更新?lián)Q代。為了提高設(shè)備兼容性也便于系統(tǒng)升級,電信設(shè)備廣泛采取了模塊化設(shè)計方法,而ST-BUS就是將各功能模塊連接起來協(xié)同工作的一種總線標準。所以,不論模塊的功能和外部接口怎樣,只要具備ST-BUS總線接口,都可以方便地嵌入到特定的通信系統(tǒng)中。
根據(jù)卓聯(lián)對ST-BUS的信號及時序規(guī)范所作的定義,ST-BUS是一種傳輸數(shù)字信息的高速同步串行通信總線,總線接口所需信號有幀同步信號、位時鐘信號和串行數(shù)據(jù)信號。幀同步信號主要有類型0和類型1兩種:類型0的同步脈沖僅出現(xiàn)在幀的開頭,如圖1所示,總線上各部件將之作為重要參考信號并由此決定何時開始接收或發(fā)送數(shù)據(jù)流;類型1的同步脈沖需要維持一個完整的時隙周期(即8個位時鐘周期),在此期間部件也要接收或發(fā)送信息數(shù)據(jù),這種同步方式較少應(yīng)用。ST-BUS定義了4種標準時鐘頻率,即16.384MHz、8.192MHz、4.096MHz和2.048MHz,其中每一種時鐘頻率均可作為部件的內(nèi)部時鐘,不過任意時刻只能選擇其一,自適應(yīng)系統(tǒng)在設(shè)計時采用了自動選擇模式。除頻率2.048MHz外,其它時鐘頻率總是數(shù)據(jù)速率的兩倍,即支持最大數(shù)據(jù)速率為8.192Mbps。如果ST-BUS數(shù)據(jù)速率為2.048Mbps,那么時鐘可以是2.048MHz或4.096MHz。由圖1可知,一個完整ST-BUS的幀周期為125ms,而每幀又根據(jù)數(shù)據(jù)速率分為幾種不同的時隙總數(shù)。但是,為了與E1信號的時隙相對應(yīng),E1終端子系統(tǒng)常采用每幀32時隙的信號方式。
ST-BUS收發(fā)模塊設(shè)計與仿真
為了實現(xiàn)ST-BUS總線與各種不同(總線)接口之間的可靠數(shù)據(jù)傳輸,下面討論同步模式下ST-BUS接口模塊的設(shè)計,并在部分Verilog HDL描述中以注解方式進行詳細說明。根據(jù)ST-BUS總線協(xié)議,ST-BUS接口模塊可大致分為接收模塊、發(fā)送模塊和控制模塊(含數(shù)據(jù)交換)三部分,分別完成ST-BUS總線數(shù)據(jù)的接收、發(fā)送和控制(包括與其它接口單元進行數(shù)據(jù)交換)等功能。要實現(xiàn)某種特定接口(如RS-232等)與ST-BUS總線之間的數(shù)據(jù)通信,則需要將該接口單元的I/O信號及控制信號接到ST-BUS接口的控制模塊,通過控制模塊來控制收發(fā)時序以及在ST-BUS中所占用的時隙位置及數(shù)目,而在實際應(yīng)用中,各路數(shù)據(jù)對應(yīng)的時隙位置及數(shù)目常通過外部控制接口設(shè)置。為簡化問題,這里僅討論ST-BUS接口收發(fā)模塊設(shè)計,且假定時隙設(shè)置是固定的。
如圖1所示,ST-BUS總線的數(shù)據(jù)收發(fā)遵守以下規(guī)則:發(fā)送端在時鐘C2的上升沿發(fā)送,而接收端則在C2的下降沿采數(shù)據(jù),且同步脈沖在0時隙開始的第一個C2上升沿處保持低電平。
圖1 類型0幀同步ST-BUS總線信號時序
ST-BUS接收模塊
ST-BUS接收模塊主要根據(jù)控制模塊所設(shè)置的ST-BUS時隙等參數(shù)接收所需時隙的數(shù)據(jù),并將接收到的數(shù)據(jù)送給控制模塊,其原理結(jié)構(gòu)框圖如圖2(a)所示。
圖2 ST-BUS收發(fā)模塊的原理結(jié)構(gòu)框圖
根據(jù)時鐘等信號的提供方式,模塊的工作模式常分為主動模式和被動模式兩種。由于圖2(a)所示的接收模塊所需時鐘與同步信號均來自外部,因此該模塊處于被動模式;相反,如果時鐘和同步信號由模塊產(chǎn)生,則模塊處于主動模式。
被動模式下ST-BUS接收模塊的基本工作原理為:上電后,在時鐘穩(wěn)定的情況下,模塊首先檢測同步信號;在非同步狀態(tài)下,除同步檢測以外的其它部件均不能工作;檢測到同步后(即在同步狀態(tài)下),模塊啟動時隙定位和數(shù)據(jù)位定位的計數(shù)器工作,此時,模塊根據(jù)參數(shù)設(shè)置進行數(shù)據(jù)接收。另外,圖2(a)中的時隙定位和數(shù)據(jù)位定位在本設(shè)計中采用2個計數(shù)器實現(xiàn),也可以合并為單計數(shù)器實現(xiàn)。ST-BUS總線接收操作的關(guān)鍵之處在于前一幀的最后一時隙(即31時隙)與當(dāng)前幀的第一時隙(即0時隙)之間的切換操作,因為需要同時檢測同步信號,而一旦同步信號沒有檢測到,則模塊會進入失步狀態(tài)。接收模塊的Verilog HDL實現(xiàn)(信號和常數(shù)聲明從略,且代碼已簡化,下同)可以劃分為以下三部分。
(1)同步檢測
if(!f0) begin file://同步信號低電平有效
f0_flag<=1; file://置同步標志
bitcounter<=bitsofbyte-1;//時隙內(nèi)的數(shù)據(jù)位數(shù)減法計數(shù)器復(fù)位
bytecounter<=0; end
file://時隙數(shù)加法計數(shù)器復(fù)位
(2)定位計數(shù)
if(f0_flag) file://判斷同步狀態(tài)
begin case(bitcounter) file://根據(jù)數(shù)據(jù)位計數(shù)值進行時隙切換
0:begin
bitcounter<=bitsofbyte-1;
file://數(shù)據(jù)位計數(shù)器復(fù)位
bytecounter<=bytecounter+1;
file://時隙通道計數(shù)器遞增
end
default:bitcounter<=bitcounter-1; file://時隙內(nèi)位計數(shù)器遞減
endcase end
(3)接收數(shù)據(jù)(含標志及使能信號產(chǎn)生)
if(bytecounter==byte_pos1) begin file://檢查第1通道
din2<=8'bZ;
file://釋放通道2暫存單元
receive2_flag<=0;
file://清除通道2接收標志
din1<=din1<<1;
file://移位準備接收下一位數(shù)據(jù)
din1[0]<=dr; file://讀入數(shù)據(jù)位
if(bitcounter==0) begin receive1_flag<=1;end//接收完整通道數(shù)據(jù)置標志
end
else if(bytecounter==byte_pos2)
file://多通道接收(同上)
……
else begin
file://當(dāng)前通道不接收數(shù)據(jù),則釋放暫存單元并清除接收標志
din1<=8'bZ;din2<=8'bZ;receive1 _flag<=0;receive2_flag<=0;end
根據(jù)ST-BUS總線收發(fā)規(guī)則及接收模塊基本工作原理,為了31時隙與0時隙的可靠切換,設(shè)計中采用狀態(tài)轉(zhuǎn)換與數(shù)據(jù)接收分開的方法,也即以上模塊可由2個always語句實現(xiàn),一個采用C2上升沿實現(xiàn)狀態(tài)轉(zhuǎn)換,一個采用C2下降沿實現(xiàn)數(shù)據(jù)接收。在Altera公司提供的Quartus II 5.0SP1集成開發(fā)環(huán)境下,利用MAX7000S系列最低性能的CPLD器件作綜合后的時序仿真結(jié)果如圖3(a)所示。圖中第一通道為0時隙,第二通道為31時隙。
a)ST-BUS接收模塊仿真
b)ST-BUS發(fā)送模塊仿真
圖3 ST-BUS收發(fā)模塊綜合后的時序仿真結(jié)果(C2時鐘為10MHz)
ST-BUS發(fā)送模塊
ST-BUS發(fā)送模塊主要將控制模塊送來的數(shù)據(jù)按照所設(shè)置的時隙進行發(fā)送,也就是將一般數(shù)據(jù)信號轉(zhuǎn)換為ST-BUS總線信號,其原理結(jié)構(gòu)框圖如圖2(b)所示。
發(fā)送模塊可工作于兩種模式,即主動模式和被動模式。圖中細的虛線部分(除去相應(yīng)的實線部分)表示工作于主動模式的連接,此時,時鐘和同步信號均由模塊內(nèi)部產(chǎn)生;若除去細的虛線部分,則模塊工作于被動模式。在本文涉及的E1接口板設(shè)計中,系統(tǒng)采用了自動模式選擇的工作方式。圖中同步的作用,在主動模式時為同步發(fā)生,在被動模式時為同步檢測。
被動模式下ST-BUS發(fā)送模塊的基本工作原理與接收模塊類似,所不同之處在于數(shù)據(jù)傳輸方向相反。與接收模塊一樣,圖2(b)中的時隙定位和數(shù)據(jù)位定位也可以合并采用單計數(shù)器實現(xiàn)。ST-BUS總線發(fā)送操作的關(guān)鍵之處也在于前一幀31時隙與當(dāng)前幀0時隙之間的切換,因為需要同時檢測同步信號,并且狀態(tài)轉(zhuǎn)換和總線數(shù)據(jù)加載都在C2上升沿完成。發(fā)送模塊的Verilog HDL實現(xiàn)可劃分為兩部分,與接收模塊劃分不同,這里已把發(fā)送數(shù)據(jù)的操作嵌入到了同步檢測和定位計數(shù)當(dāng)中,當(dāng)然也可嚴格按功能塊劃分。
(1)同步檢測及數(shù)據(jù)發(fā)送
if(!f0) begin file://同步信號低電平有效
f0_flag<=1;//同步狀態(tài)標志
bitcounter<=bitsofbyte-1;//位計數(shù)器復(fù)位
bytecounter<=0; file://時隙計數(shù)器復(fù)位
if(byte_pos1==0) file://通道1為時隙0,則開始發(fā)送數(shù)據(jù)
begin dx<=data1[7]; file://先送高位到ST-BUS總線
dout1<=data1<<1; file://移位準備下一位待發(fā)數(shù)據(jù)
dout2<=data2;end file://準備下一通道待發(fā)數(shù)據(jù)
else if(byte_pos2==0)//通道2為時隙0,則開始發(fā)送數(shù)據(jù)(同通道1)
……
else dx<=1'bZ; end file://如果沒有選擇0時隙,則輸出高阻,釋放總線
(2)定位計數(shù)及數(shù)據(jù)發(fā)送
if(f0_flag) file://判斷同步狀態(tài)
begin case(bitcounter)
0:begin bitcounter<=bitsofbyte-1;//位計數(shù)器復(fù)位
if(bytecounter==(bytes_per_frame-1)) bytecounter<=0;//時隙計數(shù)滿則復(fù)位
else bytecounter<=bytecounter +1;//時隙計數(shù)器遞增
if(bytecounter==byte_pos1-1)
file://通道1發(fā)送數(shù)據(jù)
begin dx<=dout1[7];
file://發(fā)送數(shù)據(jù)的最高位
dout1<=dout1<<1; end
file://移位準備下一位待發(fā)數(shù)據(jù)
else if(bytecounter==byte_pos2-1) file://通道2發(fā)送數(shù)據(jù)(同通道1)
……
else dx<=1'bZ;end
file://非占用通道則釋放總線
default:begin
bitcounter<=bitcounter-1;
file://位計數(shù)遞減
……
file://同前面通道1、通道2發(fā)送數(shù)據(jù)
end endcase end
根據(jù)ST-BUS總線收發(fā)規(guī)則及發(fā)送模塊基本工作原理,發(fā)送模塊各功能塊均采用C2上升沿,或者采用C2下降沿轉(zhuǎn)換狀態(tài)而采用C2上升沿發(fā)送數(shù)據(jù)。對前者,以上發(fā)送模塊可用1個或2個always語句完成;對后者,以上發(fā)送模塊則至少需用2個always語句實現(xiàn),并將數(shù)據(jù)發(fā)送從以上兩部分中分離出來。采用類似接收模塊的方法,對發(fā)送模塊單獨綜合后作時序仿真,結(jié)果如圖3(b)所示。值得注意的是,為了說明模塊設(shè)計對于通道設(shè)置順序的無關(guān)性,圖中第一通道為31時隙,第二通道為0時隙。
ST-BUS控制模塊
ST-BUS控制模塊主要完成ST-BUS總線的收發(fā)控制與協(xié)調(diào),同時也負責(zé)與外部接口的數(shù)據(jù)交換功能,這部分代碼因涉密不再列出,這里僅簡單介紹一下其功能。
控制模塊的功能劃分大致分為以下5部分:外部接口時鐘產(chǎn)生及管理,控制收發(fā)模塊與控制模塊的數(shù)據(jù)交換,控制接口模塊與其它接口的數(shù)據(jù)交換,對速率不匹配的數(shù)據(jù)作緩存(FIFO),提供對外通信接口供用戶設(shè)置參數(shù)。根據(jù)實際應(yīng)用情況,以上所列的功能可以適當(dāng)取舍或調(diào)整。如果速率匹配,則可以舍棄第4部分;如果參數(shù)固化,則可舍棄第5部分。
結(jié)語
基于MAX7000S系列CPLD器件分析收發(fā)模塊的最高工作性能可知,接收模塊的位時鐘C2最高工作頻率可達21.74MHz,而發(fā)送模塊的位時鐘C2最高工作頻率則達到32.26MHz,完全符合設(shè)計要求。本文所設(shè)計的ST-BUS接口模塊具有很強的通用性、可擴展性和可移植性,利用MAX7000S系列CPLD器件成功實現(xiàn)了ST-BUS與UART、RS-232、RS-485等接口單元的順利對接,并已成功應(yīng)用于某專用集群通信設(shè)備的E1接口板,完成了多路不同接口的數(shù)據(jù)復(fù)接通信,運行狀況良好。