手写一个uart协议——rs232(未完)

先了解一下关于uart和rs232的基础知识

文章目录

  • 一、RS232的回环测试
    • 1.1模块整体架构
    • 1.2 rx模块设计
      • 1.2.1 波形设计
      • 1.2.2代码实现与tb
      • 1.2.4 仿真
    • 1.3 tx模块设计
      • 1.3.1波形设计

本篇内容:

一、RS232的回环测试

上位机由串口助手通过 rx 线往 FPGA 发 8 比特数据,当 FPGA接收到 8 比特数据后,再通过 tx 线把接收到的 8 比特数据给上位机发回去,要求上位机接收到的数据和上位机发送的数据一样,并且保证连续发送也没问题。

在这里插入图片描述

1.1模块整体架构

在这里插入图片描述
在这里插入图片描述

1.2 rx模块设计

1.2.1 波形设计

在这里插入图片描述

1.2.2代码实现与tb

代码:

module uart_rx(input wire clk,input wire rst,input wire rx,output reg [7:0]po_data,output reg po_flag);parameter CNT_END=100;  //9600bps cnt=5207  sim时,cnt=100;
parameter CNT_END_HALF=CNT_END/2;reg rx_t;
reg rx_tt;
reg rx_tt_reg;
reg [12:0] cnt;
reg cnt_flag;
reg bit_flag;
reg [3:0]bit_cnt;
// rx_t
always @(posedge clk) begin if(rst==1'b1) beginrx_t <= 'd1;end else beginrx_t<=rx ;end
end// rx_tt
always @(posedge clk) begin if(rst==1'b1) beginrx_tt <= 'd1;end else beginrx_tt<=rx_t ;end
end// rx_tt_reg
always @(posedge clk) begin if(rst==1'b1) beginrx_tt_reg <= 'd1;end else beginrx_tt_reg<=rx_tt ;end
end//cnt
always @(posedge clk) begin if(rst==1'b1) begincnt<= 'd0;end else if (cnt_flag==1'b1 && cnt==CNT_END) begincnt<='d0;endelse if (cnt_flag==1'b1) begincnt<=cnt+1'b1;endelse if (bit_cnt=='d8 && bit_flag==1'b1) begincnt<='d0;end
end//bit_flag
always @(posedge clk) begin if(rst==1'b1) beginbit_flag <= 'd0;end else if (cnt_flag==1'b1 && cnt==CNT_END_HALF) beginbit_flag<='d1;endelse bit_flag<='d0;
end// cnt_flag
always @(posedge clk) begin if(rst==1'b1) begincnt_flag <= 'd0;end else if (rx_tt==1'b0 && rx_tt_reg==1'b1) begincnt_flag<='d1;endelse if (bit_cnt=='d8 && cnt==CNT_END_HALF) begincnt_flag<='d0;end
end// bit_cnt
always @(posedge clk) begin if(rst==1'b1) beginbit_cnt  <= 'd0;end else if (bit_cnt=='d8 && bit_flag==1'b1) beginbit_cnt<='d0;endelse if (bit_flag==1'b1) beginbit_cnt<=bit_cnt+1'b1;endend// po_data
always @(posedge clk) begin if(rst==1'b1) beginpo_data <= 'd0;end else if (bit_cnt>0 && bit_flag==1'b1) beginpo_data<={rx,po_data[7:1]};end
end// po_flag
always @(posedge clk) begin if(rst==1'b1) beginpo_flag<= 'd0;end else if (bit_cnt=='d8 && bit_flag==1'b1) beginpo_flag<='d1;endelse po_flag<='d0;
end
endmodule

tb:

`timescale 1ns / 1psmodule tb_rx();reg clk;reg rst;reg rx;wire [7:0] po_data;wire po_flag;initial beginclk=0;rst=1;#100rst=0;endinitial beginrx=1;//空闲状态#100gen_rx();end//这里模拟发送20帧数据,每次发送80~1的任意数,发送前rx拉低,表示起始位
//由于9600波特率需要计数5207次,为了仿真方便,假设只需要计数100次。task gen_rx;integer i;integer j;begin		for (j = 0; j < 20; j=j+1) beginrx=0;for ( i = 0; i < 8; i=i+1) begin  repeat(100) begin //每隔100周期发送1bit数据;@(posedge clk);  endrx={$random};endrx=1; //每发送完一帧数据后,rx恢复空闲状态,维持10个周期后继续发送数据,直到发够20帧数据。repeat(10) begin@(posedge clk);end		endendendtask always #5 clk=~clk;uart_rx inst_uart_rx (.clk     (clk),.rst     (rst),.rx      (rx),.po_data (po_data),.po_flag (po_flag));endmodule

1.2.4 仿真

在这里插入图片描述

1.3 tx模块设计

1.3.1波形设计

在这里插入图片描述

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

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

相关文章

DS高阶:图论基础知识

一、图的基本概念及相关名词解释 1.1 图的基本概念 图是比线性表和树更为复杂且抽象的结&#xff0c;和以往所学结构不同的是图是一种表示型的结构&#xff0c;也就是说他更关注的是元素与元素之间的关系。下面进入正题。 图是由顶点集合及顶点间的关系组成的一种数据结构&…

MATLAB - 机器人动力学 - 质心(Center of Mass)

系列文章目录 前言 一、用法 com centerOfMass(robot) com centerOfMass(robot,configuration) [com,comJac] centerOfMass(robot,configuration) 二、说明 com centerOfMass(robot) 计算机器人模型在原点构型处相对于基础坐标系的质心位置。com centerOfMass(robot,conf…

链表算法题总结

链表作为一个基础的数据结构&#xff0c;在开发中经常被使用。 链表往往使用如下的数据结构来表示&#xff0c;struct node 表示链表中的一个节点&#xff0c;data 表示节点的数据&#xff1b;next 表示这个节点指向的下一个节点&#xff0c;如果是链表的尾节点&#xff0c;那…

关于下载上传的sheetjs

一、背景 需要讲后端返回来的表格数据通过前端设置导出其中某些字段&#xff0c;而且得是xlsx格式的。 那就考虑使用控件SheetJS。如果是几年前&#xff0c;一般来说&#xff0c;保存excel的文件都是后端去处理&#xff0c;处理完成给前端一个接口&#xff0c;前端调用了打开…

Centos7+Hadoop3.3.4+KDC1.15+Ranger2.4.0集成

一、集群规划 本次测试采用3台虚拟机&#xff0c;操作系统版本为centos7.6。 kerberos采用默认YUM源安装&#xff0c;版本为&#xff1a;1.15.1-55 Ranger版本为2.4.0 系统用户为ranger:ranger IP地址主机名KDCRanger192.168.121.101node101.cc.localKDC masterRanger Admin…

【云原生】Docker 实践(四):使用 Dockerfile 文件的综合案例

Docker 实践&#xff08;四&#xff09;&#xff1a;使用 Dockerfile 文件的综合案例 下面将从一个 CentOS 的基础镜像开始&#xff0c;安装 JDK 和 Tomcat 环境&#xff0c;并完成一个 Web 应用的部署。整个过程通过一个 Dockerfile 文件来描述。通过 Dockerfile 文件来构建一…

Threejs制作服务器机房冷却结构

这节再绘制一个机房的结构&#xff0c;因为内容比较简单&#xff0c;就只使用一个章节来介绍&#xff0c; 先来一张效果图&#xff0c; 需要两个模型&#xff1a;一个冷却设备&#xff0c;一个服务器机箱&#xff0c;我这里是从网上找来的&#xff0c;首先我们搭建一个场景&a…

搭建大型分布式服务(三十七)SpringBoot 整合多个kafka数据源-取消限定符

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

Matlab生成txt文件导入到Vivado仿真

Matlab处理数据并将其写入txt文件 %% Txt Generate pre_RS_datadec2bin(simDataIn,8); %将数据转化为8bit的二进制 fidfopen("F:\FPGA\Xilinx_vivado\project\dvbstestbench\dbvs\matlab\pre_RS_data.txt","wt"); for i1:n*nMessages %数据…

Ubuntu C++ man手册安装及使用

Ubuntu下C++ man手册安装 C++在线文档: http://www.cplusplus.com/reference/ 第一种办法:使用cppman $ sudo apt install cppman 使用方法 第二种办法: 打开网页:GCC mirror sites- GNU Project 点击下图中的突显行链接: Russia, Novosibirsk:

使用UmcFramework和unimrcpclient.xml连接多个SIP设置的配置指南及C代码示例

使用UmcFramework和unimrcpclient.xml连接多个SIP设置的配置指南及C代码示例 引言1. UniMRCP和UmcFramework简介2. 准备工作3. unimrcpclient.xml配置文件3.1 定义SIP设置3.2 定义MRCP会话配置文件 4. C代码示例5. 测试和验证6. 故障排查7. 结论8. 参考文献 引言 在多媒体通信…

小剧场短剧影视小程序源码_后端PHP

项目运行截图 源码贡献 https://githubs.xyz/boot?app42 部署说明 linux/win任选 PHP版本&#xff1a;7.3/7.2&#xff08;测试时我用的7.2要安装sg扩展 &#xff09; 批量替换域名http://video.owoii.com更换为你的 批量替换域名http://120.79.77.163:1更换为你的 这两个…

微服务之SpringCloud AlibabaSeata处理分布式事务

一、概述 1.1背景 一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用&#xff0c;就会产生分布式事务问题 but 关系型数据库提供的能力是基于单机事务的&#xff0c;一旦遇到分布式事务场景&#xff0c;就需要通过更多其他技术手段来解决问题。 全局事务&#xff1a;…

【论文阅读】ChipNeMo中的数据集处理

前面总体学习了《ChipNeMo: Domain-Adapted LLMs for Chip Design》&#xff0c;然后又继续仔细看了论文中的领域适配分词和领域数据微调的预训练检索模型&#xff0c;对于数据集的处理&#xff0c;也需要仔细看一下。 提炼重点&#xff1a;1&#xff09;对于数据集&#xff0…

第1篇:创建Platform Designer系统

Q&#xff1a;本期我们开始使用Platform Designer工具创建带IP核的FPGA自定义硬件系统。 A&#xff1a;Platform Designer是集成在Quartus软件里的系统设计工具&#xff0c;名称随着Quartus的不断更新曾命名为SOPC Builder和Qsys。 使用Platform Designer可以添加Quartus已有自…

安卓数据库SQLite

目录 一、SQLite数据库二、SQLiteOpenHelper和SQLiteDatabase2.1 SQLiteOpenHelper2.2 SQLiteDatabase 三、常见数据库使用介绍3.1 创建数据库3.2 插入数据3.3 修改数据&#xff08;升级数据库&#xff09;3.4 删除数据3.5 查询数据3.6 关闭数据库3.7 删除数据库 一、SQLite数据…

基于uniapp vue3.0 uView 做一个点单页面(包括加入购物车动画和左右联动)

1、实现效果&#xff1a; 下拉有自定义组件&#xff08;商品卡片、进步器、侧边栏等&#xff09;源码 2、左右联动功能 使用scroll-view来做右边的菜单页&#xff0c;title的id动态绑定充当锚点 <scroll-view :scroll-into-view"toView" scroll-with-animation…

OSPF基本配置

原理概述 OSPF 是一种应用非常广泛的基于链路状态的动态路由协议&#xff0c;它具有区域&#xff08; Area )化的层次结构&#xff0c;扩展性好&#xff0c;收敛速度快&#xff0c;适合部署在各种规模的网络上。 在 OSPF 中&#xff0c;每台路由器都必须有一个 Router-I…

仓储机器人确实蛮卷的~

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 视频来源于Agilox。 仓储机器人&#xff0c;无疑是现代物流业的一大亮点。它们小巧灵活&#xff0c;却能承担起繁重…

线上线下交友陪玩,支持小程序/app/h5三端打包,源码搭建!

社交APP定制开发的好处&#xff1a; 社交APP定制开发能够根据用户需求进行个性化定制&#xff0c;满足用户对于社交功能的特殊需求。不同用户对社交的理解和需求各不相同&#xff0c;定制开发可以根据用户的要求&#xff0c;提供更加个性化和专属的社交功能&#xff0c;为用户…