PLL原语例化使用时常见问题

news2024/11/28 22:41:20

目录

一、前言

二、常见问题

问题一、综合阶段报错[Synth 8-439]

问题二、综合阶段报错[Synth 8-448] 

问题三、在实现阶段DRC报错DRC PDRC-38

问题四、在实现阶段DRC报错DRC PDRC-43


一、前言

    在设计中经常会使用PLL的原语进行例化使用,PLL如果直接例化使用将会报错,以PLLE2_ADV为例,vivado版本为2019.1,器件为xc7k480tffv1156,例化的模版如下,下面4个标红的系数需重点关注。

  PLLE2_ADV #(

      .BANDWIDTH("OPTIMIZED"),  // OPTIMIZED, HIGH, LOW

      .CLKFBOUT_MULT(5),        // Multiply value for all CLKOUT, (2-64)将输出先进行指定倍数的倍频处理

      .CLKFBOUT_PHASE(0.0),     // Phase offset in degrees of CLKFB, (-360.000-360.000).

      // CLKIN_PERIOD: Input clock period in nS to ps resolution (i.e. 33.333 is 30 MHz).

      .CLKIN1_PERIOD(0.0),

      .CLKIN2_PERIOD(0.0),

      // CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for CLKOUT (1-128)  设置输出时钟的分频系数

      .CLKOUT0_DIVIDE(1),

      .CLKOUT1_DIVIDE(1),

      .CLKOUT2_DIVIDE(1),

      .CLKOUT3_DIVIDE(1),

      .CLKOUT4_DIVIDE(1),

      .CLKOUT5_DIVIDE(1),

      // CLKOUT0_DUTY_CYCLE - CLKOUT5_DUTY_CYCLE: Duty cycle for CLKOUT outputs (0.001-0.999).设置输出时钟的占空比

      .CLKOUT0_DUTY_CYCLE(0.5),

      .CLKOUT1_DUTY_CYCLE(0.5),

      .CLKOUT2_DUTY_CYCLE(0.5),

      .CLKOUT3_DUTY_CYCLE(0.5),

      .CLKOUT4_DUTY_CYCLE(0.5),

      .CLKOUT5_DUTY_CYCLE(0.5),

      // CLKOUT0_PHASE - CLKOUT5_PHASE: Phase offset for CLKOUT outputs (-360.000-360.000).设置输出时钟的相移值

      .CLKOUT0_PHASE(0.0),

      .CLKOUT1_PHASE(0.0),

      .CLKOUT2_PHASE(0.0),

      .CLKOUT3_PHASE(0.0),

      .CLKOUT4_PHASE(0.0),

      .CLKOUT5_PHASE(0.0),

      .COMPENSATION("ZHOLD"),   // ZHOLD, BUF_IN, EXTERNAL, INTERNAL

      .DIVCLK_DIVIDE(1),        // Master division value (1-56)

      // REF_JITTER: Reference input jitter in UI (0.000-0.999).

      .REF_JITTER1(0.0),

      .REF_JITTER2(0.0),

      .STARTUP_WAIT("FALSE")    // Delay DONE until PLL Locks, ("TRUE"/"FALSE")

   )

   PLLE2_ADV_inst (

      // Clock Outputs: 1-bit (each) output: User configurable clock outputs

      .CLKOUT0(CLKOUT0),   // 1-bit output: CLKOUT0

      .CLKOUT1(CLKOUT1),   // 1-bit output: CLKOUT1

      .CLKOUT2(CLKOUT2),   // 1-bit output: CLKOUT2

      .CLKOUT3(CLKOUT3),   // 1-bit output: CLKOUT3

      .CLKOUT4(CLKOUT4),   // 1-bit output: CLKOUT4

      .CLKOUT5(CLKOUT5),   // 1-bit output: CLKOUT5

      // DRP Ports: 16-bit (each) output: Dynamic reconfiguration ports

      .DO(DO),             // 16-bit output: DRP data

      .DRDY(DRDY),         // 1-bit output: DRP ready

      // Feedback Clocks: 1-bit (each) output: Clock feedback ports

      .CLKFBOUT(CLKFBOUT), // 1-bit output: Feedback clock

      .LOCKED(LOCKED),     // 1-bit output: LOCK

      // Clock Inputs: 1-bit (each) input: Clock inputs

      .CLKIN1(CLKIN1),     // 1-bit input: Primary clock

      .CLKIN2(CLKIN2),     // 1-bit input: Secondary clock

      // Control Ports: 1-bit (each) input: PLL control ports

      .CLKINSEL(CLKINSEL), // 1-bit input: Clock select, High=CLKIN1 Low=CLKIN2

      .PWRDWN(PWRDWN),     // 1-bit input: Power-down

      .RST(RST),           // 1-bit input: Reset

      // DRP Ports: 7-bit (each) input: Dynamic reconfiguration ports

      .DADDR(DADDR),       // 7-bit input: DRP address

      .DCLK(DCLK),         // 1-bit input: DRP clock

      .DEN(DEN),           // 1-bit input: DRP enable

      .DI(DI),             // 16-bit input: DRP data

      .DWE(DWE),           // 1-bit input: DRP write enable

      // Feedback Clocks: 1-bit (each) input: Clock feedback ports

      .CLKFBIN(CLKFBIN)    // 1-bit input: Feedback clock

   );

二、常见问题

工程设计代码,主要关注前面 PLLE2_ADV例化使用的参数配置。

module sdc_constraint
(
    input rst_pll,
    input d0,
    input d1,
    output out0,
    output out1,

    input CLK,
    input RSTn,   
    output SDRAM_CLK,
    output [4:0]SDRAM_CMD,
    output [13:0]SDRAM_BA,
    inout [15:0]SDRAM_DATA,

    input CLK1,	
	input WrEN_Sig,
	input RdEN_Sig,
	output Done_Sig,
	output Busy_Sig,	
	input Init_Done_Sig,
	output Init_Start_Sig,
	output [2:0]Func_Start_Sig,   
    output SDRAM_UDQM,
    output SDRAM_LDQM,

    input CLK2,
    input [3:0]Din,
    output [3:0]Dout


);

     /***********PLL*****************/
	 
	 wire CLK0_PLL;
	 wire CLK1_PLL;
	 reg ff0_pll,ff1_pll;
	 reg out0,out1;
	 
	 PLLE2_ADV
	 #(
	  .CLKFBOUT_MULT(5),        // Multiply value for all CLKOUT, (2-64)
      .CLKOUT0_DIVIDE(2),         // Divide amount for CLKOUT0 (1-128)
      .CLKOUT0_DUTY_CYCLE(0.3),   // Duty cycle for CLKOUT0 (0.001-0.999)
      .CLKOUT0_PHASE(0.0), 
      .CLKOUT1_DIVIDE(3),         // Divide amount for CLKOUT0 (1-128)
      .CLKOUT1_DUTY_CYCLE(0.7),   // Duty cycle for CLKOUT0 (0.001-0.999)
      .CLKOUT1_PHASE(0.0)   
	 	)
	 U1

	 (
	     	.CLKIN1 ( CLK ),
	        .CLKOUT0 ( CLK0_PLL ),
	        .CLKOUT1 ( CLK1_PLL )
	 );
	 /**********FF0**********/ 
	 always@(posedge CLK0_PLL,negedge rst_pll)
	 	if(!rst_pll)
	 		ff0_pll<=0;
	 	else begin
	 		ff0_pll<=d0;
	 	end

	 assign result0=ff0_pll&Busy_Sig;

	 always@(posedge CLK0_PLL,negedge rst_pll)
	 	if(!rst_pll)
	 		out0<=0;
	 	else begin
	 		out0<=result0;
	 	end

	 /**********FF1**********/ 
	 always@(posedge CLK1_PLL,negedge rst_pll)
	 	if(!rst_pll)
	 		ff1_pll<=0;
	 	else begin
	 		ff1_pll<=d0;
	 	end

	 assign result1=ff1_pll^Done_Sig;

	 always@(posedge CLK1_PLL,negedge rst_pll)
	 	if(!rst_pll)
	 		out1<=0;
	 	else begin
	 		out1<=result1;
	 	end


	 /********************************/
   /*******************SDRAM**************/
    	
	parameter T15US = 11'd1500;
	
	/*********************************/
	
	reg [2:0]i;
	reg [10:0]C1;
	reg [4:0]C2;
	reg [4:0]Used;
    reg [2:0]rStart;
	reg [2:0]isStart; //[2] Auto Refresh , [1] Read Action, [0] Write Action
	reg isInit;
	reg isBusy;
	reg isDone;
	
	always @ ( posedge CLK1 or negedge RSTn )
	    if( !RSTn )
		     begin
		            i <= 3'd6;          // Initial SDRam at first 
		            C1 <= 11'd0;
		            C2 <= 5'd0;
		            Used <= 5'd0;
		            rStart <= 3'b000;
					isStart <= 3'b000;
					isInit <= 1'b0;
					isBusy <= 1'b1;
					isDone <= 1'b0;
			  end
		 else 
		     case( i )
			  
					0: // IDLE state
					if( C1 >= T15US ) begin C1 <= 11'd0; Used <= 5'd9; rStart <= 3'b100; i <= 3'd1; end
				    else if( RdEN_Sig ) begin C1 <= C1 + 1'b1; Used <= 5'd8; rStart <= 3'b010;i <= 3'd3; end 
					else if( WrEN_Sig ) begin C1 <= C1 + 1'b1; Used <= 5'd9; rStart <= 3'b001;i <= 3'd3; end 
                    else begin C1 <= C1 + 1'b1; end

                    /***************************/

					1: // Auto Refresh Done , 9 clock on this step
					if( C2 == Used -1 ) begin C2 <= 5'd0; i <= i + 1'b1; end
				    else begin isStart <= rStart; C2 <= C2 + 1'b1; end
				    
				    2: // 1 clock one this step			
				    begin isStart <= 3'd0; C1 <= C1 + 1'b1; i <= 3'd0; end
				    
				    /***************************/
				    
				    3: // Read and Write Done
					if( C2 == Used -1) begin C2 <= 5'd0; C1 <= C1 + Used; i <= i + 1'b1; end
					else begin isStart <= rStart; C2 <= C2 + 1'b1; end
					
					/***************************************/
					
					4: // Generate Done Signal
					begin isStart <= 3'd0; isDone <= 1'b1; C1 <= C1 + 1'b1; i <= i + 1'b1; end
					
					5: 
					begin isDone <= 1'b0; C1 <= C1 + 1'b1; i <= 3'd0; end
					
					/******************************************/
					
					6: // Initial SDRam using 21 clock
					if( Init_Done_Sig ) begin isBusy <= 1'b0; isInit <= 1'b0; C1 <= C1 + 1'b1; i <= 3'd0; end
				    else begin isBusy <= 1'b1; isInit <= 1'b1; end
					
					/******************************************/
					
			  endcase
			  
	/***************************************/
	
	assign Init_Start_Sig = isInit;
	assign Func_Start_Sig = isStart;
	assign Done_Sig = isDone;
	assign Busy_Sig = isBusy;
	
	/***************************************/

	 /********************************/		 
	 
    reg [3:0]rData;
    
    always @ ( posedge CLK2 or negedge RSTn )
        if( !RSTn )
            begin
                rData <= 4'd0;
            end
        else 
            begin
                rData <= Din;
            end
    
    /********************************************/
            
    assign Dout = rData;
    
    /********************************************/    
     
endmodule

问题一、综合阶段报错[Synth 8-439]

现象:具体报错内容如下

[Synth 8-439] module 'PLLE2_BASE1' not found ["C:/Users/Administrator/Desktop/verilog_test/project_4/experiment15/sdram_demo3/sdram_demo3.v":52]

 

原因:报错信息中提示很明显,即使用了不存在的原语PLLE2_BASE1

解决:使用器件支持的原语进行例化

问题二、综合阶段报错[Synth 8-448] 

现象:具体报错内容如下

[Synth 8-448] named port connection 'CLKIN1' does not exist for instance 'U1' of module 'PLLE3_ADV' ["C:/Users/Administrator/Desktop/verilog_test/project_4/experiment15/sdram_demo3/sdram_demo3.v":55]

 

 

原因:第一条报错已经很明了,即使用的PLLE3_ADV中CLKIN1端口在该原语中不存在,即例化使用的原语为其他器件支持的,当前器件不支持

第二条报错[Synth 8-6156] failed synthesizing module 'sdc_constraint' ["C:/Users/Administrator/Desktop/verilog_test/project_4/experiment15/sdram_demo3/sdram_demo3.v":1]是因为在约束文件sdc_constraint中对CLKIN1对应的端口进行了约束

约束内容如下

create_clock -period 10.000 -name clkin_pll -waveform {1.000 5.000} [get_ports CLK]

解决:首先在language templates中对应系列器件下是否支持PLLE3_ADV,如果不支持,将PLLE3_ADV修改为器件支持的原语,二是确认PLLE3_ADV的端口是否存在CLKIN1端口。经过确认,此处为PLLE3_ADV在当前xc7k480tffv中不支持,支持的为PLLE2_ADV,将PLLE3_ADV修改为PLLE2_ADV,使用对应的端口即可

问题三、在实现阶段DRC报错DRC PDRC-38

现象:具体报错内容如下:

[DRC PDRC-38] PLL_adv_ClkFrequency_clkin1: The calculated frequency value, 0.000 MHz, of the CLKIN1_PERIOD attribute on the PLLE2_ADV site PLLE2_ADV_X0Y0 (cell U1) is outside the allowed range (19.000 - 800.000 MHz). Please change the CLKIN1_PERIOD attribute value in order to be within the allowed range for this device.

 

原因:未对输入端口clkin1设置时钟约束,因此默认为0MHZ

解决:对设计的输入端口CLK设置时钟约束

问题四、在实现阶段DRC报错DRC PDRC-43

具体报错内容如下

[DRC PDRC-43] PLL_adv_ClkFrequency_div_no_dclk: The computed value 500.000 MHz (CLKIN1_PERIOD, net CLK_IBUF) for the VCO operating frequency of the PLLE2_ADV site PLLE2_ADV_X0Y0 (cell U1) falls outside the operating range of the PLL VCO frequency for this device (800.000 - 1600.000 MHz). The computed value is (CLKFBOUT_MULT_F * 1000 / (CLKINx_PERIOD * DIVCLK_DIVIDE)). Please adjust either the input period CLKINx_PERIOD (10.000000), multiplication factor CLKFBOUT_MULT_F (5) or the division factor DIVCLK_DIVIDE (1), in order to achieve a VCO frequency within the rated operating range for this device.

 

原因:约束中设置的PLL的输入时钟频率与倍频系数的乘积【Hclk*CLKFBOUT_MULT】不在【800MHZ-1600MHZ】间,约束文件中CLK周期为10ns,则频率为100MHZ,PLL例化的原语中系数CLKFBOUT_MULT(5)默认为5,因此计算出的值为500MHZ,不在要求的范围内,因此报错。

约束内容:create_clock -period 10.000 -name clkin_pll -waveform {1.000 5.000} [get_ports CLK]

解决:

方法1:修改约束中CLK的周期,使其与系数CLKFBOUT_MULT的值5相乘后在【800-1600MHZ】间

方法2:修改系数CLKFBOUT_MULT的值,可将其设置为【5-16】之间的值,此处改为10,也即CLKOUT为1000MHZ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/967941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十二、MySQL(DQL)分组/排序/分页查询如何实现?

总括 select 字段列表 from 表名 [where 条件] (group by)/(order by)/(limit) 分组字段名 分组查询 1、分组查询 &#xff08;1&#xff09;基础语法&#xff1a; select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组之后的过滤条件] &#xff08;…

【C++初阶】queue的常见操作和模拟实现以及deque的介绍

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

相交链表:k神题解的一点小感慨

题目&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 朴素解法 用…

linux中busybox与文件系统的关系

busybox与文件系统 在 Linux 中&#xff0c;BusyBox 是一个精简的、多功能的工具集合&#xff0c;它包含了一系列常用的命令和实用程序&#xff0c;如 ls、cp、mkdir 等。BusyBox 的目标是提供一个功能完整而又占用空间较小的工具集合&#xff0c;适用于嵌入式系统或资源受限的…

Linux系统中驱动面试分享

​ 1、驱动程序分为几类&#xff1f; 字符设备驱动 块设备驱动 网络设备驱动 2、字符设备驱动需要实现的接口通常有哪些 open、close、read、write、ioctl等接口。 3、主设备号与次设备号的作用 主设备号和次设备号是用来标识系统中的设备的&#xff0c;主设备号用来标识…

信息熵 条件熵 交叉熵 联合熵 相对熵(KL散度) 互信息(信息增益)

粗略版快速总结 条件熵 H ( Q ∣ P ) 联合熵 H ( P , Q ) − H ( P ) 条件熵H(Q∣P)联合熵H(P,Q)−H(P) 条件熵H(Q∣P)联合熵H(P,Q)−H(P) 信息增益 I ( P , Q ) H ( P ) − H ( P ∣ Q ) H ( P ) H ( Q ) − H ( P , Q ) 信息增益 I(P,Q)H(P)−H(P∣Q)H(P)H(Q)-H(P,Q) 信息…

vulhub-tomcat弱口令

1.启动靶场 进入文件 进入目录 进入到靶场 启动靶场 docker-compose up -d 2.查看 ip地址 3.使用nmap对ip进行 扫描 发现存在8080的端口&#xff0c;并且端口是开放的状态&#xff0c;apache&#xff0c;tomcat搭建的 4.访问ip地址的端口 点击Manager app 6.开启BP进行抓包 随…

【力扣每日一题】2023.9.3 消灭怪物的最大数量

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目比较长&#xff0c;我概括一下就是有一群怪物&#xff0c;每只怪物离城市的距离都不一样&#xff0c;并且靠近的速度也不一样&#x…

每日一题 1921. 消灭怪物的最大数量

难度&#xff1a;中等 思路&#xff1a; 已知速度和距离&#xff0c;可求时间必定先消灭时间最短的怪物求得时间数组排序&#xff0c;只要在第 i 秒时&#xff0c;time[i] > i &#xff0c;那么就可以消灭第 i 个怪物 代码&#xff1a; class Solution:def eliminateMax…

CVPR2022 Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels

Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels 使用不可靠的伪标签的半监督语义分割 Paper&#xff1a;https://openaccess.thecvf.com/content/CVPR2022/html/Wang_Semi-Supervised_Semantic_Segmentation_Using_Unreliable_Pseudo-Labels_CVPR_202…

vue+element-ui el-table组件二次封装实现虚拟滚动,解决数据量大渲染DOM过多而卡顿问题

一、此功能已集成到TTable组件中 二、最终效果 三、需求 某些页面不做分页时&#xff0c;当数据过多&#xff0c;会导致页面卡顿&#xff0c;甚至卡死 四、虚拟滚动 一、固定一个可视区域的大小并且其大小是不变的&#xff0c;那么要做到性能最大化就需要尽量少地渲染 DOM 元素…

一键导出文件名和位置,让你轻松管理文件!

想要轻松管理你的文件吗&#xff1f;试试我们的文件名和位置导出工具&#xff0c;一键导出文件名和位置&#xff0c;让你轻松管理你的文件&#xff01;我们的工具可以在不修改文件名的前提下&#xff0c;快速导出文件名和位置&#xff0c;让你随时随地查找和管理你的文件。 第…

C++算法 —— 动态规划(1)斐波那契数列模型

文章目录 1、动规思路简介2、第N个泰波那契数列3、三步问题4、使用最小花费爬楼梯5、解码方法6、动规分析总结 1、动规思路简介 动规的思路有五个步骤&#xff0c;且最好画图来理解细节&#xff0c;不要怕麻烦。当你开始画图&#xff0c;仔细阅读题时&#xff0c;学习中的沉浸…

绩效被打了 C 就要走人吗?

文章目录 前言一、什么是绩效&#xff1f;二、上级的评价是客观的吗&#xff1f;三、工作必须要和上级搞好关系吗&#xff1f;四、自我评价要写多少字&#xff1f;五、绩效低的话会被开除吗&#xff1f;六、低绩效钱会少吗?七、有关星球提问统一回复 前言 今天是英雄算法联盟九…

横向对比 npm、pnpm、tnpm、yarn 优缺点

前端工程化是现代Web开发中不可或缺的一环&#xff0c;它的出现极大地提升了前端开发的效率和质量。 在过去&#xff0c;前端开发依赖于手动管理文件和依赖&#xff0c;这导致了许多问题&#xff0c;如版本冲突、依赖混乱和构建繁琐等。而今&#xff0c;随着众多前端工程化工具…

荣耀10 关闭自动更新

1.电脑端下载安装手机助手 2.下载adb工具https://adbdownload.com/ 3.解压后&#xff0c;打开工具所在目录&#xff0c;在地址栏输入cmd然后回车 4.进入这黑麻麻的工具&#xff0c;输入adb devices然后回车&#xff0c;确认连接到手机 输入命令 adb shell pm disable-user com…

理解 std::thread::detach

C多线程并发编程入门&#xff08;目录&#xff09; detach 的作用 detach 的作用就是让线程独自执行。 为何需要 detach 在 理解 std::thread::join 中&#xff0c;我们看到了&#xff0c;如果所有线程都是一开始就在 main 函数中创建好的&#xff0c;那么只需要有一个 joi…

香橙派Orangepi Zero2 刷机步骤

目录 1.香橙派Orangepi Zero2简介 2.刷机 2.1物料准备 2.2 格式化SD卡 2.3 烧录镜像到SD卡 2.4 安装SD卡到Orangepi 2.5 连接Pi电源 2.6 MobaXterm 串口登陆Orangepi 2.6.1 连线示意图 2.6.2 MobaXterm 使用 2.6.3修改登陆密码 2.6.4 网络配置 2.7 SSH登陆开发版…

3D封装技术发展

长期以来&#xff0c;芯片制程微缩技术一直驱动着摩尔定律的延续。从1987年的1um制程到2015年的14nm制程&#xff0c;芯片制程迭代速度一直遵循摩尔定律的规律&#xff0c;即芯片上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍。但2015年以后&#xff0c;芯片制…

手把手教你申请腾讯云免费SSL证书

2023腾讯云免费SSL证书申请流程&#xff0c;一个腾讯云账号可以申请50张免费SSL证书&#xff0c;免费SSL证书为DV证书&#xff0c;仅支持单一域名&#xff0c;申请腾讯云免费SSL证书3分钟即可申请成功&#xff0c;免费SSL证书品牌为TrustAsia亚洲诚信&#xff0c;腾讯云百科分享…