用FPGA+DSP实现HDLC(高级数据链路控制)功能
插零子模块及“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的数字硬件平台的接口设计,实现后可靠有效。
链路 控制 功能 数据 高级 DSP 实现 HDLC FPGA 相关文章:
- FPGA与DSP的高速通信接口设计与实现 (06-05)
- 基于Linux数据链路层的MPI集群通信机制的设计与实现(08-17)
- CAN总线、以太网还是FPD链路:哪一种最适合车载通信(12-20)
- 基于MPC8270的MCC驱动设计(09-12)
- 16位IO-链路微控制器(09-12)
- 一种采用CAN总线的车灯控制系统设计(03-14)