串口通信控制LED灯

做这个东西的目的是锻炼一下自己的编程能力以及系统思维能力

首先,清楚自己要干什么,正点原子大家应该都看过,系统框图是一个比较重要的东西,引导我们去设计和思考。

下面先给出系统框图:

模块划分好后,结构就比较清晰了,可以分成三个文件实现,一个是LED控制模块,一个是串口接收模块,还有一个是顶层模块。

串口接收模块
module uart_recv (input clk,input rst_n,input uart_rx,output reg [7:0] rx_data,output reg data_valid
);reg [1:0] signal;
wire falling_edge; 
always @ (posedge clk or negedge rst_n) beginif (!rst_n) beginsignal[0] <= 1'd0;signal[1] <= 1'd0;end else beginsignal[0] <= uart_rx;signal[1] <= signal[0];end
endassign falling_edge = ~signal[0] & signal[1];    //检测下降沿reg rx_flag;
always @ (posedge clk or negedge rst_n) beginif (!rst_n) beginrx_flag <= 1'd0;end else if (falling_edge) beginrx_flag <= 1'd1;end else if (data_cnt == 4'd8) beginrx_flag <= 1'd0;end else beginrx_flag <= rx_flag;end
end//115200bps 8680ns接收一位数据 系统时钟50M 20ns 每计数434次接收一位数据
reg [8:0] cnt;
always @ (posedge clk or negedge rst_n) beginif (!rst_n) begincnt <= 9'd0;end else if (rx_flag && cnt < 9'd434) begincnt <= cnt + 1;end else begincnt <= 9'd0;end
endreg [7:0] data;
reg [3:0] data_cnt;
always @ (posedge clk or negedge rst_n) beginif (!rst_n) begindata <= 8'd0;data_cnt <= 4'd0;end else if (rx_flag && cnt == 9'd434) begindata <= {data[6:0],uart_rx};data_cnt <= data_cnt + 1;end else if (rx_flag) begindata <= data;data_cnt <= data_cnt;end elsedata <= 8'd0;data_cnt <= 4'd0;end
endalways @ (posedge clk or negedge rst_n) beginif (!rst_n) beginrx_data <= 8'd0;data_valid <= 1'd0;end else if (data_cnt == 4'd8) beginrx_data <= data;data_valid <= 1'd1;end else beginrx_data <= 8'd0;data_valid <= 1'd0;end
endendmodule

对该模块进行仿真测试

`timescale 1ns / 1psmodule uart_recv_tb;reg clk;
reg rst_n;
reg uart_rx;
wire [7:0] rx_data;
wire data_valid;// 实例化模块
uart_recv uut (.clk(clk),.rst_n(rst_n),.uart_rx(uart_rx),.rx_data(rx_data),.data_valid(data_valid)
);// 时钟生成
initial beginclk = 1'b0;forever #10 clk = ~clk; // 50 MHz 时钟
end// 复位信号
initial beginrst_n = 1'b0;#50 rst_n = 1'b1;
end// 模拟 UART 数据帧传输(起始位+8数据位+停止位)
initial beginuart_rx = 1'b1; // 空闲状态// 发送起始位(低电平)#8680 uart_rx = 1'b0;// 发送数据位 (10101011)#8680 uart_rx = 1'b1;#8680 uart_rx = 1'b0;#8680 uart_rx = 1'b1;#8680 uart_rx = 1'b0;#8680 uart_rx = 1'b1;#8680 uart_rx = 1'b0;#8680 uart_rx = 1'b1;#8680 uart_rx = 1'b1;// 发送停止位(高电平)#8680 uart_rx = 1'b1;// 等待接收完成#50000 $finish;
endendmodule

测试结果

检测到起始位:

读出数据正确,读有效信号拉高


LED控制模块
module led_control(input clk,input rst_n,input [7:0] data,input data_valid,output reg led
);always @ (posedge clk or negedge rst_n) beginif (!rst_n) beginled <= 1'd0;end else if (data_valid && data == 8'h12) beginled <= 1'd1;end else if (data_valid && data == 8'h23) beginled <= 1'd0;end else beginled <= led;end
endendmodule

顶层模块
module top(input clk,input rst_n,input uart_rx,output led);wire [7:0] data;
wire data_valid;uart_recv u_uart_recv(.clk        (clk),.rst_n      (rst_n),.uart_rx    (uart_rx),.rx_data    (data),.data_valid (data_valid)
);led_control u_led_control(.clk        (clk),.rst_n      (rst_n),.data       (data),.data_valid (data_valid),.led        (led)
);ila_0 your_instance_name (.clk(clk), // input wire clk.probe0(led), // input wire [0:0]  probe0  .probe1(data_valid), // input wire [0:0]  probe1 .probe2(data) // input wire [7:0]  probe2
);endmodule
综合仿真

仿真结果正确,串口发送12时led点亮,串口发送23时,led熄灭


上板测试结果与仿真一致

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

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

相关文章

Windows开启IIS后依然出现http error 503.the service is unavailable

问题背景 已启用IIS服务&#xff0c;配置步骤可以参考Windows10 IIS Web服务器安装配置 问题描述 在这一步浏览网站时&#xff0c;并没有出现默认首页&#xff0c;而是 http error 503 the service is unavailable 问题解决 参考 成功解决http error 503.the service is un…

mapbox基础,加载mapbox官方地图

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录 一、&#x1f340;前言1.1 ☘️mapboxgl.Map 地图对象…

一体式IO模块:打印机加工产线国产化降本增效的新利器

在当今全球化的市场竞争中&#xff0c;打印机制造行业面临着前所未有的挑战与机遇。为了提升生产效率、降低成本&#xff0c;并加速国产化进程&#xff0c;各大打印机制造商纷纷寻求技术创新与升级。明达技术自研推出的MR20一体式IO模块作为工业自动化领域的核心组件&#xff0…

公交车信息管理系统:实现交通数据的智能化处理

概述 在对系统进行设计之前&#xff0c;需要对选题进行需求分析、可行性分析、流程分析、数据字典等内容。根据需求分析阶段&#xff0c;大致确定用户使用系统所需要具有的功能模块需求&#xff0c;由此规划出系统需要设计的相关功能模块。根据可行性分析阶段&#xff0c;确定系…

C++的侵入式链表

非侵入式链表 非侵入式链表是一种链表数据结构&#xff0c;其中每个元素&#xff08;节点&#xff09;并不需要自己包含指向前后节点的指针。链表的结构和节点的存储是分开的&#xff0c;链表容器会单独管理这些指针。 常见的非侵入式链表节点可以由以下所示&#xff0c;即&a…

绕组识别标签规范

有标签名称的要标记&#xff0c;没有的不用标记 需要标注的工具、器材 图像中文名称标签名称od脱模剂watering can2铁铲shovel1记号笔&#xff0c;白色着重标bluepen/whitepen6纸质标签label3钢尺scale5玻璃纤维带&#xff08;卷&#xff09;红色网格布red grid4白色网格布wh…

关于uni-forms组件的bug【提交的字段[‘*‘]在数据库中并不存在】

问题&#xff1a;在使用 uni-forms校验的时候&#xff0c;出来的一个问题&#xff0c;这个字段都没有设置校验的规则&#xff0c;不知道什么原因就出现了下图的问题&#xff1a; 解决办法&#xff1a; 在uni-forms-item 添加key 值就解决了 原因不知道&#xff0c;有大佬发现…

解析mysqlbinlog

一、前置设置 ps -ef | grep mysql 查看mysql进程对应的安装目录 需设置mysql binlog日志模式为 ROW 二、执行命令 [rootlocalhost bin]# mysqlbinlog --verbose --base64-outputdecode-rows /usr/local/mysql/data/binlog.000069 > 1.sql 查看文件具体内容

WebRTC服务质量(08)- 重传机制(05) RTX机制

一、前言&#xff1a; RTX协议&#xff08;Retransmission&#xff0c;即重传协议&#xff09;是 WebRTC 中用于处理丢包恢复的一部分。由于网络通信中的丢包不可避免&#xff0c;WebRTC RTP协议栈支持多种丢包恢复机制&#xff0c;其中之一便是通过RTX协议实现的重传机制。 …

电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决

电脑蓝屏是让许多用户头疼的问题&#xff0c;其中出现 “0x0000007f” 错误代码更是较为常见且棘手。了解其背后成因并掌握修复方法&#xff0c;能帮我们快速恢复电脑正常运行。 一、可能的硬件原因 内存问题 内存条长时间使用可能出现物理损坏&#xff0c;如金手指氧化、芯片…

用C#(.NET8)开发一个NTP(SNTP)服务

完整源码&#xff0c;附工程下载&#xff0c;工程其实也就下面两个代码。 想在不能上网的服务器局域网中部署一个时间服务NTP&#xff0c;当然系统自带该服务&#xff0c;可以开启&#xff0c;本文只是分享一下该协议报文和能跑的源码。网上作为服务的源码不太常见&#xff0c;…

java web springboot

0. 引言 SpringBoot对Spring的改善和优化&#xff0c;它基于约定优于配置的思想&#xff0c;提供了大量的默认配置和实现 使用SpringBoot之后&#xff0c;程序员只需按照它规定的方式去进行程序代码的开发即可&#xff0c;而无需再去编写一堆复杂的配置 SpringBoot的主要功能…

工厂防静电监控系统设备静电监控仪的关键作用

在现代工业生产中&#xff0c;静电问题日益凸显&#xff0c;尤其是在电子、半导体、精密机械加工等领域&#xff0c;静电可能引发诸如电子元件击穿、产品吸附灰尘杂质、设备故障乃至火灾爆炸等严重后果。为了有效防控静电危害&#xff0c;工厂防静电监控系统应运而生&#xff0…

重温设计模式--状态模式

文章目录 状态模式&#xff08;State Pattern&#xff09;概述状态模式UML图作用&#xff1a;状态模式的结构环境&#xff08;Context&#xff09;类&#xff1a;抽象状态&#xff08;State&#xff09;类&#xff1a;具体状态&#xff08;Concrete State&#xff09;类&#x…

Java代码覆盖率super-jacoco

项目流程 项目架构 部署步骤 注意&#xff1a;一定要用Linux服务器部署&#xff0c;不要用Windows 准备Linux服务器环境 安装好JDK1.8 安装好git 安装和配置好Maven3.6&#xff0c;或3.6以下 安装MySQL数据库&#xff08;尽量不用8版本&#xff0c;就用5.7、5.8版本&#xf…

Day1 苍穹外卖前端 Vue基础、Vue基本使用方式、Vue-router、Vuex、TypeScript

目录 1.VUE 基础回顾 1.1 基于脚手架创建前端工程 1.1.1 环境要求 1.1.2 脚手架创建项目 1.1.3 工程结构 1.1.4 启动前端服务 1.2 vue基本使用方式 1.2.1 vue 组件 1.2.2 文本插值 1.2.3 属性绑定 1.2.4 事件绑定 1.2.5 双向绑定 1.2.6 条件渲染 1.2.7 跨域问题 1.2.8 axios 1.…

重温设计模式--中介者模式

中介者模式介绍 定义&#xff1a;中介者模式是一种行为设计模式&#xff0c;它通过引入一个中介者对象来封装一系列对象之间的交互。中介者使得各个对象之间不需要显式地相互引用&#xff0c;从而降低了它们之间的耦合度&#xff0c;并且可以更方便地对它们的交互进行管理和协调…

Redis篇--常见问题篇7--缓存一致性2(分布式事务框架Seata)

1、概述 在传统的单体应用中&#xff0c;事务管理相对简单&#xff0c;通常使用数据库的本地事务&#xff08;如MySQL的BEGIN和COMMIT&#xff09;来保证数据的一致性。然而&#xff0c;在微服务架构中&#xff0c;由于每个服务都有自己的数据库&#xff0c;跨服务的事务管理变…

如何评估一个股票API接口

评估一个股票 API 接口的质量&#xff0c;可以从以下几个方面进行&#xff1a; 数据准确性 行情数据&#xff1a;实时价格、历史价格、成交量、成交额等数据应与证券交易所或权威金融数据提供商的官方数据高度一致&#xff0c;确保没有明显的错误。财务数据&#xff1a;企业的…

某集团GIF动态验证码识别

注意&#xff0c;本文只提供学习的思路&#xff0c;严禁违反法律以及破坏信息系统等行为&#xff0c;本文只提供思路 如有侵犯&#xff0c;请联系作者下架 本文识别已同步上线至OCR识别网站&#xff1a; http://yxlocr.nat300.top/ocr/other/16 最近某集团更新了验证码&#x…