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

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)

二、使用方法

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  )
   );

三、仿真

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


总结

再见


http://www.kler.cn/news/362593.html

相关文章:

  • Cilium + ebpf 系列文章- (七)Cilium-LoadBalancer类型的SVC的IPPool
  • stm32 nor flash fats 文件系统加载失败问题
  • kafka自定义配置信息踩坑
  • Python网络通信:从基础到高级应用
  • RISC-V笔记——Pipeline依赖
  • 华为OD机试 - 篮球比赛 - 递归(Java 2024 E卷 100分)
  • 安全见闻(7)——开阔眼界,不做井底之蛙
  • create-vite my-vite-uniapp-project
  • YOLO V3 网络构架解析
  • 群控系统服务端开发模式-程序草图设计
  • idea 开发插件
  • Maven入门到实践:从安装到项目构建与IDEA集成
  • gin入门教程(5):请求参数处理
  • stm32F103 实现呼吸灯效果
  • ubuntu 22.04网线连接无ip、网络设置无有线网界面(netplan修复)
  • 求最大公约数(c语言)
  • LINUX设备OTA时无法从HTTP服务器(TOMCAT)下载文件
  • GRU神经网络理解
  • LabVIEW提高开发效率技巧----插入式架构
  • 力扣 简单 70.爬楼梯
  • 1024是什么日子
  • 数据结构《顺序表》
  • 通过微信小程序实现对接企业微信客服
  • 【Java Script引擎有哪些】
  • JavaWeb合集11-Maven高级
  • MySQL 的意向锁(Intention Locks)原理详解