1. case 语句
case 语句是一种多路条件分支的形式,可以解决 if 语句中多个条件选项时使用不方便的问题。
格式如下
case(case_expr)
condition1: statement1 ;
condition2: statement2 ;
condition3: statement3 ;
...
default: statement4 ;
endcase
- case 语句执行时,如果 condition 1 为真,则执行 statement 1;如果 condition 1 为假,condition 2 为真,则执行 statement 2. 以此类推。
- 如果各个 condition 都不为真,则执行 default 后的语句。
- default 语句几乎是必须需要的,因为不写 default 且 condition 不全时,会对电路造成死锁现象。
- statement 等执行语句可以是一条语句,也可以是多条语句。如果是多条语句,则需要用 begin 和 end 关键字进行说明。
tip
case 语句中的条件选项不一定都是常量,也可以是 x 和 z。
当多个条件选项下需要执行形同的的语句时,多个条件选项可以用 ,
分开,放在同一个语句块的候选项中。
但是 case 中的 x 和 z 的比较逻辑是不可综合的。所以 不建议case语句中使用x和z作为比较值
。
示例如下
case (a)
2'b0 : a <= b ;
2'b01, 2'bx1, 2'bxz: a <= c ;
default : a <= d ;
endcase
不建议有 x 和 z,因为不可综合。这种情况常用于仿真中。
笔记
casex,casez 是 case 语句的变形,用来表示条件选项中的无关项。
casex 用 x 表示无关值,casez 中用?表示无关值。
但是 casex 和 casez 是不可综合的,常用于仿真中。
示例如下
casex (sel)
2'x1 : a <= b
default: a <= c ;
endcase
casez (sel)
2'b1? a <= b ;
default : a <= c ;
endcase