打印

dcm的复位脚怎么控制?

[复制链接]
2894|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andyany|  楼主 | 2010-8-25 12:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 andyany 于 2010-8-26 10:55 编辑

用dcm做一个变频。如果按书上的做法——
把6个管脚引出。在testbench里先给复位脚1并持续100ns,然后给0。
没有问题。
我想在顶层模块内部控制复位脚,根据主频实现书上的功能(先给复位脚1并持续100ns,然后给0)。仿真结果发现复位脚、输出频率及锁定脚均为高阻。
我是这样控制复位脚的:
...
reg rst_in = 1'b1;
reg fuwei = 3'd0;
always @(posedge clk)
if(fuwei != 3'd5) fuwei <= fuwei + 3'd1;
else rst_in <= 1'b0;
...

难道该复位脚必须外部控制,然后送给顶层模块作为输入?
请高手指教!谢谢!

相关帖子

沙发
sibaidong| | 2010-8-27 10:18 | 只看该作者
小问一下,你控制复位的时钟与这个复位有关联不?

使用特权

评论回复
板凳
andyany|  楼主 | 2010-8-29 11:25 | 只看该作者
谢谢sibaidong!你的问题我没听懂。
我的顶层模块是这样的——
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

综合时没有错误,但有3个警告。如下——
WARNING:Xst:1306 - Output <CLKIN_IBUFG_OUT> is never assigned.
WARNING:Xst:1306 - Output <CLK0_OUT> is never assigned.
WARNING:Xst:1305 - Output <rst> is never assigned. Tied to value 1.
主频50MHz。
谢谢你的热情!谢谢!

使用特权

评论回复
地板
andyany|  楼主 | 2010-8-29 11:31 | 只看该作者
dcm的复位脚和reg型的变量rst相连。
rst初始化为1。5个时钟周期后赋0。这样就实现了100ns复位。
可警告好像说我没有赋值,因此接到1。
是语言问题还是别的?
请指教!

使用特权

评论回复
5
sibaidong| | 2010-8-29 16:36 | 只看该作者
优化掉了,工程没意义。FPGA设计只不过是数字电路设计,对于没有输出的逻辑,编译工具会自动优化的。

使用特权

评论回复
6
andyany|  楼主 | 2010-8-30 14:42 | 只看该作者
是怎么优化掉的?能讲的具体点吗。我的电子很差。

使用特权

评论回复
7
andyany|  楼主 | 2010-9-1 09:54 | 只看该作者
本帖最后由 andyany 于 2010-9-1 09:58 编辑

目前的状态:
always语句改成——
always@(posedge CLKIN_IN)
                if(cnt != 3'd5)  begin cnt <= cnt + 3'd1;  rst <= 1'b1; end
                else                 rst <= 1'b0;
优化问题得到了解决。
并且按ttp://hi.baidu.com/hclbupt/blog/item/de3901b55fae6f7a8bd4b2f6.html
的做法得到了想要的结果。
原因还不清楚。不过,对sibaidong的热情指导表示由衷地感谢!谢谢!

使用特权

评论回复
8
andyany|  楼主 | 2010-9-10 15:20 | 只看该作者
所谓优化是假象,错误在于——
reg cnt = 3'd0;
应为
reg [2:0] cnt = 3'd0;

使用特权

评论回复
9
andyany|  楼主 | 2010-9-10 15:23 | 只看该作者
hi.baidu的做法可以通过综合,但翻译(Translate)阶段报错。详情请关注新贴——
让XST不要添加I/O缓冲?
欢迎讨论和指导!

使用特权

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

本版积分规则

62

主题

664

帖子

3

粉丝