xilinxFPGA 您所在的位置:网站首页 fpga实现usb转UART怎么实现 xilinxFPGA

xilinxFPGA

2024-06-02 11:59| 来源: 网络整理| 查看: 265

xilinxFPGA-串口发送和接收模块实例详解(基于verilog) 串口原理波特率计算 串口发送串口接收检测代码

串口原理

首先我们得直到串口是怎样进行通信的。 在这里插入图片描述 我们可以看到,串口通讯的数据格式是由一位起始位、七个数据位(其中最后一位数据位可以作为检验位来使用。)、一位停止位,在空闲时刻为高电平,当我们使用串口发送时,就可以按照这种时序进行发送,接收时也要按照这种时序进行接收。

波特率计算

什么是波特率?

每秒钟发送的数据个数。

概念很简单,我们需要怎样去计算呢?常见的波特率有 9600 、 19200 、 38400 、 57600 、 115200 。

波特率计算: 9600:1_000_000_000 / 9600; 19200:1_000_000_000 / 19200; 38400:1_000_000_000 / 38400; 57600:1_000_000_000 / 57600; 115200:1_000_000_000 / 115200;

这儿的 1_000_000_000 是代表 1s 因为我的开发板是以 ns 为时间单位的,所以我的波特率计算也是以 ns 为时间单位。

串口发送 发送思路原理:我们可以通过定义一个计数器,来记录每次发送所需要的的时间,然后用一个状态机来记录发送的状态。 module uart_tx_bottom( input Clk, //定义输入时钟信号。 input Reset_n, //定义复位信号。 input [7:0]Data, //定义需要发送的八位数据。 input Send_en, //定义发送使能信号,此信号为1时才可以发送数据。 output reg uart_tx, //定义发送信号,reg型是因为需要在always块中给它赋值。 output reg Tx_done //定义发送完成标志信号,以便下次发送数据。 ); parameter Band_Set = 433; //这儿是利用时钟计数发送一位的时间,1_000_000_000 / 115200 / 20 - 1。 // 其中 / 20 是因为我的开发板时钟周期为20ns, - 1 是因为计数器从0开始计数,原本算出需要计数434次,只需要加到433时就是434次了。 reg [3:0]bps_cnt; //数据发送状态,因为发送有起始位,数据位,结束位,用这个来记录数据发送到哪个位置了。 reg [17:0]div_cnt; //一位数据位发送时间计数器,记录发送数据的时间,用于更新下一段数据。 wire bps_clk; //每一位发送数据前后的标志位,具体作用后面会讲到。 always @(posedge Clk or negedge Reset_n) begin //定义一个计数器的always块。 if (!Reset_n) div_cnt


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

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