Vivado - BD(差分时钟、简单分频、RESET、KEY)
目录
1. 简介
1.1 要点
1.2 buffer 介绍
2. vivado 工程
2.1 Block Design
2.2 IBUFDS
2.3 BUFGCE_DIV
2.4 Processor System Reset
2.5 key_mod
2.6 led_drv
3. 编译与调试
3.1 XDC
3.2 Debug
4. 总结
1. 简介
1.1 要点
- 了解 Utility Buffer v2.2 中的 Buffer,重点分析 IBUFDS 和 BUFGCE_DIV
- 分析 Processor System Reset v5.0
- 分析按键消抖模块(key_mod)
- 了解与 ILA 相关自动生成的约束
1.2 buffer 介绍
- IBUFDS:差分输入缓冲器,用于接收差分信号并将其转换为单端信号。
- OBUFDS:差分输出缓冲器,用于将单端信号转换为差分信号输出。
- IOBUFDS:差分输入/输出缓冲器,支持双向差分信号。
- IBUFDSGTE:专用于 GTP/GTX 收发器的差分输入缓冲器。
- BUFG:全局时钟缓冲器,用于将时钟信号分配到 FPGA 的全局时钟树中,减少时钟偏斜。
- BUFGCE:带有时钟使能(Clock Enable)的全局时钟缓冲器,可以控制时钟信号的启用和禁用。
- BUFGCE_DIV:带有时钟使能和分频功能的全局时钟缓冲器,可以对时钟信号进行分频。
- BUFG_GT:专用于 GT 收发器的全局时钟缓冲器。
- IOBUF:输入/输出缓冲器,支持双向信号。
- OBUFDS_GTE:专用于 GTP/GTX 收发器的差分输出缓冲器。
- OBUFDS_GTE_ADV:高级差分输出缓冲器,提供更高性能的差分信号输出。
- BUFG_PS:专用于处理器系统的全局时钟缓冲器。
2. vivado 工程
2.1 Block Design
2.2 IBUFDS
差分输入缓冲器,用于接收差分信号并将其转换为单端信号。
在 Language Templates 中,可以找到 verilog 例化模板。
IBUFDS #(
.DIFF_TERM("FALSE"), // 差分端接
.IBUF_LOW_PWR("TRUE"), // 低功耗="TRUE",最高性能="FALSE"
.IOSTANDARD("DEFAULT") // 指定输入 I/O 标准
) IBUFDS_inst (
.O(O), // 缓冲器输出
.I(I), // Diff_p 缓冲器输入(直接连接到顶层端口)
.IB(IB) // Diff_n 缓冲器输入(直接连接到顶层端口)
);
2.3 BUFGCE_DIV
- BUFGCE_DIV:能够进行简单分频的 BUFG,可进行1~8 分频
- BUFG:全局时钟缓冲器,可以走专门的时钟资源,增强驱动能力,减少传播延迟
- Fout = Fin / div,div = 1 to 8;
在 Language Templates 中,也可以找到 verilog 例化模板。
BUFGCE_DIV #(
.BUFGCE_DIVIDE(1), // 1-8
// 可编程反相属性:指定特定引脚上内置的可编程反相
.IS_CE_INVERTED(1'b0), // CE 的可选反相
.IS_CLR_INVERTED(1'b0), // CLR 的可选反相
.IS_I_INVERTED(1'b0), // I 的可选反相
.SIM_DEVICE("ULTRASCALE_PLUS") // ULTRASCALE, ULTRASCALE_PLUS
)
BUFGCE_DIV_inst (
.O(O), // 1位输出:缓冲器
.CE(CE), // 1位输入:缓冲器使能
.CLR(CLR), // 1位输入:异步清除
.I(I) // 1位输入:缓冲器
);
2.4 Processor System Reset
IP 用途
- 同步异步复位信号:将异步外部复位(External Reset)和辅助复位(Auxiliary Reset)信号与时钟同步。
- 配置复位信号:可以选择外部和辅助复位信号是低电平有效还是高电平有效,并设置复位信号的最小脉宽。
- DCM 锁定输入:支持 DCM(数字时钟管理器)的锁定输入信号。
- 生成上电复位信号:在系统上电时生成复位信号,确保系统在上电时处于已知状态。
外部/辅助复位有效宽度:复位信号有效电平需要持续指定的若干时钟周期才被视为有效信号,才会有复位输出。
复位信号的顺序输出:
- 总线结构复位解除(互连和桥接)
- 外设在 16 个时钟周期后复位解除(UART、SPI、IIC)
- MicroBlaze 处理器在外设后 16 个时钟周期复位解除
Auxiliary Reset(辅助复位)信号通常用于提供额外的复位控制,除了主复位信号之外。它可以连接到系统中的其他复位源,例如调试器或其他控制逻辑。具体连接位置取决于你的设计需求和系统架构。
2.5 key_mod
按键消抖模块,用于消除由于机械或者接触不良造成的按键电信号的跳动(抖动)。
module key_mod (input wire i_sys_clk ,input wire i_rst_n ,input wire i_button ,output reg o_pb_state ,output wire o_pb_negedge ,output wire o_pb_posedge
);---------------- internal parameter ---------------
parameter N = 32 ; // debounce timer bitwidth
parameter FREQ = 200 ; // model clock :Mhz
parameter MAX_TIME = 20 ; // ms---------------- internal localparam --------------
localparam TIMER_MAX_VAL = MAX_TIME * 1000 * FREQ; // 20ms//====================================================
// 按键下降沿检测:
//-- _ _ _ _ _ _ _ _ _
//-- CLK | |_| |_| |_| |_| |_| |_| |_| |_| |
//-- ____
//-- button_r[1] |______________________________
//-- ____ __________
//-- PB_idle |___________________|
//-- ___________________
//-- add_PB_cnt ____| |__________
//-- ___ ___ ___ ___
//-- PB_cnt ________/___X___X___X___\__________
//-- ___
//-- end_PB_cnt ____________________| |__________
//-- ________________________
//-- PB_state |__________
//-- ___
//-- PB_negedge ____________________| |__________
//====================================================//====================================================
// 按键上升沿检测:
//-- _ _ _ _ _ _ _ _ _
//-- CLK | |_| |_| |_| |_| |_| |_| |_| |_| |
//-- ______________________________
//-- button_r[1] ____|
//-- ____ __________
//-- PB_idle |___________________|
//-- ___________________
//-- add_PB_cnt ____| |__________
//-- ___ ___ ___ ___
//-- PB_cnt ________/___X___X___X___\__________
//-- ___
//-- end_PB_cnt ____________________| |__________
//-- __________
//-- PB_state ________________________|
//-- ___
//-- PB_posedge ____________________| |__________
//====================================================//====================================================
// 消除亚稳态
//
//====================================================
reg [1:0] button_r;
always @(posedge i_sys_clk or negedge i_rst_n) beginif (!i_rst_n) beginbutton_r <= 2'b11;endelse beginbutton_r <= {button_r[0], i_button};end
end//====================================================
// 定义空闲状态 PB_idle,可以一直是高电平,
// 也可以一直是低电平
// 按键按下和松开,均开始计时
//====================================================
reg [N-1:0] PB_cnt;
wire PB_idle = (o_pb_state==button_r[1]);
wire add_PB_cnt;
wire end_PB_cnt;always @(posedge i_sys_clk or negedge i_rst_n) beginif (!i_rst_n) beginPB_cnt <= 16'b0;endelse if (add_PB_cnt) beginif (end_PB_cnt)PB_cnt <= 16'd0;elsePB_cnt <= PB_cnt + 16'd1;end
endassign add_PB_cnt = ~PB_idle;
assign end_PB_cnt = add_PB_cnt && PB_cnt==TIMER_MAX_VAL-1;always @(posedge i_sys_clk or negedge i_rst_n) beginif (!i_rst_n) begino_pb_state <= 1'b1;endelse if (end_PB_cnt) begin //到达设定数值,认为按键稳定,改变PB_state状态o_pb_state <= ~o_pb_state;end
end//====================================================
// 计时器到达设定值时,进行事件判断:
// PB_state常为高电平状态
// 下降沿:非空闲 && 计数完毕 && 当前状态为1
// 上升沿:非空闲 && 计数完毕 && 当前状态为0
// 注:PB_state会在end_PB_cnt脉冲后反转,故此处引用了
// PB_state的当前状态
//====================================================
assign o_pb_negedge = ~PB_idle && end_PB_cnt && (o_pb_state==1'b1);
assign o_pb_posedge = ~PB_idle && end_PB_cnt && (o_pb_state==1'b0);endmodule
2.6 led_drv
pulse 接口,每收到一个脉冲,led 翻转一次。
module led_drv (input clk ,input rst_n ,input pulse ,output reg led
);always @(posedge clk or negedge rst_n)beginif (rst_n == 1'b0)led <= 1'b0;else if (pulse)led <= ~led;elseled <= led;endendmodule
3. 编译与调试
3.1 XDC
set_property PACKAGE_PIN K22 [get_ports {CLK_IN_D_0_clk_p[0]}]
set_property IOSTANDARD DIFF_SSTL12 [get_ports {CLK_IN_D_0_clk_p[0]}]set_property PACKAGE_PIN H13 [get_ports ext_reset_in_0]
set_property IOSTANDARD LVCMOS33 [get_ports ext_reset_in_0]set_property PACKAGE_PIN J13 [get_ports i_button_0]
set_property IOSTANDARD LVCMOS33 [get_ports i_button_0]set_property PACKAGE_PIN H12 [get_ports led_0]
set_property IOSTANDARD LVCMOS33 [get_ports led_0]set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
connect_debug_port dbg_hub/clk [get_nets clk]
重点解释下与 ILA 相关的约束,它们用于配置调试核心(debug core)和连接调试端口。
1)set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
- 这条命令设置调试核心的输入时钟频率为300 MHz(300,000,000 Hz)。这意味着调试核心将以300 MHz的频率运行。
2)set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
- 这条命令禁用时钟分频器。也就是说,调试核心将直接使用输入时钟频率,而不会进行分频。
3)set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
- 这条命令设置用户扫描链的数量为1。扫描链用于调试和测试目的,允许多个调试核心串联在一起。
4)connect_debug_port dbg_hub/clk [get_nets clk]:
- 这条命令将调试核心的时钟端口(dbg_hub/clk)连接到设计中的时钟网络(clk)。这确保调试核心能够接收到正确的时钟信号。
3.2 Debug
抓取按键下降沿:
抓取按键上升沿:
4. 总结
本文档提供了在 Vivado 中对 FPGA 设计中常用的几个简单模块和功能的详细分析,包括输入输出缓冲器、全局时钟缓冲器、处理器系统复位以及按键消抖模块。
- 了解 Utility Buffer v2.2 中的 Buffer,重点分析 IBUFDS 和 BUFGCE_DIV
- 分析 Processor System Reset v5.0
- 分析按键消抖模块(key_mod)
- 了解与 ILA 相关自动生成的约束
相关文章:
Vivado - BD(差分时钟、简单分频、RESET、KEY)
目录 1. 简介 1.1 要点 1.2 buffer 介绍 2. vivado 工程 2.1 Block Design 2.2 IBUFDS 2.3 BUFGCE_DIV 2.4 Processor System Reset 2.5 key_mod 2.6 led_drv 3. 编译与调试 3.1 XDC 3.2 Debug 4. 总结 1. 简介 1.1 要点 了解 Utility Buffer v2.2 中的 Buffer…...
7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)
前言 目录 新增套餐 需求分析和设计 代码开发 根据分类id查询菜品 Controller层 Service层 ServiceImpl层 Mapper层 DishMapper.xml 新增套餐 实体类 mapper层 Service层 ServiceImpl层 Mapper层 SetmealMapper.xml setmealDishMapper.xml 套餐分页查询 需求分…...
【尚硅谷】RocketMQ 消息队列学习笔记
RocketMQ 和 Kafka 消息队列概念比较? 好的!RocketMQ 和 Kafka 都是分布式消息队列系统,它们的核心概念有很多相似之处,但在具体实现和命名上有所不同。下面我通过一个表格来对比 RocketMQ 和 Kafka 中的五个概念:消息…...
C题(三)芝麻开门 --- strcmp函数应用
场景一:“芝麻开门 ”是通往C语言的大门的暗号,现在你需要说对暗号,大门才会打开。 【分解目标1】字符串的输入 char arr[20] { 0 }; //字符的集合---字符串(数组表示)//20为预定的数组的大小scanf("%s", a…...
C++函数模板、选择排序实现(从大到小)
template <class T> void mysw (T &a , T &b) {T temp b;b a;a temp; }template <class T> void muSort( T &arr ,int len) {//该实现为选择排序(高到低)for (int i 0; i < len; i) {int max i ; //首先默认本次循环首位元素为最大for (int j …...
EasyExcel使用介绍
EasyExcel使用 1、EasyExcel介绍 1.1 官网介绍 传统操作Excel大多都是利用Apach POI进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多的缺陷: 动态操作Excel非常繁琐,对于新手来说,很难在短时间内上手;读写时需要占用…...
字段临时缓存包装器
前言 在实际开发中,我们有时候存在一种需求,例如对于某个字段,我们希望在某个明确的保存节点前对字段的修改都仅作为缓存保留,最终是否应用这些修改取决于某些条件,比如玩家对游戏设置的修改可能需要玩家明确确认应用修…...
Python(三)——列表
文章目录 创建列表访问下标遍历列表元素新增元素查找元素删除元素连接列表切片操作 创建列表 创建列表主要有两种方式 [ ]表示一个空的列表 a [] print(type(a)) # <class list> print(a) # []通过list()的方式来创建一个空列表 a list() print(type(a)) # …...
MySQL--三大范式(超详解)
目录 一、前言二、三大范式2.1概念2.2第一范式(1NF)2.3第二范式(2NF)2.3第三范式(3NF) 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进…...
追梦无Bug的软件世界
追梦无Bug的软件世界:测试人员的视角与探索 我有一个梦想,今天我们共同承载着一个愿景:创造一个没有Bug的软件世界。 我梦想有一天,用户将享受到完全无Bug的软件体验,用户不再因为软件中的Bug而感到困扰和沮丧。 我梦…...
在C#中使用Redis实现高效消息队列
使用Redis实现C#中的消息队列 Redis是一种开源的内存数据结构存储系统,因其高性能和灵活性被广泛用于缓存、数据库和消息队列等场景。本文将详细介绍如何在C#中使用Redis实现一个简单的消息队列,涵盖环境准备、代码实现和使用示例。 1. 环境准备 1.1 安装Redis 首先,确保…...
微服务JMeter解析部署使用全流程
目录 1、介绍 2、下载 3、运行 4、设置简体中文版 5、开始测试 1、添加线程组 2、添加监听器 3、添加请求 先.测试userController里的查询方法 6、查看结果 1、查看结果树 2、汇总报告 3、聚合报告 7、JMeter报错 1、介绍 Apache JMeter 是 Apache 组织基于 Java…...
Python 从入门到实战32(数据库MySQL)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库编程接口操作的相关知识。今天我们将学习…...
hrnet训练的pt模型结合目标检测进行关键点识别的更准确前向推理
本篇在将图像输入hrnet识别之前先进行目标检测来确定识别的位置,让识别更加精准。 本段代码设置了一个区域框BOX,让人走入区域内才开始检测,适用于考核等场景,也可以直接去掉BOX也是一样的效果。若画面背景中有多个行人࿰…...
Leetcode 3306. Count of Substrings Containing Every Vowel and K Consonants II
Leetcode 3306. Count of Substrings Containing Every Vowel and K Consonants II 1. 解题思路2. 代码实现 题目链接:3306. Count of Substrings Containing Every Vowel and K Consonants II 1. 解题思路 这一题的话思路上就是一个滑动窗口,考察没一…...
算法笔记(五)——分治
文章目录 算法笔记(五)——分治快排颜色分类排序数组数组中的第K个最大元素库存管理 III 归并排序数组交易逆序对的总数计算右侧小于当前元素的个数翻转对 算法笔记(五)——分治 分治算法字面上的解释是“分而治之”,就…...
多级侧边菜单(递归)
需要编写两个文件 aside-menu.vue 和 menu-item.vue menu-item.vue <script setup> defineOptions({name: MenuItem}) defineProps({menuList: Array}) </script><template><template v-for"menu of menuList"><!-- 如果当前有子菜单&a…...
JavaScript break与continue语句
break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行。 break break语句用于跳出代码块或循环 for(i0;i<100;i){if(i5){break;}console.log(i);} continue continue语句用于应即终止本轮循环,返回循环结构的头部,开始下一轮循环。…...
算法【从递归入手一维动态规划】
动态规划:用空间代替重复计算,包含一整套原理和技巧的总和。后面会有非常多的文章介绍动态规划。 有些递归在展开计算时,总是重复调用同一个子问题的解,这种重复调用的递归变成动态规划很有收益。如果每次展开都是不同的解&#…...
Linux中的进程间通信之共享内存
共享内存 共享内存示意图 共享内存数据结构 struct shmid_ds {struct ipc_perm shm_perm; /* operation perms */int shm_segsz; /* size of segment (bytes) */__kernel_time_t shm_atime; /* last attach time */__kernel_time_t shm_dtime; /* last detach time */__kerne…...
第18周 3-过滤器
过滤器(Filter)概念总结 什么是过滤器 过滤器(Filter)是Java Web应用中用于统一拦截和处理请求的组件,类似于现实生活中的空气净化器或安检。它通过对请求进行前置处理,确保请求符合特定要求。 过滤器的…...
Linux之进程概念
作者主页: 作者主页 本篇博客专栏:Linux专栏 创作时间 :2024年9月28日 基本概念: 进程说白了其实就是一个程序的执行实例,正在执行的程序。 在内核层面来说,就是一个担当分配资源(CPU时间…...
小程序-使用npm包
目录 Vant Weapp 安装 Vant 组件库 使用 Vant 组件 定制全局主题样式 API Promise化 1. 基于回调函数的异步 API 的缺点 2. 什么是 API Promise 化 3. 实现 API Promise 化 4.调用 Promise 化之后的异步 API 小程序对 npm 的支持与限制 目前,小程序中已经…...
【springboot】整合沙箱支付
目录 1. 配置沙箱应用环境2. 配置springboot项目1. 引入依赖2. 配置文件注册下载ngrok 3. 创建支付宝支付服务类4. 支付界面模板5. 控制类实现支付6. 测试 1. 配置沙箱应用环境 使用支付宝账号登录到开放平台控制台。 使用支付宝登录后,看到以下页面,下…...
技术速递|Python in Visual Studio Code 2024年9月发布
排版:Alan Wang 我们很高兴地宣布将于 2024 年 9 月发布适用于 Visual Studio Code 的 Python 和 Jupyter 扩展! 此版本包括以下公告: Django 单元测试支持使用 Pylance 从 inlay 提示转到定义 如果您有兴趣,可以在我们的 Pyth…...
数据结构-3.5.队列的顺序实现
一.队列的顺序实现,初始化操作以及判断队列是否为空: 1.图解: 2.代码: #include<stdio.h> #define MaxSize 10 //定义一个队列最多存储的元素个数 typedef struct {int data[MaxSize]; //用静态数组存放队列元素int f…...
preconnect 预解析
preconnect 是一种浏览器优化技术,用于告诉浏览器提前与指定的域名建立连接,包括DNS解析、TCP握手和TLS协商(如果适用)。这样做可以减少客户端在请求资源时所需的往返时间(RTT),从而提高页面加载…...
Leecode热题100-283.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出: […...
如何高效使用Prompt与AI大模型对话
一、如何与人工智能对话 在人工智能的世界里,提示词(Prompt)就像是一把钥匙,能够解锁AI智能助手的潜力,帮助你更高效地获取信息、解决问题。但如何正确使用这把钥匙,却是一门艺术。本文将带你了解提示词的…...
Java 之深入理解 String、StringBuilder、StringBuffer
前言 由于发现 String、StringBuilder、StringBuffer 面试的时候会经常问到,这里就顺便总结一下:本文重点会以这三个字符串类的性能、线程安全、存储结构这三个方面进行分析 ✨上期回顾:Java 哈希表 ✨目录 前言 String 介绍 String 的不可变…...
常德网站制作公司多少钱/如何免费发布广告
bottom-to-up dummy前言一、案例二、题解总结参考文献前言 链表操作主要在于断链合并。常用的重要思想是bottom-to-up dummy。 一、案例 1)链表排序 2)链表合并 二、题解 1)链表排序 package com.xhu.offer.offerII;public class …...
卓拙科技做网站吗/网络平台怎么创建
安徽工业大学工商学院计算机组成原理试卷12至13学年A卷……………………………… 装 ……………………………… 订 ………………………………… 线 ………………………………课程________________________班级________________________姓名__________________________学号_____…...
宁波网站建设哪家比较好/seo一般包括哪些内容
jar包转换为dll并在C#项目中调用 2021.3.31前提环境1、jar包简介2、jar包生成(.java源文件 -> .class字节码文件 -> .jar包)2.1 利用Eclipse新建Java工程导出jar包3、jar包转dll(使用IKVM)3.1 IKVM.NET简介3.2 下载并配置IK…...
网站日志304/石家庄热搜
文章目录题目描述思路分析数据结构选择字符前后的确定解题代码复杂度分析Github源码题目描述 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回-1. 案例: s “leetcode” 返回0 s “loveleetcod…...
wordpress建站视频教程下载/百度云盘官网登录入口
两个main()函数,即出现两个入口,C不允许的。 解决方法: 1)去掉一个主函数; 2)新建一个工程,将其中一个程序放到新建的工程里,这样就不会冲突了。 问题虽小坑不少...
什么是网站制作app/管理系统
温故而知新~~ 下面是Access配置文件,选择符合的下载 Access数据库12.0配置包_32.exe 下载 Access数据库12.0配置包_X64.exe 下载 首先基础的:C#连接Access数据库,方法与连接Sql类似。 AccPath:Access数据库的路径string ConAcc "P…...