网站大量收购独家精品文档,联系QQ:2885784924

Xilinx FPGA 内部结构深入分析.doc

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

Xilinx FPGA 内部结构深入分析/bbs/viewthread.php?tid=3443extra=page%3D2page=7 发表时间 :2009.12 IOB的结构请大家看到手册的第1页,这是IOB的review部分。 IO block 是高手的领地,一般接触FPGA第一年都不会太关心到这个部分。 注意看,IOB有三个数据通道:输入、输出、三态控制。 每个通道都有一对存储器件,他们可以当做寄存器或者锁存起来使用,视乎你的设置。 输入通道有可编程的延迟模块,可以确保hold time为零。(这是在什么场合使用?请达人补充!) 另外可以看到输入输出通道都有完备的DDR支持,这个在后面可以看到。 所有图都请参考PDF原文,这里就不再粘贴了。可编程输入延迟看到手册第3页,这个像两根鱼骨似的构造就是输入延迟了。 输入延迟一共16节,每节250ps,所以总共的延迟在0~4ns之间。 这个鱼骨的构造非常巧妙,前面8节直接级联,只有一个输出。 这样8节以内的调整就跳过这根长鱼骨;而超过8节的调整就直接利用第一根鱼骨,然后在后面的8节中进行微调。 调整的输出分别供给IOB中的异步和同步单元,异步就是直接穿过IOB,同步则是经由存储单元流出IOB。 异步单元精度较高,可以单节调整,所以精度为250ps; 同步单元精度稍低,两个节为单位调整,所以精度只有500ps。 上述内容看图便知可编程输入延迟的设置输入延迟的设置只能在Image配置的时候建立,在设备工作期间无法改变。 我想有两种方法可以改变输入延迟的设置: 1. 通过延迟原语在代码中设置; 2. 通过FPGA editor在PR完成后在ngc文件中修改。存储单元存储单元可以配置为D触发器,就是我们常说的FF,Xilinx称之为FD; 也可以配置为锁存器,Xilinx称之为LD。 输出和三态通路各有一对寄存器外加一个MUX。 利用这种2+1的组合可以产生DDR操作,Xilinx称之为ODDR2。 每个存储单元都有6个接口信号: 时钟+时钟时能,数据输入+输出,置位复位+翻转输入 除了这些信号,存储单元还有一些属性设置: - FF/Latch可以用来配置存储单元的类型; - Sync/Async 配置置位复位的方式; - SRHIGH/SRLOW 配置是置位(1)还是复位(0); INIT1/INIT0 配置置位复位的初始值,一般置位(1)复位(0);DDR支持输入、输出、三态。这三个IOB通道都可以实现DDR支持。 输出和三态通道可以实现ODDR2原语,这个原语的实现原理可以参考p5的图3. 两个相差180度的时钟和两路信号进入一对寄存器并通过DDR专用MUX输出,即可得到DDR数据输出。 实现相差180度,有两种方法。 一种是通过DCM直接产生这两个信号。 另外的方法是同一时钟,但是连入寄存器的时钟端口时,一路取反。 输入通道则实现 IDDR2原语。 如果输出、三态通路实现的是DDR的调制的话,这一路其实就是DDR的解调,也就是1分为2。 当然,这里需要提供两路相差180度的时钟。 另外ODDR2还有一个重要用途,就是用于产生随路时钟。 只要把两路数据固定为1和0,这样产生的DDR数据其实就是0/1交叉的时钟信号了,这个一想就明白了吧。 这样做的好处是:数据和时钟都经过IOB寄存器处理,具有相同的延迟特性,从而实现了所谓的源同步“级联”重定时特性——提高DDR的性能在IDDR2和ODDR2的典型实现(图4图6)中,存在一个问题 以IDDR2为例, 我们可以发现,在经典实现中,输出的两路数据分别与时钟的两个边沿对齐。 但是,强调一下,后端的系统中往往只有一个时钟,工作在上升沿。 那么对于下降沿对齐输出的数据,从下降沿开始到上升沿被采样,只有半个时钟的余量来稳定输出并满足setup。 由于FPGA系统比较复杂从IOB出来的数据要进入到下一个存储单元可能会经历非常漫长的逻辑和路由延迟。 要在半个时钟内完成,有很大的挑战性,尤其是在高速系统中,往往有很大的困难。 Spartan3E的解决办法是,利用相邻从属IOB的存储单元,对下降沿输出的数据马上做一次上升沿抽样。 由于两个IOB相邻,不存在复杂的逻辑和路由延迟,因此虽然余量也是半个时钟,但一般情况下甚至高速系统下也可以成功实现。 这样数据就回到了上升沿时钟域。 到了上升沿时钟域,则数据有一个时钟的时间余量,处理起来就和普通的情况一样了。 以上是关于IDDR2的讨论,对于ODDR2有着类似的情况,大家可以自己理解一下。参考图6图7即可。 想到一个资源守恒的公理,就是自然界普遍存在的trade off 现象。 如果添加一个寄存器抽样,则系统负担降低;反之如果想少使用资源,不使用这个抽样寄存器,则全系统的负担会提高

文档评论(0)

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

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

1亿VIP精品文档

相关文档