XPM_CDC_ASYNC_RST

免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。

读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。

本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。

若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。


前言

本期介绍第二个Xilinx FPGA跨时钟域原语XPM_CDC_ASYNC_RST


一、Introduction

  • 异步复位信号同步到目标时钟域

    复位信号是异步的,意味着它与系统中的时钟信号不直接同步。因此,必须将该异步复位信号与目标时钟域同步,以避免跨时钟域时引发的亚稳态问题。这个宏的作用就是帮助将异步复位信号同步到特定的时钟域。

  • 复位信号异步断言(assertion)

    当复位信号被"断言"(通常表示复位信号有效,即被激活时),该信号是异步的,即它与目标时钟域没有同步关系。

  • 同步取消(deassertion)复位信号

    当复位信号被"取消"(即无效时),它会与目标时钟域同步。这样可以确保在取消复位时,系统能在时钟的上升沿或下降沿精确同步复位信号的变化。

  • 复位信号的极性

    你可以定义复位信号的极性,即复位信号是高电平有效还是低电平有效。

  • 输出脉冲的最小宽度

    当复位信号被断言时,宏会控制输出复位脉冲的最小宽度。这个最小宽度是通过同步器中寄存器级数来决定的。寄存器级数越多,脉冲的宽度可能越大,且同步器的稳定性也越好

注:最小输入脉冲断言取决于寄存器的复位或设置引脚的设置和保持要求。有关目标架构,请参阅各自的直流和交流开关特性数据表。

二、使用方法

javascript 复制代码
    xpm_cdc_async_rst #(
      .DEST_SYNC_FF   (4),    // 设置用于同步的寄存器级数
      .INIT_SYNC_FF   (0),    // 仿真初始化参数使能
      .RST_ACTIVE_HIGH(0)    // DECIMAL; 0=active low reset, 1=active high reset
   )
   xpm_cdc_async_rst_inst (
      .dest_arst(dest_arst),       //目的复位信号
      .dest_clk (dest_clk ),       // 目的时钟
      .src_arst (src_arst )       // 源复位信号
   );   

三、仿真

javascript 复制代码
module xpm_test(
input       dest_clk    ,
input       src_arst    ,
output     dest_arst  

    ); 
    xpm_cdc_async_rst #(
      .DEST_SYNC_FF   (4),    // 设置用于同步的寄存器级数
      .INIT_SYNC_FF   (0),    // 仿真初始化参数使能
      .RST_ACTIVE_HIGH(0)    // DECIMAL; 0=active low reset, 1=active high reset
   )
   xpm_cdc_async_rst_inst (
      .dest_arst(dest_arst),       //目的复位信号
      .dest_clk (dest_clk ),       // 目的时钟
      .src_arst (src_arst )       // 源复位信号
   );     


endmodule
javascript 复制代码
module TB();
    
 reg  clk1       ;
 reg  clk2       ;
 reg  rst        ;
 reg  rst_r = 1  ;
 wire dest_arst  ;
 initial begin
 clk1= 1;
 clk2= 1;
 rst = 1;
 
 #200
 rst = 0;
 
 #800
 rst = 1;  
    
 end
 
 always  #5   clk1 = ~clk1;
 always  #10  clk2 = ~clk2;
  
 always@(posedge clk2) 
    rst_r <= rst ;
 
 xpm_test t1(
.  dest_clk (  clk1     ),
.  src_arst (  rst_r    ),
. dest_arst ( dest_arst )
    ); 

endmodule

总结

再见

相关推荐
北城笑笑4 小时前
FPGA 14 ,硬件开发板分类详解,FPGA开发板与普通开发板烧录的区别
fpga开发·fpga
2202_754421544 小时前
一个计算频率的模块
驱动开发·fpga开发
小灰灰的FPGA5 小时前
低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能
fpga开发
fei_sun1 天前
【Verilog】第一章作业
fpga开发·verilog
深圳市雷龙发展有限公司longsto1 天前
基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面
fpga开发
9527华安1 天前
FPGA实现PCIE3.0视频采集转10G万兆UDP网络输出,基于XDMA+GTH架构,提供工程源码和技术支持
网络·fpga开发·udp·音视频·xdma·pcie3.0·万兆网
able陈1 天前
为什么verilog中递归函数需要定义为automatic?
fpga开发
fei_sun1 天前
【Verilog】第二章作业
fpga开发·verilog
碎碎思1 天前
如何使用 Vivado 从源码构建 Infinite-ISP FPGA 项目
fpga开发·接口隔离原则
江山如画,佳人北望1 天前
fpga-状态机的设计及应用
fpga开发