微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 一种高可靠性的计算机与FPGA串行通信的实现

一种高可靠性的计算机与FPGA串行通信的实现

时间:12-21 来源:互联网 点击:

便按照约定的波特率开始接收数据,如图5所示。与此同时建立相应的接收位计数器,当计数满11后(1位起始位、8位数据位、1位校验位和1位停止位),状态又反跳到空闲状态,如此循环下去,不断接收来自上位机发送的数据。同时为使得接收的数据更加稳定,设计时在接收模块接收时采用中间采样的方法,如选择9 600 b/s的数据传输率,则在半分频系数即7 812时采样数据。

2.2 存储器
接收区接收一帧数据后将数据位存入临时寄存器中,为防止新数据对其覆盖,故在此添加一个存储器,每接收1 B数据后将临时寄存器中的数据写入FIFO中。这里采用了异步的先进先出存储器,实现简单,直接调用相应的IP核。模块中选择8位数据位,存储深度可根据器件特性灵活选择,这里选则4个字的存储深度。本文只是为了测试通信的正确性,且收、发速率相同,所以4个字的存储深度能够满足要求。FIFO外部管脚主要包括读/写时钟,数据输入/输出以及读空信号,实验中读空信号rdempty送到发送检测器输入端用来控制FIFO对外的数据输出。如图6所示为其在QuartusⅡ下的功能仿真图。wrclk和rdclk分别为写时钟和读时钟,当写信号wrreq有效时将外部数据data写入FIFO,本设计中读信号rdreq由读空信号rdempty控制,当读空信号rdempty为低电平(FIFO非空)时读信号rdreq有效,此时将FIFO中的数据读出并通过q端输出,读空FIFO后读空信号rdreq跳到高电平。

3 基于VB的上位机程序设计
为了验证PC机与FPGA硬件的通信,上位机采用Visual Basic开发Windows下的测控软件。就串口而言,利用VB开发了串口通信程序有两种方法:一是使用MSComm串口控件;二是调用Windows API函数。本文采用了前者,与调用API函数相比,MSComm控件实现更加方便、快捷。
MSComm是VB对使用串口通信的用户定制的控件,它提供了一系列标准通信属性和方法,简单编写相关程序便可实现串行端口的连接。主要用到的属性如表2所示。

为验证FPGA与PC的通信,需要编写发送和接收程序,为简化程序,部分属性直接在注册表中设定。如InPutMode设定为1即二进制方式读取数据;由于程序接收部分使用OnComm事件,所以这里把SThreshold属性设定为1,而RThreshold属性设定为发送数据的字节数,即接收缓冲区接收到全部字节数后MSComm控件触发OnComm事件,执行相应的接收程序。InBufferSize和OutBufferSize均设置为1 024即1 KB缓冲空间。
如下是发送和接收子程序:


4 实验验证
实验过程中串行数据的收、发等功能在Altera公司的CycloneⅡ系列EP2C5芯片下实现,在VB 6.0中编写相应的FPGA与PC通信的调试窗口,如图7所示为数据传输率9 600 b/s的实验结果。

打开应用程序,设置好通信端口、约定的通信速率、数据位等,在相应的输入框输入“FPGA与PC通信成功!”字符,点击5次发送,从显示区可以看到理想的结果,实验结果表明FPGA与PC通信可靠。

5 结语
本文实现了计算机与FPGA的串口通信,结合上位机的VB程序验证了通信的正确性。设计过程中FIFO部分运用了IP核使得程序更加简洁,且外加了一位拨码开关,实现了运行过程中两种波特率的灵活选择。实际运用中可以再相应地增加拨码开关实现多波特率多数据位等的互调,不必为了适应不同的通信标准而重新编写代码、重新配置。FPGA部分的程序在QuartusⅡ9.1环境下编辑、调试,综合结果显示共占用
FPGA的144个逻辑单元、81个专用逻辑寄存器、32位存储器和1个锁相环,相比百万门大规模FPGA占用资源很少,可以作为IP核灵活移植到其他工程中实现与PC的串行通信,为今后的设计开发提供参考。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top