用FIFO完成时钟域转换的一个例子

本文介绍了在项目中如何使用FIFOIP核中的异步FIFO进行时钟域转换,将100MHz信号转换为250MHz信号,以适应JESD204b接口的需求。通过五个异步FIFO和计数器管理读写操作,确保了信号的正确同步和转换效果。
摘要由CSDN通过智能技术生成

用FIFO完成时钟域转换的一个例子

问题描述

在做项目过程中,遇到一个问题需要进行时钟域转换。该问题具体为,信号处理部分采用的时钟为100MHz,而在JESD204b接口部分,其核时钟为250MHz。在将数据给到接口时,需要进行时钟域转换。本实现方案采用FIFO IP核,来设计时钟域转换模块。

在本设计中,发射信号的基带采样率为500M,基带处理时钟为100M,所以基带调制得到的波形为5路并行,它们的初始相位不相同。接口部分的处理时钟为jesd204b核时钟,为250M。为了保证500M采样率,需要两路信号并行。所以时钟域转换模块需要将5路100M时钟下的信号转换成2路250M时钟下的信号。选择采用5个异步FIFO来完成该操作。

解决方法

FIFO(First Input First Output),即先入先出队列。在vivado中,FIFO IP核分为同步和异步。同步FIFO可以作为数据缓冲器使用,而异步FIFO可以对信号进行时钟域的转换。异步FIFO需要输入读写两个时钟。其读和写操作分别在两个时钟下进行。

五个异步FIFO的写时钟为100M时钟,读时钟为250M时钟。五个FIFO的输入为5路并行的100M时钟下的输入信号,输出为相应的5路250M时钟下的FIFO输出信号。我们要得到的转换后的信号为两路250M时钟下的信号,这样才能保证采样率为500M。

转换的方法如下。在每一个读时钟,五个FIFO同时进行写操作,将五路的输入数据写入五个FIFO。而在每一个写时钟,只有两个FIFO进行读操作。具体选择依据是一个计数器的值。计数器从1至5循环计数。当计数器为1时,FIFO1和FIFO2的读使能打开,其输出信号分别赋值给两路输出数据;当计数器为2时,FIFO3和FIFO4的读使能打开;当计数器为3时,FIFO5和FIFO1的读使能打开;当计数器为4时,FIFO2和FIFO3的读使能打开;当计数器为5时,FIFO4和FIFO5的读使能打开。这样,在250M时钟下,就得到了两路并行的输出信号。即完成了信号从100M时钟到250M时钟的时钟域转换过程。

需要注意的是,在以上方案中需要保证五路输入信号写入五个FIFO的时序一致,从而保证从FIFO中读取数据时不会错位。所以对于五个FIFO,使用同一个写使能信号,来保证五路输入数据同时被写入五个FIFO。另一方面,为了保证稳定,在五个FIFO的可读数据都大于十个时,计数器再开始计数,之后再按照计数器的值进行读操作。

类似地,在接收端同样需要时钟域转换模块,将两路250M时钟下的Jesd204b接口输出数据,转换成五路100M时钟下的信号。与发射端不同,在接收端,读时钟为250M,写时钟为100M。另一方面,接收端需要用计数信号来控制五个FIFO的写使能信号,而读使能信号一直打开。

具体工作流程如下:在每一个读时钟,只有两个FIFO进行写操作。选择依据是根据计数器的值。当计数器为1时,FIFO1和FIFO2的写使能打开,两路输入信号写入两个FIFO;当计数器为2时,FIFO3和FIFO4的写使能打开;当计数器为3时,FIFO5和FIFO1的写使能打开;当计数器为4时,FIFO2和FIFO3的写使能打开;当计数器为5时,FIFO4和FIFO5的写使能打开。

而在每一个读时钟,五个FIFO读使能信号同时打开,将输出数据赋给整个模块的输出,即得到了转换后的100M时钟下的五路信号。

结果

时钟域转换模块输入输出信号波形图
如上图所示为时钟域转换模块的仿真结果。从上至下为五路输入信号,后两路信号为输出信号。输入信号为在100M时钟下采样,五路信号并行,对于每一路信号来说为100M采样率。而输出信号为250M时钟下采样,两路并行,对于每一路信号来说采样率为250M。可以明显的观察到,输出信号的一路相比于输入信号的一路,正弦波形更加清晰,这是因为输出信号的每一路采样率相当于250M,而输入信号的每一路采样率相当于100M。

需要注意的是,FIFO模块在复位之后,需要延时几个周期,才能正常工作。所以设置一个起始信号,在复位信号来到时,起始信号拉低。在复位信号过去十个周期之后,起始信号拉高。在起始信号拉低时,计数信号不计数,始终为0。在起始信号拉高之后,计数信号再从1到5开始计数,电路的后续工作才开始进行。这样做保证了信号写入FIFO的顺序是正确的。

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值