条件语句可以分为if_else语句和case语句两张部分。
A)if_else语句
三种表达形式
1) if(表达式) 2)if(表达式) 3)if(表达式1)
语句1; 语句1; 语句1;
else else if(表达式2) 语句2;
语句2; else if(表达式3) 语句3;
........
else if(表达式n) 语句n;
说明:
1)3种形式的if语句后面都有表达式,一般为逻辑表达式或关系表达式。当表达式的值为1,按真处理,若为0、x、z,按假处理。
2)在每一个else前面,即上面的语句后都有分号(除非上面是begin_end块)。else语句不能单独使用,它是if语句的一部分。
3)if 和else后面都可以包含一个内嵌的操作语气,也可以有多个语句,此时可以用begin_end将它们包含起来成为一个复合块语句;(end后不需要再加分号)
4)允许一定形式的表达式的简写方式。如:if(expression)等同于 if(expression==1)
5)if语句可以嵌套,即 if 语句中可以再包含if语句,但是应该注意else总是与它上面的最近的 if 进行配对。
如果不希望else与最近的 if 配对,可以采用begin_end进行分割,如:
if ()
begin
if() 语句1;
end
else
语句2;
这里的else与第一个 if 配对,因为第二个 if 被限制在了begin_end内部。
注意:
条件语句必须在过程块中使用。所谓过程块是指由 initial 和always语句引导的执行语句集合。除了这两种语句引导的begin_end块中可以编写条件语句外,模块中的其他地方都不能编写。
在always块内,若果在给定的条件下变量没有赋值,这个变量将保持原值,也就是说会生成一个锁存器。
B)case语句
case语句是一种多分支选择语句,if只有两个分支可以选择,但是case可以直接处理多分支语句。
1)case(表达式)
2)casex(表达式)
3)casez(表达式)
case分支项的一般格式如下:
分支表达式: 语句;
默认项(default) 语句;
1)case后括号内的表达式称为控制表达式,分支项后的表达式称作分支表达式,又称作常量表达式。控制表达式通常表示为控制信号的某些位,分支表达式则用这些控制信号的具体状态值来表示。
2)当控制表达式和分支表达式的值相等时,就执行分支表达式后的语句。
3)default项可有可无,一个case语句里只准有一个default项。(为了防止程序自动生成锁存器,一般都要设置default项,P57)
4)每一个case的表达是必须各不相同,执行完case分支项的语句后,跳出case块。
5)case语句的所有表达式的值的位宽必须相等。
case casex 和 casez 的真值
case | 0 1 x z | casez | 0 1 x z | casex | 0 1 x z | ||
0 | 1 0 0 0 | 0 | 1 0 0 1 | 0 | 1 0 1 1 | ||
1 | 0 1 0 0 | 1 | 0 1 0 1 | 1 | 0 1 1 1 | ||
x | 0 0 1 0 | x | 0 0 1 1 | x | 1 1 1 1 | ||
z | 0 0 0 1 | z | 1 1 1 1 | z | 1 1 1 1 |
casex和casez是case的特殊情况,用来处理过程中不必考虑的情况(don't care condition)。case用来处理不用考虑高阻值,casex表示不用考虑高阻值和不定值。
上述表格说明casez中,可以将z任意匹配,casex中可以将x任意匹配。在case的分支语句中,从上到下开始匹配,输出第一个匹配成功的值。
有关casex 和casez的详细对比请参照http://www.cnblogs.com/poiu-elab/archive/2012/11/02/2751323.html