fpga小白学习之路erro:buffersofthesamedirectioncannotbeplacedinseries

kybyano kybyano     2022-10-08     374

关键词:

锁相环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>

fpga小白学习之路串口波特率问题的处理

串口波特率问题的处理此博文一共包含三个方面的内容:(1)异步串口通信的数据格式;(2)为何串口通信中接收端采样时钟频率是传输的波特率的16倍;(3)串口波特率等概念。1、异步串口通信的数据格式  串口的通信可以通过链... 查看详情

fpga小白学习之路systemverilog的概念以及与verilog的对比

转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型、结构、压缩和... 查看详情

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

clk为什么要用posedge,而不用negedge  转自:http://www.cnblogs.com/dangxia/archive/2012/03/07/2383744.html  Verilog中典型的counter逻辑是这样的:1always@(posedgeclkornegedgereset)begin23if(reset==1‘b0)45reg_inst1<=8‘d0;67e 查看详情

usb小白学习之路cy7c68013aslavefifo模式下与fpga通信

CY7C68013ASlaveFIFO模式下与FPGA通信CY7C68013A的时钟是由FPGA提供的24MHz,RESET引脚也是由FPGA控制。1、开始时没有给FPGA烧录程序,将CY7C68013A接到PC上,安装驱动后,是检测不到device的,经查找,原因有两个:  ①没有时钟,这种情况... 查看详情

(转)usb小白学习之路fx2lpcy7c68013——slavefifo与fpga通信

此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 1USB概述USB名称解释 USB是通用串行总线(UniversalSerialBus)的缩写。能过在计算机运行过程中随意地接入,并且立刻就能投入工作,那么这样的特性叫做即插即用PnP... 查看详情

前端小白的学习之路--html学习

HTML的补充学习1.meta与base<metahttp-equiv="refresh"content="2">2秒刷新一次<basehref="https://www.baidu.com"target="_blank">设置默认跳转地址以及跳转方式<linkrel="icon 查看详情

fpga学习之路7vga接口原理与fpga实现(代码片段)

一、软件平台与硬件平台  软件平台:    1、操作系统:Windows-8.1    2、开发套件:ISE14.7    3、仿真工具:ModelSim-10.4-SE  硬件平台:    1、FPGA型号:Xilinx公司的XC6SLX45-2CSG324    2、VGA接口    3... 查看详情

fpga学习之路——一路走来

...go的书时,看到这样写到。做什么事情都不容易,学习也是,所以一个词很重要不忘初心。作为一名大二的学生,我很高兴能够将自己学习FPGA的过程记录下来,一是方便自己以后回头看的时候能够有所感触ÿ... 查看详情

前端小小白的学习之路javascript常用代码书写规范

javascript代码规范代码规范我们应该遵循古老的原则:“能做并不意味着应该做”。全局命名空间污染总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块。不推荐varx=10,y=100;console.log(window.x+‘‘+window.y);推... 查看详情

前端小小白的学习之路vue学习记录⑤(组件通信-父与子)

今天我们看一下组件通信。经过前面几篇文章,我们已经可以构建出完整的单个组件,并利用路由使其串联起来访问了。但这明显还是不够的。一个页面不可能就是个单组件,一般是由多个组件合成的。正因为如此,组件之间肯... 查看详情

前端小小白的学习之路html5最佳实践webapp

简介 本文重点关注如何充分利用HTML5和CSS让webapp运行更加流畅.Tip1:使用webstorage代替cookie cookie最大的缺陷是在每一次HTTP请求中都会携带所有符合规则的cookie数据.这会增加请求响应时间,特别是XHR请求. 在HTML5中使用sessio... 查看详情

小白艰苦学习之路(记录学习历程——java篇)day5(代码片段)

Day5方法详解什么是方法publicclassTest1//main方法publicstaticvoidmain(String[]args)//实参:实际调用传递给他的参数intsum=add(1,4);System.out.println(sum);//加法//形式参数:用来定义作用的publicstaticintadd(inta,intb)returna& 查看详情

小白艰苦学习之路(记录学习历程——java篇)day5(代码片段)

Day5方法详解什么是方法publicclassTest1//main方法publicstaticvoidmain(String[]args)//实参:实际调用传递给他的参数intsum=add(1,4);System.out.println(sum);//加法//形式参数:用来定义作用的publicstaticintadd(inta,intb)retu 查看详情

小白的ctf学习之路1——程序与cpu

刚刚注册了这个博客园,尽量保持每日一更(*/ω\*)今天看了po学院的教学视频,了解了程序是什么,如何在CPU当中工作的等各种之前未曾想过的问题,特此记录,以防忘记首先我们学习程序与CPU之前需要了解这么几个问题:1... 查看详情

小白艰苦学习之路(记录学习历程——java篇)day4(代码片段)

Day4用户交互Scanner对象可以通过Scanner类来获取用户的输入。(其中,java.util.Scanner是它的包)基本语法:Scanners=newScanner(System.in)通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使... 查看详情

小白艰苦学习之路(记录学习历程——java篇)day4(代码片段)

Day4用户交互Scanner对象可以通过Scanner类来获取用户的输入。(其中,java.util.Scanner是它的包)基本语法:Scanners=newScanner(System.in)通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使... 查看详情

usb小白学习之路hid鼠标程序

HID鼠标程序1. 特别注意需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的。2. 程序解... 查看详情

usb小白学习之路hid键盘程序

HID键盘程序1. 特别注意需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的。2. 程序解... 查看详情