跨时钟域数据同步

在复杂的逻辑设计中,跨时钟域数据同步至关重要。本文介绍了两种常用策略:使用双端口RAM或异步时钟FIFO,以及通过多级寄存器缓存数据。以数据采集模块为例,当50MHz时钟的trig_in信号到来时,需记录其在50MHz AD采样数据中的位置。采用两级FIFO结构,50MHz时钟下缓存trig信息,150MHz时钟下进行锁存和写入操作,确保数据同步。
摘要由CSDN通过智能技术生成

   在一些较复杂的逻辑设计中,通常会涉及到多个时钟域,在跨时钟域设计时,要保证数据同步,可采用如下策略使得设计满足时序要求:

(1) 采用双端口RAM或异步时钟FIFO

(2) 利用多级寄存器缓存数据

      最近在做数据采集模块时,关于trig_in信号的处理就是这样处理的。trig_in是一个脉冲信号,由DDS模块产生,在DDS模块中,每个信号周期的起始都会产生一个周期同步脉冲,也就是trig_in,DDS模块采用的是50MHz时钟,产生信号的周期大概100Hz~600Hz。当trig_in脉冲信号到来时,数据采集模块要记录此时trig_in对应的AD采样数据在一帧数据(1020个采样点数据)中的位置。AD采样时钟是50MHz,DMA时钟是150MHz,采用两级FIFO结构,前一级存储AD采样点,后一级缓存前一级数据,并添加帧信息。为保证数据同步:在50M时钟下,先将trig信息缓存到reg变量trig_position中,然后在150M时钟下,将trig_position锁存到trig_channel_reg寄存器中,之后在150M时钟下将trig_channel_reg锁存到trig_channel_info,最后在150M时钟下将trig_channel_info写入到第二级FIFO中。主要代码如下:

    //========== trig_position ==========        
    always @(posedge ad_clk) begin
      trig_
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值