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

时钟、复位与上电初始化

目录

  • 1. 复位
    • 2.1. 异步复位 同步释放
      • clk未采样到rst_async_n为低的情形
    • 2.2. Xilinx FPGA复位设计
      • reg信号初始值
      • 基于PLL锁定(locked)复位设计
      • XPM_CDC_ASYNC_RST
  • 2. 时钟

1. 复位

FPGA中复位设计总结
深入理解复位—同步复位,异步复位,异步复位同步释放(含多时钟域)

  • 同步复位:指复位信号同步执行、同步释放。优点是时序简单,无亚稳态问题。缺点是响应依赖同步clk。Xilinx FPGA内置的FDRE含有同步复位接口,推荐同步复位。

  • 异步复位:指复位信号异步执行、异步释放。优点是不依赖同步clk、响应迅速。缺点是复位释放的时候,时钟若采样复位信号跳变时刻,寄存器信号容易出现亚稳态。

例如

always@(posedge clkornegedge rst_n)beginif(!rst_n)b<=1'b0;elseb<=a;end

因此为了保证全局复位不消耗太多组合逻辑,也能保证避免异步复位释放导致的亚稳态,如何作?

2.1. 异步复位 同步释放

  • 异步复位,同步释放:复位信号异步执行,释放时同步到时钟。

例如下面代码中使用异步复位信号rst_async_n,生成rst_sync_n就实现了异步置0、同步置1

// rst_async_n为异步复位信号always@(posedge clkornegedge rst_async_n)beginif(!rst_async_n)begin rst_s1<=1'b0;rst_sync_n<=1'b0;endelsebegin rst_s1<=1'b1;rst_sync_n<=rst_s1;end end//由于rst_sync_n复位启动还是异步的,所以必须加入敏感列表中always@(posedge clkornegedge rst_sync_n)beginif(!rst_sync_n)dout<=1'b0;elsedout<=din;end

综合电路如下:

出现亚稳态的波形图如下

如上图所示:

  • T1时刻:rst_async_n异步复位启动,rst_s1和rst_sync_n全部拉低,与clk无关

注意T1时刻是异步的,不涉及clk采样,因此rst_s1和rst_sync_n不会出亚稳态

  • T2时刻:rst_async_n异步复位释放,此时clk采样rst_async_n边沿,采样值不定,因此rst_s1出现0、1之间的亚稳态。rst_sync_n仍然保持0
  • T3时刻:rst_s1可能恢复也可能还是亚稳态,但clk采样到rst_async_n为1,因此rst_s1恢复为1。rst_sync_n则相当于对T2时刻的rst_async_n打两拍处理,因此会稳定至0或1两种状态,并处于clk时钟域下!

发现没有T2时刻本质上是对rst_async_n作电平同步!!!那么rst_sync_n一定会稳定在clk时钟域下的高电平。
参考异步时钟亚稳态 的解决方案——单bit信号

即T2时刻的逻辑可以看成:

always@(posedge clk)begin rst_s1<=rst_async_n;rst_sync_n<=rst_s1;end

clk未采样到rst_async_n为低的情形

如果在clk稳定之前rst_async_n就已经拉高了,如下图所示

可以看出rst_sync_n复位会却取决于上电初始值,初始值为1’b1则不会产生复位、初始值为1’b0实际只复位1拍。

2.2. Xilinx FPGA复位设计

第三章第1讲 Verilog语法reg变量复位使用以及异步复位同步释放设计(FPGA/IC设计公开课)- bilibili
Xilinx FPGA异步复位同步释放——同步后的复位当作同步复位还是异步复位?【FPGA探索者】
聊一聊xilinx 7系列推荐使用的复位方式

Xilinx复位准则:

  • 尽量少用复位。数据路径的复位通常是不需要的,因为,老的数据总会被新数据“冲走”。控制路径可以加入复位,以确保FPGA在复位时状态可控。
http://www.cnnetsun.cn/news/2573033.html

相关文章:

  • WeChat Toolbox:3个核心功能让你的微信管理效率提升300%
  • ANSYS Workbench仿真(一):Design Modeler几何处理核心技巧
  • 在Linux中部署并初始化MySQL的多种方式
  • iniparser与C++集成:如何在C++项目中安全使用C语言INI解析库
  • 从脚本到平台:超自动化巡检的技术演进
  • 深入解析 VS Code Markdown Mermaid 插件:如何在技术文档中高效绘制专业图表
  • 我放弃了保研,三年后去大厂面试,发现面试官是当年劝我读研的室友
  • Agent赋能智能运维:如何实现AI自动监控服务器并触发故障工单的闭环架构?
  • 嵌入式Linux内存稳定性验证:从memtester移植到实战测试
  • WinForms文件拖放失效的底层原因与可靠实现方案
  • 如何快速修复MTK设备的Preloader与GPT分区表
  • WeChatExporter:永久保存微信聊天记录的终极免费解决方案
  • GTA模组管理器Mod Loader:彻底改变经典游戏模组生态的完整技术解析
  • 老Mac升级macOS终极指南:五步解决硬件兼容性问题
  • Avogadro 2:5分钟掌握开源分子建模,开启化学可视化新时代
  • Python构建带担保的智能体招聘系统:架构、实现与安全
  • Agent-dispatch:让现有项目自主协作的轻量级调度系统设计与实现
  • 三步掌握AMD锐龙SMUDebugTool:免费硬件调试终极指南
  • 窗口大小不听话?WindowResizer让你的桌面布局随心所欲
  • 跨平台资源下载神器:如何轻松获取全网无水印内容
  • 手把手教你用cam_lidar_calibration标定镭神C32雷达与相机(含ring信息处理)
  • 深度解析:OpenCore Legacy Patcher的技术实现原理与兼容性方案
  • 供应链攻击后基础设施深度审计:从应急响应到云原生安全加固
  • H200一夜涨30%,AI的便宜时代结束了
  • Tomcat管理后台渗透:权限模型、War部署与Shell执行全链路解析
  • LLaMA-Mesh:文本生成可导入Blender的OBJ网格模型
  • Arduino_GFX性能优化秘籍:如何让你的显示效果提升300%
  • beeplay源码解析:put()与start()方法如何驱动音乐播放流程
  • 如何在iOS应用中快速集成DZNWebViewController:5分钟入门教程
  • QMCFLAC音频格式转换工具:3步解决QQ音乐加密文件播放限制