CN108197042B - 一种基于fpga的通用异步串口及其应答方法 - Google Patents
一种基于fpga的通用异步串口及其应答方法 Download PDFInfo
- Publication number
- CN108197042B CN108197042B CN201711387859.2A CN201711387859A CN108197042B CN 108197042 B CN108197042 B CN 108197042B CN 201711387859 A CN201711387859 A CN 201711387859A CN 108197042 B CN108197042 B CN 108197042B
- Authority
- CN
- China
- Prior art keywords
- receiving
- data
- serial port
- response
- asynchronous serial
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/105—Program control for peripheral devices where the programme performs an input/output emulation function
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0032—Serial ATA [SATA]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Communication Control (AREA)
Abstract
本发明设计一种基于FPGA的通用异步串口及其应答方法,异步串口包括寄存器模块、控制模块、接收模块、发送模块以及接收存储器和发送存储器;当通用异步串口检测到信号后,执行开始条件,按照接口配置的物理层协议特性进行数据解析还原,得到接收判读数据,然后检测接口配置的应用层协议,并且逐字节与应用层协议进行匹配,匹配全部成功,回送应答数据完成异步串口通信,匹配不成功记录错误信息,匹配成功与否均保存接收的异步串口数据供分析使用。本发明实现了异步串口通信的统一描述,克服了传统异步串口数据处理方法通用性差、研制周期长、成本高的缺陷,具有规范性、复用性强,研制周期短、成本低的优点。
Description
技术领域
本发明涉及一种基于FPGA的通用异步串口及其应答方法,属于串口通讯技术领域。
背景技术
嵌入式系统有特定的硬件运行环境,因此其软件研发过程中的调试、测试与硬件时序关系较大,需依托半物理仿真平台。传统的半物理仿真平台针对真实目标系统及其应用场景定制开发,为专用测试设备,针对性强。但是,面对软件研制周期普遍缩短,敏捷开发软件增多的现状,传统的半物理仿真平台逐渐暴露出如下问题:
(1)传统的半物理仿真平台的硬件设计方案通用性差。其涉及不同开发方,采用的技术方案不同,各类硬件板卡的功能和接口标准也各不相同,导致不同项目的仿真平台难以复用。
(2)传统的半物理仿真平台研制周期长、成本高。每个新研项目的仿真平台都需要经历“设计——生产——调试——使用”四个过程,较难满足软件研制周期普遍缩短,敏捷开发软件增多的应用需求。
(3)传统的半物理仿真平台可维护性差。一般情况下,星载嵌入式软件在轨运行周期为5至8年,有的甚至更长;这段时间内,平台开发人员的流动会增加历史研制资料管理不到位的风险,导致新的开发人员较难对仿真平台进行快速有效维护。
(4)传统的半物理仿真平台很难实现配套仿真软件的通用化。不同项目仿真平台的硬件及板载FPGA逻辑存在差异,直接影响到配套仿真软件的通用化构建。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种基于FPGA的通用异步串口及其应答方法,通过初始配置,实现与各类协议的匹配,完成异步串口应答通讯。
本发明的技术解决方案是:
提供一种基于FPGA的通用异步串口,其特征在于,包括寄存器模块、控制模块、接收模块、发送模块以及接收存储器和发送存储器;
寄存器模块用于存储异步串口初始化参数;
接收模块包括单个字节的接收模块、实时接收FIFO和循环存储FIFO;单个字节的接收模块接收其它异步串口发送的数据,将单个字节写入实时接收FIFO,当设定时间内没有新的数据写入,表明接收完成,实时接收FIFO给出数据帧接收结束信号并发送给控制模块,并将该数据帧存入循环存储FIFO;
发送模块将内部FIFO的数据向其它异步串口发送;
发送存储器接收仿真软件写入的应答数据;
接收存储器包括命令缓存区、多个接收命令次数存储寄存器、接收错误次数存储寄存器;
控制模块,读取寄存器模块存储的命令字信息,判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,并将该组接收命令次数存储到对应的接收命令次数存储寄存器;如果没有全部匹配完成,则等待下一字节数据;如果各组命令均未全部匹配,则将接收命令错误次数加1;并存储到接收错误次数存储寄存器;如果全部匹配完成,则等待实时接收FIFO给出数据帧接收结束信号,当接收到数据帧接收结束信号后读取实时接收FIFO内的数据,并存储至接收存储器的命令缓存区,完成后,读取寄存器模块内的应答使能标志,判断是否需要应答,如果需要应答则读取发送存储器内的应答数据,并送入发送模块的FIFO中,如果不需要应答,则等待下一字节数据。
优选的,寄存器模块存储的异步串口初始化参数包括命令字信息、波特率、停止位、校验位、采样点位置、发送字节间隔、接收完成判断时间、RTS触发状态和命令字应答使能。
优选的,寄存器模块存储的异步串口初始化参数还包括串口输出信号是否强制拉低使能,如果该拉低使能有效,则该异步串口输出信号持续为低电平。
提供一种基于FPGA的通用异步串口应答方法,包括如下步骤:
(1)根据通讯的协议要求配置异步串口;
(2)接收一个字节数据;
(3)接收字节计数K加1;判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,进入步骤(4);如果没有全部匹配完成,则进入步骤(4);如果各组命均未全部匹配,则将该组接收命令错误次数加1,进入步骤(4);
(4)判断是否在设定时间内没有新的数据写入,如果有新的数据写入,则返回步骤(2);如果没有新的数据写入,则表明接收完成,实时接收FIFO内的数据帧循环存入存储FIFO;
(5)判断是否需要应答,如果不需要,则返回步骤(2);如果需要则读取仿真软件写入发送存储器内的应答数据,并向外发送,返回步骤(2)。
优选的,步骤(1)还包括判断触发方式是否为RTS,如果为RTS则等待接收外部的RTS信号,判断是否进行RTS应答,如果进行RTS应答,则读取仿真软件写入发送存储器内的应答数据,并向外发送,进入步骤(2),如果不进行RTS应答,则直接进入步骤(2);如果触发方式不是RTS,则进入步骤(2)。
优选的,步骤(1)中配置异步串口需要配置的参数包括,命令字信息、波特率、停止位、校验位、采样点位置、发送字节间隔、接收完成判断时间、RTS触发状态和命令字应答使能。
优选的,实时接收FIFO内的数据帧循环存入存储FIFO的方式为:将存储FIFO划分为四块缓存区,每次接收的数据顺序循环存储,记录最近一次接收数据存储在第几个缓存区。
本发明与现有技术相比的优点在于:
(1)本发明通过定义寄存器模块,实现了现行卫星地面仿真平台中异步串口数据处理的统一描述,克服了传统仿真平台通用性差、研制周期长、成本高的缺陷,具有规范性、复用性强,研制周期短、成本低的优点,仅通过参数配置,即可实现串口各类协议通讯。
(2)本发明通过FPGA逻辑模块实现了丰富的异步串口协议处理类型,克服了传统仿真平台在专用仿真软件中处理异步串口数据实时性差、交互接口多的缺陷,具有操作简单、实时性强的优点。
(3)本发明通过仿真平台异步串口模块的配置优化设置,解决了配套仿真软件的通用化问题,使用过程中,只需配置物理层和应用层参数,就可覆盖仿真平台中对异步串口数据的处理,具有可靠性、可维护性高的特点。
(4)本发明设置串口输出信号是否强制拉低使能,能够模拟该串口输出常低异常,便于串口间相互干扰的检查。
附图说明
图1为本发明一种基于FPGA的通用异步串口结构框架示意图;
图2为本发明一种基于FPGA的通用异步串口原理流程图;
图3为本发明一种基于FPGA的通用异步串口通信数据帧格式示意图;
图4为本发明一种基于FPGA的通用异步串口波特率发生器示意图;
图5为本发明一种基于FPGA的通用异步串口通信工作状态机示意图;
具体实施方式
本发明针对现有技术的不足,提出一种基于FPGA的通用异步串口及其应答方法,可以通过配置异步串口物理层和应用层参数,完成仿真平台对异步串口数据的处理,具有操作简单、实时性强、可靠性、可维护性高的特点,并实现了不同项目仿真平台之间的通用化,缩短了仿真平台的研制周期、降低了研制成本,保障星载嵌入式软件在轨稳定运行。
如图1所示为一种基于FPGA的通用异步串口的结构框架示意图,包括寄存器模块、控制模块、接收模块、发送模块以及接收存储器和发送存储器。
寄存器模块用于存储异步串口初始化参数;
接收模块包括单个字节的接收模块、实时接收FIFO和循环存储FIFO;单个字节的接收模块接收其它异步串口发送的数据,将单个字节写入实时接收FIFO,当设定时间内没有新的数据写入,表明接收完成,实时接收FIFO给出数据帧接收结束信号并发送给控制模块,并将该数据帧存入循环存储FIFO;
发送模块将内部FIFO的数据向其它异步串口发送;
发送存储器接收仿真软件写入的应答数据;
接收存储器包括命令缓存区、多个接收命令次数存储寄存器、接收错误次数存储寄存器;
控制模块,读取寄存器模块存储的命令字信息,判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,并将该组接收命令次数存储到对应的接收命令次数存储寄存器;如果没有全部匹配完成,则等待下一字节数据;如果各组命令均未全部匹配,则将接收命令错误次数加1;并存储到接收错误次数存储寄存器;如果全部匹配完成,则等待实时接收FIFO给出数据帧接收结束信号,当接收到数据帧接收结束信号后读取实时接收FIFO内的数据,并存储至接收存储器的命令缓存区,完成后,读取寄存器模块内的应答使能标志,判断是否需要应答,如果需要应答则读取发送存储器内的应答数据,并送入发送模块的FIFO中,如果不需要应答,则等待下一字节数据。
如图2所示为一种基于FPGA的通用异步串口的原理流程图,本发明具体方案包括初始化寄存器模块,配置异步串口物理层和应用层通信协议,获取输入信号后,按照物理层协议配置进行数据解析还原,并与应用层协议逐字节进行匹配,匹配成功回送相应数据完成异步串口通信,匹配不成功记录错误信息,匹配成功与否均保存接收的异步串口数据供分析使用。
具体包括如下步骤:
(1)异步串口参数初始化,具体包括:波特率、起始位、数据位、奇偶校验位及停止位设置;接收、发送使能设置;发送数据字节间间隔设置;接收完成判断时间设置(停止位后超时时间内没有检测到起始位则认为接收完成);接收采样点位置;命令组个数设置(最多完成28组);命令组中命令字匹配设置(最多设置10个命令字);RTS信号触发有效状态设置,包括下降沿触发、上升沿触发、低电平有效、高电平有效。
异步串口初始化参数还包括各组命令字对应的应答延时、应答长度、应答起始地址设置;错误应答(与设置的各组命令字都不匹配)对应的应答延时、应答长度、应答起始地址设置;RTS应答对应的应答延时、应答长度、应答起始地址设置;各组应答使能设置,使能有效才进行数据应答;强制拉低设置,如果该拉低使能有效,则该异步串口输出信号持续为低电平。
仿真软件将每组要应答的数据写入对应的缓冲区,各缓冲区地址即设置的应答地址。
判断触发方式是否为RTS,如果为RTS则等待接收外部的RTS信号,判断是否进行RTS应答,如果进行RTS应答,则读取仿真软件写入的应答数据,并向外发送,进入步骤(2),如果不进行RTS应答,则直接进入步骤(2);如果触发方式不是RTS,则进入步骤(2)。
(2)接收一个字节数据。
(3)接收字节计数K加1;判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,进入步骤(4);如果没有全部匹配完成,则进入步骤(4);如果各组命均未全部匹配,则将该组接收命令错误次数加1,进入步骤(4)。
(4)判断是否在设定时间内没有新的数据写入,如果有新的数据写入,则返回步骤(2);如果没有新的数据写入,则表明接收完成,实时接收FIFO内的数据帧循环存入存储FIFO。
存储FIFO划分为四块缓存区,每次接收的数据顺序循环存储,并记录最近一次接收数据存储在第几个缓存区。
(5)判断是否需要应答,如果不需要,则返回步骤(2);如果需要则读取仿真软件写入发送存储器内的应答数据,并向外发送,返回步骤(2)。
本发明一种基于FPGA的通用异步串口,物理层协议配置包括波特率、起始位、数据位、奇偶校验位及停止位设置,如表1所示。其中数据帧格式采用8-bit数据组成,如图3所示,起始位1位,低电平有效;数据位,共8位,低位在前,高位在后;校验位,可选奇校验、偶校验或无校验位;停止位,可选1位或2位,高电平有效。波特率处理如图4所示,采用时钟计数分频的方式产生,即利用系统时钟(周期为Ts,频率为fs)和波特率控制字所配置的数值周期(周期Tb,频率fb),确定异步串口位宽(位宽=fs/fb),可依据仿真平台内部使用晶振值,确定波特率的可配范围。异步串口信号检测如图5所示,依照有限状态机(FSM)进行,匹配物理层协议波特率、奇偶校验位及停止位等信息还原异步串口数据。
表1物理层协议设置描述
寄存器名称 | 位宽 | 操作 | 地址 | 说明 |
rx_on | 1 | 读/写 | 0x04[0] | 接收使能(0:关闭,1:打开) |
tx_on | 1 | 读/写 | 0x04[8] | 发送使能(0:关闭,1:打开) |
parity | 2 | 读/写 | 0x04[17:16] | 校验位(0:无校验,2:偶校验,1:奇校验) |
stop_bit | 1 | 读/写 | 0x04[24] | 停止位宽度(0:1位,1:2位) |
baudrate | 16 | 读/写 | 0x08[15:0] | 波特率控制字 |
sample_point | 3 | 读/写 | 0x08[31:16] | 采样点设置,在1~波特率字之间; |
clk_freq | 16 | 读/写 | 0x10[15:0] | 时钟频率值,KHz |
tx_interval | 16 | 读/写 | 0x14[31:16] | 回送数据字节间间隔,us |
rx_interval | 16 | 读/写 | 0x14[15:0] | 接收完成判断时间,us |
force_tx_low | 1 | 读/写 | 0x18[0] | TX强制拉低(1:使能,0:不使能) |
本发明中命令组描述定义了命令组个数描述(最多完成28组,即单个异步串口最多完成28组命令的判读与处理)和命令组中命令字匹配描述。其中,命令字匹配描述,针对单组命令最多执行10个命令字匹配操作,如表2所示,每接收一个字节,接收字节计数加1,当接收字节计数与某一组设置的第1个匹配命令字位置一致时,判断接收字节内容是否与该组设置的第1个匹配命令字一致,如果一致,继续等待接收字节计数到第2个匹配命令字位置,并比对接收字节内容与匹配命令字,如此依次往下进行,直至设置的命令字比对完。如果全部比对成功,该组接收命令次数加1,并记录接收数据的字节数,与该组命令字存入其对应的地址区域;如果所有命令组匹配均不成功,接收错误次数加1,将数据存入错误应答组对应的地址区域。当命令中需要匹配的命令字个数小于10个,设置命令符“ff00”表示比对结束。如:只需匹配5个命令字,在“group01_cmd06”寄存器写入0xFF,“group01_cmd06_add”寄存器写入0x00即可。
表2命令匹配设置描述
寄存器名称 | 位宽 | 操作 | 地址 | 说明 |
group01_cmd01 | 8 | 读/写 | 0xE0[7:0] | 第1个匹配命令字 |
group01_cmd01_add | 8 | 读/写 | 0xE0[15:8] | 第1个匹配命令字位置 |
group01_cmd02 | 8 | 读/写 | 0xE0[7:0] | 第2个匹配命令字 |
group01_cmd02_add | 8 | 读/写 | 0xE0[15:8] | 第2个匹配命令字位置 |
group01_cmd03 | 8 | 读/写 | 0xE0[7:0] | 第3个匹配命令字 |
group01_cmd03_add | 8 | 读/写 | 0xE0[15:8] | 第3个匹配命令字位置 |
group01_cmd04 | 8 | 读/写 | 0xE0[7:0] | 第4个匹配命令字 |
group01_cmd04_add | 8 | 读/写 | 0xE0[15:8] | 第4个匹配命令字位置 |
group01_cmd05 | 8 | 读/写 | 0xE0[7:0] | 第5个匹配命令字 |
group01_cmd05_add | 8 | 读/写 | 0xE0[15:8] | 第5个匹配命令字位置 |
group01_cmd06 | 8 | 读/写 | 0xE0[7:0] | 第6个匹配命令字 |
group01_cmd06_add | 8 | 读/写 | 0xE0[15:8] | 第6个匹配命令字位置 |
group01_cmd07 | 8 | 读/写 | 0xE0[7:0] | 第7个匹配命令字 |
group01_cmd07_add | 8 | 读/写 | 0xE0[15:8] | 第7个匹配命令字位置 |
group01_cmd08 | 8 | 读/写 | 0xE0[7:0] | 第8个匹配命令字 |
group01_cmd08_add | 8 | 读/写 | 0xE0[15:8] | 第8个匹配命令字位置 |
group01_cmd09 | 8 | 读/写 | 0xE0[7:0] | 第9个匹配命令字 |
group01_cmd09_add | 8 | 读/写 | 0xE0[15:8] | 第9个匹配命令字位置 |
group01_cmd010 | 8 | 读/写 | 0xE0[7:0] | 第10个匹配命令字 |
group01_cmd010_add | 8 | 读/写 | 0xE0[15:8] | 第10个匹配命令字位置 |
本发明中定义命令应答描述包括各组数据命令、错误命令(与设置的各组命令字都不匹配)以及RTS命令对应的应答延时、应答长度、应答起始地址。如表3所示,当命令字比对完成,等待接收完成判断时间条件(停止位后超时时间内没有检测到起始位则认为接收完成)满足后,判断该命令组应答使能标志,如果有效,则将命令组对应的应答数据搬至发送FIFO中,待该命令组应答延时满足条件后发送数据,完成异步串口数据应答。
表3命令应答设置描述
寄存器名称 | 位宽 | 操作 | 地址 | 说明 |
ack_en01 | 1 | 读/写 | 0x1BC[0] | 第1组应答使能:1:开启应答,0:关闭应答。 |
…… | …… | …… | …… | …… |
ack_en27 | 1 | 读/写 | 0x1D4[8] | 第27组应答使能:1:开启应答,0:关闭应答。 |
ack_en28 | 1 | 读/写 | 0x1D4[16] | 第28组应答使能:1:开启应答,0:关闭应答。 |
ack_en29 | 1 | 读/写 | 0x1D4[24] | 应答错误数据使能:1:开启应答,0:关闭应答。 |
ack_enRTS | 1 | 读/写 | 0x1D8[0] | 应答RTS使能:1:开启应答,0:关闭应答。 |
ack_delay01 | 16 | 读/写 | 0x1DC[15:0] | 第1组应答延时,单位:us |
…… | …… | …… | …… | …… |
ack_delay27 | 16 | 读/写 | 0x210[15:0] | 第27组应答延时,单位:us |
ack_delay28 | 16 | 读/写 | 0x210[31:16] | 第28组应答延时,单位:<sub>us</sub> |
ack_delay29 | 16 | 读/写 | 0x214[15:0] | 错误数据应答延时,单位:<sub>us</sub> |
RTS_ack_delay | 16 | 读/写 | 0x214[31:16] | RTS应答延时,单位:us |
ack_addr01 | 10 | 读/写 | 0x218[9:0] | 第1组应答地址 |
…… | …… | …… | …… | …… |
ack_addr27 | 10 | 读/写 | 0x24C[9:0] | 第27组应答地址 |
ack_addr28 | 10 | 读/写 | 0x24C[25:16] | 第28组应答地址 |
ack_addr29 | 10 | 读/写 | 0x250[9:0] | 错误数据应答地址 |
RTS_ack_addr | 10 | 读/写 | 0x250[25:16] | RTS应答地址 |
ack_len01 | 9 | 读/写 | 0x254[15:0] | 第1组应答长度 |
…… | …… | …… | …… | …… |
ack_len27 | 9 | 读/写 | 0x288[8:0] | 第27组应答长度 |
ack_len28 | 9 | 读/写 | 0x288[24:16] | 第28组应答长度 |
ack_len29 | 9 | 读/写 | 0x28C[8:0] | 错误数据应答长度 |
RTS_ack_len | 9 | 读/写 | 0x28C[24:16] | RTS应答长度 |
本发明中定义了接收命令数据的存储操作,即开辟四块缓存区,用于循环存储接收命令数据,接收完成后置标志位,并记录最新一次接收数据存储在第几个缓存区,以此判断其它三个缓存区数据的接收顺序,保证数据存储的完整性,如表4所示。
表4接收命令数据存储描述
综上所述,本发明方法为了便于异步串口的继承和复用,通过配置物理层和应用层参数,可覆盖星载仿真平台中对异步串口数据的处理需求。下面结合具体实施例对本发明方法进行详细描述说明:
采用本发明方法针对1路异步串口信号进行处理,其中地面仿真系统运行周期为128ms,内部晶振为50M赫兹,计数器宽度当量为20ns,其具体描述包括:
1、表1中物理层协议设置描述
异步串口物理层设置要求:波特率115200bps,偶检验,1位停止位,字应答数据字节间间隔10us,接收完成判断时间50us。
异步串口物理层描述为:rx_on=1,tx_on=1,parity=2,stop_bit=0,baudrate=434,sample_point=217(采集点在位信号正中间),clk_freq=50,tx_interval=10,rx_interval=50,force_tx_low=0。
2、表2命令匹配设置描述
异步串口应用层命令字要求:处理两组命令,第1组命令共2个字节,包括EBH和90H,要求2字节全部匹配;第2组命令共8个字节,要求匹配第5个字节A4H、第6个字节2BH、第7个字节B1H、第8个字节F3H。
异步串口命令匹配描述为:
group01_cmd01=01H,group01_cmd01_add=EBH;
group01_cmd02=02H,group01_cmd02_add=90H;
group01_cmd03=FFH,group01_cmd03_add=00H;
group02_cmd01=05H,group01_cmd01_add=A4H;
group02_cmd02=06H,group01_cmd02_add=2BH;
group02_cmd03=07H,group01_cmd03_add=B1H;
group02_cmd04=08H,group01_cmd04_add=F3H;
group02_cmd05=FFH,group01_cmd05_add=00H;
3、表3命令应答设置描述
异步串口应用层命令应答要求:处理两组命令应答,第1组命令应答12个字节,应答延时10us;第2组命令应答20个字节,应答延时20us;如果与两组命令均不匹配时,延时30us回送两字节数据AAH和55H。
异步串口命令应答描述为:
ack_en01=1,ack_en02=1,ack_en29=1,
ack_delay01=10,ack_delay02=10,ack_delay29=30,
ack_addr01=XX1,ack_addr02=XX2,ack_addr29=XX29,
ack_len01=12,ack_len02=20,ack_len29=2。
并在地面仿真系统运行周期内定时向地址XX1、XX2、XX29区域更新指令应答数据。
4、接收命令数据存储描述
异步串口应用层接收命令数据存储要求:128ms内,目标系统最多向单路异步串口发送3组命令。
异步串口接收命令读取操作为:首先读取rx_curr寄存器获得最后一次数据存放位置,例如rx_curr=2,最后一次数据存放在第3块缓存区,缓存区数据的接收顺序为3→2→1→4(第3块缓存区为最新数据,第4块缓存区为最旧数据),按照此顺序依次读取各组命令的数据长度及对用缓冲区起始地址,进而获取指令数据开展分析处理工作。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (7)
1.一种基于FPGA的通用异步串口,其特征在于,包括寄存器模块、控制模块、接收模块、发送模块以及接收存储器和发送存储器;
寄存器模块用于存储异步串口初始化参数;
接收模块包括单个字节的接收模块、实时接收FIFO和循环存储FIFO;单个字节的接收模块接收其它异步串口发送的数据,将单个字节写入实时接收FIFO,当设定时间内没有新的数据写入,表明接收完成,实时接收FIFO给出数据帧接收结束信号并发送给控制模块,并将该数据帧存入循环存储FIFO;
发送模块将内部FIFO的数据向其它异步串口发送;
发送存储器接收仿真软件写入的应答数据;
接收存储器包括命令缓存区、多个接收命令次数存储寄存器、接收错误次数存储寄存器;
控制模块,读取寄存器模块存储的命令字信息,判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,并将该组接收命令次数存储到对应的接收命令次数存储寄存器;如果没有全部匹配完成,则等待下一字节数据;如果各组命令均未全部匹配,则将相应组接收命令错误次数加1;并存储到相应组接收错误次数存储寄存器;如果全部匹配完成,则等待实时接收FIFO给出数据帧接收结束信号,当接收到数据帧接收结束信号后读取实时接收FIFO内的数据,并存储至接收存储器的命令缓存区,完成后,读取寄存器模块内的应答使能标志,判断是否需要应答,如果需要应答则读取发送存储器内的应答数据,并送入发送模块的FIFO中,如果不需要应答,则等待下一字节数据。
2.如权利要求1所述的基于FPGA的通用异步串口,其特征在于,寄存器模块存储的异步串口初始化参数包括命令字信息、波特率、停止位、校验位、采样点位置、发送字节间隔、接收完成判断时间、RTS触发状态和命令字应答使能。
3.如权利要求2所述的基于FPGA的通用异步串口,其特征在于,寄存器模块存储的异步串口初始化参数还包括串口输出信号是否强制拉低使能,如果该拉低使能有效,则该异步串口输出信号持续为低电平。
4.一种基于FPGA的通用异步串口应答方法,其特征在于,包括如下步骤:
(1)根据通讯的协议要求配置异步串口;
(2)接收一个字节数据;
(3)接收字节计数K加1;判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,进入步骤(4);如果没有全部匹配完成,则进入步骤(4);如果各组命令均未全部匹配,则将该组接收命令错误次数加1,进入步骤(4);
(4)判断是否在设定时间内没有新的数据写入,如果有新的数据写入,则返回步骤(2);如果没有新的数据写入,则表明接收完成,实时接收FIFO内的数据帧循环存入存储FIFO;
(5)判断是否需要应答,如果不需要,则返回步骤(2);如果需要则读取仿真软件写入发送存储器内的应答数据,并向外发送,返回步骤(2)。
5.如权利要求4所述的基于FPGA的通用异步串口应答方法,其特征在于,步骤(1)还包括判断触发方式是否为RTS,如果为RTS则等待接收外部的RTS信号,判断是否进行RTS应答,如果进行RTS应答,则读取仿真软件写入发送存储器内的应答数据,并向外发送,进入步骤(2),如果不进行RTS应答,则直接进入步骤(2);如果触发方式不是RTS,则进入步骤(2)。
6.如权利要求4所述的基于FPGA的通用异步串口应答方法,其特征在于,步骤(1)中配置异步串口需要配置的参数包括,命令字信息、波特率、停止位、校验位、采样点位置、发送字节间隔、接收完成判断时间、RTS触发状态和命令字应答使能。
7.如权利要求4所述的基于FPGA的通用异步串口应答方法,其特征在于,实时接收FIFO内的数据帧循环存入存储FIFO的方式为:将存储FIFO划分为四块缓存区,每次接收的数据顺序循环存储,记录最近一次接收数据存储在第几个缓存区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711387859.2A CN108197042B (zh) | 2017-12-20 | 2017-12-20 | 一种基于fpga的通用异步串口及其应答方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711387859.2A CN108197042B (zh) | 2017-12-20 | 2017-12-20 | 一种基于fpga的通用异步串口及其应答方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108197042A CN108197042A (zh) | 2018-06-22 |
CN108197042B true CN108197042B (zh) | 2020-05-12 |
Family
ID=62577041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711387859.2A Active CN108197042B (zh) | 2017-12-20 | 2017-12-20 | 一种基于fpga的通用异步串口及其应答方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108197042B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920403B (zh) * | 2018-07-16 | 2020-12-22 | 深圳市沃特沃德股份有限公司 | 基于mcu串口通信的控制方法及装置 |
CN109274394A (zh) * | 2018-09-03 | 2019-01-25 | 广州健飞通信有限公司 | 一种基于现场可编程门阵列学习型通用异步收发传输器 |
CN109408426B (zh) * | 2018-10-23 | 2020-06-26 | 四川九洲电器集团有限责任公司 | 一种灵活通用的串行通信方法及系统 |
CN110032535B (zh) * | 2018-12-28 | 2021-06-29 | 北京润科通用技术有限公司 | 一种串口数据解析方法及装置 |
CN110555056B (zh) * | 2019-07-23 | 2021-12-07 | 北京控制工程研究所 | 一种基于双环形缓冲的时标指令序列管理方法 |
CN111124986B (zh) * | 2019-12-30 | 2023-04-18 | 贵州兔淘智能科技有限公司 | 一种与Modbus兼容且更高效的异步串口通信协议 |
CN111352888A (zh) * | 2020-02-28 | 2020-06-30 | 北京铁科英迈技术有限公司 | 异步收发器的中断信号产生方法及装置 |
CN112364397B (zh) * | 2020-11-27 | 2023-01-13 | 天津七所精密机电技术有限公司 | 一种基于fpga的异步串口安全通信系统及方法 |
CN113986794A (zh) * | 2021-11-10 | 2022-01-28 | 上海鹰觉科技有限公司 | 基于fpga异步串口交换方法及系统 |
CN115794691B (zh) * | 2023-01-06 | 2023-06-20 | 极限人工智能有限公司 | 一种串口通信方法、下位机及串口通信系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5199105A (en) * | 1988-09-14 | 1993-03-30 | National Semiconductor Corporation | Universal asynchronous receiver/transmitter |
US6012110A (en) * | 1997-12-26 | 2000-01-04 | Digi International | Apparatus and method for input data loss prevention with a buffered UART |
US6105081A (en) * | 1998-06-01 | 2000-08-15 | Advanced Micro Devices, Inc. | UART character matching used for address matching on a register-by-register basis |
CN1761235A (zh) * | 2004-10-11 | 2006-04-19 | 中兴通讯股份有限公司 | 异步串口数据的远程传输方法 |
CN102420877A (zh) * | 2011-12-01 | 2012-04-18 | 中国船舶重工集团公司第七○九研究所 | 一种多模式高速智能异步串口通信模块及实现方法 |
CN106528478A (zh) * | 2016-12-06 | 2017-03-22 | 天津北芯微科技有限公司 | 一种单总线异步串口通信系统及其通信方法 |
CN106649184A (zh) * | 2016-11-28 | 2017-05-10 | 北京遥测技术研究所 | 适用于星载电子设备的异步通信串口指令快速应答方法 |
CN107451087A (zh) * | 2017-07-31 | 2017-12-08 | 郑州云海信息技术有限公司 | 一种基于fpga的异同步可切换串口及使用方法 |
-
2017
- 2017-12-20 CN CN201711387859.2A patent/CN108197042B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5199105A (en) * | 1988-09-14 | 1993-03-30 | National Semiconductor Corporation | Universal asynchronous receiver/transmitter |
US6012110A (en) * | 1997-12-26 | 2000-01-04 | Digi International | Apparatus and method for input data loss prevention with a buffered UART |
US6105081A (en) * | 1998-06-01 | 2000-08-15 | Advanced Micro Devices, Inc. | UART character matching used for address matching on a register-by-register basis |
CN1761235A (zh) * | 2004-10-11 | 2006-04-19 | 中兴通讯股份有限公司 | 异步串口数据的远程传输方法 |
CN102420877A (zh) * | 2011-12-01 | 2012-04-18 | 中国船舶重工集团公司第七○九研究所 | 一种多模式高速智能异步串口通信模块及实现方法 |
CN106649184A (zh) * | 2016-11-28 | 2017-05-10 | 北京遥测技术研究所 | 适用于星载电子设备的异步通信串口指令快速应答方法 |
CN106528478A (zh) * | 2016-12-06 | 2017-03-22 | 天津北芯微科技有限公司 | 一种单总线异步串口通信系统及其通信方法 |
CN107451087A (zh) * | 2017-07-31 | 2017-12-08 | 郑州云海信息技术有限公司 | 一种基于fpga的异同步可切换串口及使用方法 |
Non-Patent Citations (1)
Title |
---|
基于FPGA的UART接口协议转换模块设计;杨晶;《中国优秀硕士学位论文全文数据库 信息科技辑》;20150215(第02期);第I137-55页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108197042A (zh) | 2018-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108197042B (zh) | 一种基于fpga的通用异步串口及其应答方法 | |
CN105573800B (zh) | 一种基于zynq的单板或多板系统及在线更新方法 | |
CN110134415A (zh) | 一种控制器及其软件升级方法和装置 | |
CN110213143B (zh) | 一种1553b总线ip核及监视系统 | |
CN105261329B (zh) | 多led显示模组管理方法 | |
CN103677671B (zh) | 一种电口模块的数据读写方法和系统 | |
CN109144932A (zh) | 一种基于dsp的快速动态配置fpga的装置及方法 | |
CN112286746B (zh) | 针对axi从设备接口的通用验证平台及方法 | |
CN107907814B (zh) | 一种提高芯片量产测试效率的方法 | |
CN108519889B (zh) | 一种基于jtag标准的fpga程序远程升级系统及方法 | |
RU2006100275A (ru) | Система разработки интегральной схемы | |
CN101545933A (zh) | 用于雷电探测的远程智能升级装置及其实现方法 | |
CN113835945B (zh) | 芯片的测试方法、装置、设备及系统 | |
CN102401879B (zh) | 芯片的usb功能的测试方法、测试主机和测试系统 | |
CN116203400B (zh) | 一种基于芯片初始化的测试方法及系统 | |
CN107025203A (zh) | 第一板卡、第二板卡及一种设备 | |
CN109557460A (zh) | 一种基于fpga的卷积神经网络算法的测试方法及设备 | |
CN109522194B (zh) | 针对axi协议从设备接口的自动化压力测试系统及方法 | |
CN104156335A (zh) | 一种uart多接口复用方法 | |
CN113946480A (zh) | 一种i2c总线的检测装置和方法 | |
CN103176926A (zh) | 调试屏障事务 | |
CN107908418B (zh) | 光纤通道节点卡的逻辑程序升级方法及光纤通道总线设备 | |
CN104572515B (zh) | 跟踪模块、方法、系统和片上系统芯片 | |
CN101714114A (zh) | 一种支持处理器硅后调试的装置和方法 | |
CN107870885A (zh) | 通信系统、装置及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |