6178|5

21

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

DCM的lock一直为X [复制链接]

您好,我有两个DCM串联使用,但是仿真看,第二个DCM的lock信号一直为红线,为什么呢,使用的是ISE11.4,DCM的连接是这样的:
DCM_GMII dcm_gmii_inst (
    .CLKIN_IN(input_clk),
    .RST_IN(rst),
    .CLK0_OUT(clk_gmii),
    .LOCKED_OUT(dcm2_lock)
    );
  
     BUFG BUFG_CLK_GMII
     (
      .O  (clk_gmii_in),
      .I  (clk_gmii)
      );
   DCM #
     (
      .DLL_FREQUENCY_MODE    ("LOW"),
      .DUTY_CYCLE_CORRECTION ("TRUE")
      )
     DCM_INST1
     (
      .CLKIN    (clk_gmii_in),
      .CLKFB    (clk0_buf),
      .DSSEN    (GND),
      .PSINCDEC (GND),
      .PSEN     (GND),
      .PSCLK    (GND),
      .RST      (rst),
      .CLK0     (clk0dcm),
      .CLK90    (clk90dcm),
      .CLK180   (),
      .CLK270   (),
      .CLK2X    (),
      .CLK2X180 (),
      .CLKDV    (),
      .CLKFX    (),
      .CLKFX180 (),
      .LOCKED   (dcm1_lock),
      .PSDONE   (),
      .STATUS   ()
      );
   BUFG BUFG_CLK0
     (
      .O  (clk0_buf),
      .I  (clk0dcm)
      );   
   
   BUFG BUFG_CLK90
     (
      .O  (clk90_buf),
      .I  (clk90dcm)
      );  

谢谢
此帖出自FPGA/CPLD论坛

最新回复

always语句改成—— always@(posedge CLKIN_IN)                 if(cnt != 3'd5)  begin cnt   详情 回复 发表于 2010-9-1 10:05
点赞 关注
 

回复
举报

21

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己回复一下,原因已经找到了,因为我这两个DCM用了同一个复位信号,当两个dcm联用时,第二个dcm的复位信号要用第一个dcm的lock信号。不知道还有其他人也遇到过这样的问题吗?这是我么解决的,你呢?大家多多分享一下自己的调试经验
此帖出自FPGA/CPLD论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

请教一个dcm的问题

用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;
...

难道该复位脚必须外部控制,然后送给顶层模块作为输入?
此帖出自FPGA/CPLD论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复 板凳 andyandy 的帖子

有几个问题想先问一下:
1)用于产生“fuwei”信号的时钟 “clk”与你DCM输入或输出时钟的关系?
2)仿真波形中,rst_n一直是高阻?

一般来说,全局复位脚都是系统的一个输入pin,所以这个信号一般都是在你顶层的testbench里生成的,
        initial begin
                           // Initialize Inputs
                             RST_B = 1;               
                #200;
                              RST_B = 0;
        end
请考虑一下这个方法。另外定义信号名时,尽量不要用中文拼音方式,你可以定义成 rst_cnt,类似于这种。
此帖出自FPGA/CPLD论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 

谢谢4楼!

先回答你的问题:用于产生“fuwei”信号的时钟 “clk”就是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

综合时没有错误,但有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。我是这样想的:

dcm的复位脚和reg型的变量rst相连。

rst初始化为1。5个时钟周期后赋0。

这样就实现了100ns复位。

可警告好像说我没有赋值,因此接到1。

是语言问题还是别的?

[ 本帖最后由 andyandy 于 2010-8-29 11:47 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 

目前的状态

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的做法得到了想要的结果。
原因还不清楚。
对LZ的热情表示由衷地感谢!谢谢!
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表