Verilog HDL条件语句

时间:2007-04-29

4.7 条件语句
if 语句的语法如下:
if(condition_1)
procedural_statement_1

2004-08-16 第25页,共41页
版权所有,侵权必究


绝密
Verilog HDL 入门教程请输入文档编号

{else if(condition_2)

procedural_statement_2}

{else

procedural_statement_3}

如果对condition_1 求值的结果为个非零值,那么procedural_statement_1 被执,如果
condition_1 的值为0 、x 或z ,那么procedural_statement_1 不执行。如果存在一个else 分支,那么这
个分支被执行。以下是一个例子。

if(Sum < 60)

begin

Grade = C;

Total_C = Total _c + 1;

end

else if(Sum < 75)

begin

Grade = B;

Total_B = Total_B + 1;

end

else

begin

Grade = A;

Total_A = Total_A + 1;

end

注意条件表达式必须总是被括起来,如果使用if - if - else 格式,那么可能会有二义性,如下例
所示:

if(C l k)
if(R e s e t)
Q = 0;
else
Q = D;


问题是一个else 属于哪一个if? 它是属于个if 的条件(Clk)还是属于第二个if的条件
(Reset)? 这在Verilog HDL 中已通过将else 与近的没有else 的if 相关联来解决。在这个例子中,
else 与内层if 语句相关联。

以下是另一些if 语句的例子。
if(Sum < 100)
Sum = Sum + 10;
if(Nickel_In)
Deposit = 5;


2004-08-16 第26页,共41页
版权所有,侵权必究


绝密
Verilog HDL 入门教程请输入文档编号

elseif (Dime_In)

Deposit = 10;

else if(Quarter_In)

Deposit = 25;

else

Deposit = ERROR;

书写建议:

1、条件表达式需用括号括起来。

2、若为if - if 语句,请使用块语句 begin --- end :

if(C l k)

begin

if(R e s e t)

Q = 0;

else

Q = D;

end

以上两点建议是为了使代码更加清晰,防止出错。
3、对if 语句,除非在时序逻辑中,if 语句需要有else 语句。若没有缺省语句,设计将产生一
个锁存器,锁存器在ASIC设计中有诸多的弊端(可看同步设计技术所介绍)。如下一例:
if (T)
Q = D;
没有else 语句,当T为1(真)时,D 被赋值给Q,当T为0(假)时,因为没有else 语句,电路
保持 Q 以前的值,这就形成一个锁存器。

4.8 case 语句
case 语句是一个多路条件分支形式,其语法如下:
case(case_expr)
case_item_expr{ ,case_item_expr} :procedural_statement

. . .

. . .

[default:procedural_statement]

endcase

case 语句首先对条件表达式case_expr 求值,然后依次对各分支项求值并进行比较,个与

条件表达式值相匹配的分支中的语句被执行。可以在1 个分支中定义多个分支项;这些值不需要互
斥。缺省分支覆盖所有没有被分支表达式覆盖的其他分支。
例:

case (HEX)
4'b0001 : LED = 7'b1111001; // 1


2004-08-16 第27页,共41页
版权所有,侵权必究


绝密
Verilog HDL 入门教程请输入文档编号

4'b0010 : LED = 7'b0100100; // 2
4'b0011 : LED = 7'b0110000; // 3
4'b0100 : LED = 7'b0011001; // 4
4'b0101 : LED = 7'b0010010; // 5
4'b0110 : LED = 7'b0000010; // 6
4'b0111 : LED = 7'b1111000; // 7
4'b1000 : LED = 7'b0000000; // 8
4'b1001 : LED = 7'b0010000; // 9
4'b1010 : LED = 7'b0001000; // A
4'b1011 : LED = 7'b0000011; // B
4'b1100 : LED = 7'b1000110; // C
4'b1101 : LED = 7'b0100001; // D
4'b1110 : LED = 7'b0000110; // E
4'b1111 : LED = 7'b0001110; // F
default :LED = 7'b1000000; // 0


endcase

书写建议:
case 的缺省项必须写,防止产生锁存器。



  来源:零八我的爱
上一篇:Verilog HDL 结构建模--模块定义结构
下一篇:Verilog HDL 连接运算符

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料