在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5514|回复: 10

[求助] verilog求助!急!

[复制链接]
发表于 2010-12-25 17:18:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
总是出现如下警告
Xst:737 - Found 1-bit latch for signal <temp_0>. Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
结果是将我的temp和i综合称为latch,我用chipscope进行调试的时候,发现i和temp永远是0,即赋值赋不进去,在网上找了好久,也参考了xilinx的官方解释,
说是有不完整的if,但是我检查了好多遍,发现我已经将所有情况考虑到了啊?
代码如下,请高手们指点啊!!

always @(rst,cs,byte_done)
if (rst)
  begin
   i<=2'b00;
   temp<=24'b000000000000000000000000;
  end
else
  begin
   if (cs==data)
    begin
     if(byte_done==1)
       begin
        if(i==2'b00)
         begin
          temp[7:0]<=sr;
          temp[23:8]<=temp[23:8];
          i<=i+1;
         end
        else if(i==2'b01)
         begin
          temp[15:8]<=sr;
           temp[23:16]<=temp[23:16];
         temp[7:0]<=temp[7:0];
          i<=i+1;
         end
        else if(i==2'b10)
         begin
          temp[23:16]<=sr;
           temp[15:0]<=temp[15:0];
          i<=i+1;
         end
       else
        begin
         temp<=temp;                     //qd
         i<=i;
        end
       end
     else
      begin
       temp<=temp;                     //qd
       i<=i;
      end
    end
   else if(cs==data_ack)
    if(i==3)
      begin
       i<=2'b00;
       temp<=temp;
      end
     else
      begin
       i<=i;
       temp<=temp;
      end     

   else
    begin
     i<=i;
     temp<=temp;
    end
  end
发表于 2010-12-25 17:34:04 | 显示全部楼层
这是你的作业吗?基本该得分10分,算是辛苦分
发表于 2010-12-25 17:37:05 | 显示全部楼层
连阻塞和非阻塞概念都不清晰.
发表于 2010-12-25 18:14:04 | 显示全部楼层
建议先别管这个程序的对错,先学习一下verilog的语法在写code吧
 楼主| 发表于 2010-12-25 19:33:57 | 显示全部楼层
本帖最后由 qd0090 于 2010-12-25 19:49 编辑

呵呵,是瞒不过各位高手啊。
我说名一下,这不是作业,而是想要做成asic的一部分,我在xilinx上先做验证。
我做了半年多的VHDL,接触verilog不过4天。
希望楼上的高手们给我一个指点吧,项目催的比较急。

上面的代码缺点在哪里?到底为什么被综合成了latch ?

还有,我认为我用的都是非阻塞赋值,呵呵,不知对不对。
发表于 2010-12-25 20:54:54 | 显示全部楼层
temp<=temp
就是这个了
 楼主| 发表于 2010-12-25 21:33:15 | 显示全部楼层
恩,这个我原先是没有加的。
加上去的作用其实就是不对temp进行任何操作。
我的目的是使temp在每种情况下都有赋值,从而避免生成latch,但是并没有成功。呵呵
发表于 2010-12-26 11:37:01 | 显示全部楼层
如果学习了半年的VHDL,也应该知道组合逻辑的敏感列表需要填写完整吧?你的temp,i这些变量怎么没有加入到敏感列表中呢?但是在进程中却出现在了赋值符号的右端,似乎这样不是很好的可综合风格吧。而且你这个是纯粹的组合逻辑的话,能不能避免锁存器的产生,不太清楚,要是时序逻辑的话,完备的if条件可能才行。
发表于 2010-12-27 17:05:46 | 显示全部楼层
时序电路用<= 非阻塞
组合电路用 =  阻塞

去看看基础的东西吧
发表于 2010-12-27 17:12:01 | 显示全部楼层
latch是因为你的temp<=temp产生的,这是组合电路,没有时钟,temp<=temp或temp=temp都会生产latch的,当然如果是always @(posedge clk)
                   begin
                                temp<=temp;
                   end
是不会生产latch的。这些论坛上很多coding的规范,你自己看看吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-29 16:43 , Processed in 0.026898 second(s), 10 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表