【SugerTangYL】UART串口通信 Verilog

目录

前言

 一、UART相关

二、本次设计

 (一)顶层模块

(二)发送模块UART_Tx

 (三)奇校验码产生模块

 (四)接收模块UART_Rx

 (五)单周期脉冲产生模块

 (六)分频器

(七)测试平台


前言

        我好久之前就想做写通信协议接口的,之前写了RISC-V的处理器内核,想试试看SOC怎么搭,所以学习了下UART接口。


 一、UART相关

        UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。因此包含一个发送器和一个接收器。

        工作原理是将传输数据的每个字符以串行方式一位接一位的传输,通信双方需要事先约定传输速率(波特率)。其具体工作时序图如下:

二、本次设计

        本次设计思路为先分别设计收发模块,然后再在顶层组合。发送模块采取状态机写法,一帧数据包含起始位、8位数据位、奇校验位(忘了是奇校验还是偶校验)、结束位。接收模块采用16倍采样接收,从而保证采样准确性。为了能够在FPGA上测试,增加了单周期脉冲模块,用以将按键脉冲变成一个单时钟周期的脉冲信号。

 (一)顶层模块

module top(
	input  wire 		clk,
	input  wire 		key,
	input  wire 		key2,
	input  wire 	[7:0] 	data,
	output wire 		uart_txd,
	output wire	[7:0]	o_data,
	output wire		over_flag
	);

wire clk_divider1;
wire clk_divider2;
wire o_done;
wire signal_send_request;




divider #(7) divider_init1 (clk_divider2,key2,clk_divider1);
divider #(13) divider_init2 (clk,key2,clk_divider2);

UART_Tx UART_Tx_init(.data(data),.clk(clk_divider1),.signal_send_request(signal_send_request),.rst_n(key2),.uart_txd(uart_txd),.o_done(o_done));

Monopulse_clock Monopulse_clock_init(
	.clk(clk_divider1),
	.signal(key),
	.rst_n(key2),
	.o_monopulse(signal_send_request)
);


UART_Rx UART_Rx_init(
	.uart_txd(uart_txd),
	.clk(clk_divider2),
	.rst_n(key2),
	.data(o_data),
	.over_flag(over_flag)
	);
endmodule

(二)发送模块UART_Tx

module UART_Tx(
	input  wire [7:0]	data,
	input  wire			clk,
	input  wire			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值