微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Verilog中case语句嵌套出现的问题

Verilog中case语句嵌套出现的问题

时间:10-02 整理:3721RD 点击:
最近,我在写程序的时候出现一个问题:组合逻辑的always块出现了不希望的锁存器。我把所有的case都加上了default,还是不好使。这个程序没有什么奇怪的地方,就是使用了case的嵌套。不知道大家有没有过相同的经历,如何解决这个问题。

Verilog中case语句嵌套出现的问题
always中的赋值语句要求对象是reg类型的

Verilog中case语句嵌套出现的问题
是呀,用always块可以使用reg型对象来形成组合逻辑,如果条件定义完全的话,应该不会出现锁存器的。

Verilog中case语句嵌套出现的问题
确实存在这个问题,我也遇到过,不是说加了defaule就一定不会生成latch。虽然这个问题可能可以用full case的编译向导解决,但是我现在也还没研究到底为什么,有空做做实验,研究一下。

Verilog中case语句嵌套出现的问题
case语句里还有其他的判断语句吗?如果有并且判断信号不在敏感列表里,是会生成latch的

Verilog中case语句嵌套出现的问题
在嵌套情况下,敏感变量写全了,并且加了default也有可能生成latch

Verilog中case语句嵌套出现的问题
能给个例子吗?想研究下

Verilog中case语句嵌套出现的问题
我解决了这个问题。出现这个问题的原因是case语句不能套用,我把简单的分支都改成if-else结构,复杂的分支还是使用case,这样就没有锁存了。
在综合结束后,出现这样的信息:case choices are mutually exclusive; inferring parallel case。大家帮忙看一下,这是怎么回事,是不是由于case分支中的存在有相同的结果的两个分支而导致的?

Verilog中case语句嵌套出现的问题
要不把程序贴出来大家讨论一下把,我以前也是用一些方法解决以后就没有深究,所以现在没搞清楚原因,干脆借这个机会解决一下?

Verilog中case语句嵌套出现的问题
长见识
一直以为always一定会使用reg或latch呢

为什么不用assign呢

Verilog中case语句嵌套出现的问题
程序太大了,所以没法贴出来。
不用assign的原因也是因为它太复杂了,用assign不方便,而且改动困难,还不能直观地看出操作的意义。
框架是:
if   begin
     if  begin
         casex(ir)
          i1:begin
              ……
              end
          i2:begin
              ……
              end
          i3:begin
              ……
              end
          i4:begin
              ……
              end
            ……
         endcase
     end
     else if  begin
casex(ir)
          i1:begin
              ……
              end
          i2:begin
              ……
              end
          i3:begin
              ……
              end
          i4:begin
              ……
              end
            ……
         
     end
     else if  begin
casex(ir)
          i1:begin
              ……
              end
          i2:begin
              ……
              end
          i3:begin
              ……
              end
          i4:begin
              ……
              end
            ……
         
     end
     else begin
           ……
     end
end
else if  begin
     同上
end
else if  begin
     同上
end
   ……
case分支里有许多种情况,在每个case块里,都存在内容是一样的项。

改成并行的不带优先级的
case({所有条件})
endcase
把if 的条件和 case 的条件都放到一个case里去这样就好了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top