当前位置: 首页 > news >正文

Verilog语法学习EP10:串口接收模块

设计一个串口接收模块,设计要求如下:

代码如下:

//2025.9.16
//串口接收数据
`timescale 1ns/10ps
module UART_RXer(clk,rst,RX,data_out,en_data_out
);
input               clk;
input               rst;
input               RX;
output[7:0]         data_out;//接受字节输出
output              en_data_out;//输出使能reg[7:0]            data_out;
reg[7:0]            state;//主状态机
reg[12:0]           con;//用于计算比特宽度24000000/4800
reg[3:0]            con_bits;//用于计算比特数reg                 RX_delay;//RX的延时;
reg                 en_data_out;always@(posedge clk or negedge rst) beginif(~rst) beginstate<=0;con<=0;con_bits<=0;RX_delay<=0;data_out<=0;en_data_out<=0;//一旦定义了寄存器要及时给他复位endelse beginRX_delay<=RX;case(state)0://等空闲begin//1bit的宽度if(con==5000-1) begincon<=0;endelse begincon<=con+1;end//记录比特数每为0加一if(con==0) beginif(RX) begincon_bits<=con_bits+1;endelse begincon_bits<=0;endendif(con_bits==12)beginstate<=1;endend1://等起始位beginen_data_out<=0;if(~RX&RX_delay)beginstate<=2;endend2://收最低位b0beginif(con==7500-1)begincon<=0;data_out[0]<=RX;state<=3;endelse begincon<=con+1;endend3://b1beginif(con==5000-1)begincon<=0;data_out[1]<=RX;state<=4;endelse begincon<=con+1;endend4://b2beginif(con==5000-1)begincon<=0;data_out[2]<=RX;state<=5;endelse begincon<=con+1;endend5://b3beginif(con==5000-1)begincon<=0;data_out[3]<=RX;state<=6;endelse begincon<=con+1;endend6://b4beginif(con==5000-1)begincon<=0;data_out[4]<=RX;state<=7;endelse begincon<=con+1;endend7://b5beginif(con==5000-1)begincon<=0;data_out[5]<=RX;state<=8;endelse begincon<=con+1;endend8://b6beginif(con==5000-1)begincon<=0;data_out[6]<=RX;state<=9;endelse begincon<=con+1;endend9://b7beginif(con==5000-1)begincon<=0;data_out[7]<=RX;state<=10;endelse begincon<=con+1;endend10://产生使能脉冲beginen_data_out<=1;state<=1;enddefault:beginstate<=0;con<=0;con_bits<=0;en_data_out<=0; end  endcaseend
endendmodule//-----testbench of UART_RXer----
module UART_RXer_tb();
reg                 clk,rst;
wire               RX;
wire[7:0]           data_out;
wire                en_data_out;reg[25:0]           RX_send;//里面装有串口字节发送数据
assign              RX=RX_send[0];//链接RXreg                 con;UART_RXer UART_RXer(.clk(clk),.rst(rst),.RX(RX),.data_out(data_out),.en_data_out(en_data_out)
);
initial beginclk<=0;rst<=0;RX_send<={1'b1,8'haa,1'b0,16'hffff};con<=0;#17 rst<=1;#4000000   $stop;
endalways #5 clk=~clk;always@(posedge clk) beginif(con==5000-1) begincon<=0;endelse begincon<=con+1;endif(con==0) beginRX_send[24:0] = RX_send[25:1];RX_send[25] = RX_send[0];end
endendmodule

测试结果如下图所示:

http://www.dtcms.com/a/389410.html

相关文章:

  • 使用obs同步录制窗口的高质量游戏模式视频
  • Qt语言家的简单使用记录
  • Taro + vue3项目,如何生成安卓 apk 安装包
  • Hive HQL命令
  • 智慧医疗新纪元:快瞳科技如何用OCR技术重塑医疗单据处理体验
  • 4.1软件工程管理-CMM2软件项目规划-思考题
  • 知识图谱对自然语言处理深层语义分析的影响与启示:2025年研究综述
  • 4.1软件工程管理-CMM2软件项目规划
  • 《手搓动态顺序表:从数组到自动扩容的华丽转身》
  • 【Day 60】Linux-LVS负载均衡
  • bash zsh sh与shell 有什么关系
  • AI时代格局重构:2025 GEO服务公司Top3
  • GEO 优化重构数字营销格局 孟庆涛技术创新引领行业突破
  • 思迈特 Agent BI 发布,重构数据应用新范式
  • 重构组态软件边界:紫金桥如何实现原生跨平台?
  • 工作中的好奇心:Perplexity CEO的AI时代洞察
  • JsonCpp:高效序列化与反序列化指南
  • (树)Leetcode98二叉搜索树
  • 【笔记】Agent产品案例深度拆解
  • 嵌入式ARM SOC开发中文专题分享二:ARM SOC外围引脚功能说明
  • Python快速入门专业版(三十四):函数实战1:计算器程序(支持加减乘除与括号优先级)
  • datawhale玩转通义四大新模型 202509 第2次作业
  • 【项目实战】知识库——基础理论1
  • ego(7)---为Astar路径点计算交点,避障基准点与排斥方向
  • Oracle体系结构-警报日志文件 (Alert Log File / Alert SID.log)
  • 解锁 TiDB:供应链场景下分布式分库分表的案例
  • 【IEEE出版 | 早鸟优惠开启】人工智能驱动图像处理与计算机视觉技术国际学术研讨会 (AIPCVT 2025)
  • Ubuntu之旅-02 Redis
  • 基于RK3588+FPGA的无人机飞控系统,支持AI算力和FPGA实时性,强大的图像处理能力,支持全国产化
  • 杂七杂八之基于ApiPost的Jar包调用