FPGA小白学习之路(2)erro:buffers of the same direction cannot be placed in series

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

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:

如下示例代码:

[Demo1]

 1 // demo1 two bufg connect
 2
 3 module iobuf(
 4
 5    input   clk,
 6
 7    input   rst,
 8
 9    output  led
10
11    );
12
13  wire clkin_w;
14
15  BUFG BUFG_inst(
16
17       .O(clkin_w),           // Clock buffer output
18
19       .I(clk)                   // Clock buffer input
20
21      );
22
23  pll0 u_pll0(
24
25       .CLK_IN1(clkin_w),      // IN
26
27       .CLK_OUT1(clkout),  // OUT
28
29       .RESET(rst));       // IN
30
31 assign led = clkout;
32
33 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中加上这句约束:

1 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.

如下示例代码

[Demo2]

 1 // demo2 regular io directly connect to PLL
 2
 3 module iobuf(
 4
 5     input clk,
 6
 7    input     rst,
 8
 9    output   led
10
11  );
12   13
14
15  pll0 u_pll0(
16
17     .CLK_IN1(clk),      // IN
18
19     .CLK_OUT1(clkout),  // OUT
20
21     .RESET(rst));       // IN
22
23 assign led = clkout;
24
25 endmodule

使用普通的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]

 1 // dem3 regular io with BUFG then connect to PLL which with"No Buffer" setting
 2
 3  module iobuf(
 4
 5    input  clk,
 6
 7    input  rst,
 8
 9    output  led
10
11    );
12
13  wire clkin_w;
14
15  BUFG BUFG_inst (
16
17       .O(clkin_w),           // Clock buffer output
18
19       .I(clk)                   // Clock buffer input
20
21    );
22
23  pll0 u_pll0(
24
25     .CLK_IN1(clkin_w),      // IN
26
27     .CLK_OUT1(clkout),  // OUT
28
29     .RESET(rst));       // IN
30
31 assign led = clkout;
32
33 endmodule

PLL的设置如下图,

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

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

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

[结论]

不能将两个PLL进行串联

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

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

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

ZYNQ的时钟管理也和之前的片子略有不同,之后在另一篇介绍,相关文档 <ug472_7Series_Clocking.pdf>

原文地址:https://www.cnblogs.com/kybyano/p/8179830.html

时间: 2024-08-30 14:23:39

FPGA小白学习之路(2)erro:buffers of the same direction cannot be placed in series的相关文章

(转)FPGA小白学习之路(5)clk为什么要用posedge,而不用negedge

clk为什么要用posedge,而不用negedge 转自:http://www.cnblogs.com/dangxia/archive/2012/03/07/2383744.html Verilog中典型的counter逻辑是这样的: 1 always@(posedge clk or negedge reset) begin 2 3 if(reset == 1'b0) 4 5 reg_inst1 <= 8'd0; 6 7 else if(clk == 1'b1) 8 9 reg_inst1 <

FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比

转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型.结构.压缩和非压缩数组. 接口.断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力.SystemVerilog由Acceller

(转)FPGA小白学习之路(4)PLL中的locked信号解析

ALTPLL中的areset,locked的使用 转自:http://www.360doc.com/content/13/0509/20/9072830_284220258.shtml 今天对PLL中areset和locked详细查了下资料,发现网上这方面的资料很少,所以自己认真读了下Documentation---ug_altpll.pdf,现在我将我学到的内容总结如下: areset简而言之就是高电平有效,对pll进行复位. 下面我们主要来认识一下locked信号: Locked这个输出到底

FPGA小白学习之路(6)串口波特率问题的处理

串口波特率问题的处理 此博文一共包含三个方面的内容:(1)异步串口通信的数据格式:(2)为何串口通信中接收端采样时钟频率是传输的波特率的16倍:(3)串口波特率等概念. 1.异步串口通信的数据格式 串口的通信可以通过链接了解:https://wenku.baidu.com/view/7b459e47453610661ed9f4d4.html### 异步串口通信的数据格式如图1所示: 图1 异步串口通信的数据格式 由于在空闲状态时,传送线为逻辑"1"状态,而数据的传送总是以一个起始位&q

(转)USB小白学习之路(8)FX2LP cy7c68013——Slave FIFO 与FPGA通信

此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 1 USB 概述 USB名称解释 USB是通用串行总线(Universal Serial Bus)的缩写.能过在计算机运行过程中随意地接入,并且立刻就能投入工作,那么这样的特性叫做即插即用PnP(Plug and Play).由于USB是主从模式的结构,设备与设备之间.主机与主机之间不能互连.为了解决这个问题,出现了USB OTG(On the go),它的做法:同一

USB小白学习之路(9) CY7C68013A Slave FIFO模式下与FPGA通信

CY7C68013A Slave FIFO模式下与FPGA通信 CY7C68013A的时钟是由FPGA提供的24MHz,RESET引脚也是由FPGA控制. 1.开始时没有给FPGA烧录程序,将CY7C68013A接到PC上,安装驱动后,是检测不到device的,经查找,原因有两个: ①没有时钟,这种情况下需要先让FPGA跑起来,为CY7C68013A提供时钟 ②复位引脚没有控制,因为CY7C68013A的复位时低有效,如果FPGA的引脚不控制,就会使得此引脚电平不固定,CY7C68013A处于复

USB小白学习之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析

void TD_Init(void) { CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);          //设置CPU时钟频率为48M,寄存器CPUCS的位如下所示.此语句就是将CPUCS的b4,b3位设为10, //同时不改变其他bit. 图1 寄存器CPUCS的描述 //USBCS = Ox80; //set high speed mode 添加此语句时工程编译不通过 IFCONFIG = 0XCB; //选择内部时钟频率为48M,FIFO/GPIF

小白学习之路,基础四(函数的进阶)

一,内置函数 前面已经认识了函数,对函数都有所了解了,其实呢,在Python中提供了很多内置的函数方便给我们调用.下面会给大家提到一些常用的常用内置函数的用法,当然还有一些其他没讲到的,你也可以看参考文档,深入学习一波.咳咳咳,不多说了,直接进入装逼的代码环节. 更多的内置函数详情请参考http://www.runoob.com/python3/python3-built-in-functions.html 1 abs(-3) #取绝对值 2 all([1,2,5,0]) #当全部为真或者全部不

(转)USB小白学习之路(12) Cy7c68013固件之Slave FIFO

Cy7c68013固件之Slave FIFO 转自:http://blog.csdn.net/zengshaoqing/article/details/53053539 选择SlaveFIFO传输方式 SlaveFIFO传输示意如图1: 图1 Slave FIFO传输示意图 在Slave FIFO方式下,FX2LP内嵌的8051固件的功能只是配置Slave FIFO 相关的寄存器以及控制FX2LP何时工作在Slave FIFO模式下.一旦8051固件将相关的寄存器配置完毕,且使自身工作在Slav