1 引言
HDLC(High-level Data Link Control Procedures, 高級數(shù)據(jù)鏈路控制規(guī)程)廣泛應(yīng)用于數(shù)據(jù)通信領(lǐng)域,,是確保數(shù)據(jù)信息可靠互通的重要技術(shù),。實施HDLC的一般方法通常是采用ASIC(Application Specific Integrated Circuit,特定用途集成電路) 器件和軟件編程等,。
HDLC的ASIC芯片有Motorola公司的MC92460、ST公司的MK5025,、Zarlink公司的MT8952B等,。這些集成電路使用簡易,,功能針對性強,性能可靠,,適合應(yīng)用于特定用途的大批量產(chǎn)品中,。但由于HDLC標(biāo)準(zhǔn)的文本較多,ASIC芯片出于專用性的目的難以通用于不同版本,,缺乏應(yīng)用靈活性,。例如CCITT、ANSI,、ISO/IEC等都有各種版本的HDLC標(biāo)準(zhǔn),,有的芯片公司還有自己的標(biāo)準(zhǔn),對HDLC的CRC(Cyclical Redundancy Check,,循環(huán)冗余碼校驗)序列生成多項式等有不同的規(guī)定,。況且,專用于HDLC的ASIC芯片其片內(nèi)數(shù)據(jù)存儲器容量有限,,通常只有不多字節(jié)的FIFO(先進先出存儲器)可用,。對于某些應(yīng)用來
說,當(dāng)需要擴大數(shù)據(jù)緩存的容量時,,只能對ASIC芯片再外接存儲器或其它電路,,ASIC的簡單易用性就被抵銷掉了。 HDLC的軟件編程方法功能靈活,,通過修改程序就可以適用于不同的HDLC應(yīng)用,。但程序運行占用處理器資源多,執(zhí)行速度慢,,對信號的時延和同步性不易預(yù)測,。對于多路信號的HDLC應(yīng)用,處理器的資源占用率與處理路數(shù)成正比,,所以軟件HDLC一般只能用于個別路數(shù)的低速信號處理,。
FPGA(Field Programmable Gate Array, 現(xiàn)場可編程門陣列)采用硬件技術(shù)處理信號,又可以通過軟件反復(fù)編程使用,,能夠兼顧速度和靈活性,,并能并行處理多路信號,實時性能能夠預(yù)測和仿真,。FPGA芯片雖成本略微高于ASIC芯片,,但具有貨源暢通、可多次編程使用等優(yōu)點,。目前FPGA單片所含的邏輯門和片上存儲器的容量越做越大,,百萬門級的可編程邏輯芯片已成為尋常產(chǎn)品。在中小批量通信產(chǎn)品的設(shè)計生產(chǎn)中,,用FPGA實現(xiàn)HDLC功能是一種值得采用的方法,。正是有鑒于此,,Innocor、Xilinx等公司推出了能在FPGA中實現(xiàn)HDLC功能的IP Core(Intellectual Property Core,,知識產(chǎn)權(quán)核),,但這些IP Core需要付費購買許可(License)才能使用,且在應(yīng)用中受到各種限制,。
從HDLC的基本定義出發(fā),,通過對FPGA設(shè)計輸入的模塊化描述,介紹一種能夠在可編程邏輯芯片中實現(xiàn)HDLC功能的方法,。
2 HDLC的幀結(jié)構(gòu)和CRC校驗
HDLC規(guī)程主要由幀結(jié)構(gòu),、規(guī)程要素、規(guī)程類別三個部分組成[1],。為了使FPGA的設(shè)計能夠?qū)崿F(xiàn)HDLC的基本功能并能按照各項標(biāo)準(zhǔn)的規(guī)定靈活采用不同的CRC校驗算法,,首先回顧一下HDLC基本的幀結(jié)構(gòu)形式。
HDLC是面向比特的鏈路控制規(guī)程,,其鏈路監(jiān)控功能通過一定的比特組合所表示的命令和響應(yīng)來實現(xiàn),,這些監(jiān)控比特和信息比特一起以幀的形式傳送。
以下是ISO/IEC 3309標(biāo)準(zhǔn)規(guī)定的HDLC的基本幀結(jié)構(gòu),。
其它的HDLC標(biāo)準(zhǔn)也有類似的幀結(jié)構(gòu),。每幀的起始和結(jié)束以7E(01111110)做標(biāo)志,兩個7E之間為數(shù)據(jù)段(含地址數(shù)據(jù),、控制數(shù)據(jù),、信息數(shù)據(jù))和幀校驗序列。幀校驗采用CRC算法,,對除了插入的零以外的所有數(shù)據(jù)進行校驗,。為了避免將數(shù)據(jù)中的7E誤為標(biāo)志,在發(fā)送端和接收端要相應(yīng)地對數(shù)據(jù)流和幀校驗序列進行插零及刪零操作,。
各種HDLC間的區(qū)別之一是幀校驗序列的CRC算法不同,,這種不同表現(xiàn)在幾個方面:
a. 幀校驗序列的位數(shù)不同,如16位和32位等,。
b. CRC生成多項式不同,,如對于16位的CRC,CCITT V.41標(biāo)準(zhǔn)的多項式是x16 + x12 + x5 + 1,,ANSI CRC-16標(biāo)準(zhǔn)的多項式是x16 + x15 + x2 + 1等,。
c. CRC序列的初始化條件不同,如可以初始化為全0,、全1等,。
d. CRC計算結(jié)果的處理方式不同,如可以直接把CRC結(jié)果發(fā)送,,或?qū)RC結(jié)果取反后再發(fā)送等,。
e. 對接收到的數(shù)據(jù)做CRC校驗時,,合格判據(jù)不同。因為有了上述的不同處理,,自然會得到不同的結(jié)果,由此造成合格判據(jù)不同,。例如有的標(biāo)準(zhǔn)以校驗結(jié)果1D0F判為無錯誤[2],。而有的ASIC芯片以校驗結(jié)果F0B8判為無錯誤[3]。
顯然,,對于這些應(yīng)用,,可編程邏輯芯片正可以發(fā)揮自己的特長。
3 用FPGA實現(xiàn)HDLC功能的原理框圖
對FPGA器件進行功能設(shè)計一般采用的是Top to Down(從頂?shù)降祝┑姆椒?,亦即根?jù)要求的功能先設(shè)計出頂層的原理框圖,,該圖通常由若干個功能模塊組成。再把各個模塊細(xì)化為子模塊,,對較復(fù)雜的設(shè)計還可把各子模塊分成一層層的下級子模塊,,各層的功能可以用硬件描述語言或電路圖來實現(xiàn)。
圖2即為一個典型的單路雙向HDLC電路的頂層電原理圖設(shè)計實例,。
從圖中可以看出,,該電路由接口模塊interface、HDLC數(shù)據(jù)發(fā)送模塊transmitter和HDLC
數(shù)據(jù)接收模塊receiver三部分組成,。當(dāng)需要多路HDLC收發(fā)器時,,可將若干個transmitter模塊和receiver模塊組合使用。以下分別對這幾個模塊做簡要說明,。
圖2
3.1 接口模塊interface
interface模塊的主要功能是:向FPGA提供時鐘,;通過數(shù)據(jù)、地址總線和讀寫信號向FPGA讀寫并行數(shù)據(jù),;產(chǎn)生和處理中斷信號,。
在本例中,時鐘是24.576MHz,。時鐘的頻率越高,,就可以處理更高速的數(shù)據(jù)信號,但相應(yīng)的芯片功耗和價格要高一些,。時鐘頻率還和HDLC的數(shù)據(jù)收發(fā)速率有關(guān),,一般選時鐘頻率正好是HDLC數(shù)據(jù)速率的整數(shù)倍,以便簡化HDLC 收發(fā)器定時電路的設(shè)計,。
數(shù)據(jù)總線的寬度取決于所使用的外部CPU類型,。由于目前較多
使用的是16位的單片處理器,因此這里采用16位的數(shù)據(jù)總線cpu_data[15..0],。當(dāng)然也可以根據(jù)需要采用8位或32位的數(shù)據(jù)總線,。
地址總線的寬度主要取決于HDLC所需要的數(shù)據(jù)緩存區(qū)的大小,。例如,設(shè)計16路雙向HDLC收發(fā)器,,每個收發(fā)器要緩存256字節(jié)的數(shù)據(jù),,在使用16位數(shù)據(jù)總線時可求得地址總線的寬度至少應(yīng)有12位。由于外部CPU要對FPGA實施一些控制功能,,F(xiàn)PGA中還要考慮留出一定的地址來安排命令寄存器和狀態(tài)寄存器,,所以實際所需的地址總線還要再寬一些。如果HDLC的路數(shù)很多,,緩存器又定得很大,,F(xiàn)PGA內(nèi)部的地址寬度會超過外部CPU可提供的地址寬度,這時可以向FPGA的特定寄存器寫入數(shù)據(jù)鎖存后作為內(nèi)部地址來擴展地址總線,。
對于外部CPU來說,,F(xiàn)PGA可以看成是一個普通芯片,通過片選CS/,、讀寫信號RD/和WR/,,就可以選中FPGA并對其進行讀寫操作。
當(dāng)FPGA需要向CPU傳遞信息時,,中斷信號輸出端interrupt/ 變?yōu)榈碗娖?,CPU響應(yīng)后可到FPGA中的狀態(tài)寄存器去讀取詳細(xì)的中斷信息并做出相應(yīng)的處理。
3.2 HDLC數(shù)據(jù)發(fā)送模塊transmitter
transmitter模塊的主要功能是:對本路HDLC數(shù)據(jù)發(fā)送時鐘tx_clk整形后產(chǎn)生內(nèi)部發(fā)送時鐘inter_tx_clk, 產(chǎn)生鎖相于inter_tx_clk的FPGA工作時鐘tx_op_clk,;鎖存外部CPU寫入的發(fā)送數(shù)據(jù)并按指定時序啟動發(fā)送,;在發(fā)送數(shù)據(jù)段前加上7E起始標(biāo)志;對發(fā)送數(shù)據(jù)逐位做CRC計算并將計算結(jié)果附在發(fā)送數(shù)據(jù)之后,;對包括CRC計算值在內(nèi)的數(shù)據(jù)進行插零操作并附上7E結(jié)束標(biāo)志把結(jié)果輸出,。
transmitter模塊由發(fā)送定時子模塊tx_timer、發(fā)送數(shù)據(jù)子模塊tx_data,、標(biāo)志發(fā)生器子模塊7e_generator,、發(fā)送CRC計算子模塊tx_crc、數(shù)據(jù)插零子模塊zero_insert等組成,,見圖3,。
HDLC的數(shù)據(jù)發(fā)送時鐘tx_clk由外部電路提供(在必要時也可把這些外部電路綜合進同一片F(xiàn)PGA),工作時鐘op_clk的頻率比數(shù)據(jù)發(fā)送時鐘高出幾倍并鎖相于數(shù)據(jù)發(fā)送時鐘,,能以高于比特發(fā)送的速度執(zhí)行對數(shù)據(jù)的操作,。
圖3
待發(fā)送數(shù)據(jù)是由外部CPU通過interface模塊寫入指定地址的緩沖存儲器的。在HDLC中,,可以選用的緩沖存儲器類型有FIFO(先進先出)存儲器,、DPRAM(雙端口RAM)存儲器、移位寄存器等。在本設(shè)計中,,發(fā)送數(shù)據(jù)的存儲使用的是數(shù)據(jù)鎖存移位寄存器,。使用這種寄存器的優(yōu)點是:寫入的待發(fā)送數(shù)據(jù)經(jīng)鎖存后,可在任何時候(包括正在發(fā)送時)對數(shù)據(jù)的任何部分讀出檢查,,并且數(shù)據(jù)可直接串行移位做CRC計算,,簡化FPGA設(shè)計。這種寄存器由數(shù)據(jù)鎖存器和串行移位寄存器兩部分組成,,占用芯片資源較多,,但對于有大量片上存儲器可用的FPGA 芯片來說,這點是不成問題的,。
7E標(biāo)志加在發(fā)送數(shù)據(jù)段的前后,其時序由tx_timer確定,。在發(fā)送啟動時,,先發(fā)7E再發(fā)數(shù)據(jù)。
發(fā)送CRC計算子模塊tx_crc由16個帶賦能端e的D觸發(fā)器組成,,其電路圖見圖4,,可用來按照x16 + x12 + x5 + 1的生成多項式進行16位CRC計算。該電路的原理可參看數(shù)據(jù)通信教科書,,此處不再贅述,,僅說明幾點:
a. 如果要改變CRC的位數(shù),只要改變D觸發(fā)器的數(shù)量,。
b. 如果要改變CRC生成多項式,,僅需將多項式中非零系數(shù)項對應(yīng)的D觸發(fā)器的輸出與d1信號異或后送至下一個D觸發(fā)器的輸入。
c. 通過給D觸發(fā)器的PRN端或CLRN端置0,,就可改變CRC計算的初始值,。
這個例子可說明用FPGA設(shè)計的CRC電路具有極大的靈活性。
圖4
發(fā)送的數(shù)據(jù)經(jīng)CRC計算并將計算結(jié)果附在數(shù)據(jù)后面,,再經(jīng)插零后附上7E標(biāo)志就可輸出,。插零操作由子模塊zero_insert完成。子模塊tx_data監(jiān)視著每一個串行移出的數(shù)據(jù),,當(dāng)發(fā)現(xiàn)數(shù)據(jù)流中出現(xiàn)五?quot;1時,,就輸出控制信號1f_detect/ 暫停數(shù)據(jù)移位,此時子模塊zero_insert向數(shù)據(jù)流插入一個0比特,。
子模塊tx_data中存儲著待發(fā)送數(shù)據(jù)的比特長度值,,并隨時和已發(fā)送數(shù)據(jù)的比特長度值比較。當(dāng)出現(xiàn)兩者相等的情況時,,判定為數(shù)據(jù)發(fā)送完畢,,子模塊tx_crc停止CRC計算并把計算結(jié)果輸出。再經(jīng)過16個數(shù)據(jù)時鐘后,子模塊7e_generator發(fā)出7E作為結(jié)束標(biāo)志,,同時向接口模塊interface發(fā)出tx_data_empty信號表示數(shù)據(jù)發(fā)送結(jié)束,。
3.3 HDLC數(shù)據(jù)接收模塊receiver
receiver模塊的主要功能是:產(chǎn)生與本路HDLC接收數(shù)據(jù)時鐘同步的FPGA工作時鐘;在接收的數(shù)據(jù)流中檢測有無7E標(biāo)志,;當(dāng)檢測到數(shù)據(jù)流中有1F信號時,,對數(shù)據(jù)進
行刪零操作;對經(jīng)刪零后的數(shù)據(jù)進行CRC校驗,;把接收到的數(shù)據(jù)進行串/并轉(zhuǎn)換并存入雙端口RAM,;當(dāng)接收到結(jié)束標(biāo)志后,檢查CRC校驗值是否正確,,向interface模塊發(fā)出rx_data_ready信號,。
receiver模塊由接收定時子模塊rx_timer、接收數(shù)據(jù)子模塊rx_data,、標(biāo)志檢測子模塊7e_detector,、數(shù)據(jù)刪零子模塊zero_delete、接收CRC校驗子模塊 rx_crc等組成,,見圖5,。
對比receiver模塊和transmitter模塊,雖然兩者一些子模塊的功能是相逆的,,但其原理是類似的,,因此不再重復(fù)說明。
在receiver模塊中采用了雙端口RAM來作為HDLC接收數(shù)據(jù)緩存器,,因此FPGA內(nèi)部向雙端口RAM寫入數(shù)據(jù)和FPGA外部向雙端口RAM讀出數(shù)據(jù)可以分別通過兩個端口獨立的數(shù)據(jù)地址總線同時進行,。
圖5
限于篇幅,以上所述僅為設(shè)計HDLC電路的大致框架,,許多細(xì)節(jié)已被省略了,。
4 應(yīng)用實例
根據(jù)上述設(shè)計方法,已成功地在可編程邏輯芯片上實現(xiàn)了多路HDLC的設(shè)計,。
設(shè)計輸入在Altera公司的MAX+plus II[4] 10.0版本的軟件平臺上進行,。首先考慮擬設(shè)計的電路有多少路HDLC收發(fā)器、需要多少內(nèi)部存儲器,、工作速率多少,、對外部處理器的接口有何要求等。根據(jù)這些考慮,,以電路圖和AHDL語言結(jié)合的方法進行設(shè)計輸入,。對于時序電路,主要采用電路圖輸入的方法,;對于地址譯碼等功能電路,,采用AHDL語言描述;對于存儲器、鎖存器及移位寄存器等,,盡量采用MAX+plus II中LPM(參數(shù)化模塊庫)提供的模塊來實現(xiàn),。全部設(shè)計輸入完成后,對設(shè)計進行編譯,、仿真,。在波形仿真器內(nèi)給定輸入信號,檢查輸出的波形是否符合設(shè)計預(yù)期,。反復(fù)多次進行修改,,確認(rèn)無誤后可將設(shè)計結(jié)果下載到FPGA芯片。
FPGA芯片選用的是Altera公司的ACEX 1K系列[5],。該系列是Altera公司面向通信和消費類數(shù)字產(chǎn)品推出的低功耗,、高密度的高性能FPGA集成電路,具有可與ASIC相比擬的價位,。ACEX 1K系列器件內(nèi)部采用基于LUT的架構(gòu),,最大邏輯門數(shù)為10萬門;可提供的片內(nèi)存儲器最大為49152比特,;最小時延僅數(shù)納秒,實際電路總時延在數(shù)十納秒左右,;能夠滿足一般HDLC的要求,。ACEX 1K系列FPGA器件工作電壓為2.5伏,I/O接口電壓可選為2.5伏或3.3伏,,配置芯片可選Altera公司的EPC1型,。
設(shè)計出的具有多路HDLC功能的FPGA芯片已應(yīng)用于船舶AIS(Automatic Identification System,自動識別系統(tǒng))樣機的無線數(shù)據(jù)通信鏈路中,,成功實現(xiàn)了雙向數(shù)據(jù)通信,。
5 結(jié)束語
FPGA提供了一種取代ASIC芯片的選擇,以上所述僅是用FPGA實現(xiàn)HDLC功能的一個簡單介紹,。在通信產(chǎn)品的設(shè)計中,,如果原已使用了可編程邏輯芯片來實現(xiàn)某些功能的話,只要改用更大容量的FPGA芯片,,就可以將類似于HDLC這樣的功能都集成進去,。如使用Altera 公司的Quartus II軟件來進行同類設(shè)計,則功能更強大,,更能支持Top to Down的設(shè)計方法,,并且支持Cyclone等大規(guī)模FPGA芯片。此外,,Xilinx公司新推出90納米工藝的Spartan-3系列低成本FPGA芯片,,也可作為取代ASIC的一種選擇。顯然,F(xiàn)PGA在通信技術(shù)中的應(yīng)用十分值得重視,,并正受到越來越多的關(guān)注,。(2003.11)
參考文獻(xiàn)
1 張德民. 數(shù)據(jù)通信,P.194. 北京:科學(xué)技術(shù)文獻(xiàn)出版社,,1997.8
2 ISO/IEC 3309: Information technology-Telecommunications and information exchange between systems-High-level data link control (HDLC) procedures-Frame structure, P.4. Switzerland: International Electrotechnical Commission, Jun 2002
3 Zarlink Semiconductor. MT8952B HDLC Protocol Controller, P.3-64. March 1997
4 Altera Corporation. MAX+plus II, Version 10.0, Sep 2000
5 Altera Corporation. ACEX 1K Programmable Logic Family Data Sheet, Altera Digital Library,,Version 3,2001