SDRAM小项目——uart发送模块

数据的输入:

        数据的输入是uart接收模块的输出:串—并—串(接收到的外部的串行数据进入内部寄存器转化为并行数据,再由内部寄存器读出,输出表现为串行数据),接收到的输入信号为tx_flag(po_trig)和tx_data[7:0]。

内部的中间变量:

        tx_data_reg:为寄存器存储输入并行数据

        tx_flag:当开始发送数据的时候为高,停止发送数据时候为低

        baud_cnt:波特计数器,发送一个波特所需要的时钟周期,当计数器记满之后采样,拉高bit_flag电平,输出一个数据

        bit_flag:波特计数器记满之后拉高一个时钟周期,比特计数器加1

        bit_cnt:记满8比特后拉低tx_flag;此时不再发送数据(当第一个bit_flag来的时候发送起始位)计数0-8

数据的输出:

        rs_tx:当bit_flag拉高的时候发送一个数据

时序图:

代码:

`define sim
module uart_tx(	input 			sclk,input			srst,output reg		rs232_tx,input			tx_trig,input [7:0]		tx_data
);//******************************************************
//		degine parameter and internal signal
//******************************************************
`ifndef sim
localparam		baud_end		=		5207;
`else
localparam		baud_end		=		56;
`endiflocalparam		bit_end			=		8;reg 		[7:0]		tx_data_reg;
reg						tx_flag;
reg			[12:0]		baud_cnt;
reg						bit_flag;
reg			[3:0]		bit_cnt;//========================================================
//				main code
//========================================================always@(posedge sclk or negedge srst) beginif(srst == 1'b0)tx_data_reg		<=		'd0;else if(tx_trig == 1'b1 && tx_flag == 1'b0)tx_data_reg		<=		tx_data;
endalways@(posedge sclk or negedge srst)beginif(srst == 1'b0)tx_flag		<=		1'b0;else if(tx_trig == 1'b1)tx_flag		<=		1'b1;else if(bit_cnt == bit_end && bit_flag == 1'b1)tx_flag		<=		1'b0;
endalways@(posedge sclk or negedge srst)beginif(srst == 1'b0)baud_cnt	<=	'd0;else if(baud_cnt == baud_end)baud_cnt	<= 	'd0;else if(tx_flag == 1'b1)baud_cnt	<=	baud_cnt + 1'b1;else baud_cnt	<= 	'd0;
endalways@(posedge sclk or negedge srst)beginif(srst == 1'b0)bit_flag	<=	'b0;else if(baud_cnt == baud_end)bit_flag	<=	1'b1;else bit_flag	<=	1'b0;
endalways@(posedge sclk or negedge srst)beginif(srst == 1'b0)bit_cnt <= 'd0;else if(bit_cnt == bit_end && bit_flag == 1'b1)bit_cnt	<=	'd0;else if(bit_flag == 1'b1)bit_cnt	<=	bit_cnt + 1'b1;//else //	bit_cnt <= 	'd0;
endalways@(posedge sclk or negedge srst) beginif(srst == 1'b0)rs232_tx	<= 1'b1;else if(tx_flag == 1'b1)case(bit_cnt)0:	rs232_tx	<= 1'b0;1:	rs232_tx	<= tx_data_reg[0];2:	rs232_tx	<= tx_data_reg[1];3:	rs232_tx	<= tx_data_reg[2];4:	rs232_tx	<= tx_data_reg[3];5:	rs232_tx	<= tx_data_reg[4];6:	rs232_tx	<= tx_data_reg[5];7:	rs232_tx	<= tx_data_reg[6];8:	rs232_tx	<= tx_data_reg[7];default:rs232_tx	<=	1'b1;endcaseelse rs232_tx	<=	1'b1;
endendmodule

错误1:`define `ifndef写成`ifdef  导致仿真的时候baud_cnt计数太大

错误2:srst写成1有效

测试代码:

`timescale 1ns/1nsmodule tb_uart_tx;reg				sclk;reg 			srst;reg 			tx_trig;reg 	[7:0]	tx_data;wire 			rs232_tx;initial	beginsclk	=	1'b1;srst	= 	1'b0;#100srst	=	1'b1;endalways#5	sclk	=	~sclk;initial begintx_data	<=	8'b0;tx_trig	<=	'b0;#200tx_trig	<=	'b1;tx_data	<=	8'h55;#10						//1 clktx_trig	<=	'b0;enduart_tx		uart_tx_inst(	.sclk	(sclk)			, .srst	(srst)			,.rs232_tx	(rs232_tx)	,.tx_trig		(tx_trig)	,.tx_data		(tx_data)	
);endmodule

注意1:if  else语句 else if的适用范围

注意2:当仿真验证通过但是加载到开发板出错以后  考虑逻辑问题,考虑连线出错没有。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2660573.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2702 高级打字机

因为Undo操作只能撤销Type操作&#xff0c;所以Undo x 实际上就是删除文章末尾x个字母。用一个栈即可解决&#xff08;每个字母最多进出一次&#xff09;。 这种情况下只需要设计一个合理的数据结构依次执行操作即可。 版本树&#xff1a;Undo x撤销最近的x次修改操作&#xf…

2022–2023学年2021级计算机科学与技术专业数据库原理 (A)卷

一、单项选择题&#xff08;每小题1.5分&#xff0c;共30分&#xff09; 1、构成E—R模型的三个基本要素是&#xff08; B &#xff09;。 A&#xff0e;实体、属性值、关系 B&#xff0e;实体、属性、联系 C&#xff0e;实体、实体集、联系 D&#xff0e;实体、实体…

基于Wenet长音频分割降噪识别

Wenet是一个流行的语音处理工具&#xff0c;它专注于长音频的处理&#xff0c;具备分割、降噪和识别功能。它的长音频分割降噪识别功能允许对长时间录制的音频进行分段处理&#xff0c;首先对音频进行分割&#xff0c;将其分解成更小的段落或语音片段。接着进行降噪处理&#x…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现Raw格式的图像保存(C++)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现Raw格式的图像保存&#xff08;C&#xff09; Baumer工业相机Baumer工业相机通过SDK实现Raw格式的图像保存的技术背景通过SDK获取相机信息的代码分析Baumer工业相机回调函数里保存原始图像数据Baumer保存Raw图像格式重要核心代…

一款降压型开关模式转换器解决方案

一、基本概述 TX4145 是一款降压型开关模式转换器。TX4145 在 6-60V 宽输入电源范围内实现不同峰值输出电流&#xff0c;并且具有出色的线电压和负载调整率。 TX4145 采用 PWM 电流模工作模式&#xff0c;环路易于稳定并提供快速的瞬态响应。 TX4145 外部提供 FS 脚&#xf…

Android 13 - Media框架(28)- MediaCodec(三)

上一节我们了解到 ACodec 执行完 start 流程后&#xff0c;会把所有的 input buffer 都提交给 MediaCodec 层&#xff0c;MediaCodec 是如何处理传上来的 buffer 呢&#xff1f;这一节我们就来了解一下这部分内容。 1、ACodecBufferChannel::fillThisBuffer ACodec 通过调用 A…

语言模型:从n-gram到神经网络的演进

目录 1 前言2 语言模型的两个任务2.1 自然语言理解2.2 自然语言生成 3 n-gram模型4 神经网络语言模型5 结语 1 前言 语言模型是自然语言处理领域中的关键技术之一&#xff0c;它致力于理解和生成人类语言。从最初的n-gram模型到如今基于神经网络的深度学习模型&#xff0c;语言…

普中STM32-PZ6806L开发板(HAL库函数实现-7段共阳数码管数字显示)

简介 通过操作GPIO输出电平实现驱动单个共阳数码管 0 ~ F的显示。电路原理图 数码管电路原理图 数码管与主芯片电路原理图 其他知识 1. 由原理图可知, 共阳极已接VCC, 所以只需要控制GPIO输出低电平就可以点亮7 . 的数码管了. 2. 驱动管与主芯片引脚对应关系A -> PC0…

408数据结构常考算法基础训练

408相关&#xff1a; 408数据结构错题知识点拾遗 408数据结构常考算法基础训练 408计算机组成原理错题知识点拾遗408操作系统错题知识点拾遗等待完善408计算机网络错题知识点拾遗 408计算机网络各层协议简记等待完善 该训练营为蓝蓝考研&#xff08;蓝颜知己&#xff09;的算…

听GPT 讲Rust源代码--src/tools(29)

File: rust/src/tools/clippy/clippy_lints/src/unused_peekable.rs 在Rust源代码中&#xff0c;rust/src/tools/clippy/clippy_lints/src/unused_peekable.rs这个文件是Clippy工具中一个特定的Lint规则的实现文件&#xff0c;用于检测未使用的Peekable迭代器。 Peekable迭代器…

kubeadm开快速的搭建一个k8s集群

kubeadm开快速的搭建一个k8s集群 二进制适合大集群&#xff0c;50台以上主机 kubeadm更适合中小企业的业务集群。 master节点 20.0.0.92 docker kubelet kubeadm kubectl flannel node1 20.0.0. 94 docker kubelet kubeadm kubectl flanne node2 20.0.0.03 docker kubelet…

基于YOLOv8深度学习的45种交通标志智能检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~

2023-12-18 官方发布了PuTTY 0.80本次发布主要是针对Terrapin攻击(CVE-2023-48795)的修改发布。 更多详细的内容请查看PuTTY Change Log。 有关Terrapin攻击可用简单参考&#xff1a;警告&#xff01;&#xff01;&#xff01;Terrapin攻击(CVE-2023-48795)~~~ 为了缓解此漏洞…

mysql 与 支持语言的连接驱动 jdbc connector JAR 包

有位网友问我有没有 mysql jdbc驱动 &#xff0c;我刚开始一脸懵逼&#xff0c;后来明白过来&#xff0c;在网上找了几篇文章看看了解了解&#xff0c;得出如下解决办法&#xff1a; Mysql jdbc 下载&#xff1a; 网址&#xff1a; MySQL :: Download Connector/J 步骤1 &a…

AWS SSM中切换AWS不同的profile

问题 在自己的开发笔记本上面&#xff0c;通过AWS SSM方式访问EC2服务&#xff0c;只需要通过简单的命令就可以访问EC2了&#xff0c;如下&#xff1a; aws ssm start-session --target i-xxxx12350这个命令就是利用aws命令行工具中ssm提供的会话管理能力访问ec2服务&#xf…

Kafka学习笔记1(千峰教育)

Kafka学习笔记1&#xff08;千峰教育&#xff09; 一、为什么使用消息队列1.使用同步的通信方式来解决多个服务之间的通信2.使用异步的通信方式 二、消息队列的流派1.有broker2.无broker 三、Kafka的基本知识1.Kafk2a的安装2.Kafka中的一些基本概念3.创建topic4.发送消息5.消费…

【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现

【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现 1 题目 赛题 B DNA 存储中的序列聚类与比对 近年来&#xff0c;随着新互联网设备的大量涌入和对其服务需求的指数级增长&#xff0c;越来越多的数据信息被产生与收集。预计到 2021 年&#xf…

网络攻防中应该掌握的进阶工具udp2raw,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS

网络攻防中应该掌握的进阶工具udp2raw,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS。 udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的…

Unreal Engine游戏引擎的优势

在现在这个繁荣的游戏开发行业中&#xff0c;选择合适的游戏引擎是非常重要的。其中&#xff0c;Unreal Engine作为一款功能强大的游戏引擎&#xff0c;在业界广受赞誉。那Unreal Engine游戏引擎究竟有哪些优势&#xff0c;带大家简单的了解一下。 图形渲染技术 Unreal Engin…

gnu工程的编译 - 以libiconv为例

文章目录 gnu工程的编译 - 以libiconv为例概述gnu官方源码包的发布版从官方的代码库直接迁出的git版源码如果安装了360, 需要添加开发相关的目录到信任区生成 configrue 的方法备注END gnu工程的编译 - 以libiconv为例 概述 gnu工程的下载分2种: gnu官方源码包的发布版 这种…