基于FPGA的异步串行总线设计
扫描二维码
随时随地手机看文章
摘要:高速异步串行总线在现代通信设备中应用越来越广,文中介绍了一种基于FPGA的高速异步串行总线设计,详细描述了硬件设计和总线协议的实现方法。在现代通信系统的应用中有较高的实用价值。
关键词:异步串口;FPGA器件;Verilog HDL
随着近代通信技术的迅猛发展,对总线传输速率的要求也越来越高。传统的并行总线在发展到一定速率后很难再有所突破,并且在实际应用中还存在着大量的弊端,比如:成本相对较高、抗电磁干扰能力低下、模块间的总线互联繁琐等等。这些都给串行总线的发展和应用提供了客观动力。串行总线按传输模式可分为同步串行总线和异步串行总线两类;同步串行总线存传输过程中需要携带同步时钟信号,因此在传输距离较长或传输速率较高时会出现由于时钟衰落而引起的误码现象,制约了串行总线的传输速率和作用距离。而异步串行总线恰恰规避了这些缺点。因此异步串行总线被大量的应用于高速串行通信系统中。异步串行总线的按实现方式大致可分为两种,一种是采用专用串行总线接口芯片实现,实现方便简单,但二次开发性差,不利于系统升级维护;另一种是基于FPGA等可编程逻辑芯片实现。后者设计灵活,二次开发型良好,参数配置便捷,利于系统升级维护。本文将详细描述一种基于FPGA芯片硬件设计,采用Verilog HDL硬件描述语言实现传输协议的高速异步串行总线设计。
1 硬件设计方案
本设计通过高速异步串行总线和上位机进行通信,通过解析消息内容完成对下位机的实时控制与监测,并且将监测数据及时准确的回传至上位机本系统要求具备较高的实时控制性能,下位机响应上位机指令要求时间在3us以内,模块间通信稳定可靠、级联简洁,系统性能升级方便等。通过对系统要求研究分析,采用高速异步串行总线实现模块间通信比较符合要求。系统框图如图1所示。
高速异步串行总线碗件设计采用了以FPGA芯片为主,配以接口、时钟、电源变换等外围电路的设计思路。选用ALTERA公司的Cvclone系列FPGA作为核心器件。此芯片内部有丰富的逻辑资源和存储资源,有丰富的时钟网络和锁相环单元和I/O引脚,能够满足异步串行协议实现的硬件需求多种电压单独使用,有效降低芯片功耗。为了提高FPGA工作稳定性和可靠性在硬件设计时专门在其外围配置了电源监测电路和复位电路,对FPGA的各种工作电压和电流进行监测,当任意一路电压值发生突变时,电源监测电路都会给出命令,立刻关掉其它电源,或者将FPGA的供电端短路至地端,使FPGA进入断电状态,确保芯片不会被损坏。当电压值恢复正常时,电源监测电路将打开供电电路使FPGA再次进入工作状态,通过复位信号启动FPGA的程序从起始状态开始工作,确保FPGA芯片的物理安全和运行安全,从而有效提高系统的可靠性。设计中还采用了LVDS(Low Voltage Differential Signaling)收发芯片来提高串行总线的驱动能力。单端串行总线从FPGA输出后经LVDS收发器转化为差分信号线对输出至模块端口,与其它模块进行物理连接。串行总线采用差分线的连接方式能够更有效的抵抗传输中的共模噪声,降低传输误码率,大幅提高通信质量。详细的设计框图如图2所示。
2 异步串行总线传输协议
根据系统对上下位机指令响应时间要求,自定义了异步串行总线的传输速率和传输协议。因为本协议为异步串行传输协议,所以在每包数据的前面增加了1.5bit的起始位,在每包数据的后面增加了1bit的数据停止位作为一包数据的开始标志和结束标志。为提高数据传输的准确性,在发送起始位之后和信息数据结束之前分别增加了8bit题头和题尾,用于数据接收方信息同步和数据识别;如果接收方收到的题头或者题尾任意一个有误,就判本包数据传输有误。并且在本包数据末端增加了CRC-8校验码,对发送的整个串行码流进行校验。具体传输协议如下:
(1)串行传输格式:
起始位→题头→命令字→信息→题尾→CRC8→停止位;
(2)传输速率:40MHz;
(3)起始位:0(1.5bit)
(4)题头:10100101;
(5)命令字:B7 B6 B5 B4 B3 B2 B1 B0:B0为读写控制位(0读,1写);B1为数据LSB和MSB传输标志位(0为LSB先出,1为MSB先出);B5B4 B3B2为访问地址(0000自检状态寄存器,0001控制状态寄存器,1110错误重发请求标志寄存器,1111装置ID软件版本寄存器,其它根据实际需求任意扩展定义);B7B6为传输数据长度(00为0个8bit数据长度,01为1个8bit数据长度,10为2个8bit数据长度,11为3个8 bit数据长度)等。
(6)信息:长度为8bit的整数倍;
(7)题尾:01011010;
(8)CRC校验多项式:CRC8=X8+X7+X6+X4+X2+1;
(9)停止位:1(1bit);
(10)无数据时为高电平。读操作时后面的数据长度为0;不够8bit的,空位默认为“0”。
发送消息的过程相对简单,只需要按照传输格式将所要发送的消息进行打包、CRC-8编码。然后用时钟将打包好的数据串行打出即可;接收消息相对复杂一些,为了准确接收数据,防止因为时钟抖动及串行数据传输信号衰落而导致的误码,接收方要尽可能的靠近每比特数据位的中点进行采样,所以在设计程序时利用锁相环将采样时钟倍频到传输速率的4倍频进行同步采样,这样采样点更加接近数据中点,采到的数据更真实串行数据接收状态机如图3所示。
3 功能模块设计
根据对协议的分析将整个串行总线传输协议从功能上划分为以下几个馍块:发射模块、接收模块、解消息模块、CRC校验模块、自检模块、控制模块、ID版本存取模块和错误重发模块等。模块关系图如图4所示。
(1)发射模块:按照协议向上位机回传监测数据,发射错误重发请求数据等;
(2)接收模块:接收上位机下传的参数、命令等;完成起始位的检测和消息同步,题头、题尾的对错判断,同时将收到的数据进行串并转换以8bit为单位打入FIFO (First In First Out)中缓存,备译码模块进行命令字译码和对下位机控制的信息读取。
(3)CRC校验模块:CRC校验模块完成CRC-8编码功能和CRC-8译码功能。当发送消息时,将要发送的数据按8bit打入CRC校验模块,对其进行编码,求出校验码并且拼接到题尾后面将其发出;当接收消息时,接收模块将收到的串行码按8bit打入CRC校验模块,启动CRC译码算法,如果译码成功则启动解消息模块进行相应的后续工作。如果译码失败,终止本次接收,启动错误重发模块,要求对放发送上一包消息。
(4)解消息模块:CRC校验成功后将启动解消息模块进入工作状态,从FIFO中读取命令字数据,对命令字进行解码识别,根据解码信息肩动其它相应模块开始工作。
(5)错误重发模块:当接收到串行数据流时,经过题头、题尾、CRC译码判断,任何一个环节出现错误都将终止本次接收流程,同时启动错误重发模块,发送错误重发请求,要求对方重新发送上一包数据。
根据图4所示流程及软件模块功能化分,本设计采用Verilog HDL硬件设计语言开发实现。设计灵活,串口速率、编码模式、传输方式等都可根据系统要求从上位机下发参数进行修改。图5是本串口总线在每秒七万次的通信频率状态下用Quartus软件中的SignalTAP logic Analy zer抓出的工作时序图。可以看出串口总线传输稳定可靠,完全满足系统通信的高速传输要求。
4 结束语
本文介绍了一种基于FPGA芯片的高速异步串行总线设计。总线协议利用Verilog HDL实现,设计灵活、可读性强、维护方便、升级移植性能优越、传输稳定可靠。随着通信系统信息吞吐量的日益增加,这种具备多重优点的串行总线设计将被大量使用。