cpu与fpga跨时钟域数据交换实现问题.doc

cpu与fpga跨时钟域数据交换实现问题.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
cpu与fpga跨时钟域数据交换实现问题

窗体顶端 munitis#1楼主:cpu与fpga跨时钟域数据交换的实现问题 [精华] ARM与fpga(cyclone)之间进行数据传输,这应该属于跨时钟域的范畴,CPU与fpga之间采用三总线的方式进行连接,而CPU连接fpga的数据线、地址线、控制线进入fpga内部就属于异步信号了,该如何考虑呢? 我看过一些关于跨时钟域的文献,上面说对于数据交换,实现方法有握手和fifo两种,我想,双口RAM是不是也算一种?另外,我看跨时钟域数据交换,都涉及到两侧的时钟信号,而对于CPU的三总线,并没有输出什么时钟信号,时钟输出是不是必须的呢? 问题比较多,不知道说明白没有,请指教一二,谢谢了! riple #2 这个问题,基本上很难。开个玩笑,原理上简单,实现起来有许多要注意的地方,但是不难。一个提示:从你使用的ARM芯片数据手册的接口时序图入手。FPGA中的处理方法是可以改的,而接口时序是一定要遵守的。泛泛而谈很难,把你的芯片接口时序图贴上来吧,主要是寄存器读、写时序,如果用到DMA的话,应该还有DMA读写的时序图。munitis #3 上面是ARM读写外设的时序图,时钟是CPU的,和fpga的内部时钟是两个时钟域,既需要有ARM写入给fpga内部的寄存器,又需要有ARM读出fpga内部的值,该如何解决跨时钟域的问题呢?munitis #4 ARM与fpga的接口是标准的总线型接口,包括DATA,CS,ADDR,RD,WR,这些信号由CPU的时钟控制,对于FPGA来说是异步信号,在进入FPGA内部是不是需要先进行同步,我看过一些文献,这种总线型的跨时钟域,是不能用多个同步器进行同步的,采用的方法有握手信号和FIFO,是不是这样的呢?riple #5 我们一步一步来,先实现基本功能,然后优化性能。第一、我觉得处理这样的接口,采用异步方式比较好。因为同步接口对FPGA外部电路和内部配置的要求都比较高。异步接口只要给出充分的时间,外部电路不存在信号完整性问题就很好解决。第二、这个接口比较好处理,原因是它的时序可以调整,通过软件配置cpu的外设寄存器就可以调整各个电平的时长。但是需要你和软件开发人员密切配合,提出你的要求。可以先宽泛一些,保证你的功能实现,然后再压缩可以压缩的时序,提高性能。riple #6 明确一件事,信号进入FPGA的最初时刻是否是“异步”的呢?不是,只有信号进入受某个时钟控制的逻辑时,该信号才被看作与该时钟域异步。那么,我们能否利用“信号进入FPGA之后”和“信号进入某个时钟域之前”的这段空间实现一些组合和时序逻辑呢。可以,我们在FPGA内部创建和利用这样一个空间来实现接口的数据发送和捕获功能,把接口上的原始信号转换为适用于同步时钟处理的信号,跨时钟域的问题也就解决了。munitis #7 你说得对,CPU对外设的读写时序是可以通过配置寄存器调整的。但我有点不明白,采用异步方式,对于fpga内部的电路来说,CPU的信号是异步信号,不能直接让FPGA时钟域的电路来做处理吧,它们之间的接口该如何考虑呢?munitis #8 你说的是不是信号进入FPGA之后,用FPGA内部的时钟对它进行采样同步,变为与内部时钟同步的信号呢?riple #9 差不多,原理上就是这样。今晚我回家给你画个例子吧。munitis #10 多谢指教,呵呵riple #11 先给出写同步接口。EX_WR_N上升沿的位置很适合作为采样触发信号,数据的建立和保持时间都很充裕,这是由接口时序保证的。把EX_WR_N进行标准的同步处理后就可以进行提取边沿脉冲的处理,得到的脉冲信号就可以作为同步时钟域的采样使能信号,此时先前被采样的数据的建立时间也得到了充分的保证。 也可以把EX_WR_N信号同步处理后提取边沿脉冲得到的信号作为同步时钟域的采样使能脉冲。这样处理,采样的时刻取决于同步时钟的周期。如果接口处数据的保持时间不是很充分,采样时就不一定能得到稳定的数据,需要调整接口时序保证足够长的保持时间。riple #12 上图中右侧的dff_16可以用同步FIFO代替,采用lpm_fifo或scfifo就可以。如果CPU芯片与FPGA芯片之间的电路很复杂,该电路需要考虑外部信号的毛刺问题。一种可行的处理方法可以参考这篇文章:/blog/riple/41367/message.aspxriple #13 恶劣的情况下需要考虑毛刺问题/blog/riple/41367/message.aspx riple #14 在读取数据接口中可以看到,数据由FPGA驱动,驱动的时刻取决于FPGA内部的逻辑处理时间。数据的出现可以晚于EX_RD_N的下降沿,数据的撤销必须晚于EX_RD_N的上升沿。所以,只要提取EX_RD_N下降沿对应的同步脉冲就可以触发同步时钟域的寄存器或FIF

文档评论(0)

cuotian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档