十二 · 2021年11月15日

千里时钟“一线牵”

✎ 编 者 按 
逻辑出身的农民工兄弟在面试时总难以避免“跨时钟域”的拷问,在诸多跨时钟域的方法里,握手是一种常见的方式,而Stream作为一种天然的握手信号,不妨看看它里面是如做跨时钟域的握手的。

StreamCCByToggle

在对吞吐要求不是特别高时,StreamCCByToggle是一个不错的选择:

作为两个时钟阵营的信号交互,StreamCCByToggle双方各自定义了一个信使:

图片.png

双方握手的建立正是通过信使target,hit这种单比特信号的跨时钟域交互来进行信息的交互。基于这对信使,双方各自定义了各自的行动规则

作为信号源时钟域的gg,自身的targe信号初始值和目标时钟域mm的hit初始值相同,当有新的任务要发送给目标时钟域mm时,立即检测自身target值与目标时钟域的hit值是否相同,若相同,则表示目标mm可以接受这次任务,那么就把本次任务的内容暂存在“鹊桥”data寄存器上,等目标mm来取,同时准备接受新的任务(input。fire),否则需要等目标mm处理完之前的任务(stream.fire)。

图片.png

图片.png

在最后,为时序优化stream做m2spipe输出至output时钟域。

StreamCCByToggleWithoutBuffer

除了StreamCCByToggle,另一个握手处理跨时钟域的例子便是StreamCCByToggleWithoutBuffer了:

图片.png

粗略一看,切莫以为只是少了一个popArea里stream.m2sPipe,这个版本效率相较于前者,略低一些:

图片.png

StreamFifoCC

这个就没有什么好说的了,通过fifo来实现stream信号的跨时钟域,效率最高,资源相对也会多一些,适用于追求高吞吐的场景。

写在最后

逻辑处理里很多总线都是基于Stream这种信号来实现的(如AXI4家族),通过上面的方法,可以很容易根据应用需求,做跨时钟域的处理。

☆ END ☆

作者:玉骐
原文链接:https://mp.weixin.qq.com/s/MyU_9kNNcyG9z8vCnJPWXw
微信公众号:
 title=

推荐阅读

更多SpinalHDL技术干货请关注Spinal FPGA专栏。
推荐阅读
关注数
1581
内容数
133
用SpinalHDL提升生产力
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息