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

总结

再见

相关推荐
9527华安2 小时前
FPGA实现MIPI转FPD-Link车载同轴视频传输方案,基于IMX327+FPD953架构,提供工程源码和技术支持
fpga开发·架构·mipi·imx327·fpd-link·fpd953
热爱学习地派大星3 小时前
FPGA远程升级 -- FLASH控制
fpga开发
szxinmai主板定制专家11 小时前
【国产NI替代】基于国产FPGA+兆易创新GD32F450的全国产16振动+2转速(24bits)高精度终端采集板卡
fpga开发
szxinmai主板定制专家13 小时前
【国产NI替代】基于FPGA的32通道(24bits)高精度终端采集核心板卡
大数据·人工智能·fpga开发
HIZYUAN18 小时前
AGM FPGA如何配置上拉或者下拉电阻
fpga开发
∑狸猫不是猫18 小时前
(13)CT137A- 简易音乐盒设计
fpga开发
ThreeYear_s1 天前
基于FPGA 的4位密码锁 矩阵键盘 数码管显示 报警仿真
fpga开发·矩阵·计算机外设
Anin蓝天(北京太速科技-陈)1 天前
252-8路SATAII 6U VPX高速存储模块
fpga开发
如何学会学习?1 天前
2. FPGA基础了解--全局网络
fpga开发
Anin蓝天(北京太速科技-陈)1 天前
271-基于XC7V690T的12路光纤PCIe接口卡
嵌入式硬件·fpga开发