赛灵思
直播中

李红梅

7年用户 138经验值
私信 关注
[问答]

怎么生成一个时钟来驱动FPGA逻辑和使用DCM的OPAD

实现顶层设计是不可能的,因为我想生成一个时钟来驱动FPGA逻辑和使用DCM的OPAD。
以下是ERROR消息。
错误:位置:1206  - 此设计包含一个全局缓冲区实例,驱动网络,驱动以下(前30个)非时钟源引脚片外。
在Spartan-6中,这种设计实践可能由于全局布线的限制而导致不可预测的情况。
如果设计确实存在路线,则该网络可能存在过度延迟或倾斜。
建议使用时钟转发技术来创建可靠且可重复的低偏斜解决方案:实例化ODDR2组件;
将.D0引脚连接到Logic1;
将.D1引脚连接到Logic0;
将时钟网连接到.C0;
将倒置时钟连接到.C1。
如果您希望覆盖此建议,可以使用.ucf文件中的CLOCK_DEDICATED_ROUTE约束(如下所示)将此消息降级为警告并允许您的设计继续。
虽然网络可能仍未路由,但您将能够分析FPGA_Editor.ERROR中的故障:放置:1136  - 此设计包含一个全局缓冲区实例,驱动网络,驱动以下(前30个)非
时钟源引脚。
这不是Spartan-6中推荐的设计实践,因为全局布线的限制可能导致过度延迟,歪斜或不可路由的情况。
建议仅使用BUFG资源来驱动时钟负载。
如果您希望覆盖此建议,可以使用.ucf文件中的CLOCK_DEDICATED_ROUTE约束(如下所示)将此消息降级为警告并允许您的设计继续。
错误:包装:1654  - 时序驱动的放置阶段遇到错误。
谁能告诉我该怎么办?
非常感谢。

以上来自于谷歌翻译


以下为原文

It's impossible to implement the top design because I want to generate a clock to drive both FPGA logic and OPAD using DCM. the ERROR message following.
ERROR:Place:1206 - This design contains a global buffer instance,
   , driving the net, , that is driving the
   following (first 30) non-clock source pins off chip.
   < PIN: clk_98m.O; >
   This design practice, in Spartan-6, can lead to an unroutable situation due
   to limitations in the global routing. If the design does route there may be
   excessive delay or skew on this net. It is recommended to use a Clock
   Forwarding technique to create a reliable and repeatable low skew solution:
   instantiate an ODDR2 component; tie the .D0 pin to Logic1; tie the .D1 pin to
   Logic0; tie the clock net to be forwarded to .C0; tie the inverted clock to
   .C1. If you wish to override this recommendation, you may use the
   CLOCK_DEDICATED_ROUTE constraint (given below) in the .ucf file to demote
   this message to a WARNING and allow your design to continue. Although the net
   may still not route, you will be able to analyze the failure in FPGA_Editor.
ERROR:Place:1136 - This design contains a global buffer instance,
   , driving the net, , that is driving the
   following (first 30) non-clock source pins.
   < PIN: clk_98m.O; >
   This is not a recommended design practice in Spartan-6 due to limitations in
   the global routing that may cause excessive delay, skew or unroutable
   situations.  It is recommended to only use a BUFG resource to drive clock
   loads. If you wish to override this recommendation, you may use the
   CLOCK_DEDICATED_ROUTE constraint (given below) in the .ucf file to demote
   this message to a WARNING and allow your design to continue.
   < PIN "cw_0/clkout1_buf.O" CLOCK_DEDICATED_ROUTE = FALSE; >
ERROR:Pack:1654 - The timing-driven placement phase encountered an error.

Who can tell what should I do? Thanks a lot.

回帖(29)

黄淳

2019-7-3 09:47:59
仔细阅读错误消息。
它提供了非常好的解决方案。
阅读开头的部分,“建议......”
----------------------------是的,我这样做是为了谋生。

以上来自于谷歌翻译


以下为原文

Carefully read the error message. It gives a very good solution. Read the part that starts, "It is recommended to ..."----------------------------Yes, I do this for a living.
举报

尤立虔

2019-7-3 10:04:16
假设您正在使用Verilog,您应该这样做:ODDR2#(//以下参数指定组件的行为.DDR_ALIGNMENT(“NONE”),//将输出对齐设置为//“NONE”,“C0”
“或”C1“.INIT(1'b0),//将Q //输出的初始状态设置为1'b0或1'b1 .SRTYPE(”SYNC“)//指定”SYNC“或”ASYNC“/
/ set / reset)ODDR2_inst(.Q(clk_98m),// 1位DDR输出数据.C0(clkout1),// 1位时钟输入.C1(clkout1_n),// 1位时钟输入.CE(
CE),// 1位时钟使能输入.D0(1'b1),// 1位数据输入(与C0相关).D1(1'b0),// 1位数据输入(与C1相关)
).R(1'b0),// 1位复位输入.S(1'b0)// 1位置位输入);其中clkout1是你要输出的时钟,而clkout1_n是clkout1的倒数
(您需要使用DCM生成此时钟 - 它基本上是clkout1,具有180°相移)

以上来自于谷歌翻译


以下为原文

Assuming you are using Verilog, you should do this:

ODDR2 #(
   // The following parameters specify the behavior
   // of the component.
   .DDR_ALIGNMENT("NONE"), // Sets output alignment
                           // to "NONE", "C0" or "C1"
   .INIT(1'b0),    // Sets initial state of the Q 
                   //   output to 1'b0 or 1'b1
   .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC"
                   //   set/reset
)
ODDR2_inst (
   .Q(clk_98m),   // 1-bit DDR output data
   .C0(clkout1), // 1-bit clock input
   .C1(clkout1_n), // 1-bit clock input
   .CE(CE), // 1-bit clock enable input
   .D0(1'b1), // 1-bit data input (associated with C0)
   .D1(1'b0), // 1-bit data input (associated with C1)
   .R(1'b0),   // 1-bit reset input
   .S(1'b0)    // 1-bit set input
);

where clkout1 is the clock that you are dring out and clkout1_n is the inverse of the clkout1 (you would need to generate this clock with the DCM - it is basically clkout1 with a 180° phase shift)
举报

李林

2019-7-3 10:17:56
请注意,ODDR和IDDR C0和C1输入的时钟源有多种选择,具体取决于您的应用(参见下面的快照)。
使用DCM CLK0和CLK180只是其中一个选项。
干杯,吉姆

以上来自于谷歌翻译


以下为原文

Please note that there are several options on clock sources for ODDR and IDDR C0 and C1 inputs depending on your application (see the snapshot below). Using DCM CLK0 and CLK180 is just one of the options.
 
 
Cheers,
Jim
举报

刘莉

2019-7-3 10:36:05
我对Xilinx FPGA完全不熟悉(但不是FPGA世界),我遇到了同样的问题。
我尝试了Jimwu和ISE建议的解决方案,并且它有效。
但我不敢相信你需要使用这种“技巧”从PLL输出时钟。
这是因为我使用的输出引脚不是“时钟源引脚”吗?
GCLK引脚是不合适的引脚输出时钟吗?
我是否必须以某种方式告诉工具我正在尝试输出的信号确实是时钟信号,而不仅仅是普通信号?
我在这里有点困惑。

以上来自于谷歌翻译


以下为原文

I'm totally new to Xilinx FPGAs (not to the FPGA world, though), and I ran into the same problem.
 
I tried the solution suggested by both Jimwu and ISE, and it works.
But I cannot believe you need to use such a "trick" to output a clock from a PLL.
 
Does this occur because the output pin I use is not a "clock source pin"?
Are GCLK pins unappropriate pins to output a clock?
Do I have to tell the tool somehow that the signal I'm trying to output is indeed a clock signal, not just an ordinary signal?
 
I'm a little confused here.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分