微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 跨时钟域,数据传递,请高手指点!

跨时钟域,数据传递,请高手指点!

时间:10-02 整理:3721RD 点击:

我遇到这样一个问题:
片上ram的时钟是clk,位宽是64bits,
片外sdram的时钟是sd_clk,位宽是32bits
现在要在片上和片外传递数据,
1)将片上ram里的数据存到片外sdram中去
2)将片外sdram里的数据读入到片内,但是不用存入片上ram里。
clk和sd_clk的关系不确定,考虑:a)将clk二分频后给sd_ram用;b)clk和sd_clk完全异步,但是clk一定会比sd_clk快。
请问,时钟方案 a) 和 b)那种方案要好一点呢?具体要怎么解决呢?
今天看了一天的跨时钟域设计文档,脑袋都有点大了。O(∩_∩)O谢谢!
另外,如果把clk二分频后给sd_clk这个算是跨时钟域吗?好像有文档提到过这样不算是跨时钟域。

有软件参与就好办,如果没有软件可以考虑fifo

    请问有软件参与是什么意思,有cpu用总线吗?
    再就是,用时钟方案a的话,就是直接传,只用寄存器打拍可以吗?O(∩_∩)O谢谢!



    SDRAM读取latency比较大,你要控制好节拍

sd_clk比clk速度快吧?如果比clk还慢,直接用clk就好了,用一个时钟多好。

在线关注中。

    怎么讲呢?是sdram的时钟可能比我的片上时钟要慢呀!我片上时钟可能是250MHz, sdram没这么快的吧。

个人建议两个时钟完全异步处理,干净利索。

版大是建议clk和sd_clk是两个完全不相干的信号。麻烦版大讲详细点思路吧,第一次接触这样的问题,看资料完全没有头绪。
O(∩_∩)O谢谢了!



    纯异步时钟处理的话,有一些好处。
1. 外部SDRAM的时钟完全不受内部时钟的干预,便于以后系统调试和应用,假如你做2分频,那么如果要调整外部SDRAM时钟,势必影响到内部时钟。反之亦然。所以,纯异步处理可以提高系统的可扩展性。
2. 从根本上来说,这两个时钟本来就没什么关系,何不纯异步处理呢。如果用2分频的方法来做,的确,有些技术文档和设计中认为2分频可以认为是同步时钟域,但是这要靠综合软件的干预,在综合的约束和后仿,以及时序分析中要特别关注,如果对这一块没有经验,怕容易马虎过去而导致系统不稳定。



    你搞啥,片外的SDRAM 是DDR,访问周期比较长把(根据情况来16查资料,还有总裁),SRAM片内的一个周期就能访问,再设计缓存FIFO吧

多谢ls各位的解释,今天继续看看文档,希望会有进步。

异步处理,用fifo作为缓存,实现比第一个会复杂点,但是以后调试会容易调试。

  就是要把视频编码过程中得到的数据存到片外的sdram中去。  片外的sdram就是普通的sdram,不是DDR。

http://www.fpga4fun.com/CrossClockDomain.html

只要你sdram的控制搞清楚了,中间加个异步fifo就可以了吧。



    那不是DDR 1 么,一回事情,你要写个异步的FIFO,DMA,然后帮你从SRAM CLK Domain 搬到 SDRAM的Domain
FIFO深度我感觉3~4就可以了。 重点实现的DMA吧,状态机,命令

  O(∩_∩)O谢谢!但是……
  ?这里的DMA是指?还没有看到过在跨时钟域数据传递的时候用DMA的资料呢。

你从系统内部的SRAM搬数据到外部的DDR中去,肯定需要找个DMA,给他个命令把数据搬来搬去,然后发出最后的完成结果!

sdram的控制比较复杂,而且和系统密切相关,你整个设计的难点不是跨时钟域,而是如何提高sdram的访问效率。建议你先用sdram的clock设计controller core,然后再根据你的内部总线和时钟关系写一个bridge。

1、单个bit,如果从慢时钟域到快时钟域,打两拍即可,反之须增加握手机制!
2、多个bit,采用异步FIFO+格雷编码!

方案a好一点吧方案b的话,可以采用fifo作缓存。

建议分两步走: 1、时钟clk时 ,写一拍,读两拍,借助中间信号,翻转就行。2、将时钟为clk ,位宽为32bit使用异步fifo,转化为时钟sd_clk,位宽为32bit即可,很容易的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top