1.在Xilinx的example(wavegen example)中看到他们的顶层模块的输入输出管脚都手动例化原语IBUF以及OBUF——工具也会自动给我们加上不必要自己加
2.非mrcc个srcc的管脚输入的时钟信号,无法进入mmcm————试验过会报错
3.实际上,直接从外部全局时钟管脚引入的时钟信号,相当于在HDL代码中使用了IBUF + BUFG原语。
4.对于差分时钟————未利用mmcm/pll的差分输入端口
4.1:您将需要实例化IBUFGDS而不是IBUFG,后+BUFG
IBUFGDS ibufg_inst (.I(clk_P), .IB(clk_N), .O(clk_ibufg));
BUFG bufg_inst (.I(clk_ibufg), .O(clk));
然后像以前一样使用clk。
4.2:如果您使用的是DCM或PLL,这无需上述两个原语的例化。因为它本身带差分转单端并且bufg驱动输出。
5.只有7系列的FPGA中才有MRCC和SRCC的说法,到了UltraScale系列,都是叫GC。
6.
6.1 MRCC和SRCC都是由外部的时钟驱动,而且MRCC和SRCC的区别就在于MRCC可以驱动BUFMR,SRCC不行。其他基本都一样,它们都可以驱动四个BUFIO、四个BUFR、一个CMT、上下相邻的CMT、16个BUFG和BUFH。
6.2 SRCC进来的时钟,虽然不能直接驱动其他clock region,但接到BUFG上之后,仍然可以通过BUFG来驱动其他的clock region。
6.3
在设计原理图的时候,对于接收时钟,应该尽量分配到FPGA的时钟引脚,且为P端。
通常FPGA的时钟引脚为:后缀为SRCC或MRCC的IO
7.
小梅哥的以太网试验,对phy输入给fpga的时钟约束了:set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets NETS_NAME_IBUF]意思理解:
约束的对象往往是除了sys_clk之外的、由外部引入作为一些通信接口比如SPI或者MDIO接口的时钟管脚的IBUF线。
如果不加这个约束,执行implement的时候往往就会报error或者critical warning、内容中也会提到加上这个约束的话、就会将严重警告或者错误降级为普通warning,但是一直没搞明白这到底是怎么回事,所以这两天翻阅文档和论坛,算是弄清了个大概。
原来FPGA的管脚上有一类专用的时钟管脚、他们一般用于将外部的时钟信号引入FPGA、并在FPGA module中使用这些引入的时钟信号。但是如果设计时管脚分配没做好、或者管脚不够用了,那么就有可能将本该接入专用时钟管脚(或者叫做全局时钟管脚)的信号,接到了普通IO口上,这样只能通过添加CLOCK_DEDICETED_ROUTE FLASE绕过PAR的检查,但是没有解决根本问题。
7.1:输入输出的随路时钟,如果硬件上接到了普通IO上,这就有点悲剧了,尽管可以用BUFG接进全局时钟网,但是,从PAD到BUFG的输出有10ns的固有延时。这10ns无法消除,所以如果时钟频率超过20M左右时,skew会比较大。