zoukankan      html  css  js  c++  java
  • 管脚无法绑定diamond3.7

      遇到各种各样的客户,就会遇到各种各样的问题----这是FAE这个岗位性质决定的。

      客户用diamond3.7,一直给我抱怨说你们的lattice的东西怎么那么烂,连管脚都没法绑定。具体问题描述如下图1,他的时钟脚一直处于unconnected状态(ERROR - Port 'i_clk' is unconnected.),时钟都进不来那还玩什么?

      接着把简化的代码在altera的平台上也试了一下,报的也是一个非常严重的警告,如图2所示。在Xilinx平台上测试也是一样的效果。所以说不是我们lattice平台的问题,只是说我们lattice为了防止后续的设计出现问题,在综合阶段就告知客户这是一个错误(其他几家平台报的是警告),好让客户早点修改。

      但是我们还没有找到问题的根源,所以我拿到出问题的代码查看了底层,看综合的结果,如图3所示。综合的结果很显然了,输出的值为固定值1,那么尽然是固定的值,我时钟还有啥意思,所以自然就无法绑定了。

      接下来我们分析下这段出问题的代码(部分代码)

    module test(
    input wire i_clk,

    output wire lvds_sig,
    output wire testout
    );

    assign lvds_sig = r_lvds_sig ;

    always@(posedge i_clk)
    cnt <= cnt + 1;


    always@(posedge i_clk)

    if(cnt == 18'h1ff)
    r_lvds_sig <= 1;

    always@(posedge i_clk )
    if(cnt == 18'h1f0)
    add_num <= 1;

    assign testout =  |cnt ||add_num  ;


      对于按规则办事的工程师来说,一看,怎么都没有复位呢?实际上问题就出在没有复位。因为没有复位,综合工具就默认为add_num初始值是1,

    always@(posedge i_clk )
    if(cnt == 18'h1f0)
    add_num <= 1; 

    等价于

    always@(posedge i_clk )
    if(cnt == 18'h1f0)
    add_num <= 1; 

    else

    add_num <= add_num; 

    也就是说add_num 固定为1,那么输出testout 也固定为1,类似的也可以推到出lvds_sig 也固定为1,既然所以输出的值都固定为1,那么还有我的时钟有何意义,所以三家FPGA厂商自然就报个错误或者警告提醒你一下。所以在设计的时候,一定要加上复位,不管你是同步还是异步复位。加了复位输出的值就会产生变化,就不会出现这样的错误了。

           以上解释应该很清楚了,如有疑问请联系扣扣:825972925

                            图1                                                                                                          图2

                                图3

  • 相关阅读:
    Java调用存储过程
    Eclipse快捷键
    [转载]实现GridView手动设定分页
    给博客换了个皮肤
    在Hibernate中使用Oracle的sequence主键
    解决Oracle 10g中The account lockde!
    [转载]CSS的优化与技巧
    PowerDesigner12 简单应用
    【转载】用开源软件搭建企业内部协作平台, Kill QQ MSN
    DropDownList数据绑定第一项为空
  • 原文地址:https://www.cnblogs.com/xiaozhuge/p/5635132.html
Copyright © 2011-2022 走看看