fpga模块(2)串口uart通信

(参考野火代码)

UART即通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)

发送过程及基础知识

1、RS232是UART的一种,没有时钟线,只有两根数据线rx和tx,均是1bit位宽。

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继续进入空闲状态,然后等待下一次的数据传输。

5、波特率:在信息传输通道中,携带数据信息的信号单元叫码元(因为串口是1bit进行传输的,所以其码元就是代表一个二进制数),每秒钟通过信号传输的码元数称为码元的传输速率,简称波特率,常用符号“Baud”表示,其单位为“波特每秒(Bps)”。串口常见的波特率有4800、9600、115200等,我们选 用9600的波特率进行串口章节的讲解。

6、比特率:每秒钟通信信道传输的信息量称为位传输速率,简称比特率,其单位为“每秒比特数(bps)”。比特率可由波特率计算得出,公式为:比特率=波特率 * 单个调制状态对应的二进制位数。如果使用的是9600的波特率,其串口的比特率为:9600Bps * 1bit= 9600bps。

uart_rx串口数据接收

`timescale 1ns / 1ps

//串口接受模块

module uart_rx
#(
    parameter UART_BPS = 'd9600,        //串口波特率------1s可以发送多少bit
    parameter CLK_FREQ = 'd50_000_000      //时钟频率
)
(
    input sys_clk ,
    input sys_rst_n,
    input wire rx,      //串口接受数据

    output reg [7:0] po_data,    //串转并后的8bit数据
    output reg po_flag        //串转并后数据的有效标志信号
);


localparam BAUD_CNT_MAX = CLK_FREQ/UART_BPS;

reg rx_reg1;
reg rx_reg2;
reg rx_reg3;
reg start_nedge;
reg work_en;
reg [12:0] baud_cnt;
reg bit_flag;
reg [3:0] bit_cnt;
reg [7:0] rx_data;
reg rx_flag;

//   单比特信号从慢速时钟域同步到快速时钟域时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值