基于 FPGA的多串口通信设计与实现

(整期优先)网络出版时间:2020-09-14
/ 2

基于 FPGA的多串口通信设计与实现

李潇彦

黑龙江省宥安工程管理有限公司 黑龙江省哈尔滨市 150010

摘要:由于 FPGA 属于并行逻辑电路结构,各个串口模块可同时进行数据收发而不会相互影响,利用 FPGA 支持的调用 IP核设计方式,在每个串口模块的前端,为发送和接收端分别配置一个 FIFO 模块,用于对通信数据进行缓存。通过对FIFO 的 IP 核进行简单设置,为每一个串口模块设计出 FIFO缓冲单元,提高了各路串口的传输效率,从而简单有效的完成各路串口的数据缓冲功能设计。

关键词:FPGA;串口通信;设计

串行通信因为具有传输线少、成本低、配置灵活等特点,得到了广泛应用,通用异步收发传输器,是一种比较常用的接口电路,主要用于串行数据和并行数据的转换。一般该接口由专用的UART芯片完成,例如SC16C554BIB64,该接口芯片具有4路独立的通道,同时提供多种控制功能,但在实际使用中往往只使用一种特定控制方式,这不仅造成电路复杂和浪费,而且会使PCB面积增大,布线复杂。FPGA,即现场可编程门阵列,它是作为专用集成电路领域中一种半定制电路出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

一、设计方案

完整的设计由时钟管理模块、接口模块、UART模块和中断控制器组成。下面分别对这些模块的设计给予描述。

1、时钟管理模块。设输入FPGA的时钟为50MHz,则主处理时钟设计为50MHz。UART 的接收和发送采用相同的波特率进行, 本设计中采用115200b/s进行收发,这就需要对50MHz时钟进行分频以产生所需的波特率。

2、接口模块。接口模块连接时钟管理模块、UART模块和中断处理器,并与DSP采用EMIF总线相连接。与DSP相关的信号有:wr_n、rd_n、cs_n、addrs、data_bus和dsp_int,在cs_n和wr_n有效时,DSP通过addrs选通不同的UART模块,将需要发送的并行数据发送给发送寄存器,执行发送功能。DSP响应外部中断时,在cs_n和rd_n有效时,通过addrs读取中断控制器的中断矢量和UART模块接收的数据。

3、UART模块

(1)发送模块。根据UART模块的数据格式,发送状态机,当复位信号rst_n =‘0’时,状态机初始化为空闲状态,当有需要发送的数据时,即tx_flag =‘1’时,状态机转入发送起始位状态;在发送起始位状态中,串行输出数据线被置为0,并保持一个波特率时钟周期,即在baud_rate =‘1’时,转入数据移位状态;在数据移位状态中,利用baud_rate =‘1’的驱动,将8位并行数据依次移位,转成串行数据输出,每移一位,相应的计数器加1,当cnt_bit_tx=“1000”时,转入发送停止位状态;在发送停止位状态中,串行输出数据线被置为1,并保持一个波特率时钟周期,即在baud_rate =‘1’ 时,转入发送结束状态;在发送结束状态,一个字节的发送过程完成,清除发送标志,即tx_flag =‘0’,转入空闲状态。

(2)接收模块。根据UART模块的数据格式,接收状态机,当复位信号rst_n =‘0’时,状态机初始化为空闲状态,当检测到数据线上出现由1到0的跳变沿时,即data_coming_flag =‘1’ 时,状态机转入接收起始位状态;在接收起始位状态中,在baud_rate=‘1’时,判断数据是否为0,如果是0,则转入数据移位状态,如果是1,则回到空闲状态;在数据移位状态中,利用baud_rate =‘1’的驱动,将串行数据依次移位,转成并行数据,每移一位,相应的计数器加1,当cnt_bit_rx=“1000”时,转入接收停止位状态;在接收停止位状态中,在baud_rate =‘1’时,判断数据是否为1,如果是1,则转入接收结束状态,如果是0,则回到空闲状态;在接收结束状态,产生一个中断信号。

4、中断控制器

(1)中断采样子模块。在中断采样子模块中,利用主处理时钟作触发,检测各UART模块是否有中断输入,如果中断输入端口出现由0到1的跳变沿,则置该UART模块的中断采样值为1,该值只有在复位信号rst_n =‘0’或清除信号 clr = ‘1’时,恢复为0。

(2)中断处理子模块。在该模块中,主要完成中断矢量的生成、DSP中断信号的产生和中断清除信号的生成3个功能。中断矢量由8个UART模块的中断输出信号合成,特别注意的是因为各个UART模块中断清除信号和该矢量相关,因此,当该矢量不为0时,要暂时锁定中断矢量,即在DSP响应中断之前,即使有新的中断信号产生,也不允许更新中断矢量,

5f5f10ef32a55_html_226fa35fdac6c899.png

在主时钟的触发下,当中断矢量不为0时,产生一个中断信号,且只有当DSP读取了该中断矢量时,才清除该DSP中断信号,判断逻辑当DSP中断清除信号有效时,根据中断矢量,生成中断清除矢量,用于清除各个UART模块的中断采样信号,该模块采用组合逻辑完成。FPGA 通过判断该标志信号状态,在标志位有效的情况下将并行总线上 12 bit 的模拟电压数据锁存到 FPGA 内部的触发器中,然后通过添位扩充的方式将 12 bit 的数据扩充到16 bit,转换成两个字节的数据,以便于按字节进行传输。具体采用的扩充方式为将 12 bit 数据中的高位 bit前面补充bit 的‘0’,构成“00xxxxxx”样式的一个高字节数据,再将 12 bit 数据中的低位 bit 前面补充bit 的‘1’,构成“11xxxxxx”样式的一个低字节数据。扩充好个两个字节的数据首先按顺序依次存入串口的发送 FIFO 中进行数据缓冲,待该路串口的发送端没有数据待发送时,系统从 FIFO 中读取数据到串口发送端进行数据的发送。

二、系统的设计实现

1、管理系统相关数据库设计。数据表是数据库的基础结构,将数据表以及数据表之间的关联关系在MicrosoftSQLServer通信中的数据中设计好。在设计数据库时,要针对于数据库中存在的表和表之间的数据完整性设计完整,然后对数据库的逻辑结构设计进行设计[1],即根据系统功能设计的需求及其模块的划分,设计数据信息表及其属性,下面是对表的名称和描述。开放实验室管理系统数据库结构信息表基本包含以下数据库表:用户信息表(users)、用户身份表(role)、学生信息表(student)、教师信息表(teacher)、管理人员信息表(admi)、实验室仪器设备信息表(instrument)、实验室信息表(lab)、实验报告信息表(report)、实验室预约信息表(appoint)和班级信息表(class)等。为了实现数据的最小冗余度,通过相关的外键保持相应的关联关系。

2、系统界面设计。开放式实验室管理系统有其自身的优点,比如用户界面友好,人性化的功能按钮,网络访问功能便捷等,保障了通信中的数据的管理。主要采用p+CSS技术和功能强大的DreamweaverCS网站设计工具来实现系统界面的设计。

在本设计中,基于FPGA平台实现了通用UART芯片的核心功能和中断控制器逻辑,能够满足多串口通信的需要。该电路已运用于实际工程中,实践证明该电路结构简单、工作稳定,可运用于低速率的异步通信。

参考文献:

[1] 侯伯亨,刘凯,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安电子科技大学出版社,2019.

[2] 张渭军,纪祥春.TMS320C6000 系列 DSP 的 CPU 与外设[M].清华大学出版社,2017.