新聞中心

EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > HDLC的FPGA實(shí)現(xiàn)方法

HDLC的FPGA實(shí)現(xiàn)方法

作者: 時(shí)間:2012-04-18 來源:網(wǎng)絡(luò) 收藏

 1 引言

本文引用地址:http://butianyuan.cn/article/190497.htm

  (High-level Data Link Control Procedures, 高級數(shù)據(jù)鏈路控制規(guī)程)廣泛應(yīng)用于數(shù)據(jù)通信領(lǐng)域,是確保數(shù)據(jù)信息可靠互通的重要技術(shù)。實(shí)施的一般方法通常是采用ASIC(Application Specific Integrated Circuit,特定用途集成電路) 器件和軟件編程等。

  的ASIC芯片有Motorola公司的MC92460、ST公司的MK5025、Zarlink公司的MT8952B等。這些集成電路使用簡易,功能針對性強(qiáng),性能可靠,適合應(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)冗余碼校驗(yàn))序列生成多項(xiàng)式等有不同的規(guī)定。況且,專用于HDLC的ASIC芯片其片內(nèi)數(shù)據(jù)存儲器容量有限,通常只有不多字節(jié)的FIFO(先進(jìn)先出存儲器)可用。對于某些應(yīng)用來說,當(dāng)需要擴(kuò)大數(shù)據(jù)緩存的容量時(shí),只能對ASIC芯片再外接存儲器或其它電路,ASIC的簡單易用性就被抵銷掉了。 HDLC的軟件編程方法功能靈活,通過修改程序就可以適用于不同的HDLC應(yīng)用。但程序運(yùn)行占用處理器資源多,執(zhí)行速度慢,對信號的時(shí)延和同步性不易預(yù)測。對于多路信號的HDLC應(yīng)用,處理器的資源占用率與處理路數(shù)成正比,所以軟件HDLC一般只能用于個(gè)別路數(shù)的低速信號處理。

  (Field Programmable Gate Array, 現(xiàn)場可編程門陣列)采用硬件技術(shù)處理信號,又可以通過軟件反復(fù)編程使用,能夠兼顧速度和靈活性,并能并行處理多路信號,實(shí)時(shí)性能能夠預(yù)測和仿真。芯片雖成本略微高于ASIC芯片,但具有貨源暢通、可多次編程使用等優(yōu)點(diǎn)。目前單片所含的邏輯門和片上存儲器的容量越做越大,百萬門級的可編程邏輯芯片已成為尋常產(chǎn)品。在中小批量通信產(chǎn)品的設(shè)計(jì)生產(chǎn)中,用FPGA實(shí)現(xiàn)HDLC功能是一種值得采用的方法。正是有鑒于此,Innocor、Xilinx等公司推出了能在FPGA中實(shí)現(xiàn)HDLC功能的IP Core(Intellectual Property Core,知識產(chǎn)權(quán)核),但這些IP Core需要付費(fèi)購買許可(License)才能使用,且在應(yīng)用中受到各種限制。
從HDLC的基本定義出發(fā),通過對FPGA設(shè)計(jì)輸入的模塊化描述,介紹一種能夠在可編程邏輯芯片中實(shí)現(xiàn)HDLC功能的方法。

  2 HDLC的幀結(jié)構(gòu)和CRC校驗(yàn)

  HDLC規(guī)程主要由幀結(jié)構(gòu)、規(guī)程要素、規(guī)程類別三個(gè)部分組成[1]。為了使FPGA的設(shè)計(jì)能夠?qū)崿F(xiàn)HDLC的基本功能并能按照各項(xiàng)標(biāo)準(zhǔn)的規(guī)定靈活采用不同的CRC校驗(yàn)算法,首先回顧一下HDLC基本的幀結(jié)構(gòu)形式。

  HDLC是面向比特的鏈路控制規(guī)程,其鏈路監(jiān)控功能通過一定的比特組合所表示的命令和響應(yīng)來實(shí)現(xiàn),這些監(jiān)控比特和信息比特一起以幀的形式傳送。

  以下是ISO/IEC 3309標(biāo)準(zhǔn)規(guī)定的HDLC的基本幀結(jié)構(gòu)。

基本幀結(jié)構(gòu)

  其它的HDLC標(biāo)準(zhǔn)也有類似的幀結(jié)構(gòu)。每幀的起始和結(jié)束以7E(01111110)做標(biāo)志,兩個(gè)7E之間為數(shù)據(jù)段(含地址數(shù)據(jù)、控制數(shù)據(jù)、信息數(shù)據(jù))和幀校驗(yàn)序列。幀校驗(yàn)采用CRC算法,對除了插入的零以外的所有數(shù)據(jù)進(jìn)行校驗(yàn)。為了避免將數(shù)據(jù)中的7E誤為標(biāo)志,在發(fā)送端和接收端要相應(yīng)地對數(shù)據(jù)流和幀校驗(yàn)序列進(jìn)行插零及刪零操作。

  各種HDLC間的區(qū)別之一是幀校驗(yàn)序列的CRC算法不同,這種不同表現(xiàn)在幾個(gè)方面:

  a. 幀校驗(yàn)序列的位數(shù)不同,如16位和32位等。

  b. CRC生成多項(xiàng)式不同,如對于16位的CRC,CCITT V.41標(biāo)準(zhǔn)的多項(xiàng)式是x16 + x12 + x5 + 1,ANSI CRC-16標(biāo)準(zhǔn)的多項(xiàng)式是x16 + x15 + x2 + 1等。

  c. CRC序列的初始化條件不同,如可以初始化為全0、全1等。

  d. CRC計(jì)算結(jié)果的處理方式不同,如可以直接把CRC結(jié)果發(fā)送,或?qū)RC結(jié)果取反后再發(fā)送等。

  e. 對接收到的數(shù)據(jù)做CRC校驗(yàn)時(shí),合格判據(jù)不同。因?yàn)橛辛松鲜龅牟煌幚?,自然會得到不同的結(jié)果,由此造成合格判據(jù)不同。例如有的標(biāo)準(zhǔn)以校驗(yàn)結(jié)果1D0F判為無錯(cuò)誤[2]。而有的ASIC芯片以校驗(yàn)結(jié)果F0B8判為無錯(cuò)誤[3]。

  顯然,對于這些應(yīng)用,可編程邏輯芯片正可以發(fā)揮自己的特長。

  3 用FPGA實(shí)現(xiàn)HDLC功能的原理框圖

  對FPGA器件進(jìn)行功能設(shè)計(jì)一般采用的是Top to Down(從頂?shù)降祝┑姆椒ǎ嗉锤鶕?jù)要求的功能先設(shè)計(jì)出頂層的原理框圖,該圖通常由若干個(gè)功能模塊組成。再把各個(gè)模塊細(xì)化為子模塊,對較復(fù)雜的設(shè)計(jì)還可把各子模塊分成一層層的下級子模塊,各層的功能可以用硬件描述語言或電路圖來實(shí)現(xiàn)。

  圖2即為一個(gè)典型的單路雙向HDLC電路的頂層電原理圖設(shè)計(jì)實(shí)例。

  從圖中可以看出,該電路由接口模塊interface、HDLC數(shù)據(jù)發(fā)送模塊transmitter和HDLC

  數(shù)據(jù)接收模塊receiver三部分組成。當(dāng)需要多路HDLC收發(fā)器時(shí),可將若干個(gè)transmitter模塊和receiver模塊組合使用。以下分別對這幾個(gè)模塊做簡要說明。

用FPGA實(shí)現(xiàn)HDLC功能的原理框圖

  圖2

  3.1 接口模塊interface

  interface模塊的主要功能是:向FPGA提供時(shí)鐘;通過數(shù)據(jù)、地址總線和讀寫信號向FPGA讀寫并行數(shù)據(jù);產(chǎn)生和處理中斷信號。

  在本例中,時(shí)鐘是24.576MHz。時(shí)鐘的頻率越高,就可以處理更高速的數(shù)據(jù)信號,但相應(yīng)的芯片功耗和價(jià)格要高一些。時(shí)鐘頻率還和HDLC的數(shù)據(jù)收發(fā)速率有關(guān),一般選時(shí)鐘頻率正好是HDLC數(shù)據(jù)速率的整數(shù)倍,以便簡化HDLC 收發(fā)器定時(shí)電路的設(shè)計(jì)。

  數(shù)據(jù)總線的寬度取決于所使用的外部CPU類型。由于目前較多使用的是16位的單片處理器,因此這里采用16位的數(shù)據(jù)總線cpu_data[15..0]。當(dāng)然也可以根據(jù)需要采用8位或32位的數(shù)據(jù)總線。

  地址總線的寬度主要取決于HDLC所需要的數(shù)據(jù)緩存區(qū)的大小。例如,設(shè)計(jì)16路雙向HDLC收發(fā)器,每個(gè)收發(fā)器要緩存256字節(jié)的數(shù)據(jù),在使用16位數(shù)據(jù)總線時(shí)可求得地址總線的寬度至少應(yīng)有12位。由于外部CPU要對FPGA實(shí)施一些控制功能,F(xiàn)PGA中還要考慮留出一定的地址來安排命令寄存器和狀態(tài)寄存器,所以實(shí)際所需的地址總線還要再寬一些。如果HDLC的路數(shù)很多,緩存器又定得很大,F(xiàn)PGA內(nèi)部的地址寬度會超過外部CPU可提供的地址寬度,這時(shí)可以向FPGA的特定寄存器寫入數(shù)據(jù)鎖存后作為內(nèi)部地址來擴(kuò)展地址總線。

  對于外部CPU來說,F(xiàn)PGA可以看成是一個(gè)普通芯片,通過片選CS/、讀寫信號RD/和WR/,就可以選中FPGA并對其進(jìn)行讀寫操作。

  當(dāng)FPGA需要向CPU傳遞信息時(shí),中斷信號輸出端interrupt/ 變?yōu)榈碗娖?,CPU響應(yīng)后可到FPGA中的狀態(tài)寄存器去讀取詳細(xì)的中斷信息并做出相應(yīng)的處理。

  3.2 HDLC數(shù)據(jù)發(fā)送模塊transmitter

  transmitter模塊的主要功能是:對本路HDLC數(shù)據(jù)發(fā)送時(shí)鐘tx_clk整形后產(chǎn)生內(nèi)部發(fā)送時(shí)鐘inter_tx_clk, 產(chǎn)生鎖相于inter_tx_clk的FPGA工作時(shí)鐘tx_op_clk;鎖存外部CPU寫入的發(fā)送數(shù)據(jù)并按指定時(shí)序啟動發(fā)送;在發(fā)送數(shù)據(jù)段前加上7E起始標(biāo)志;對發(fā)送數(shù)據(jù)逐位做CRC計(jì)算并將計(jì)算結(jié)果附在發(fā)送數(shù)據(jù)之后;對包括CRC計(jì)算值在內(nèi)的數(shù)據(jù)進(jìn)行插零操作并附上7E結(jié)束標(biāo)志把結(jié)果輸出。

  transmitter模塊由發(fā)送定時(shí)子模塊tx_timer、發(fā)送數(shù)據(jù)子模塊tx_data、標(biāo)志發(fā)生器子模塊7e_generator、發(fā)送CRC計(jì)算子模塊tx_crc、數(shù)據(jù)插零子模塊zero_insert等組成,見圖3。

  HDLC的數(shù)據(jù)發(fā)送時(shí)鐘tx_clk由外部電路提供(在必要時(shí)也可把這些外部電路綜合進(jìn)同一片F(xiàn)PGA),工作時(shí)鐘op_clk的頻率比數(shù)據(jù)發(fā)送時(shí)鐘高出幾倍并鎖相于數(shù)據(jù)發(fā)送時(shí)鐘,能以高于比特發(fā)送的速度執(zhí)行對數(shù)據(jù)的操作。


上一頁 1 2 3 下一頁

關(guān)鍵詞: HDLC FPGA 實(shí)現(xiàn)方法

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉