35.UART(通用异步收发传输器)-RS232(2)

(1)RS232接收模块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_rx
(input [16:0]    baud_set    ,input           clk         ,input           reset_n     ,input           rx          ,input           rx_start    ,output reg[7:0] rx_data     ,output reg      rx_done     );reg [15:0]      BAUD_MCNT   ;reg             rx_reg0     ;reg             rx_reg1     ;reg             rx_reg2     ;reg             en_baud_cnt ;reg [15:0]      baud_cnt    ;reg [3:0]       bit_cnt     ;reg [7:0]       r_rx_data   ;wire            nedge       ;wire            w_rx_done   ;//波特最大计数设计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)beginrx_reg0 <= rx;rx_reg1 <= rx_reg0;end//下降沿设计always@(posedge clk)rx_reg2 <= rx_reg1;assign nedge = (rx_reg2) && (!rx_reg1);//波特率计数使能信号设计 always@(posedge clk or negedge reset_n)if(!reset_n)en_baud_cnt <= 1'd0;else if(!rx_start)en_baud_cnt <= 1'd0;else if(nedge)en_baud_cnt <= 1'd1;else if((bit_cnt == 4'd0) && (baud_cnt == BAUD_MCNT/2)&&(rx_reg2))      //防止起始位只是一个抖动en_baud_cnt <= 1'd0;else if((bit_cnt == 4'd9) && (baud_cnt == BAUD_MCNT/2))en_baud_cnt <= 1'd1;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;//rx_data设计always@(posedge clk or negedge reset_n)if(!reset_n)r_rx_data <= 8'd0;else if(baud_cnt == BAUD_MCNT/2)begincase(bit_cnt)4'd1: r_rx_data[0] <= rx_reg2;4'd2: r_rx_data[1] <= rx_reg2;4'd3: r_rx_data[2] <= rx_reg2;4'd4: r_rx_data[3] <= rx_reg2;4'd5: r_rx_data[4] <= rx_reg2;4'd6: r_rx_data[5] <= rx_reg2;4'd7: r_rx_data[6] <= rx_reg2;4'd8: r_rx_data[7] <= rx_reg2;default:r_rx_data <= r_rx_data;endcaseendelse r_rx_data <= r_rx_data;always@(posedge clk or negedge reset_n)if(!reset_n)rx_data <= 8'd0;else if(w_rx_done)rx_data <= r_rx_data;else    rx_data <= rx_data;//w_rx_done和rx_done信号设计assign w_rx_done = (bit_cnt == 4'd9) && (baud_cnt == BAUD_MCNT/2) ;always@(posedge clk or negedge reset_n)if(!reset_n)rx_done <= 1'd0;else rx_done <= w_rx_done;endmodule

(3)仿真文件代码:

`timescale 1ns / 1psmodule rs232_tx_tb;reg   [16:0]        baud_set    ;
reg                 clk         ;
reg                 reset_n     ;
reg                 rx          ;
reg                 rx_start    ;wire [7:0]          rx_data     ;
wire                rx_done     ;initial clk = 1'd1;always #10 clk = ~clk;initial begin baud_set <= 17'd9600;rx_start <= 1'd0;#200;rx_start <= 1'd1;reset_n <= 1'd0;rx      <= 1'd1;#15;reset_n <= 1'd1;@(posedge clk)set_bit(8'd1 );set_bit(8'd3 );set_bit(8'd7 );set_bit(8'd15);$stop;endrs232_rx    rs232_rx_inst
(.baud_set    ( baud_set )     ,.clk         ( clk      )     ,.reset_n     ( reset_n  )     ,.rx          ( rx       )     ,.rx_start    ( rx_start )     ,.rx_data     ( rx_data  )     ,.rx_done     ( rx_done  )     );task   set_bit(input [7:0]data
);integer i;for(i=0;i<10;i=i+1)begincase(i)0: rx <= 1'd0;1: rx <= data[0];2: rx <= data[1];3: rx <= data[2];4: rx <= data[3];5: rx <= data[4];6: rx <= data[5];7: rx <= data[6];8: rx <= data[7];9: rx <= 1'd1;endcase#(5208 * 20);        end
endtaskendmodule

(4)仿真波形:

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

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

相关文章

【作业】 贪心算法1

Tips:三题尚未完成。 #include <iostream> #include <algorithm> using namespace std; int a[110]; int main(){int n,r,sum0;cin>>n>>r;for(int i0;i<n;i){cin>>a[i];}sort(a0,an);for(int i0;i<n;i){if(i>r){a[i]a[i-r]a[i];}suma[…

大气热力学(8)——热力学图的应用之一(气象要素求解)

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记&#xff0c;现转化为电子版本以作存档。相较于手写笔记&#xff0c;电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 文章目录 8.1 复习斜 T-lnP 图上的几种线8.1.1 等温线和等压线8.1.2 干绝热…

连锁零售门店分析思路-人货场 数据分析

连锁零售门店分析思路 以下是一个连锁零售门店的分析思路&#xff1a; 一、市场与竞争分析 二、门店运营分析&#xff08;销售分析&#xff09; 三、销售与财务分析 四、客户分析 五、数字化与营销分析 最近帮一个大学生培训&#xff0c;就门店销售分析 &#xff0c;说到门店…

使用windows批量解压和布局ImageNet ISLVRC2012数据集

使用的系统是windows&#xff0c;找到的解压命令很多都linux系统中的&#xff0c;为了能在windows系统下使用&#xff0c;因此下载Git这个软件&#xff0c;在其中的Git Bash中使用以下命令&#xff0c;因为Git Bash集成了很多linux的命令&#xff0c;方便我们的使用。 ImageNe…

[iOS]类和对象的底层原探索

[iOS]类和对象的底层探索 文章目录 [iOS]类和对象的底层探索继承链&#xff08;类&#xff0c;父类&#xff0c;元类&#xff09;instance 实例对象class 类对象meta-class 元类对象 对对象、类、元类和分类的探索instance 实例对象class 类对象meta-class 元类对象分类(catego…

防火墙之带宽管理篇

核心思想 1.带宽限制&#xff1a;限制非关键业务流量占用带宽的比例 2.带宽保证&#xff1a;保证关键的业务流量传输不受影响。业务繁忙时&#xff0c;确保业务不受影响。 3.限制连接数&#xff1a;可以针对某些业务进行连接数的限制&#xff0c;首先可以降低该业务占用带宽…

基于UltraFace的人脸检测在地平线旭日X3派上的部署和测试(Python版本和C++版本)

电脑端的测试环境搭建 如果不想再搭建环境和测试代码bug上浪费更多的时间可以直接获取本人的测试虚拟机&#xff0c;所有的测试代码、虚拟环境和板端测试工程以全部打包到了虚拟机&#xff0c;需要的可以通过网盘获取&#xff1a; 代码和虚拟机百度网盘链接&#xff1a; 链接…

【AI绘画教程】Stable Diffusion 1.5 vs 2

在本文中,我们将总结稳定扩散 1 与稳定扩散 2 辩论中的所有要点。我们将在第一部分中查看这些差异存在的实际原因,但如果您想直接了解实际差异,您可以跳下否定提示部分。让我们开始吧! Stable Diffusion 2.1 发布与1.5相比,2.1旨在解决2.0的许多相对缺点。本文的内容与理解…

网络和安全操作

一、编辑文件 文本编辑器有很多&#xff0c;比如图形模式的gedit、OpenOffice 等&#xff0c;文本模式下的编辑器有vi、vim&#xff08;vi的增强版本&#xff09;等。vi和vim是我们在Linux中最常用的编辑器。 gedit&#xff1a;类似于windows下的记事本&#xff0c;很方便的去…

AI 大事件:超级明星 Andrej Karpathy 创立AI教育公司 Eureka Labs

&#x1f9e0; AI 大事件&#xff1a;超级明星 Andrej Karpathy 创立AI教育公司 Eureka Labs 摘要 Andrej Karpathy 作为前 OpenAI 联合创始人、Tesla AI 团队负责人&#xff0c;他的专业性和实力备受瞩目。Karpathy 对 AI 的普及和教育充满热情&#xff0c;从 YouTube 教程到…

两年经验前端带你重学前端框架必会的ajax+node.js+webpack+git等技术 Day1

黑马程序员前端AJAX入门到实战全套教程&#xff0c;包含学前端框架必会的&#xff08;ajaxnode.jswebpackgit&#xff09;&#xff0c;一套全覆盖 Day1 你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​…

【算法/天梯赛训练】天梯赛模拟题集

L1-009 N个数求和 #include <iostream> #include <algorithm>using namespace std;typedef long long ll; const int N 105;typedef struct node {ll x, y; }node; node a[N];ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a; }int main() {int n;cin >>…

《昇思25天学习打卡营第25天|第9天》

今天是打卡的第九天&#xff0c;今天学习的是使用静态图加速这门课程&#xff0c;从他的背景学起&#xff1a;AI编译框架分为两种运行模式&#xff0c;分别是动态图模式和静态图模式&#xff0c;动态图模式特点&#xff1a;计算图的构建和计算同时发生&#xff0c;缺点&#xf…

如何追查一个packet在linux 系统哪里丢失

要想追一个包在系统哪里丢失了&#xff0c; 就要了解 一个应用层的包在送出时 要经历那些 检查点 和被丢掉的点。 1. 在传输层&#xff0c;如果是 tcp 包 会有contrack 的 buf 的限制 可能会导致 packets 的丢失。 > 检查办法&#xff1a;查看dmesg日志有报错&#xff1a;k…

MySQL数据库慢查询日志、SQL分析、数据库诊断

1 数据库调优维度 业务需求&#xff1a;勇敢地对不合理的需求说不系统架构&#xff1a;做架构设计的时候&#xff0c;应充分考虑业务的实际情况&#xff0c;考虑好数据库的各种选择(读写分离?高可用?实例个数?分库分表?用什么数据库?)SQL及索引&#xff1a;根据需求编写良…

Java Web常见框架寻找路由技巧

在Java Web代码审计中&#xff0c;寻找和识别路由是很关键的部分。通过注册的路由可以找到当前应用对应的Controller&#xff0c;其作为MVC架构中的一个组件&#xff0c;可以说是每个用户交互的入口点。简单介绍下Java Web中常见框架&#xff08;Spring Web、Jersey&#xff09…

十、Java集合 ★ ✔(模块18-20)【泛型、通配符、List、Set、TreeSet、自然排序和比较器排序、Collections、可变参数、Map】

day05 泛型,数据结构,List,Set 今日目标 泛型使用 数据结构 List Set 1 泛型 1.1 泛型的介绍 ★ 泛型是一种类型参数&#xff0c;专门用来保存类型用的 最早接触泛型是在ArrayList&#xff0c;这个E就是所谓的泛型了。使用ArrayList时&#xff0c;只要给E指定某一个类型…

【Vue3】4个比较重要的设计模式!!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 在我投身于前端开发的职业生涯期间,曾有一次承接了一个大型项目的维护工作。此项目运用的是 Vue 框架,然而其代码结构紊乱不堪,可维护性极度糟糕😫。 这使我深刻领会到,理解并运用 Vue 中的重要设计模式是何等关键! …

对LinkedList ,单链表和双链表的理解

一.ArrayList的缺陷 二.链表 三.链表部分相关oj面试题 四.LinkedList的模拟实现 五.LinkedList的使用 六.ArrayList和LinkedList的区别 一.ArrayList的缺陷: 1. ArrayList底层使用 数组 来存储元素&#xff0c;如果不熟悉可以来再看看&#xff1a; ArrayList与顺序表-CSDN…

一些常见的网络故障

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…