[发明专利]基于FPGA的异步串行数据交换系统及方法有效
| 申请号: | 201910581916.3 | 申请日: | 2019-06-30 |
| 公开(公告)号: | CN110377549B | 公开(公告)日: | 2023-04-07 |
| 发明(设计)人: | 刘超 | 申请(专利权)人: | 中国船舶集团有限公司第七一六研究所;江苏杰瑞科技集团有限责任公司 |
| 主分类号: | G06F13/40 | 分类号: | G06F13/40;G06F13/42 |
| 代理公司: | 南京理工大学专利中心 32203 | 代理人: | 朱宝庆 |
| 地址: | 222061 *** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 fpga 异步 串行 数据 交换 系统 方法 | ||
1.一种基于FPGA的异步串行数据交换系统,其特征在于,包括FPGA、施密特反相器、差分总线收发器和串行外设接口;其中
施密特反相器的输出端Y1接FPGA的输入端Sin,
施密特反相器的输出端Y0和输入端A1连接,
FPGA的输出端En通过第一电阻(R1)接地且还分别接差分总线收发器的输入端DE和输入端DE_N,
FPGA的输出端Sout接差分总线收发器输入端D,
差分总线收发器输出端G通过第二电阻(R2)接工作电压5V且还接施密特反相器输入端A0,
差分总线收发器的VCC端通过第一保险丝接串行外设接口第一输入引脚,
差分总线收发器的输出端A接串行外设接口的第二输入引脚,
差分总线收起器的输入端B接串行外设接口的第三输出引脚,
差分总线收发器的GND端接串行外设接口的第四引脚,
差分总线收发器的VCC端和输出端A之间串联第三电阻(R3),
差分总线收发器的输出端A和输出端B之间串联第五电阻(R5),
差分总线收发器的输出端B和GND段串联第四电阻(R4);
定义信号Bus_Direction指示串行总线的方向,将信号Bus_Direction置1时,表示串行总线的方向为FPGA发送;反之,将信号Bus_Direction置0时,表示串行总线的方向为FPGA接收,信号Bus_Direction映射到FPGA的En端口;
通过两个有限状态机FSM的方式实现数据帧的发送和接收;其中
(1)数据发送过程包括:
FPGA将指令数据写入Buffer1,启动有限状态机FSM,同时调整半双工总线的方向为FPGA发送,有限状态机FSM由Idle1状态切换到Start1状态,通过端口Sout在串行总线上发送数据帧开始信号Start;
然后再切换到Shift1状态,通过端口Sout将Buffer1中的数据发送到串行总线;
数据发送结束后,切换到Stop1状态,通过端口Sout在串行总线上发送数据帧结束信号Stop;
切换到Idle1状态,同时调整半双工总线的方向为FPGA接收,即Bus_Direction = 0;
(2)数据接收过程包括:
在半双工总线的方向为FPGA接收状态下,当检测到有效的数据帧接收开始信号Start后,启动有限状态机FSM并切换到Start2状态;
数据帧开始信号Start结束后,切换到Shift2状态,通过端口Sin接收串行总线上的数据并写入Buffer2;
数据接收结束后,切换到Stop2状态,接收并校验串行总线上是否为数据帧结束信号Stop;
切换到Idle2状态,同时调整半双工总线的方向为FPGA发送,即Bus_Direction = 1;
在数据帧检验正确且结束信号Stop正确的情况下,将Buffer2数据赋予Data;
采用bit数据多次采样方法,在一个bit位保持期间,7次采样数据总线上bit值并分别计数,在一个bit结束时刻,取采样值个数较多者作为该bit的真实值。
2.根据权利要求1所述的基于FPGA的异步串行数据交换系统,其特征在于,所述,7次采样数据总线上bit值并分别计数,具体为:
即在bit接收期间,依次采样第1个Clk_Fpga时刻、第3个Clk_Fpga时刻、第5个Clk_Fpga时刻、第7个Clk_Fpga时刻、第9个Clk_Fpga时刻、第11个Clk_Fpga时刻及第13个Clk_Fpga时刻等7个时刻的bit值,并取其中个数较多者作为该bit位的真实值。
3. 根据权利要求1所述的基于FPGA的异步串行数据交换系统,其特征在于:定义变量count_clk用于计数Clk_Fpga时钟个数,在Buffer1_Empty上升沿到来时同步开始加1计数,即count_clk := count_clk + 1;
在Buffer1_Empty上升沿到来时,即rising_edge,表示数据帧的发送流程结束,此时将信号Bus_Direction置0,即Bus_Direction= ‘0’,串行总线的方向调整为FPGA接收;
如果检测到Rx_finish = 1,即正常完成了全部数据帧的接收且校验正确,则将信号Bus_Direction置1,即Bus_Direction= ‘1’,串行总线的方向调整为FPGA发送;
定义常量类型变量const_clk,设定其值m大于发生Buffer1_Empty下降沿事件到发生Rx_finish = 1事件之间的Clk_Fpga时钟个数,同时m值小于一个完整的数据帧发送与接收周期,即小于相邻两次Buffer1_Empty下降沿事件之间的Clk_Fpga时钟个数;
定义信号rx_timeout,用于指示接收数据帧超时;
变量count_clk计数达到const_clk时,即m值,如果检测到状态标志Rx_finish等于0,即Rx_finish = 0,表示此刻仍未能完成接收全部数据帧或校验错误,则将信号rx_timeout置1,即rx_timeout= ‘1’,表示接收数据帧超时;反之,如果检测到状态标志Rx_finish等于1,表示此前已正常完成了全部数据帧的接收且校验正确,则将变量Rx_finish置0,即Rx_finish := 0;
在rx_timeout上升沿到来时,即rising_edge(rx_timeout),将信号Bus_Direction置1,即Bus_Direction= ‘1’,串行总线的方向调整为FPGA发送;
在下一个Clk_Fpga上升沿到来时,如果检测到rx_timeout等于1,则将rx_timeout置0,即rx_timeout= ‘0’;
当检测到rx_timeout发生跳变时,表示未能完成接收全部数据帧或校验错误,认定发生数据帧接收超时事件,强制调整串行总线的方向为FPGA发送,并触发数据帧接收超时处理机制。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国船舶集团有限公司第七一六研究所;江苏杰瑞科技集团有限责任公司,未经中国船舶集团有限公司第七一六研究所;江苏杰瑞科技集团有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910581916.3/1.html,转载请声明来源钻瓜专利网。





