XPM_CDC_PULSE

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

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

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

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


前言

本期介绍第六个Xilinx FPGA跨时钟域原语XPM_CDC_PULSE


一、Introduction

  • 脉冲同步:这个宏用于将一个脉冲信号从源时钟域同步到目标时钟域。脉冲是一种短暂的信号,只有在源时钟域正确启动时,才能在目标时钟域生成一个周期的脉冲信号。

  • 脉冲大小:无论源时钟域中的脉冲大小如何(脉冲的持续时间),在目标时钟域中最终生成的脉冲总是目标时钟的一个周期。也就是说,这个宏将源时钟域中的脉冲 "压缩" 为目标时钟域中的一个单周期脉冲。

  • 采样要求:为了确保正确操作,输入脉冲信号必须被目标时钟域采样两次或更多次。这通常通过多级寄存器来实现,用于消除时钟域之间的不确定性,避免亚稳态现象。

  • 寄存器阶段:可以定义用于同步的寄存器级数,类似于标准的 CDC 同步机制。更多的寄存器级数可以提供更高的稳定性,但会带来额外的延迟。

  • 复位信号:该宏支持可选的源和目标复位信号,能够在必要时复位脉冲传输逻辑,确保整个传输链在启动或复位时处于已知状态。

  • 脉冲输入间隔:在源时钟域中,任何两个连续脉冲信号之间必须有一个最小的时间间隔。这个间隔的最小值为 2×max(src_clk period,dest_clk period)

  • 生成目标脉冲 :确保在每个 src_pulse 的上升沿都能生成一个等于一个目标时钟周期(dest_clk period)的脉冲。这意味着脉冲的同步过程是可靠的,不会出现丢失或错误的脉冲。

  • 保证稳定性:这个最小间隔的要求有助于防止亚稳态现象的发生,并确保每个脉冲能够被目标时钟域正确采样和处理。

  • 同时复位:这两个复位信号必须同时被激活(asserted),以确保逻辑电路的同步复位。

  • 持续时间要求:复位信号需要保持激活状态的最小时间为:

    ((DEST_SYNC_FF+2)×dest_clk_period)+(2×src_clk_period)

二、使用方法

javascript 复制代码
module xpm_test(
input         dest_clk    ,
input         dest_rst    ,
input         src_clk     ,
input         src_pulse   ,
input         src_rst     ,
output        dest_pulse   
    ); 
    
   xpm_cdc_pulse #(
      .DEST_SYNC_FF(2),   // DECIMAL; range: 2-10
      .INIT_SYNC_FF(1),   // DECIMAL; 0=disable simulation init values, 1=enable simulation init values
      .REG_OUTPUT  (0),     // DECIMAL; 0=disable registered output, 1=enable registered output
      .RST_USED    (1),       // DECIMAL; 0=no reset, 1=implement reset
      .SIM_ASSERT_CHK(0)  // DECIMAL; 0=disable simulation messages, 1=enable simulation messages
   )
   xpm_cdc_pulse_inst (
      .dest_pulse(dest_pulse), 
      .dest_clk  ( dest_clk ),     
      .dest_rst  ( dest_rst ),    
      .src_clk   ( src_clk  ),       
      .src_pulse ( src_pulse),   
      .src_rst   ( src_rst  )
   );

三、仿真

javascript 复制代码
module TB();
    
reg    dest_clk   ;
reg    dest_rst   ;
reg    src_clk    ;
reg    src_pulse  ;
reg    src_rst    ;
wire  dest_puls   ; 


initial begin
dest_clk     = 0;
src_clk      = 0;
dest_rst     = 0;
src_rst      = 0;
src_pulse    = 0;

#100
dest_rst     = 1;
src_rst      = 1;
#100
dest_rst     = 0;
src_rst      = 0;

#100
src_pulse    = 1;
#100 
src_pulse    = 0;

#100
src_pulse    = 1;
#100 
src_pulse    = 0;


end

always #5   dest_clk = ~dest_clk;
always #2.5 src_clk  = ~src_clk;



xpm_test tp0(
.  dest_clk  ( dest_clk  ),
.  dest_rst  ( dest_rst  ),
.  src_clk   ( src_clk   ),
.  src_pulse ( src_pulse ),
.  src_rst   ( src_rst   ),
.  dest_pulse( dest_puls )
    ); 




endmodule

总结

再见

相关推荐
fei_sun15 小时前
【Verilog】第一章作业
fpga开发·verilog
深圳市雷龙发展有限公司longsto16 小时前
基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面
fpga开发
9527华安20 小时前
FPGA实现PCIE3.0视频采集转10G万兆UDP网络输出,基于XDMA+GTH架构,提供工程源码和技术支持
网络·fpga开发·udp·音视频·xdma·pcie3.0·万兆网
able陈20 小时前
为什么verilog中递归函数需要定义为automatic?
fpga开发
fei_sun21 小时前
【Verilog】第二章作业
fpga开发·verilog
碎碎思1 天前
如何使用 Vivado 从源码构建 Infinite-ISP FPGA 项目
fpga开发·接口隔离原则
江山如画,佳人北望1 天前
fpga-状态机的设计及应用
fpga开发
晓晓暮雨潇潇1 天前
Xilinx IP核(3)XADC IP核
fpga开发·vivado·xadc·ip核
CWNULT1 天前
AMD(Xilinx) FPGA配置Flash大小选择
fpga开发
碎碎思2 天前
很能体现FPGA硬件思维的一道面试题
fpga开发