原创 BUFGMUX使用注意事项

2009-12-4 10:42 9701 12 13 分类: FPGA/CPLD

                         

BUFGMUX使用注意事项 (by Wind330)

   
有时我们的系统有多路异步数据源经过FPGA片选后,再进入至数据处理器。功能很简单,利用case...when语句就能将数据选通。因为时钟需要低延时,低偏斜,而使用LUTs会导致延时和偏斜不可控。

BUFGMUX说明

点击开大图

FPGA的基本单元,其输出直接连至全局时钟网络。真值表如下:                                 

InputsOutputs
XXF0
IOI1SO
I0X0I0
XI11I1
XXR0

使用VHDL的同学需要导入库unsim:

library unisim;
use unisim.vcomponents.all;

位置约束

在FPGA中全局时钟资源是有限的,根据自身的应用确定所以全局时钟资源的个数,然后根据时钟管脚的位置约束每个BUFGMUX的位置。约束语句如下:

INST "u4/u1" LOC=BUFGMUX_X1Y11;
Xilinx工具支持BUFMUX直接Infer,wind330没有尝试过,但是自己无法控制关键路径,对产生的影响也不可控,所以没有采用。


路径分析

首先说明一下电路功能,电路需要对四个时钟进行片选,分别是vclk1,vclk2,sdiclk,tpout3。对应有3个BUFGMUX,vclk1与vclk2连接一个BUFGMUX,将其输出与sdiclk连接一个BUFGMUX(该BUFGMUX输出为vga2hdclk),vga2hdclk与tpout3连接一个BUFGMUX。下面是两条不同时钟路径的延时说明:   

62c38422-f2aa-43f2-a085-238e77fa4537.JPG
Figure1 vclk2延时详细说明
   
afaaa7c1-6773-406c-bf00-479e63e5ea17.JPG
Figure2 sdiclk延时详细说明
大家仔细看两幅图中u4/u2 vga2hdclk的延时,Figure1中vga2hdclk到u4/u3延时为3.222ns,Figure2中vga2hdclk到寄存器reg_vga1_data_11延时为0.129ns。由此,我们知道,全局时钟网络有专门的布线资源到每一个Slices,但是却没有专门的布线资源到其他剩余BUFGMUXs,所以vga2hdclk到u4/u3的路径用的是普通的布线资源(可以在FPGA Editor中查看走线情况),造成了相对巨大的延时。

至此,有人可能会问:该如何缩短这段延时呢?wind330认为:FPGA的架构决定了延时是无法缩短至0.1ns这个级别的。那我们又如何保证同步于vga2hdclk的数据到tpout3时钟域不会造成时序冲突?由于电路功能只是进行数据源选择,也就是说输入数据源和输出数据源的数据率是完全一致的,只是有不同的相位,所以最直接的方法是:添加一级dual clock FIFO,等FIFO半满后,就可以开始读出数据,因为时钟频率一致,也就不会造成FIFO读空或者写满。如果是FPGA高手,可以用FPGA Editor手动布局和布线,保证vga2hdclk的数据到达tpout3同步的寄存器不会造成时序冲突,wind330远没有达到这个水平,如果有人会,请不吝赐教!

设计使用



首先,要解决的是时序约束的问题:每个BUFGMUX有两个时钟输入,ISE如何分析相同路径上的不同时钟,下面是Xilinx
网站上关于这种路径的约束设置。



11.1 Known Issue - Timing - Incorrect timing analysis associated with input clocks on BUFGMUX



wind330没有使用上述方法,因为使用的片选时钟频率的上限都是相同的,所以不论满足哪个时钟,我的要求就达到了。但
是,需要在ISE上做好设置,如下图所示

点击看大图
Post-Place & Route Static Timing Report Properties

勾选"Perform Advanced Analysis"。同样,勾选"Post-Map Static Timing Report Properties"中的"Perform
Advanced Analysis"。

遗留问题

在调试过程中曾遇到很奇怪的问题:将上述四个时钟与BUFGMUX连接好后,无论怎么变换输入端S,都没有时钟输出,但是交换每个BUFGMUX的I0,I1输入时钟,上述问题得到解决。呵呵,不知道是否有人与我有相同的遭遇。

 
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2016-5-19 20:07

输入时钟是异步的吗?异步的话要给BUFGMUX的CLK_SEL_TYPE属性设置为"ASYNC"才行哦。
相关推荐阅读
用户1122702 2015-12-20 21:29
在Emacs中应用Ctags
适宜人群 具备Emacs使用经验的程序员 什么是Tag? Tag,即标记,记录了程序重要信息(如函数、变量、宏定义等)的位置和相应的文件,方便程序浏览器进行跳转。 ...
用户1122702 2015-12-13 22:23
可综合的SystemVerilog:命名空间
关键名词解释: 编译单元(compilation unit):SystemVerilog 源代码的集合 编译单元域(compilation-unit scope):即编...
用户1122702 2015-12-13 22:15
可综合的SystemVerilog:参数化函数/任务
在Verilog中,参数化模块被广泛应用。参数可重新定义保证模块的可配置性及可复用性。但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力。 SystemVer...
用户1122702 2010-10-28 11:34
基于SOPC下RapidIO调试方法
RapidIO的一个难点在于地址转换方法,即将远端的Memory映射到当前Avalon-MM总线,所以地址需要一个转换过程——Local Avalon-MM<->RapidIO Addr&...
用户1122702 2010-08-24 14:22
西行重庆
八月初时离开生活并工作四年的深圳,来到求学四年的重庆。已经过去三周时间,对自己的将来也随之变的不可琢磨。重庆的生活水平并不如想象的低,除了房价不像沿海城市高企,其他诸如公共交通,生活日常用品基本都是一...
用户1122702 2010-07-07 18:05
Tcl用后感
                    Tcl用后感 (by Wind330)    Tcl - Tool Command Language近期做了一个Tcl脚本用于Modelsim仿真,完成如下功能...
EE直播间
更多
我要评论
1
12
关闭 站长推荐上一条 /3 下一条