ST-BUS總線接口模塊的Verilog HDL設計
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接口板,完成了多路不同接口的數據復接通信,運行狀況良好。
評論
查看更多