cpu与fpga跨时钟域数据交换的实现问题_第1页
cpu与fpga跨时钟域数据交换的实现问题_第2页
cpu与fpga跨时钟域数据交换的实现问题_第3页
cpu与fpga跨时钟域数据交换的实现问题_第4页
cpu与fpga跨时钟域数据交换的实现问题_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

gnPhXnlLXlrZDl 小组首页 分 类 我的小组 建立小组 帮助中心 排行榜 小组精华 您现在的位置 首页 小组 CPLD FPGA FPGA 讨论组 munitis 小组等级 E 币 76 E 币换礼 1 楼主 楼主 cpu 与与 fpga 跨时钟域数据交换的实现问题跨时钟域数据交换的实现问题 精华精华 文章发表于 2007 08 20 14 25 ARM 与 fpga cyclone 之间进行数据传输 这应该属于跨时钟域的范畴 CPU 与 fpga 之间采 用三总线的方式进行连接 而 CPU 连接 fpga 的数据线 地址线 控制线进入 fpga 内部就属于 异步信号了 该如何考虑呢 我看过一些关于跨时钟域的文献 上面说对于数据交换 实现方法有握手和 fifo 两种 我想 双口 RAM 是不是也算一种 另外 我看跨时钟域数据交换 都涉及到两侧的时钟信号 而对 于 CPU 的三总线 并没有输出什么时钟信号 时钟输出是不是必须的呢 问题比较多 不知道说明白没有 请指教一二 谢谢了 添加到收藏夹 回复 riple 小组等级 E 币 5334 E 币换礼 2 文章发表于 2007 08 21 09 30 这个问题 基本上很难 开个玩笑 原理上简单 实现起来有许多要注意的地方 但是不难 一个提示 从你使用的 ARM 芯片数据手册的接口时序图入手 FPGA 中的处理方法是可以改 的 而接口时序是一定要遵守的 泛泛而谈很难 把你的芯片接口时序图贴上来吧 主要是寄存器读 写时序 如果用到 DMA 的话 应该还有 DMA 读写的时序图 munitis 小组等级 E 币 76 E 币换礼 3 文章发表于 2007 08 21 10 37 上面是 ARM 读写外设的时序图 时钟是 CPU 的 和 fpga 的内部时钟是两个时钟域 既需要有 ARM 写入给 fpga 内部的寄存器 又需要有 ARM 读出 fpga 内部的值 该如何解决跨时钟域的 问题呢 munitis 小组等级 E 币 76 E 币换礼 4 文章发表于 2007 08 21 15 33 ARM 与 fpga 的接口是标准的总线型接口 包括 DATA CS ADDR RD WR 这些信号由 CPU 的时钟控制 对于 FPGA 来说是异步信号 在进入 FPGA 内部是不是需要先进行同步 我 看过一些文献 这种总线型的跨时钟域 是不能用多个同步器进行同步的 采用的方法有握手 信号和 FIFO 是不是这样的呢 riple 小组等级 E 币 5334 E 币换礼 5 文章发表于 2007 08 21 15 35 我们一步一步来 先实现基本功能 然后优化性能 第一 我觉得处理这样的接口 采用异步方式比较好 因为同步接口对 FPGA 外部电路和内部 配置的要求都比较高 异步接口只要给出充分的时间 外部电路不存在信号完整性问题就很好 解决 第二 这个接口比较好处理 原因是它的时序可以调整 通过软件配置 cpu 的外设寄存器就可 以调整各个电平的时长 但是需要你和软件开发人员密切配合 提出你的要求 可以先宽泛一 些 保证你的功能实现 然后再压缩可以压缩的时序 提高性能 riple 小组等级 E 币 5334 E 币换礼 6 文章发表于 2007 08 21 15 56 明确一件事 信号进入 FPGA 的最初时刻是否是 异步 的呢 不是 只有信号进入受某个时钟控制的逻辑时 该信号才被看作与该时钟域异步 那么 我们能否利用 信号进入 FPGA 之后 和 信号进入某个时钟域之前 的这段空间实现一些 组合和时序逻辑呢 可以 我们在 FPGA 内部创建和利用这样一个空间来实现接口的数据发送和捕获功能 把接口 上的原始信号转换为适用于同步时钟处理的信号 跨时钟域的问题也就解决了 munitis 小组等级 E 币 76 E 币换礼 7 文章发表于 2007 08 21 16 00 你说得对 CPU 对外设的读写时序是可以通过配置寄存器调整的 但我有点不明白 采用异步 方式 对于 fpga 内部的电路来说 CPU 的信号是异步信号 不能直接让 FPGA 时钟域的电路来 做处理吧 它们之间的接口该如何考虑呢 munitis 小组等级 E 币 76 E 币换礼 8 文章发表于 2007 08 21 16 05 你说的是不是信号进入 FPGA 之后 用 FPGA 内部的时钟对它进行采样同步 变为与内部时钟 同步的信号呢 riple 小组等级 E 币 5334 E 币换礼 9 文章发表于 2007 08 21 16 10 差不多 原理上就是这样 今晚我回家给你画个例子吧 munitis 小组等级 E 币 76 E 币换礼 10 文章发表于 2007 08 21 16 24 多谢指教 呵呵 riple 小组等级 E 币 5334 E 币换礼 11 文章发表于 2007 08 21 22 29 先给出写同步接口 EX WR N 上升沿的位置很适合作为采样触发信号 数据的建立和保持时 间都很充裕 这是由接口时序保证的 把 EX WR N 进行标准的同步处理后就可以进行提取边 沿脉冲的处理 得到的脉冲信号就可以作为同步时钟域的采样使能信号 此时先前被采样的数 据的建立时间也得到了充分的保证 也可以把 EX WR N 信号同步处理后提取边沿脉冲得到的信号作为同步时钟域的采样使能脉冲 这样处理 采样的时刻取决于同步时钟的周期 如果接口处数据的保持时间不是很充分 采 样时就不一定能得到稳定的数据 需要调整接口时序保证足够长的保持时间 1234Next Total 37 Page 1 4 1 楼主 楼主 cpu 与与 fpga 跨时钟域数据交换的实现问题跨时钟域数据交换的实现问题 精华精华 文章发表于 添加到收藏夹 回复 riple 小组等级 E 币 5334 E 币换礼 12 文章发表于 2007 08 21 23 21 上图中右侧的 dff 16 可以用同步 FIFO 代替 采用 lpm fifo 或 scfifo 就可以 如果 CPU 芯片与 FPGA 芯片之间的电路很复杂 该电路需要考虑外部信号的毛刺问题 一种可行的处理方法可 以参考这篇文章 riple 小组等级 E 币 5334 E 币换礼 13 文章发表于 2007 08 21 23 22 恶劣的情况下需要考虑毛刺问题 riple 小组等级 E 币 5334 E 币换礼 14 文章发表于 2007 08 22 09 23 在读取数据接口中可以看到 数据由 FPGA 驱动 驱动的时刻取决于 FPGA 内部的逻辑处理时 间 数据的出现可以晚于 EX RD N 的下降沿 数据的撤销必须晚于 EX RD N 的上升沿 所以 只要提取 EX RD N 下降沿对应的同步脉冲就可以触发同步时钟域的寄存器或 FIFO 读 取操作 数据被读出 同步和边沿提取的逻辑和写入操作采用的方法一样 写操作提取的是上升沿脉冲 读操作需要 提取下降沿脉冲 这些操作会引入一定的延时 2 3 个同步时钟周期 需要你和软件开发人员密切配合 调整 T3 的时长 riple 小组等级 E 币 5334 E 币换礼 15 文章发表于 2007 08 22 09 32 此外 还要考虑双向总线的三态问题 可以参考 从读取数据接口时序图中可以看到 在 EX RD N 下降沿之后 数据出现 在 EX RD N 上升 沿之后 数据还要保持一定的时间 所以高阻控制信号要比 EX RD N 的低电平部分晚一些 以保证数据保持时间 可以采用同步逻辑带来的延迟实现之 riple 小组等级 E 币 5334 E 币换礼 16 文章发表于 2007 08 22 09 40 如果有什么进展和经验 要及时跟贴呦 让大家都有收获 munitis 小组等级 E 币 76 E 币换礼 17 文章发表于 2007 08 22 10 16 谢谢 我根据你的电路图做一次仿真试试 然后再说 munitis 小组等级 E 币 76 E 币换礼 18 文章发表于 2007 08 22 10 22 riple 你的图上应该是 EX WR N 的下降沿作为采样触发信号吧 riple 小组等级 E 币 5334 E 币换礼 19 文章发表于 2007 08 22 11 55 不知道你图中 1cycle 是多长时间 如果很短的话 还是用上升沿最好 数据的建立时间会很充 裕 munitis 小组等级 E 币 76 E 币换礼 20 文章发表于 2007 08 22 13 21 一个 cycle 是 30ns munitis 小组等级 E 币 76 E 币换礼 21 文章发表于 2007 08 22 14 59 1 楼主 楼主 cpu 与与 fpga 跨时钟域数据交换的实现问题跨时钟域数据交换的实现问题 精华精华 文章发表于 添加到收藏夹 回复 riple 小组等级 E 币 5334 E 币换礼 22 文章发表于 2007 08 22 15 31 上面这个图比例上是不是有些问题 32MHz 对应的时钟周期是 31ns 和 1cycle 差不多 从 CS 下降沿到 WR 下降沿的周期是不是多了些 时序图上只给出了 1 4cycle 可能是激励或者时钟周期设置错了 WR 的上升沿或下降沿采样都行 时间上都有保证 这就是 CPU 接口设计得好啊 让人用起来 也舒服 munitis 小组等级 E 币 76 E 币换礼 23 文章发表于 2007 08 22 15 41 上图是我用 modelsim 仿真加入延时文件后的波形 外部异步信号的时钟频率是 8 33M 内部采 样时钟是 32M 当数据发生变化时 会有很小的波动 波动时间小于 1ns 这个应该是没有影 响吧 munitis 小组等级 E 币 76 E 币换礼 24 文章发表于 2007 08 22 15 42 哦 我的 T 都取了 4 个 cycle 120ns munitis 小组等级 E 币 76 E 币换礼 25 文章发表于 2007 08 23 10 31 riple 我看你的图上 控制输入是 CS 与 WR 的与结果 是不是地址线可以等同步电路输出数 据后再译码到不同的寄存器上去 riple 小组等级 E 币 5334 E 币换礼 26 文章发表于 2007 08 23 11 56 思考一个问题 从接口信号的物理属性看来 地址总线与数据总线有没有区别 如果答案是否 那么对于数据总线的跨时钟域处理方法同样适用于地址总线 而且如果处理不 当的话 都会出现问题 所以 建议你对地址总线进行同样的处理 然后再用作地址译码 这样做虽然占用了一些逻辑 资源 但是确保了处理方法的鲁棒性 可以应对接口时序的不规则变化 munitis 小组等级 E 币 76 E 币换礼 27 文章发表于 2007 08 23 13 35 那是不是要用 EX CS N 作为地址线的第一级暂存触发时钟呢 riple 小组等级 E 币 5334 E 币换礼 28 文章发表于 2007 08 23 22 39 从时序图上看可以 采用 WR 的边沿也是可靠的 munitis 小组等级 E 币 76 E 币换礼 29 文章发表于 2007 08 24 10 03 riple 谢谢你的指教 跟你讨论挺有收获的 我正在编码仿真 后面有什么问题和心得还会发 上来的 cationebox 小组等级 E 币 84 E 币换礼 30 文章发表于 2007 09 03 07 39 有什么进展没有的 呵呵 munitis 小组等级 E 币 76 E 币换礼 31 文章发表于 2007 09 20 10 14 下面的图是采用 WR 上跳沿来暂存数据的原理图和仿真图 1 楼主 楼主 cpu 与与 fpga 跨时钟域数据交换的实现问题跨时钟域数据交换的实现问题 精华精华 文章发表于 添加到收藏夹 回复 munitis 小组等级 E 币 76 E 币换礼 32 文章发表于 2007 09 20 10 36 上面两个图是利用 ex wr n 的上跳沿进行数据的暂存 电路图和仿真图 从波形可以看出 这 种 先写入 后暂存 的方式是没有问题的 这种方法可以从什么地方查到吗 riple 小组等级 E 币 5334 E 币换礼 33 文章发表于 2007 10 09 16 47 对于跨时钟域的问题 我也查找了很多文章和书籍 大体上有三种方法 相位控制 两级同步 异步 FIFO 还有很多书基本不提 CDC 的问题 可是上述方法中哪一种适合我们在这里遇到 的问题呢 单个信号采用两级同步 多位信号采用异步 FIFO 有没有多位信号不采用异步 FIFO 的办法呢 上面那些书里都没有提到 只有一篇 EDNChina 的获奖文章给出了全面而准确的解答 http 问题的方法是使用一个保持寄存器和握手信号 这就是我在前面提到的 先暂存 后写入 方 法 也就是 先异步暂存 后同步写入 的方法 建议大家下功夫读一下这篇文章 内容不是一般的好 我在博客里推荐过 怕是没有谁详细地 读过吧 再补充一点 对于异步 FIFO 如果 FIFO 的深度减小到只能存储一次传输的大小 本质上是不 是 使用一个保持寄存器和握手信号 呢 差别不大吧 riple 小组等级 E 币 5334 E 币换礼 34 文章发表于 2007 10 13 12 14 再补充一点 在许多文章中描述跨时钟域问题时都给出了异步的两个时钟 一个是驱动电路的 时钟 一个是接收电路的时钟 这样做纯粹是出于分析和表达的需要 在 FPGA 与外部芯片接口的电路设计过程中 往往只能控制接收电路的时钟 驱动电路的时钟 是不可控的 即 FPGA 是跨时钟域问题的受害者 只能在 FPGA 能够控制的时钟域里采取一定 的手段弥补这一问题 所以 跨时钟域电路的分析和描述不同于跨时钟域电路的设计 但是离开分析和描述 设计又 是盲目的 理解跨时钟域电路要从两个时钟域入手 设计跨时钟域电路只能从本地时钟域入手 如果在特殊情况下 FPGA 可以控制驱动电路的时钟频率和相位 跨时钟域问题就可以采用相 位控制的方法解决了 twzh 小组等级 E 币 177 E 币换礼 35 文章发表于 2008 05 10 22 28 看了你们的讨论 觉得同步确实很重要 我现在正在做一个项目 51 单片机和 FPGA 之间有数 据交换 在前面的设计中 没有注意同步的问题 可能需要对设计做些修改 看了 跨越鸿沟 同步世界中的异步信号 这篇文章 很多概念还是云里雾里的 呵呵 其中有个概念对我挺 有用的 就是 为了使同步工作能正常进行 从某个时钟域传来的信号应先通过原时钟域上的一 个触发器 然后不经过两个时钟域间的任何组合逻辑 直接进入同步器的第一个触发器中 如果我要将 51 单片机到 FPGA 之间的信号线 有 P0 7 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论