element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
    About the element14 Community
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      •  Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
FPGA
  • Technologies
  • More
FPGA
Forum 用FPGA+DSP实现HDLC(高级数据链路控制)功能
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join FPGA to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 0 replies
  • Subscribers 575 subscribers
  • Views 581 views
  • Users 0 members are here
  • 软件hdlc
  • asic
  • fpga
Related

用FPGA+DSP实现HDLC(高级数据链路控制)功能

Flush
Flush over 15 years ago

引言

HDLC的ASIC芯片使用简易,功能针对性强,性能可靠,适合应用于特定用途的大批量产品中。但由于HDLC标准的文本较多,ASIC芯片出于专用性的目的难以通用于不同版本,缺乏应用灵活性。有的芯片公司还有自己的标准,对HDLC的CRC(循环冗余码校验)序列生成多项式等有不同的规定。专用于HDLC的ASIC芯片其片内数据存储器容量有限,通常只有不多字节的FIFO(先进先出存储器)可用。对于某些应用来说,当需要扩大数据缓存的容量时,只能对ASIC再外接存储器或其他电路,ASIC的简单易用性就被抵销掉了。 HDLC的软件编程方法功能灵活,通过修改程序就可以适用于不同的HDLC应用。但程序运行占用处理器资源多,执行速度慢,对信号的时延和同步性不易预测。纯软件HDLC一般只能用于个别路数的低速信号处理。

FPGA采用硬件技术处理信号,又可以通过软件反复编程使用,能够兼顾速度和灵活性,并能并行处理多路信号,实时性能能够预测和仿真。

 

image
DSP采用软件技术处理信号,也可以反复编程使用。DSP、FPGA芯片虽成本略微高于ASIC芯片,但具有货源畅通、可多次编程使用等优点。在中小批量通信产品的设计生产中,用FPGA和DSP实现HDLC功能是一种值得采用的方法。

HDLC的帧结构和CRC校验

为了使FPGA的设计能够实现HDLC的基本功能并能按照各项标准的规定灵活采用不同的CRC校验算法,首先看一下HDLC基本的帧结构形式。

HDLC是面向比特的链路控制规程,其链路监控功能通过一定的比特组合所表示的命令和响应来实现,这些监控比特和信息比特一起以帧的形式传送。以下是ISO/IEC 3309标准规定的HDLC的基本帧结构。

image
其他的HDLC标准也有类似的帧结构。每帧的起始和结束以"7E"(01111110)做标志,两个"7E"之间为数据段(含地址数据、控制数据、信息数据)和帧校验序列。帧校验采用CRC算法,对除了插入的"零"以外的所有数据进行校验。为了避免将数据中的"7E"误为标志,在发送端和接收端要相应地对数据流和帧校验序列进行"插零"及"删零"操作。

用FPGA+DSP实现HDLC功能

对FPGA器件进行功能设计一般采用的是"Top to Down"("从顶到底")的方法,亦即根据要求的功能先设计出顶层的原理框图,该图通常由若干个功能模块组成。再把各个模块细化为子模块,对较复杂的设计还可把各子模块分成一层层的下级子模块,各层的功能可以用硬件描述语言或电路图来实现。

image
DSP的设计则是按软件顺序执行的方法,主函数调用子函数,还可以把子函数分成下级子函数,目前的DSP设计软件主要是用C语言来完成。

HDLC协议操作由FPGA、DSP共同完成:HDLC接收端:首先由FPGA来收数据,之后判断帧头“7E”及本机地址,如果是发给本机的数据,则对后续数据进行判断,如果有5个连“1”且后一位数据为“0”则将其后的一个“0”删除,删零后将数据存入FIFO中,收到帧尾“7E”时给出收结束标志;然后由DSP读收结束标志,如果标志为“1”读空FIFO,清标志位,将数据内容进行CRC校验。

HDLC发送端:首先由DSP将数据写入FPGA的FIFO之后,DSP给出标志;FPGA收到标志后,先发送帧头“7E” ,然后发送数据,如果数据中有5个连“1”则在其后插入1个“0”,数据发送结束后发送帧尾“7E”。

FPGA设计

FPGA中实现的主要是链路层协议完成HDLC数据接口的收发,并完成与DSP的数据交互,该电路由接口模块interface、HDLC数据发送模块transmitter和HDLC数据接收模块receiver三部分组成。

FPGA接口模块interface

interface模块的主要功能是:DSP通过数据、地址总线和读写信号向FPGA读写并行数据。

在本例中数据总线的宽度取决于所使用的DSP的数据位。由于目前DSP处理器的多为64位或32位,而完成数据交互使用8位就够了,因此这里采用8位的数据总线cpu_data[7..0]。地址总线包括译码选通发送FIFO和接收FIFO的寄存器地址,命令寄存器和状态寄存器。

对于DSP来说,FPGA可以看成是一个普通芯片,通过片选CS/、读写信号RD/和WR/,就可以选中FPGA并对其进行读写操作。

当FPGA需要向DSP传递信息时,中断信号输出端interrupt/ 变为低电平,DSP响应后可到FPGA中的状态寄存器去读取详细的中断信息并做出相应的处理。

FPGA数据发送模块HDLC_Send

HDLC_Send模块的主要功能是:对HDLC产生内部数据发送时钟tx_clk;锁存DSP写入FIFO的发送数据并按指定时序启动发送;在发送数据段前加上"7E"起始标志;对发送的数据及CRC计算结果进行"插零"操作并附上"7E"结束标志把结果输出(见图1)。

txhdlc模块由发送数据子模块、标志数据插零子模块及“7E”发送等模块组成。

HDLC的数据发送时钟tx_clk由外部输入时钟分频得到,能以高于比特发送的速度执行对内部操作。

待发送数据是由外DSP通过interface模块写入指定地址的缓冲存储器的。在HDLC中,可以选用的缓冲存储器类型有FIFO存储器、DPRAM存储器、移位寄存器等。在本设计中,发送数据的存储使用的FIFO存储器。使用这种寄存器的优点是:只对一个FIFO入口地址进行操作,简化FPGA设计。DSP向FPGA写完数据后,向状态寄存器写标志,表示数据发完可以发送,

发送的数据CRC的计算结果附在数据后面,再经"插零"后附上"7E"标志就可输出。发送数据子模块监视着每一个串行移出的数据,当发现数据流中出现5个连“1”时,就输出控制信号1f_detect/ 暂停数据移位,此时子模块zero_insert向数据流插入一个"0"比特。数据发送完毕后,“7E”发送子模块发出"7E"作为结束标志,同时清除标志位。

FGPA数据接收模块HDLC_Receiver

HDLC_Receiver模块的主要功能是:接收HDLC数据和时钟,并用时钟采样数据;在接收的数据流中检测有无“7E”及本机地址标志,如果有则接收数据,当检测到数据流中有“1F”信号,并后一个数据是“0”时,对数据进行“删零”操作;对经“删零”后的数据写入收FIFO;收到尾“7E”后,置收标志位,向interface模块发出rx_data_ready信号,当DSP通过中断接收到结束标志后,读入数据,清标志位,检查CRC校验值是否正确。

rxhdlc模块由接收数据子模块rx_data、标志检测子模块7e_detector、数据删零子模块zero_delete等组成。对比HDLC_receive模块和HDLC_Send模块,虽然两者一些子模块的功能是相逆的,但原理类似,不再重复说明。在HDLC_Receiver模块中采用了FIFO来作为HDLC接收数据缓存器,因此FPGA内部收数据和DSP读数据通过各自的读写口进行。

FPGA中的接收超时判断功能

当由于意外情况在总线上出现不完整数据时,需对接收数据进行超时判断,已防止在收到帧头“7E”后长时间未收到后续数据或尾“7E”时,死等数据,导致错判,使用的策略是:当收到“7E”及本机地址后,启动计数器,计数时间长于最长帧一倍左右,如果从计时开始到计时结束未收到“7E”则判超时,重新接收数据;而如果在计时时间内收到“7E”则清零计数器,将数据存入收FIFO。

DSP软件的内容主要包括send模块和receive模块和CRC校验模块。

DSP功能

DSP中的功能主要分为HDLC接收,HDLC发送。

DSP中的HDLC接收

DSP从FPGA接收到完成收标志后,接收数据,然后清FPGA标志位,将接收到的数据进行CRC校验后解帧,根据数据帧内容完成相关操作。

DSP中的HDLC发送

DSP将数据发送给FPGA,发送结束后,置FPGA发送完成标志位。DSP完成收数后还要进行CRC校验及解帧等操作,这就要根据具体的协议进行。

具体实现

根据上述设计方法,已成功地实现了HDLC电路的设计。设计输入在Altera公司的Quartus 8.0版本及CCS 3.0的软件平台上进行。首先考虑拟设计的电路需要多少内部存储器、工作速率多少、对外部处理器的接口有何要求等。根据这些考虑,以电路图及DSP C语言结合的方法进行设计输入。对于时序电路,主要采用电路图输入的方法。

FPGA芯片选用的是Altera公司的ACEX 1K系列。该系列是Altera公司面向通信和消费类数字产品推出的低功耗、高密度的高性能FPGA集成电路,具有可与ASIC相比拟的价位。DSP使用TI公司TMS320C5416,该芯片集成度高,结构简单,体积小可靠性高,价格低,可以装入各种仪器仪表及控制装置中,易于产品化。设计出的具有HDLC功能的FPGA芯片已应用于导航设备样机的有线通讯链路中,成功实现了双向数据通信。

结语

基于软件编程与FPGA来共同实现HDLC协议,方法灵活、速度快。适合于DSP+FPGA的数字硬件平台的接口设计,实现后可靠有效。

  • Sign in to reply
  • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2026 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube