FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive
FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive
串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive,功能实现。
文章目录
- FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive
- 一、功能实现
- 一、UART_TOP代码
- 总结
一、功能实现
对照代码,串口发送模块UART_TOP实现功能包括:
- PLL锁相环,实现稳定系统输入时钟功能
- UART_FIFO,数据先进先出,实现数据缓存功能,防止出现数据错乱
- w_clk_rst = ~w_system_pll_locked;保证复位电平是先高位再地位
- r_user_tx_ready,用户输出ready信号慢一拍,用于判断数据是否发送完毕,是否为结束状态
- r_rden_lock,fifo使能锁控制
- r_fifo_rden,fifo读使能情况
- r_uart_tx_vaild比FIFO中的读使能r_fifo_rden慢一拍,为实现有效信号和数据能够匹配上,所以对有效信号进行打一拍来延迟一个周期,从而实现信号和数据匹配,正确获取数据
一、UART_TOP代码
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2023/09/09 13:13:15
// Design Name:
// Module Name: UART_TOP
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//不要直接用系统时钟!!!
//要添加一个pll锁相环,进行滤波稳定时钟,方便后续处理
//module UART_TOP(//模块输入输出input i_clk ,input i_uart_rx ,output o_uart_tx );wire w_clk_50Mhz;
wire w_clk_rst;
wire w_system_pll_locked;wire [7:0] w_user_tx_data;
wire w_user_tx_ready;
wire [7:0] w_user_rx_data;
wire w_user_rx_vaild;
wire w_user_clk;
wire w_user_rst;
wire w_fifo_empty;
reg r_fifo_rden;
reg r_uart_tx_vaild;
reg r_rden_lock;//fifo使能锁
reg r_user_tx_ready;//pll锁存器在时钟不稳定的时候是低电平,在稳定后是高电平,即先低电平后高电平
//系统中习惯使用复位信号先高后低,即上电先高电平进行复位,然后再低电平,故需进行取反
assign w_clk_rst = ~w_system_pll_locked;system_pll system_pll_u0
(.clk_in1 (i_clk), // input clk_in1.clk_out1 (w_clk_50Mhz), // output clk_out1.locked (w_system_pll_locked) // output locked
);uart_drive#(//串口可调参数.P_SYSTEM_CLK (50_000_000),.P_UART_BUADRATE (115200),.P_UART_DATA_WIDTH (8),.P_UART_STOP_WIDTH (1),.P_UART_CHECK (0)
)
uart_drive_u0( //串口驱动输入输出.i_clk (w_clk_50Mhz),.i_rst (w_clk_rst),.i_uart_rx (i_uart_rx),.o_uart_tx (o_uart_tx),.i_user_tx_data (w_user_tx_data),//用户输出数据,作为驱动的输入,即先输入到驱动处理再输出.i_user_tx_vaild (r_uart_tx_vaild),//握手.o_user_tx_ready (w_user_tx_ready),.o_user_rx_data (w_user_rx_data),//用户输入数据,作为驱动的输出,即先经过驱动输出再输入到用户.o_user_rx_vaild (w_user_rx_vaild),.o_user_clk (w_user_clk),.o_user_rst (w_user_rst));UART_FIFO UART_FIFO_U0 (.clk (w_user_clk), // input wire clk.srst (w_user_rst), // input wire srst.din (w_user_rx_data), // input wire [7 : 0] din.wr_en (w_user_rx_vaild), // input wire wr_en.rd_en (r_fifo_rden), // input wire rd_en.dout (w_user_tx_data), // output wire [7 : 0] dout.full (), // output wire full.empty (w_fifo_empty) // output wire empty
);//处理用户输出ready信号慢一拍
//用于判断数据是否发送完毕,是否为结束状态
always @(posedge w_user_clk or posedge w_user_rst)
beginif(w_user_rst)r_user_tx_ready <= 'd0;elser_user_tx_ready <= w_user_tx_ready;end//处理fifo使能控制,使能锁r_rden_lock
//防止fifo使能持续两个周期,导致读取两个数据,但握手只会读取一个数据,就会导致数据丢失,故需要使能锁控制来fifo只持续一个周期
always @(posedge w_user_clk or posedge w_user_rst)
beginif(w_user_rst) //初始状态r_rden_lock <= 'd0;else if(w_user_tx_ready && !r_user_tx_ready) //结束状态,当前为高电平1,前一拍为低电平,即上升沿判断为结束状态r_rden_lock <= 'd0;else if(~w_fifo_empty && w_user_tx_ready) //变化状态,即fifo内有数据+ready好了r_rden_lock <= 'd1;elser_rden_lock <= r_rden_lock;end//处理fifo读使能情况,r_fifo_rden
always @(posedge w_user_clk or posedge w_user_rst)
beginif(w_user_rst)r_fifo_rden <= 'd0;else if(~w_fifo_empty && w_user_tx_ready)r_fifo_rden <= 'd1;elser_fifo_rden <= 'd0;
end//因为发送的数据是比FIFO中的读使能r_fifo_rden满一个周期
//为实现有效信号和数据能够匹配上,所以对有效信号进行打一拍来延迟一个周期,从而实现信号和数据匹配,正确获取数据
always @(posedge w_user_clk or posedge w_user_rst)
beginif(w_user_rst)r_uart_tx_vaild <= 'd0;elser_uart_tx_vaild <= r_fifo_rden;
endendmodule
总结
串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive,功能实现,数据缓存先进先出fifo实现,fifo使能控制等功能实现。
相关文章:
FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive
FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive 串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive,功能实现。 文章目录 FPGA-结合协议时序实现UART收发器(五&…...
我学编程全靠B站了,真香-国外篇(第三期)
你好,我是Martin。 今天来点猛料,给大家推荐点我的压箱收藏-国外知名大学的公开课。 我推荐的不多,本着少就是多的原则,只给大家推荐我看过最好的五门视频,主要是来自两所国外高校:MIT美国麻省理工、CMU卡…...
c++ 变量常量指针练习题
Q1:在win32 x86模式下,int *p; int **pp; double *q; 请说明p、pp、q各占几个字节的内存单元。 p 占 4 个字节 pp 占 4 个字节 q 占 4 个字节 Q2常量1、1.0、“1”的数据类型是什么? 1 是 整形 int 1.0 是 浮点型 double “1” 是 const char * Q3 语句&…...
Linux底层基础知识
一.汇编,C语言,C,JAVA之间的关系 汇编,C语言,C可以通过不同的编译器,编译成机器码。而java只能由Java虚拟机识别。Java虚拟机可以看成一个操作系统,Java虚拟机是由汇编,C,…...
JUC并发编程--------线程安全篇
目录 什么是线程安全性问题? 如何实现线程安全? 1、线程封闭 2、无状态的类 3、让类不可变 4、加锁和CAS 并发环境下的线程安全问题有哪些? 1、死锁 2、活锁 3、线程饥饿 什么是线程安全性问题? 我们可以这么理解&#…...
机器视觉之Basler工业相机使用和配置方法(C++)
basler工业相机做双目视觉用,出现很多问题记录一下: 首先是多看手册:https://zh.docs.baslerweb.com/software 手册内有所有的源码和参考示例,实际上在使用过程中,大部分都是这些源码,具体项目选择对应的…...
Centos nginx配置文档
1、安装nginx: yum install nginx 2、Nginx常用命令 查看版本:nginx -v 启动:nginx -c /etc/nginx/nginx.conf 重新加载配置:nginx -s reload 停止:nginx -s stop 3、Nginx反向代理配置 nginx配置详解 1、Nginx配置图 详情可以查看:http://nginx.org/ru/docs/example…...
2023/9/14 -- C++/QT
作业: 仿照Vector实现MyVector,最主要实现二倍扩容 #include <iostream>using namespace std;template <typename T> class MyVector { private:T *data;size_t size;size_t V_capacity; public://无参构造MyVector():data(nullptr),size(…...
golang在goland编译时获取环境变量失效
在golang中, 我们通常使用os包来获取环境变量,如: os.Getenv() os.LookupEnv() 等。 但如果我们使用goland编译器,在编译是,这时操作环境变量,会发现os包读取到的环境变量值不变: 新增后&am…...
一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了
一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了。 在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的…...
蓝桥杯 题库 简单 每日十题 day3
01 约数个数 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 1200000 有多少个约数(只计算正约数)。 解题思路 枚举,从1开始一直到1200000本身都作为1200000的除数,…...
基于SSM+Vue的高校实验室管理系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
C语言天花板——指针(初阶)
🌠🌠🌠 大家在刚刚接触C语言的时候就肯定听说过,指针的重要性以及难度等级,以至于经常“谈虎色变”,但是今天我来带大家走进指针的奇妙世界。🎇🎇🎇 一、什么是指针&…...
关于第一届全球电子纸创新应用金奖征集评选及报名指南
重要通知 |关于第一届全球电子纸创新应用金奖征集评选及报名指南https://mp.weixin.qq.com/s/RWsZtmJ20-NZXMG0k0rwPA?wxwork_useridEPIA 从2004年,Sony推出全球首款电纸书阅读器至今20载,这期间,到底诞生了多少种创新产品&#…...
idea搭建项目找不到Tomcat
idea搭建项目找不到Tomcat_idea没有tomcat配置项_ZYRL的博客-CSDN博客...
类和对象三大特性之继承
全文目录 继承的概念定义格式继承关系和访问限定符final 基类和派生类对象赋值转换继承中的作用域派生类的六个默认成员函数构造函数拷贝构造函数operator析构函数 友元和静态成员友元静态成员 各种继承形式菱形继承虚继承菱形虚拟继承对象模型 继承和组合 继承的概念 通过继承…...
Debian 12安装Docker
1.更新系统包 #apt update 2.安装依赖包 #apt install apt-transport-https ca-certificates curl gnupg lsb-release 3.添加Docker源 (1)添加Docker 官方GPG密钥 #curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/s…...
小谈设计模式(4)—单一职责原则
小谈设计模式(4)—单一职责原则 专栏介绍专栏地址专栏介绍 单一职责原则核心思想职责的划分单一变化原则高内聚性低耦合性核心总结 举例图书类(Book)用户类(User)图书管理类(Library)…...
ATF(TF-A) EL3 SPMC威胁模型-安全检测与评估
安全之安全(security)博客目录导读 ATF(TF-A) 威胁模型汇总 目录 一、简介 二、评估目标 1、数据流图 三、威胁分析 1、信任边界 2、资产 3、威胁代理 4、威胁类型 5、威胁评估 5.1 端点在直接请求/响应调用中模拟发送方FF-A ID 5.2 端点在直接请求/响应调用中模拟…...
AI绘画Stable Diffusion原理之扩散模型DDPM
前言 传送门: stable diffusion:Git|论文 stable-diffusion-webui:Git Google Colab Notebook部署stable-diffusion-webui:Git kaggle Notebook部署stable-diffusion-webui:Git AI绘画,输入一段…...
NSS [西湖论剑 2022]real_ez_node
NSS [西湖论剑 2022]real_ez_node 考点:ejs原型链污染、NodeJS 中 Unicode 字符损坏导致的 HTTP 拆分攻击。 开题。 附件start.sh。flag位置在根目录下/flag.txt app.js(这个没多大用) var createError require(http-errors); var express require(express); v…...
MySQL常用函数集锦 --- 字符串|数值|日期|流程函数总结
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 目录 一、字符…...
GaussDB(DWS)云原生数仓技术解析:湖仓一体,体验与大数据互联互通
文章目录 前言一、关于数据仓库需求场景分类二、数据仓库线下部署场景2.1、线下部署场景介绍及优劣势说明2.2、线下部署场景对应的客户需求 三、数据仓库公有云部署场景3.1、公有云部署场景介绍及优劣势说明3.2、公有云部署场景对应的客户需求 四、为何重视数据共享(…...
Navicat历史版本下载及地址组成分析
下载地址组成 https://download3.navicat.com/download/navicat161_premium_cs_x64.exe 地址逻辑:前缀 版本 类型 语言 位数 前缀: http://download.navicat.com/download/navicat版本: 三位数,前两位是大版本,后一位是小版本ÿ…...
avue之动态切换表格样式问题
动态切换 a\b 两个表格 ,a表格高度变成b的高度等问题, 解决方案:...
彻底解决ruoyi分页后总数错误的问题
问题描述 最近时不时的发现用户列表出来的数据只有24条,但是总记录数却有58条,很奇怪。各种百度查询,都是什么修改查询分页改代码,尝试后发现还是没有效果,经过各种验证发现就是SQL语句错误。 如果非要说是SQL语句没…...
SpringMVC学习笔记——1
SpringMVC学习笔记——1 一、SpringMVC简介1.1、SpringMVC概述1.2、SpringMVC快速入门1.3、Controller中访问容器中的Bean1.4、SpringMVC关键组件的浅析 二、SpringMVC的请求处理2.1、请求映射路径配置2.2、请求数据的接收2.2.1、键值对方式接收数据2.2.2、封装JavaBean数据2.2…...
20230908_python练习_selenium模块爬取网页小说练习
霍比特人小说爬取,使用 selenium 模块调用谷歌浏览器,无界面模式爬取小说网站信息,将数据按照每次2000字符在mysql中保存。 # https://www.shukuai9.com/b/324694/ # 导入需要的库 from selenium import webdriver # 导入Keys模块ÿ…...
Python:安装Flask web框架hello world示例
安装easy_install pip install distribute 安装pip easy_install pip 安装 virtualenv pip install virtualenv 激活Flask pip install Flask 创建web页面demo.py from flask import Flask app Flask(__name__)app.route(/) def hello_world():return Hello World! 2023if _…...
深度解析NLP文本摘要技术:定义、应用与PyTorch实战
目录 1. 概述1.1 什么是文本摘要?1.2 为什么需要文本摘要? 2. 发展历程2.1 早期技术2.2 统计方法的崛起2.3 深度学习的应用2.4 文本摘要的演变趋势 3. 主要任务3.1 单文档摘要3.2 多文档摘要3.3 信息性摘要 vs. 背景摘要3.4 实时摘要 4. 主要类型4.1 抽取…...
西安网站托管公司招聘/企业网站的主要类型有
视频链接: Unity 10分钟快速入门 #U3D #Unity3D_哔哩哔哩_bilibili 目录 1、Unity场景构成 2、3D模型网站 3、Transform组件: 4、 MeshRenderer组件 5、添加其他组件 6、摄像机 7、编写脚本 8、构建游戏 1、Unity场景构成 2、3D模型网站 sketchf…...
动态网站开发知识/快速网站轻松排名
1.解释器: 工作机制: 现状: 2.JIT编译器: HotSpot JVM执行方式: 热点代码及探测方式: 方法调用计数器: 回边计数器: 3.C1,C2编译器:...
wordpress弹幕播放器/长沙seo霜天博客
在无线路由器市场中,家庭网状WiFi系统在国外市场非常火热。从Eero到Starry Station,还有网件最新推出的Orbi无线路由器,都是主打家庭无线的网状网络功能。近期,又一款无线路由器新品横空出世,Ally Plus智能家庭WiFi系统…...
石家庄网站建设电话/市场营销策划方案3000字
1,linux各个内核配置选项的含义 linux各个内核配置选项含义 2,make menuconfig命令的使用 Y表示加载,N表示不加载,M表示的是作为模块的方式载入内核。 3,以模块方式载入的时候如何动态加载 如何动态加载模块转载于:htt…...
商业活动的网站建设/自己怎么免费做网站
阿酷TONY / 2022-11-18 / 长沙 MR场景直播、MR培训场景和内容呈现以及直播互动功能,帮助企业高效开展员工培训,让整个培训过程更高效~~~ MR场景直播有哪些有意思的地方呢?先来一个图: ▲ 模拟真实光照还原现实景 丰富培训场景&a…...
如何把一个静态网站/十大app开发公司排名
与CollectionOrderModule一样,LoggingModule也是一个Autofac模块。它以属性注入的方式给需要日志服务的对象设置Logger。如果一个类有Orchard.Logging.ILogger型的公共可写实例属性(忽略索引),Autofac容器在解析(Resolve)该类的时 候,将"…...