打印

让XST不要添加I/O缓冲?

[复制链接]
2699|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andyany|  楼主 | 2010-9-5 17:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例:顶层模块只有一个输入时钟,可是我想既让其做dcm的输入,同时又用该时钟计数延时控制dcm的复位。
直接使用的话综合时会报错。
解决办法之一是让XST不要添加I/O缓冲。具体做法——
选中synthesize,然后process->properties->Xilinx Specific Options,把add I/O buffer 的勾去掉。
怎么理解?有没有其他办法?
哪位高手能给讲讲?先谢过!

相关帖子

沙发
钻研的鱼| | 2010-9-6 08:49 | 只看该作者
IO buffer的缓冲你是去不掉的,必须有。
   dcm用的时钟信号经过一个 IBUFG,而你用的用作计数的时钟也经过一个buf,这两个信号物理上又是同一个信号,有可能造成冲突。
   解决方法:在dcm ipcore 内部会有经过IBUFG的信号,如
       IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN),
                           .O(CLKIN_IBUFG));
     试试用CLKIN_IBUFG这个信号作为    你计数延时控制dcm的复位的时钟

使用特权

评论回复
板凳
andyany|  楼主 | 2010-9-7 08:48 | 只看该作者
谢谢钻研的鱼!
感觉你说的是正解。我的工程有2层,dcm是底层,顶层模块如下:
module sample32mega(CLKIN_IN,
                                                        rst,
                                                        CLKFX_OUT,
                                                        CLKIN_IBUFG_OUT,
                                                        CLK0_OUT,
                                                        LOCKED_OUT);
                input CLKIN_IN;
                output rst;
                output CLKFX_OUT;
                output CLKIN_IBUFG_OUT;
                output CLK0_OUT;
                output LOCKED_OUT;
               
                reg rst = 1'b1;
                reg cnt = 3'd0;
               
                always@(posedge CLKIN_IN)
                if(cnt != 3'd5) cnt <= cnt + 3'd1;
                else                 begin cnt <= 3'd0;
                                                        rst <= 1'b0; end
                my_dcm dcm1(
                .CLKIN_IN(CLKIN_IN),
                .RST_IN(rst),
                .CLKFX_OUT(CLKFX_OUT),
                .CLKIN_IBUFG_OUT(),
                .CLK0_OUT(),
                .LOCKED_OUT(LOCKED_OUT)
                );
endmodule
按你说的,怎么改好?
谢谢!

使用特权

评论回复
地板
andyany|  楼主 | 2010-9-7 12:09 | 只看该作者
我说的办法来自http://hi.baidu.com/hclbupt/blog ... ae6f7a8bd4b2f6.html,仿真没有问题。

使用特权

评论回复
5
钻研的鱼| | 2010-9-7 13:12 | 只看该作者
我都点明了,你却不去试试,

wire clk_your;
                reg rst = 1'b1;
my_dcm dcm1(
                .CLKIN_IN(CLKIN_IN),
                .RST_IN(rst),
                .CLKFX_OUT(CLKFX_OUT),
                .CLKIN_IBUFG_OUT(clk_your),
                .CLK0_OUT(),
                .LOCKED_OUT(LOCKED_OUT)
                );


                reg cnt = 3'd0;
               
                always@(posedgeclk_your)
                if(cnt != 3'd5) cnt <= cnt + 3'd1;
                else                 begin cnt <= 3'd0;
                                                        rst <= 1'b0; end

使用特权

评论回复
6
andyany|  楼主 | 2010-9-7 14:55 | 只看该作者
看了dcm的RTL图。你的做法很巧妙!

使用特权

评论回复
7
andyany|  楼主 | 2010-9-7 15:38 | 只看该作者
刚试了,完全正确。
十分感谢!!!

使用特权

评论回复
8
andyany|  楼主 | 2010-9-7 15:55 | 只看该作者
本帖最后由 andyany 于 2010-9-9 17:01 编辑

按钻研的鱼得到的RTL图为fish.rar,
按hi.baidu得到的RTL图为hibaidu.rar.

使用特权

评论回复
9
andyany|  楼主 | 2010-9-8 17:26 | 只看该作者
本帖最后由 andyany 于 2010-9-9 17:03 编辑

补传一下RTL图。

fish.rar

18.05 KB

hibaidu.rar

17.36 KB

使用特权

评论回复
10
andyany|  楼主 | 2010-9-9 17:05 | 只看该作者
试问高手,孰优孰劣?
3Q!

使用特权

评论回复
11
andyany|  楼主 | 2010-9-10 15:12 | 只看该作者
就综合而言,感觉差别不大。可是按hi.baidu的做法,在翻译(Translate)阶段会出现这么一个错误——
ERROR:NgdBuild:924 - input pad net 'CLKIN_IN' is driving non-buffer primitives:
而采用钻研的鱼的办法,可以顺利的看到预期结果。
在此对钻研的鱼表示感谢!谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

664

帖子

3

粉丝