HDLC的FPGA實現方法
1 引言
本文引用地址:http://2s4d.com/article/190497.htmHDLC(High-level Data Link Control Procedures, 高級數據鏈路控制規(guī)程)廣泛應用于數據通信領域,是確保數據信息可靠互通的重要技術。實施HDLC的一般方法通常是采用ASIC(Application Specific Integrated Circuit,特定用途集成電路) 器件和軟件編程等。
HDLC的ASIC芯片有Motorola公司的MC92460、ST公司的MK5025、Zarlink公司的MT8952B等。這些集成電路使用簡易,功能針對性強,性能可靠,適合應用于特定用途的大批量產品中。但由于HDLC標準的文本較多,ASIC芯片出于專用性的目的難以通用于不同版本,缺乏應用靈活性。例如CCITT、ANSI、ISO/IEC等都有各種版本的HDLC標準,有的芯片公司還有自己的標準,對HDLC的CRC(Cyclical Redundancy Check,循環(huán)冗余碼校驗)序列生成多項式等有不同的規(guī)定。況且,專用于HDLC的ASIC芯片其片內數據存儲器容量有限,通常只有不多字節(jié)的FIFO(先進先出存儲器)可用。對于某些應用來說,當需要擴大數據緩存的容量時,只能對ASIC芯片再外接存儲器或其它電路,ASIC的簡單易用性就被抵銷掉了。 HDLC的軟件編程方法功能靈活,通過修改程序就可以適用于不同的HDLC應用。但程序運行占用處理器資源多,執(zhí)行速度慢,對信號的時延和同步性不易預測。對于多路信號的HDLC應用,處理器的資源占用率與處理路數成正比,所以軟件HDLC一般只能用于個別路數的低速信號處理。
FPGA(Field Programmable Gate Array, 現場可編程門陣列)采用硬件技術處理信號,又可以通過軟件反復編程使用,能夠兼顧速度和靈活性,并能并行處理多路信號,實時性能能夠預測和仿真。FPGA芯片雖成本略微高于ASIC芯片,但具有貨源暢通、可多次編程使用等優(yōu)點。目前FPGA單片所含的邏輯門和片上存儲器的容量越做越大,百萬門級的可編程邏輯芯片已成為尋常產品。在中小批量通信產品的設計生產中,用FPGA實現HDLC功能是一種值得采用的方法。正是有鑒于此,Innocor、Xilinx等公司推出了能在FPGA中實現HDLC功能的IP Core(Intellectual Property Core,知識產權核),但這些IP Core需要付費購買許可(License)才能使用,且在應用中受到各種限制。
從HDLC的基本定義出發(fā),通過對FPGA設計輸入的模塊化描述,介紹一種能夠在可編程邏輯芯片中實現HDLC功能的方法。
2 HDLC的幀結構和CRC校驗
HDLC規(guī)程主要由幀結構、規(guī)程要素、規(guī)程類別三個部分組成[1]。為了使FPGA的設計能夠實現HDLC的基本功能并能按照各項標準的規(guī)定靈活采用不同的CRC校驗算法,首先回顧一下HDLC基本的幀結構形式。
HDLC是面向比特的鏈路控制規(guī)程,其鏈路監(jiān)控功能通過一定的比特組合所表示的命令和響應來實現,這些監(jiān)控比特和信息比特一起以幀的形式傳送。
以下是ISO/IEC 3309標準規(guī)定的HDLC的基本幀結構。
其它的HDLC標準也有類似的幀結構。每幀的起始和結束以7E(01111110)做標志,兩個7E之間為數據段(含地址數據、控制數據、信息數據)和幀校驗序列。幀校驗采用CRC算法,對除了插入的零以外的所有數據進行校驗。為了避免將數據中的7E誤為標志,在發(fā)送端和接收端要相應地對數據流和幀校驗序列進行插零及刪零操作。
各種HDLC間的區(qū)別之一是幀校驗序列的CRC算法不同,這種不同表現在幾個方面:
a. 幀校驗序列的位數不同,如16位和32位等。
b. CRC生成多項式不同,如對于16位的CRC,CCITT V.41標準的多項式是x16 + x12 + x5 + 1,ANSI CRC-16標準的多項式是x16 + x15 + x2 + 1等。
c. CRC序列的初始化條件不同,如可以初始化為全0、全1等。
d. CRC計算結果的處理方式不同,如可以直接把CRC結果發(fā)送,或對CRC結果取反后再發(fā)送等。
e. 對接收到的數據做CRC校驗時,合格判據不同。因為有了上述的不同處理,自然會得到不同的結果,由此造成合格判據不同。例如有的標準以校驗結果1D0F判為無錯誤[2]。而有的ASIC芯片以校驗結果F0B8判為無錯誤[3]。
顯然,對于這些應用,可編程邏輯芯片正可以發(fā)揮自己的特長。
3 用FPGA實現HDLC功能的原理框圖
對FPGA器件進行功能設計一般采用的是Top to Down(從頂到底)的方法,亦即根據要求的功能先設計出頂層的原理框圖,該圖通常由若干個功能模塊組成。再把各個模塊細化為子模塊,對較復雜的設計還可把各子模塊分成一層層的下級子模塊,各層的功能可以用硬件描述語言或電路圖來實現。
圖2即為一個典型的單路雙向HDLC電路的頂層電原理圖設計實例。
從圖中可以看出,該電路由接口模塊interface、HDLC數據發(fā)送模塊transmitter和HDLC
數據接收模塊receiver三部分組成。當需要多路HDLC收發(fā)器時,可將若干個transmitter模塊和receiver模塊組合使用。以下分別對這幾個模塊做簡要說明。
圖2
3.1 接口模塊interface
interface模塊的主要功能是:向FPGA提供時鐘;通過數據、地址總線和讀寫信號向FPGA讀寫并行數據;產生和處理中斷信號。
在本例中,時鐘是24.576MHz。時鐘的頻率越高,就可以處理更高速的數據信號,但相應的芯片功耗和價格要高一些。時鐘頻率還和HDLC的數據收發(fā)速率有關,一般選時鐘頻率正好是HDLC數據速率的整數倍,以便簡化HDLC 收發(fā)器定時電路的設計。
數據總線的寬度取決于所使用的外部CPU類型。由于目前較多使用的是16位的單片處理器,因此這里采用16位的數據總線cpu_data[15..0]。當然也可以根據需要采用8位或32位的數據總線。
地址總線的寬度主要取決于HDLC所需要的數據緩存區(qū)的大小。例如,設計16路雙向HDLC收發(fā)器,每個收發(fā)器要緩存256字節(jié)的數據,在使用16位數據總線時可求得地址總線的寬度至少應有12位。由于外部CPU要對FPGA實施一些控制功能,FPGA中還要考慮留出一定的地址來安排命令寄存器和狀態(tài)寄存器,所以實際所需的地址總線還要再寬一些。如果HDLC的路數很多,緩存器又定得很大,FPGA內部的地址寬度會超過外部CPU可提供的地址寬度,這時可以向FPGA的特定寄存器寫入數據鎖存后作為內部地址來擴展地址總線。
對于外部CPU來說,FPGA可以看成是一個普通芯片,通過片選CS/、讀寫信號RD/和WR/,就可以選中FPGA并對其進行讀寫操作。
當FPGA需要向CPU傳遞信息時,中斷信號輸出端interrupt/ 變?yōu)榈碗娖剑珻PU響應后可到FPGA中的狀態(tài)寄存器去讀取詳細的中斷信息并做出相應的處理。
3.2 HDLC數據發(fā)送模塊transmitter
transmitter模塊的主要功能是:對本路HDLC數據發(fā)送時鐘tx_clk整形后產生內部發(fā)送時鐘inter_tx_clk, 產生鎖相于inter_tx_clk的FPGA工作時鐘tx_op_clk;鎖存外部CPU寫入的發(fā)送數據并按指定時序啟動發(fā)送;在發(fā)送數據段前加上7E起始標志;對發(fā)送數據逐位做CRC計算并將計算結果附在發(fā)送數據之后;對包括CRC計算值在內的數據進行插零操作并附上7E結束標志把結果輸出。
transmitter模塊由發(fā)送定時子模塊tx_timer、發(fā)送數據子模塊tx_data、標志發(fā)生器子模塊7e_generator、發(fā)送CRC計算子模塊tx_crc、數據插零子模塊zero_insert等組成,見圖3。
HDLC的數據發(fā)送時鐘tx_clk由外部電路提供(在必要時也可把這些外部電路綜合進同一片FPGA),工作時鐘op_clk的頻率比數據發(fā)送時鐘高出幾倍并鎖相于數據發(fā)送時鐘,能以高于比特發(fā)送的速度執(zhí)行對數據的操作。
評論