Verilog中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里去这样就好了。
