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

devtools/2025/1/16 5:52:15/

先了解一下关于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.ppmy.cn/devtools/26509.html

相关文章

保姆级教程:实现在mac电脑上获取windows电脑分享的网络文件夹

演示系统&#xff1a;win10 Sonoma 14.4.3 限制条件&#xff1a;两台设备需要在同一局域网内&#xff0c;即同一网络环境。 —————————————————————————————————— 第一步&#xff1a;打开控制面板 -> 找到网络和共享中心 -> 选择更改…

共享旅游卡项目如何做线上运营?分享运营的3个核心点!

疫情三年下来&#xff0c;还能保持活跃的实体行业&#xff0c;可能就是旅游行业。别看很多美食餐饮的&#xff0c;看起来很赚钱&#xff0c;除开成本&#xff0c;其实也是赚点辛苦钱。 从2023年疫情放开&#xff0c;很多人都涌入到旅游行业。但因为绝大多数都是门外汉&#xf…

图像处理ASIC设计方法 笔记18 轮廓跟踪算法的硬件加速方案

目录 1排除伪孤立点&#xff08;断裂链表&#xff09;方法1 限制链表的长度方法2 增加判断条件排除断裂链表方法3 排除不必要跟踪的轮廓&#xff08;推荐用这个方法&#xff09; P129 轮廓跟踪算法的硬件加速方案 1排除伪孤立点&#xff08;断裂链表&#xff09; 如果图像中某…

如何在iPhone上恢复出厂设置后恢复数据

你不想让这种情况发生&#xff0c;但它确实发生了。您必须将iPhone恢复出厂设置。当您的 iPhone 上出现软件问题且无法修复时&#xff0c;可能会发生这种情况。相反&#xff0c;在更新期间&#xff0c;或者您的iPhone遇到问题时&#xff0c;iPhone上的数据不再存在。 不过不用…

【城市】2023香港身份与生活定居相关政策(IANG,优才/高才/专才,受养人/单程证)

【城市】2023香港身份与生活定居相关政策&#xff08;IANG&#xff0c;优才/高才/专才&#xff0c;受养人/单程证&#xff09; 文章目录 一、如何获得香港身份1、7年计划2、旅游签 二、港澳相关的证件类别1、HK证件2、CN证件 三、香港生活对比内地 本文仅代表2023年查阅相关资料…

Stability AI 推出稳定音频 2.0:为创作者提供先进的 AI 生成音频

概述 Stability AI 的发布再次突破了创新的界限。这一尖端模型以其前身的成功为基础&#xff0c;引入了一系列突破性的功能&#xff0c;有望彻底改变艺术家和音乐家创建和操作音频内容的方式。 Stable Audio 2.0 代表了人工智能生成音频发展的一个重要里程碑&#xff0c;为质量…

App拍照,照片压缩存储到app内部,同步更新手机系统相册

H5页面调用安卓相机拍照&#xff0c;然后在H5页面显示&#xff1a; 1、H5调用相机的回调&#xff1a; binding.fragmentWebWebview.setWebChromeClient(new WebChromeClient() {Overridepublic boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePa…

零基础玩转Linux+Ubuntu实战视频课程

零基础玩转LinuxUbuntu实战视频课程 Linux发行版之间的关系jpg 1-1课程简介及Linux学习路线介绍.mp4 1-10什么是环境变量.mp4 1-11文件系统管理.mp4 1-12用户账户管理.mp4 1-13文件的访问权限.mp4 1-14进程管理.mp4 1-15软件源码包的编译、安装与卸裁.mp4 1-16制作自己的deb软…