Vivado 摸鱼记录 Day_8 (*'▽'*)♪
review
day_7 阻塞赋值与非阻塞赋值 Vivado Verilog 阻塞赋值与非阻塞赋值-CSDN博客
day_6 day_5的补充 Vivado 从计数器到可控线性序列机 B-CSDN博客
day_5 从计数器到可控线性序列机 A Vivado 从计数器到可控线性序列机 A-CSDN博客
day_4 参数化设计 Vivado 时序逻辑 点灯带师 流水灯 参数化-CSDN博客
day_3 实现单个led Vivado 时序逻辑 计数器-CSDN博客
day_2 译码器 Vivado 3-8译码器 4-16译码器-CSDN博客
day_1 Vivado使用流程 Vivado 使用流程 二选一数据选择器-CSDN博客
1.串口通信(UART)原理
小梅哥视频链接12A_什么是UART串口_哔哩哔哩_bilibili
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)是一种异步收发传输器,其在数据发送时将并行数据转换成串行数据来传输,在数据接收时将接收到的串行数据转换成并行数据,可以实现全双工传输和接收。它包括了 RS232、RS449、RS423、RS422和RS485等接口标准规范和总线标准规范。
1.1 串口发送模块
串口发送模块接口列表:
1.2 串口发送小结
由此可以得知,编写串口通信时:
输入信号包括:
1. 时钟clk 复位reset_n
2.波特率baud_set
3.数据 data
输出信号包括:
1. uart_tx
2. 今日摸鱼任务
分析:输入 :bps = 9600 ; 1000,000,000 /9600 /20 = 5208
分析串口数据可以看:一文读懂串口(波形分析、起始位、数据位、停止位、空闲位)_串口数据位-CSDN博客
对于本实验实现串口通信,需要uart_tx满足:
起始位(1'b0) + 数据位(8bit) + 校验位(无) + 停止位(1'b1)
这样看来,就与day_6 T6比较接近啦(*'▽'*)♪Vivado 从计数器到可控线性序列机 B-CSDN博客
3. design sources
module UART_tx(input clk , input reset_n , input [7:0]data ,
|
输入信号 input clk , input reset_n , input [7:0]data 输出信号 output reg uart_tx , output reg LED |
标志位 start_bit = 0 ; stop_bit = 1 |
波特率 parameter bps = 9600 ; parameter [12:0]bps_c = 5208; |
1s send_en bps 9600 104.166 us 同day_6 T6 Vivado 从计数器到可控线性序列机 B-CSDN博客 send_en 中 else if (counter_second == time_every-1 || counter_second < bps_c * 10 ) 10代表着 : 起始位(1'b0) + 数据位(8bit) + 校验位(无) + 停止位(1'b1) 每个周期内共10bit |
发送状态 reg [3:0] tx_flag; 0~9需要四位表示 case(tx_flag) 要考虑10~15不包含所以 default : uart_tx <= uart_tx; |
空闲状态 if(!send_en) uart_tx <= 1'b1; 置1 |
4. UART_tx_tb
`timescale 1ns / 1ns module UART_tx_tb(); reg clk ,reset_n ; reg [7:0]data; wire uart_tx , LED; UART_tx#(.time_every(100000)) uart_tx_1(.clk(clk) , .reset_n(reset_n) , .data(data) , .uart_tx(uart_tx) , .LED(LED) ); initial clk = 1 ; always #10 clk = ~clk ; initial begin data = 8'b0110_1001; reset_n = 0 ; #201; reset_n = 1 ; # 10000000; data = 8'b0101_0101; # 10000000; $stop; end endmodule |
UART_tx#(.time_every(100000)) 时间间隔 2ms |
data = 8'b0110_1001;
data = 8'b0101_0101;
5. 串口调试结果
6. 小结
哒哒哒~ 串口这里要学会起始位(1'b0) + 数据位(8bit) + 校验位(无) + 停止位(1'b1)
(真正的勇士敢于边调试边找问题T^T)
//好啦,摸鱼结束啦(*'▽'*)♪