UART接口控制器

UART接口控制器主设备与从设备通过总线来进行数据通信,是一个数字系统不可或缺的一部分,本篇讲述一种常见的总线控制器UART串行数据接口,也称为串口。串口的标准一般有,RS-232、RS-422与RS-485标准,我们讲述的是RS-232接口信号。1、接口信号定义RS-232最常见的是9脚接口表1-1:RS-232接口定义在实际的应用中,我们只需要关注两个接口,数据接收(RXD)和数据发送(TXD),而…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

主设备与从设备通过总线来进行数据通信,是一个数字系统不可或缺的一部分,本篇讲述一种常见的总线控制器UART串行数据接口,也称为串口。
串口的标准一般有,RS-232、RS-422与RS-485标准,我们讲述的是RS-232接口信号。

1、接口信号定义

RS-232最常见的是9脚接口
表1-1:RS-232接口定义
在这里插入图片描述
在实际的应用中,我们只需要关注两个接口,数据接收(RXD)和数据发送(TXD),而其他的接口不需要理会。
串口的时序如图1-1所示:
在这里插入图片描述
结合时序图我们说明以下,串口收发数据的过程。在没有需要发送的数据时,接口的电平为高。在需发送的数据到达之前,先会有一个低电平的起始位。而后开始发送数据,而后会发送校验位,最后是停止位。结束后恢复高电平,等待下一个传送周期的起始位出现。
所以我们可以画出一个简单的收发结构图,如图1-2所示:
在这里插入图片描述

2、发送模块的设计

当数据准备好时,start信号为高电平,数据并行输入内部寄存器中,等时钟周期来了之后由低位到高位串行发送,代码如下:

module UART (clk,rst,start,data_in,TXD);
	parameter fst_bit=1'b0; //开始位为低电平
	parameter last_bit=1'b0; //传输结束信号
	input clk,rst;
	input start; //数据传输高电平有效
	input [7:0]data_in;
	output TXD;
	reg [9:0]shift;   //内部寄存器
	always@(posedge clk or negedge rst)
	begin
		if (!rst) shift<=10'b1111111111;
		else if (start) shift<={ 
   1'b1,data_in,1'b0};
		else shift<={ 
   1'b1,shift[9:1]};
	end
	assign TXD=shift[0];
endmodule

3、接收模块

接收模块的设计采用状态机设计,在无接收数据时,状态为初始状态init_s
开始接收时为接收状态rec_s,当状态在接收状态时内部计数器开始计数,当计数器达到8时输出数据状态复位。代码如下:

module UART_re2(clk,rst,data_out,XRD);
	parameter init_s=2'b00;//初始状态
	parameter rec_s=2'b01;//数据接收状态
	input clk,rst;
	input XRD;
	output [7:0]data_out;
	reg [7:0] data_out;
	reg [3:0] count;//数据接收计数器
	reg [7:0]data_reg;//数据寄存器
	reg [1:0] state,next_state;
	always@(posedge clk or negedge rst)
	begin
		if (!rst)
		begin
			state<=init_s;
			data_out<=8'b0;
			count <=4'b0;//初始化
		end
		else begin
			state<=next_state; //状态转换
			if (state==rec_s) begin
				data_reg<={ 
   XRD,data_reg[7:1]};//数据位移
				count<=count+1'b1; //计数器计数
			end
		end
	end
	
	always@(state or XRD or count )
	begin
		next_state<=state; //激励
		case(state)
			init_s:if (!XRD) next_state<=rec_s;
			rec_s: begin
				if (count==4'b1000) begin
					data_out<=data_reg;//数据输出
					state<=init_s;
					count<=4'b0000;
				end 
				else next_state<=state;
				end
			default:state<=init_s;
		endcase
	end	
endmodule 

仿真结果

测试代码如下:

module UART_t;
	reg clk,rst;
	reg [7:0]data_in;
	reg start;
	wire [7:0]data_out;
	wire serial;
	
	initial 
		begin
			clk=1'b0;
			rst=1'b1;
			start=1'b0;
			data_in=8'b11110000;
			#20 rst=1'b0;
			#40 rst=1'b1; start=1'b1;
			#100 start=1'b0;
		end
	always #50 clk=~clk;
	UART U1(.clk(clk),.rst(rst),.start(start),.data_in(data_in),.TXD(serial));
	UART_re2 U2(.clk(clk),.rst(rst),.data_out(data_out),.XRD(serial));
endmodule 
			

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193912.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Idea激活码最新教程2024.3.3版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2024.3.3版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2024 3 3 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2024 3 3 成功激活

    2025年5月31日
    6
  • LSTM模型详解_LSTM模型建立

    LSTM模型详解_LSTM模型建立(一)LSTM模型理解1.长短期记忆模型(long-shorttermmemory)是一种特殊的RNN模型,是为了解决RNN模型梯度弥散的问题而提出的;在传统的RNN中,训练算法使用的是BPTT,当时间比较长时,需要回传的残差会指数下降,导致网络权重更新缓慢,无法体现出RNN的长期记忆的效果,因此需要一个存储单元来存储记忆,因此LSTM模型被提出;2.下面两个图可以看出RNN与LSTM的区别:…

    2025年10月24日
    6
  • 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】

    【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】一、邮件发送  1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示。    SMTP协议使用的端口号:25    rfc821详细记载了该协议的相关信息    (1)使用telnet发送邮件(使用126邮箱服务器,现在126邮箱服务器要求使用类似于QQ的独立密码进行客户端的验证(网页登陆不需要))      第一步:连接到邮箱服务器        …

    2025年10月26日
    2
  • 网站优化工具-YUI Compressor「建议收藏」

    网站优化工具-YUI Compressor「建议收藏」一、简介YUICompressor,专用于压缩js和css文件,可以有效降低js和css文件占用的空间;如,将使用YUICompressor压缩过的js和css文件部署到网站的生产环境,有效降低浏览器下载相关资源的时延,提升用户体验。二、压缩工具YUI-Compressor英文官网:http://yui.github.io/yuicompressor/GitHub-YUI:https://github.com/yui/yuicompressor在线YUI:http://ganquan.inf

    2022年7月18日
    21
  • linux防ddos 软件下载,linux系统防ddos攻击工具

    linux防ddos 软件下载,linux系统防ddos攻击工具DDoSdeflate其实非常简单,下面是详细的安装和配置步骤:1.安装DDoSdeflatewgethttp://www.inetbase.com/scripts/ddos/install.shchmod0700install.sh./install.sh//弹出版权信息后,在SSH下键入q,即可退出版权信息。2.配置DDoSdeflate.安装成功后会提示Config…

    2022年7月14日
    14
  • 编译 java_如何编译java[通俗易懂]

    编译 java_如何编译java[通俗易懂]展开全部用命令32313133353236313431303231363533e58685e5aeb931333337613139提示符编译java程序的步骤:1.先新建文本文档,输入自己的java程序。这里我写一个简单的java程序,来做示范。importjava.util.*;publicclassHelloDate{publicstaticvoidmain(String[]ar…

    2022年6月4日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号