首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
资源利用率报告中的LUT和LUTRAM有什么区别
2
xilinx verilog语法技巧(三)--RAM的初始化
3
为什么推荐使用XPM?
4
Block RAM的基本结构
5
为什么要用XPM_MEMORY
6
Vivado中用于时钟操作的几个Tcl命令
7
影响FPGA时序的进位链(Carry Chain), 你用对了么??
8
动态时钟相位
9
动态时钟频率
10
如何缩短Vivado运行时间
11
你的FPGA设计有这些缺陷吗
12
report_utilization远比你想象的强大
13
vivado如何快速找到schematic中的object
14
FPGA中的CLOCK REGION和SLR是什么含义
15
FPGA中的BEL, SITE, TILE是什么含义
16
如何快速查找目标cell
17
都是pin,有什么区别
18
都是net,有什么区别
19
一张图看懂cell, pin, net, port
20
如何快速找到组合逻辑生成的时钟
21
【Vivado那些事】Vivado下头文件使用注意事项
22
Pblock可以这么画
23
关于Pblock的8个必知问题
24
常用的跟Pblock相关的Tcl命令
25
【Vivado】那些事儿-汇总篇
26
【Vivado那些事】Xilinx FPGA普通IO能不能直接接入PLL作为时钟输入
27
Storage Elements
28
D触发器都有哪几种类型?对应什么样的代码?
29
Xilinx 7系列FPGA逻辑单元理解
30
Vivado下查看芯片资源
31
对RAM初始化怎么做
32
干货:Vivado 直接修改RAM初始化文件,避免重新综合、实现的方法
33
借助Elaborated Design优化RTL代码
34
一张图理解什么是好的设计层次
35
9个关于SSI芯片的必知问题
36
Vivado 2018.3 report_qor_suggestions怎么用
37
Vivado 2019.1新特性(5):更新的report_qor_suggestions
38
Xilinx的高质量时钟输出ODDR原语【随路时钟】【全局时钟网络】【ZC706输出时钟】【ZYNQ】
39
FPGA中BEL Site Tile FSR SLR分别指什么?
40
跟I/O相关的几个命令
41
Vivado Non-Project模式
42
FPGA中降低时钟skew的几种方法
43
FPGA时序优化之Reduce MUXF Mapping
44
什么是Forwarded Clock?
45
几个常见问题
46
如何让同一层次的模块在布局时更紧凑一些
47
什么情况下要用OOC综合方式
48
Vivado 2019.1新特性(2):report_ram_utilization
49
URAM和BRAM有什么区别
50
write_first/read_first/no_change什么区别
清单首页FPGA文章详情

【Vivado那些事】Xilinx FPGA普通IO能不能直接接入PLL作为时钟输入

[结论]

普通IO不能直接作PLL的时钟输入,专用时钟管脚可以;

普通IO可以通过BUFG再连到PLL的时钟输入上,但要修改PLL的设置 input clk的选项中要选择"No Buffer";

具体内部布局分配可以通过 Xilinx的FPGA Editor来查看,

ZYNQ的时钟管理也和之前的片子略有不同,相关文档 <ug472_7Series_Clocking.pdf>

链接:https://pan.baidu.com/s/1E2uZbeIGh8R8FaDUQ6XVFg

提取码:open

[Demo1]

代码语言:javascript
复制
// demo1 two bufg connect


module iobuf(


 input clk,


 input     rst,


 output   led


 );


 wire clkin_w;


 BUFG BUFG_inst (


      .O(clkin_w),           // Clock buffer output


      .I(clk)                   // Clock buffer input


   );


 pll0 u_pll0(


    .CLK_IN1(clkin_w),      // IN


    .CLK_OUT1(clkout),  // OUT


    .RESET(rst));       // IN


assign led = clkout;


endmodule
代码语言:javascript
复制

锁相环PLL默认输入前端有个BUFG单元,而两个BUFG不能相连,所以会报这样的错:

ERROR:NgdBuild:770 - IBUFG 'u_pll0/clkin1_buf' and BUFG 'BUFG_inst' on net

'clkin_w' are lined up in series. Buffers of the same direction cannot be

placed in series.

ERROR:NgdBuild:924 - input pad net 'clkin_w' is driving non-buffer primitives:

[Demo2]

代码语言:javascript
复制
代码语言:javascript
复制
// demo2 regular io directly connect to PLL

module iobuf(


    input clk,


 input     rst,


 output   led


 );
 wire clkin_w;


 /*


 BUFG BUFG_inst (


      .O(clkin_w),           // Clock buffer output


      .I(clk)                   // Clock buffer input


   );


*/


 pll0 u_pll0(


    .CLK_IN1(clk),      // IN


    .CLK_OUT1(clkout),  // OUT


    .RESET(rst));       // IN


assign led = clkout;


endmodule

普通IO不能直接做锁相环的输入,所以会报这样的错:

ERROR:Place:1397 - A clock IOB / MMCM clock component pair have been found that

are not placed at an optimal clock IOB / MMCM site pair. The clock IOB

component <clk> is placed at site <A18>. The corresponding MMCM component

<u_pll0/mmcm_adv_inst> is placed at site <MMCME2_ADV_X0Y0>. The clock IO can

use the fast path between the IOB and the MMCM if the IOB is placed on a

Clock Capable IOB site that has dedicated fast path to MMCM sites within the

same clock region. You may want to analyze why this problem exists and

correct it. If this sub optimal condition is acceptable for this design, you

may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf file to demote this

message to a WARNING and allow your design to continue. However, the use of

this override is highly discouraged as it may lead to very poor timing

results. It is recommended that this error condition be corrected in the

design. A list of all the COMP.PINs used in this clock placement rule is

ERROR:Pack:1654 - The timing-driven placement phase encountered an error.

如果有ucf中加上这句约束:

代码语言:javascript
复制
NET clk          CLOCK_DEDICATED_ROUTE = FALSE;

依旧会报错,在ZYNQ7000系列,这样还是通不过,如下:

ERROR:PhysDesignRules:2256 - Unsupported MMCME2_ADV configuration. The signal

u_pll0/clkin1 on the CLKIN1 pin of MMCME2_ADV comp u_pll0/mmcm_adv_inst with

COMPENSATION mode ZHOLD must be driven by a clock capable IOB.

ERROR:Pack:1642 - Errors in physical DRC.

使用普通的IO,再连接bufg来连到时钟线上,

仍会报这样的错误,因为还是两bufg相连了:

ERROR:NgdBuild:770 - IBUFG 'u_pll0/clkin1_buf' and BUFG 'BUFG_inst' on net

'clkin_w' are lined up in series. Buffers of the same direction cannot be

placed in series.

ERROR:NgdBuild:924 - input pad net 'clkin_w' is driving non-buffer primitives:

[Demo3]

代码语言:javascript
复制
代码语言:javascript
复制
// dem3 regular io with BUFG then connect to PLL which with"No Buffer" setting

 module iobuf(

 input clk,

 input     rst,

 output   led

 );

 wire clkin_w;

 BUFG BUFG_inst (

      .O(clkin_w),           // Clock buffer output

      .I(clk)                   // Clock buffer input

   );

 pll0 u_pll0(

    .CLK_IN1(clkin_w),      // IN

    .CLK_OUT1(clkout),  // OUT

    .RESET(rst));       // IN

assign led = clkout;

endmodule
代码语言:javascript
复制

PLL的设置如下图,

这样普通IO就可以当作PLL的时钟输入了,顺利产生bit;

时钟还是最好用全局时钟IO,画图时一定要注意

ZYNQ7020里没有global clock的概念了,但有了很多专用时钟脚,用起来一样;

文章转自:https://suisuisi.blog.csdn.net/article/details/112854131

版权归原作者所有

看完本文有收获?请转发分享给更多人

下一篇
举报
领券