对FPGA加载过程中不同寄存器初始化方式现象的分析

server/2024/9/24 2:51:27/

对FPGA加载过程中不同寄存器初始化方式现象的分析

    • 概述
      • 目的
      • 术语和缩略语
      • 参考资料
    • 相关原理
    • 分析
      • MMCM时钟锁定分析
      • 声明信号时进行初始化
        • RTL测试代码
        • 示波器现象
      • 同步复位/置位初始化
        • RTL测试代码
        • 示波器现象
      • 异步复位/置位初始化
        • RTL测试代码
        • 示波器现象
      • 不进行任何初始化操作,Vivado自动生成
        • RTL测试代码
        • 示波器现象
    • 结论

概述

目的

本文档针对FPGA上电加载过程中不同寄存器初始化方式的现象进行分析。

术语和缩略语

参考资料

  • 《ug470_7Series_Config》 Xilinx

相关原理

FPGA加载过程中非专用配置I/O引脚电平受PUDC_B配置引脚状态影响。PUDC_B 引脚为FPGA配置期间I/O引脚内部上拉电阻使能,低有效。该引脚不可悬空,可以通过小于等于1kΩ的电阻接GND或者VCCO_14。

  • 如果PUDC_B引脚为低电平,配置期间所有非专用配置I/O引脚为高电平状态;

  • 如果PUDC_B引脚为高电平,配置期间所有非专用配置I/O引脚为高阻态。

在这里插入图片描述

分析

针对寄存器初始化方式对寄存器输出值的影响,分以下四种情况进行分析:

a) 声明信号时进行初始化;

b) 同步复位/置位初始化;

c) 异步复位/置位初始化;

d) 不进行任何初始化操作,Vivado 自动生成。

MMCM时钟锁定分析

通过图 2、图 3可知,MMCM输出时钟在FPGA加载完成指示信号(config_done)置位后12us开始输出,但是MMCM锁定信号locked在config_done信号置位后40us才置位。

  • 0时刻:config_done信号置位;
  • 12us:MMCM开始输出时钟;
  • 40us:MMCM的locked置位,时钟锁定。

在这里插入图片描述

在这里插入图片描述

声明信号时进行初始化

RTL测试代码
signal a_init_0 : std_logic := '0';
signal a_init_1 : std_logic := '1';--信号声明时进行初始化
process (clk_out1_50MHz) beginif rising_edge (clk_out1_50MHz) thena_init_0 <= '1';a_init_1 <= '0';end if;
end process;
示波器现象

通过图 5 可知,只在信号声明时初始化的信号,当config_done置位后变为初始状态,但只要有时钟,不管时钟是否锁定都会根据RTL代码对寄存器重新赋值。

  • 0时刻:config_done 信号置位;a_init_0 初始化为 ‘0’;a_init_1 初始化为 ‘1’;

  • 12us:MMCM 开始输出时钟,此时根据 RTL 代码 a_init_0 变为 ‘1’;a_init_1 变为 ‘0’。

在这里插入图片描述

同步复位/置位初始化

RTL测试代码
signal a_srst_0 : std_logic;
signal a_srst_1 : std_logic;--同步复位/置位初始化
process (clk_out1_50MHz) beginif rising_edge (clk_out1_50MHz) thenif (locked = '0') thena_srst_0 <= '0';a_srst_1 <= '1';elsea_srst_0 <= '1';a_srst_1 <= '0';end if;end if;
end process;
示波器现象

通过图 7可知,同步复位/置位的信号在config_done置位后&&时钟产生之前初始值都默认为低电平,时钟产生之后到locked置位前才是同步复位/置位状态。

  • 0时刻:config_done 信号置位;a_srst_0、a_srst_1 默认值均为 ‘0’;

  • 12us:MMCM 开始输出时钟;a_srst_0 同步初始化为 ‘0’;a_srst_1 同步初始化为 ‘1’;

  • 40us:MMCM 的 locked 置位,时钟锁定;此时根据 RTL 代码 a_ srst_0 变为 ‘1’;a_ srst_1 变为 ‘0’。

在这里插入图片描述

异步复位/置位初始化

RTL测试代码
signal a_arst_0 : std_logic;
signal a_arst_1 : std_logic;--异步复位/置位初始化
process (clk_out1_50MHz,locked) beginif rising_edge (clk_out1_50MHz) thenif (locked = '0') thena_arst_0 <= '0';a_arst_1 <= '1';elsea_arst_0 <= '1';a_arst_1 <= '0';end if;end 
示波器现象

通过图 9 可知,异步复位/置位在 config_done 置位后 && locked 置位前即为同步复位/置位状态。

  • 0时刻:config_done 信号置位;a_arst_0 异步初始化为 ‘0’;a_arst_1 异步初始化为 ‘1’;

  • 40us:MMCM 的 locked 置位,时钟锁定;此时根据 RTL 代码 a_ arst_0 变为 ‘1’;a_ arst_1 变为 ‘0’。

在这里插入图片描述

不进行任何初始化操作,Vivado自动生成

RTL测试代码
signal a_0 : std_logic;
signal a_1 : std_logic;--不进行初始化
process (clk_out1_50MHz) beginif rising_edge (clk_out1_50MHz) thena_0 <= '1';a_1 <= '0';end if;
end process;
示波器现象

通过图 11可知,未初始化的信号在 config_done 置位后 && 时钟产生之前初始值都默认为低电平,时钟产生之后则为 RTL 逻辑状态。

在这里插入图片描述

结论

a) 逻辑开发前需先确定硬件状态,FPGA 配置引脚 PUDC_B 不可悬空,根据需要上拉或者下拉;

b) 在不进行初始化情况下,Xilinx 编译软件 Vivado 默认所有寄存器初始化为低电平;

c) 异步初始化和信号声明初始化均在 config_done 置位后生效;而同步初始化和不初始化信号在存在时钟之后&&locked置位之前生效。


http://www.ppmy.cn/server/121126.html

相关文章

密集行人数据集 CrowdHumanvoc和yolo两种格式,yolo可以直接使用train val test已经划分好有yolov8训练200轮模型

密集行人数据集 CrowdHuman voc和yolo两种格式&#xff0c;yolo可以直接使用 train val test已经划分好 有yolov8训练200轮模型。 CrowdHuman 密集行人检测数据集 数据集描述 CrowdHuman数据集是一个专为密集行人检测设计的数据集&#xff0c;旨在解决行人密集场景下的检测挑…

力扣(leetcode)每日一题 2414 最长的字母序连续子字符串的长度

题干 字母序连续字符串 是由字母表中连续字母组成的字符串。换句话说&#xff0c;字符串 “abcdefghijklmnopqrstuvwxyz” 的任意子字符串都是 字母序连续字符串 。 例如&#xff0c;“abc” 是一个字母序连续字符串&#xff0c;而 “acb” 和 “za” 不是。 给你一个仅由小写…

一行命令,一分钟轻松搞定SSL证书自动续期

httpsok 是一个便捷的 HTTPS 证书自动续签工具&#xff0c;专为 Nginx 服务器设计。已服务众多中小企业&#xff0c;稳定、安全、可靠。现在的网站SSL免费证书有效期只有3个月&#xff0c;所以就会有经常更快SSL证书的需求&#xff0c;如果手上需要更换的SSL证书比较多的情况下…

Spring扩展点系列-MergedBeanDefinitionPostProcessor

文章目录 简介源码分析示例示例一&#xff1a;Spring中Autowire注解的依赖注入 简介 spring容器中Bean的生命周期内所有可扩展的点的调用顺序 扩展接口 实现接口ApplicationContextlnitializer initialize AbstractApplicationContext refreshe BeanDefinitionRegistryPos…

BDE在Win10下的ntwdblib.dll问题

老旧的delphi7运行在WIN10以上&#xff0c;用BDE连接MSSQL2008时&#xff0c;使用默认驱动MSSQL&#xff0c;登录时报错&#xff1a; Vendor initialization failed. Cannot load an IDAPI serverice library File :NTWDBLIB.dll 解决办法&#xff1a; 1、拷贝ntwdblib.dl…

【Linux】权限理解(超详细)

目录 用户 角色切换 创建和删除普通用户 权限管理 文件访问者分类&#xff08;人&#xff09; 文件类型和访问权限&#xff08;事物属性&#xff09;​编辑 文件访问权限的相关设置方法 chmod chown chgrp 问题解答 粘滞位 用户 Linux下有两种用户&#xff1a;超级…

C++的初阶模板和STL

C的初阶模板和STL 回顾之前的内存管理&#xff0c;我们还要补充一个概念&#xff1a;内存池 也就是定位new会用到的场景&#xff0c;内存池只会去开辟空间。 申请内存也就是去找堆&#xff0c;一个程序中会有很多地方要去找堆&#xff0c;这样子效率会很低下&#xff0c;为了…

RK3568平台(音频篇)Tinyalsa open调用流程

一.TinyALSA 简介 TinyALSA 是一个轻量级的 ALSA(Advanced Linux Sound Architecture,高级 Linux 音频架构)实现,用于与 Linux 内核中的 ALSA(高级 Linux 声音架构)进行交互,旨在为嵌入式系统和资源受限的设备提供音频支持。 ALSA是位于Linux Kernel层面的音频系统。T…