verilog中条件分支语句的综合问题


在·Verilog中有两种可综合的条件结构:

if(expression)
    Statement block
else if(expression)
    Statement block
else
    Statement block

case(expression)
    case item : case action
    ...
    (default : case action)
endcase

若条件结构的所有可能情况都被考虑到了就称为完整,如前两句:

if(select) out=in;
else out=~in;


if(select) out=in;

完整的if语句会综合出一个多路选择器。而不完整的if语句则会综合其他结构,如后一句就会综合出一个D型触发器,即综合器默认select为假时,保持原先的值。

对于超过三个以上的分支选项时,就会优先选择case语句。

case语句如上例所示,其中default是可选的,而且和C语音不同,case语句在第一个相匹配的case item被执行后就会终止后面case item语句的执行。case·语句是逐位比较expression的值和分支case item的值,同时case item中的X,Z也是作为正常值进行比较。于是有了另外两种case语句的变种:

casex : 将表达式和分支中的z和?符号看成是无关项。

casez : 将表达式和分支中的x,z和?符号看成是无关项。


如果所有可能情况都被考虑到,则称这样的case语句为完整的。同时如果所有情况都是相互独立的则称为并行。
因此在case语句中可能出现以下四种情况:


     完整,并行。模块full_Parallel综合成多路选择器。

       


     不完整,并行。模块nfull_Parallel综合成锁存器。


     完整,不并行。模块full_nParallel综合成优先级结构。

当select=2'b11时,就需要进行选择,这是综合的结果选择第一个分支,因为它位于case列表的最高行,最接近输出端,具有更高的优先级。


     不完整,不并行。模块nfull_nParallel综合成带优先级结构的锁存器。


由以上几种情况可以看出,对一个实现组合逻辑的无时钟的过程块,在每次执行时如果不能给每个变量重新赋值(即分支情况不完整),就会产生锁存器。解决办法是确保每一条case语句都有一条default语句。如图所示



同时当一个过程块有多个输出,但在执行时并没有在所有可能组合状态下对每一个输出赋值,也可能综合出额外的触发器。解决办法是在过程块开始执行时对所有输出赋缺省值,如果与设计不冲突的话,可以使用无关项。


  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值