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

[复制链接]
3580|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,仿真没有问题。
钻研的鱼 发表于 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
 楼主| andyany 发表于 2010-9-7 14:55 | 显示全部楼层
看了dcm的RTL图。你的做法很巧妙!
 楼主| andyany 发表于 2010-9-7 15:38 | 显示全部楼层
刚试了,完全正确。
十分感谢!!!
 楼主| andyany 发表于 2010-9-7 15:55 | 显示全部楼层
本帖最后由 andyany 于 2010-9-9 17:01 编辑

按钻研的鱼得到的RTL图为fish.rar,
按hi.baidu得到的RTL图为hibaidu.rar.
 楼主| andyany 发表于 2010-9-8 17:26 | 显示全部楼层
本帖最后由 andyany 于 2010-9-9 17:03 编辑

补传一下RTL图。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| andyany 发表于 2010-9-9 17:05 | 显示全部楼层
试问高手,孰优孰劣?
3Q!
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部