FPGA 您所在的位置:网站首页 uart收发器modelsim仿真 FPGA

FPGA

2024-01-28 19:21| 来源: 网络整理| 查看: 265

常用的三大低速串口通信有UART,SPI,IIC。这里使用FPGA实现UART通信。UART通信只有两根线,一根是发送数据tx,一根是接受数据rx。PC和PFGA通过两个线实现数据通信。

在这里插入图片描述 完成FPGA部分的收发设计实现串口通信。

RS232 1、RS232 是 UART 的一种,没有时钟线,只有两根数据线,分别是 rx 和 tx,这两根线都是 1bit 位宽的。其中 rx 是接收数据的线,tx 是发送数据的线。 2、rx 位宽为 1bit,PC 机通过串口调试助手往 FPGA 发 8bit 数据时,FPGA 通过串口线rx 一位一位地接收,从最低位到最高位依次接收,最后在 FPGA 里面位拼接成 8 比特数据。 3、tx 位宽为 1bit,FPGA 通过串口往 PC 机发 8bit 数据时,FPGA 把 8bit 数据通过 tx线一位一位的传给 PC 机,从最低位到最高位依次发送,最后上位机通过串口助手按照RS232 协议把这一位一位的数据位拼接成 8bit 数据。 4、串口数据的发送与接收是基于帧结构的,即一帧一帧的发送与接收数据。每一帧除了中间包含 8bit 有效数据外,还在每一帧的开头都必须有一个起始位,且固定为 0;在每一帧的结束时也必须有一个停止位,且固定为 1,即最基本的帧结构(不包括校验等)有10bit。在不发送或者不接收数据的情况下,rx 和 tx 处于空闲状态,此时 rx 和 tx 线都保持高电平,如果有数据帧传输时,首先会有一个起始位,然后是 8bit 的数据位,接着有 1bit的停止位,然后 rx 和 tx 继续进入空闲状态,然后等待下一次的数据传输。如图 28-7 所示为一个最基本的 RS232 帧结构。 在这里插入图片描述 1bit表示二进制中1or0的一位。一个二进制的码元(1or0)就能携带1bit的信息(1or0)。一个八进制的码元就可以携带3bit的信息。 s232串口波特率就也是码元传输速率。9600Baud/s.表示每秒传输9600个码元。bit(bps)比特率=(Bps)波特数单个调制状态对应的二进制,上图就是9600/1。Ps:串口发送或者接受一个数据时间为波特。串口波特率为9600Bps,那么一个波特时间就为1/9600s。如果系统时钟为50Mhz,那么在9600波特下,一个波特就相当于1/9600s再除以20ns=5208个系统周期。也就是串口每传输一个bit的信息,系统时钟要保持5208个周期。 FPGA接受模块

module uart_rx #( parameter UART_BAUD = 'd9600, //波特率 parameter CLK_FRE = 'd50_000_000 //系统时钟 ) ( input wire sys_clk , input wire sys_rst_n , input wire rx ,//由助手发过来的串行数据 output reg [7:0] po_data ,//传出的并行数据 output reg po_flag //数据发送的标志信号 ); parameter BAUD_MAX = CLK_FRE/UART_BAUD;//每传输一个bit数据所需要的传输时间 reg rx_reg1;//打三拍,减少亚稳态的影响 reg rx_reg2;//由于信号达到寄存器的建立时间和保持时间不满足要求 reg rx_reg3;//所以产生了亚稳态 reg start_nedge; reg work_on; reg [12:0] baud_cnt; reg bit_flag; reg [3:0] bit_cnt; reg [7:0] rx_data; reg rx_flag; always@(posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1'b0) rx_reg1 = 4'd1 && bit_cnt


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有