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

总结

再见

相关推荐
北京青翼科技10 小时前
青翼基于PCIe总线架构的4路HD-SDI/3G-SDI视频图像模拟源丨图像处理
fpga开发·图像模拟源·fpga开发板·pcie板卡
涛tao讲道14 小时前
星载FPGA选型与抗辐射设计手册
fpga开发·抗单粒子翻转·涛tao悟道·涛的天道观·seu
艾芯微科技14 小时前
钰泰 ETA6973PQ3Y|QFN3×3 2A 同步降压 Buck,I2C 可配置多档输出,动态调压 PMIC
网络·单片机·嵌入式硬件·fpga开发·集成测试·51单片机
NamoAmitabha12814 小时前
lwIP 问答---deepseek
fpga开发
吉他英雄一里14 小时前
时钟IP核(MMCM PLL)
fpga开发
星夜离尘5615 小时前
FPGA实现CRC-8/SMBUS:从参数和位序核对到1041次自检
fpga开发·verilog·fpga·crc
匠行科技1 天前
6U‑VPX 高密度异构处理板硬件方案实践
fpga开发·硬件工程
努力搬砖的小H1 天前
FPGA应用技巧之AXI4-FULL-uiFDMA IP仿真验证
经验分享·fpga开发·axi
hexiaoyan8272 天前
高速图像采集卡处理板卡设计原理图:10-基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台
fpga开发·高速图像采集·图像采集卡·c6678板卡
szxinmai主板定制专家2 天前
储能EMS + 协调控制器实战:RK3568/3576/3588+FPGA+AI 故障录波与诊断
人工智能·深度学习·机器学习·fpga开发·rk3588·rk3576·协调控制器