36.UART(通用异步收发传输器)-RS232(3)

(1)串口发送模块visio视图:

(2)串口发送模块Verilog代码:

/*
常见波特率: 4800、9600、14400、115200
在系统时钟为50MHz时,对应计数为:   
(1/4800)    * 10^9 /20 -1 = 10416     
(1/9600)    * 10^9 /20 -1 = 5207
(1/14400)   * 10^9 /20 -1 = 3471
(1/115200)  * 10^9 /20 -1 = 433 
*/module rs232_tx
(input   [16:0]  baud_set        ,input           clk             ,input           reset_n         ,input   [7:0]   tx_data         ,input           tx_start        ,output   reg    tx              ,output   reg    tx_done            );reg [15:0]      BAUD_MCNT       ;reg [7:0]       r_tx_data       ;reg             en_baud_cnt     ;reg [15:0]      baud_cnt        ;reg [3:0]       bit_cnt         ;//波特最大计数设计always@(posedge clk)begincase(baud_set)17'd4800    :BAUD_MCNT <= 16'd10416;17'd9600    :BAUD_MCNT <= 16'd5207;17'd14400   :BAUD_MCNT <= 16'd3471;17'd115200  :BAUD_MCNT <= 16'd433;default     :BAUD_MCNT <= 16'd5207;      //当输入baud_set为其他值时,一律当成9600处理。endcaseend//输入信号同步化处理always@(posedge clk)if(tx_start)r_tx_data <= tx_data;elser_tx_data <= r_tx_data;//波特率计数器使能信号设计always@(posedge clk or negedge reset_n)if(!reset_n)en_baud_cnt <= 1'd0;else if(tx_start)en_baud_cnt <= 1'd1;else if((bit_cnt == 4'd9)&&(baud_cnt == BAUD_MCNT))en_baud_cnt <= 1'd0;else en_baud_cnt <= en_baud_cnt;//波特率计数器模块设计always@(posedge clk or negedge reset_n)if(!reset_n)baud_cnt <= 16'd0;else if(!en_baud_cnt)baud_cnt <= 16'd0;else if(baud_cnt == BAUD_MCNT)baud_cnt <= 16'd0;else baud_cnt <= baud_cnt + 16'd1;//位计数器模块设计always@(posedge clk or negedge reset_n)if(!reset_n)    bit_cnt <= 4'd0;else if((baud_cnt == BAUD_MCNT) && (bit_cnt == 4'd9))bit_cnt <= 4'd0;else if(baud_cnt == BAUD_MCNT)bit_cnt <= bit_cnt + 4'd1;else bit_cnt <= bit_cnt;//tx输出序列机设计always@(posedge clk or negedge reset_n)if(!reset_n)tx <= 1'd1;else if(!en_baud_cnt)tx <= 1'd1;else if(baud_cnt == 16'd1)begincase(bit_cnt)4'd0:   tx <= 1'd0;4'd1:   tx <= r_tx_data[0];4'd2:   tx <= r_tx_data[1];4'd3:   tx <= r_tx_data[2];4'd4:   tx <= r_tx_data[3];4'd5:   tx <= r_tx_data[4];4'd6:   tx <= r_tx_data[5];4'd7:   tx <= r_tx_data[6];4'd8:   tx <= r_tx_data[7];4'd9:   tx <= 1'd1;default:tx <= 1'd1;endcaseendelse tx <= tx;//tx_done信号设计always@(posedge clk or negedge reset_n)if(!reset_n)tx_done <= 1'd0;else if((baud_cnt == BAUD_MCNT) && (bit_cnt == 4'd9))tx_done <= 1'd1;else tx_done <= 1'd0;endmodule

(3)串口发送模块仿真代码:

`timescale 1ns / 1psmodule rs232_tx_tb;reg     [16:0]      baud_set    ; 
reg                 clk         ;     
reg                 reset_n     ;
reg     [7:0]       tx_data     ;  
reg                 tx_start    ;wire                tx          ;
wire                tx_done     ;initial clk = 1'd1;
always #10 clk = ~clk;initial beginbaud_set <= 17'd9600;reset_n <= 1'd0;tx_data <= 1'd0;tx_start <= 1'd0;#21;reset_n <= 1'd1;#40;@(posedge clk);//输入数据0tx_data <= 8'd0;tx_start <= 1'd1;#20;tx_start <= 1'd0;#(5208 * 20 * 10);//输入数据1tx_data <= 8'd1;tx_start <= 1'd1;#20;tx_start <= 1'd0;#(5208 * 20 * 10);//输入数据2tx_data <= 8'd2;tx_start <= 1'd1;#20;tx_start <= 1'd0;#(5208 * 20 * 10);//输入数据3tx_data <= 8'd3;tx_start <= 1'd1;#20;tx_start <= 1'd0;#(5208 * 20 * 10);//输入数据4tx_data <= 8'd4;tx_start <= 1'd1;#20;tx_start <= 1'd0;#(5208 * 20 * 10);//输入数据5tx_data <= 8'd5;tx_start <= 1'd1;#20;tx_start <= 1'd0;#(5208 * 20 * 10);//输入数据6tx_data <= 8'd6;tx_start <= 1'd1;#20;tx_start <= 1'd0;#(5208 * 20 * 10);//输入数据7tx_data <= 8'd7;tx_start <= 1'd1;#20;tx_start <= 1'd0;#(5208 * 20 * 10);$stop;
endrs232_tx rs232_tx_inst
(.baud_set       ( baud_set)        ,.clk            ( clk     )        ,.reset_n        ( reset_n )        ,.tx_data        ( tx_data )        ,.tx_start       ( tx_start)        ,.tx             ( tx      )        ,.tx_done        ( tx_done )           );endmodule

(4)仿真波形:

同时,可以看见,tx一开始被赋予了高电平,在波特计数器计数为1,起始位时被拉低。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

macOS 安装软件提示 “已损坏,无法打开。 您应该将推出磁盘映像” 或 “已损坏,无法打开。 您应该将它移到废纸篓”,解决办法

本文以 Pulsar Assistant 软件为例进行介绍&#xff0c;Redisant 系列的其他软件同理&#xff0c;只需要根据不同软件修改下面命令中的软件名即可。 在 macOS 系统上安装 下载最新的.dmg包&#xff0c;双击打开安装程序&#xff0c;将软件拖动到下方的程序目录即可。 安装时报…

AWS Aurora Postgres 的开源替代品:存储和计算分离 | 开源日报 No.278

neondatabase/neon Stars: 13.0k License: Apache-2.0 Neon 是一个无服务器的开源替代品&#xff0c;用于 AWS Aurora Postgres。它将存储和计算分离&#xff0c;通过在节点集群中重新分配数据来替换 PostgreSQL 存储层。 提供自动扩展、分支和无限存储。Neon 安装包括计算节…

C#环境与数据类型

文章目录 C#环境.NET 框架集成开发环境 创建一个C#项目数据类型值类型引用类型对象类型object动态类型dynamic字符串类型string 指针类型 类型转换隐式转换显示转换&#xff08;强制转换&#xff09;C#提供的类型转换方法Convert类Parse方法TryParse方法 C#环境 .NET 框架 C#是…

pdf文件怎么转换为jpg图片?这几种转换方法操作起来很简单!

pdf文件怎么转换为jpg图片&#xff1f;在数字化洪流席卷职场的当下&#xff0c;PDF文档虽一度稳坐信息传输与储存的宝座&#xff0c;却逐渐显露出其在效率与便捷性追求中的疲态&#xff0c;随着技术疆界的不断拓宽&#xff0c;我们愈发深刻地意识到&#xff0c;PDF那复杂的格式…

逆向案例十八——某医药平台登录

网址&#xff1a;aHR0cHM6Ly91c2VyLjkxMTYwLmNvbS9sb2dpbi5odG1s 找到登陆包&#xff0c;发现用户和密码还有token都进行了加密 跟栈分析&#xff0c;进入第三个栈&#xff0c;找到加密位置。 找到加密位置&#xff0c;仔细分析。发现token$(#token).val(),根据之前的经验&…

如何利用windows本机调用Linux服务器,以及如何调用jupyter界面远程操控

其实这篇文章没必要存在&#xff0c;教程太多了 参考博客&#xff08;1 2 3&#xff09;&#xff0c;如侵删 奈何网上的大神总是会漏掉一些凡人遇到的小问题 &#xff08;1&#xff09; 建议下载PuTTy for windows&#xff0c;从而建立与远程服务器的SSH连接 需要确认目标服…

【RAGFlow】Ubuntu系统下实现源码启动RAGFlow

一、RAGFlow 是什么&#xff1f; RAGFlow 是一款基于深度文档理解构建的开源 RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程&#xff0c;结合大语言模型&#xff08;LLM&#xff09;针对用…

平价养猫最值得入的主食冻干,希喂生骨肉冻干喂养测评

不少猫主人反映&#xff0c;自家的猫咪体型偏瘦&#xff0c;体质较弱&#xff0c;尤其是在季节变换时更易出现问题&#xff0c;如敏感、掉毛严重、食欲下降等。听说生骨肉冻干富含营养且易于吸收&#xff0c;能显著改善猫咪体质&#xff0c;便纷纷尝试。然而&#xff0c;未加甄…

如何优雅的处理字节类型数据

原文:赵侠客 前言 字节&#xff08;Byte&#xff09;是计算机信息技术用于计量存储容量的一种基本单位&#xff0c;通常简写为B,1Byte8bit,在ASCII编码中1Byte可以表示一个标准的英文字符&#xff0c;包括大写字母、小写字母、数字、标点符号和控制字符等&#xff0c;共128个不…

nginx前端部署配置

nginx前端部署配置 Nginx部署项目 1、yarn build打包Vue项目 2、打开nginx.conf文件,配置对应的信息 nginx.conf location / {root C:\Users\17542\Desktop\rrpject-v2\dist;root index.html index.htm;try_files $uri $uri/ router; //解决页面刷新404问题 } location…

艾迈斯欧司朗最新推出的DURIS® LED将引领柔性多变照明新时代

中国 上海&#xff0c;2024年7月15日——全球领先的光学解决方案供应商艾迈斯欧司朗&#xff08;瑞士证券交易所股票代码&#xff1a;AMS&#xff09;今日宣布&#xff0c;艾迈斯欧司朗最新推出的DURIS E 2835 LED&#xff0c;实现从封装工艺到出光性能的升级与创新。这款LED采…

PyQt5图形界面--基础笔记

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QToolTip, QLabel, QLineEdit from PyQt5.QtGui import QIcon, QFont, QPixmap import sys https://www.bitbug.net/ 将图片转换为ico格式, 用来更改打包的文件图标 -F 只产生exe文件, 其他临时文件不产生 -…

K8S系列-Kubernetes基本概念及Pod、Deployment、Service的使用

一、Kubernetes 的基本概念和术语 一、资源对象 ​ Kubernetes 的基本概念和术语大多是围绕资源对象 Resource Object 来说的&#xff0c;而资源对象在总体上可分为以下两类: 1、某种资源的对象 ​ 例如节点 Node) Pod 服务 (Service) 、存储卷 (Volume&#xff09;。 2、…

408数据结构-图的应用3-有向无环图、拓扑排序 自学知识点整理

前置知识&#xff1a;表达式&#xff0c;图的遍历 有向无环图描述表达式 有向无环图&#xff1a;若一个有向图中不存在环&#xff0c;则称为有向无环图&#xff0c;简称 D A G DAG DAG图 。 &#xff08;图片来自王道考研408数据结构2025&#xff09; 由王道考研-咸鱼学长的讲…

emqx(v5.0)常见问题

emqx&#xff08;v5.0&#xff09;常见问题 1 官方常见问题解答2 EMQX 启动时日志提示 “WARNING: Default (insecure) Erlang cookie is in use.” 应该怎么办&#xff1f;3 EMQX 启动时日志提示“filed to merge schema”&#xff1f; 1 官方常见问题解答 常见问题解答 2 E…

前端框架学习之 搭建vue2的环境 书写案例并分析

目录 搭建vue的环境 Hello小案例 分析案例 搭建vue的环境 官方指南假设你已经了解关于HTML CSS 和JavaScript的中级知识 如果你刚开始学习前端开发 将框架作为你的第一步可能不是最好的主意 掌握好基础知识再来吧 之前有其他框架的使用经验会有帮助 但这不是必需的 最…

JDK垃圾回收机制和垃圾回收算法

查看java相关信息 java -XX:PrintCommandLineFlags -version UseParallelGC 即 Parallel Scavenge Parallel Old,再查看详细信息 内存分配策略 1. 对象优先在 Eden 分配 大多数情况下&#xff0c;对象在新生代 Eden 区分配&#xff0c;当 Eden 区空间不够时&#xff0c;发…

PX4 UM982 配合F9P Base 进行 RTK 定位

UM982是新兴的常见双天线GPS模块&#xff0c;支持双天线定向&#xff0c;RTK功能&#xff0c;PX4也引入了对其的支持&#xff0c;需要按需额外设置 官方手册号称直接用F9P做地面站&#xff0c;搭配QGC使用就能进行RTK定位 但是经过实践&#xff0c;发现这样是进不了RTK模式的…

Docker---最详细的服务部署案例

提供python服务的docker一键部署&#xff0c;示例已配置负载均衡&#xff0c;不需要的在nginx.conf和docker-compose注释相关代码即可 文件结构 1、dockerfile # 服务的dockerfile# 服务依赖的镜像 FROM python:3.7# 设置容器内服务的工作目录 WORKDIR /app# 复制当前文件夹所…

基于Rspack实现大仓应用构建提效实践|得物技术

一、实践背景 随着项目的逐步迭代&#xff0c;代码量和依赖的逐渐增长&#xff0c;应用的构建速度逐步进入缓慢期。以目前所在团队的业务应用来看&#xff08;使用webpack构建&#xff09;&#xff0c;应用整体构建耗时已经普遍偏高&#xff0c;影响日常开发测试的使用效率&am…