SYoong的个人空间 https://blog.eetop.cn/1584010 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Verilog学习笔记基本语法篇(五)········ 条件语句

已有 1323 次阅读| 2016-9-24 20:12 |个人分类:Verilog基础|系统分类:芯片设计

条件语句可以分为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(表达式)      <case分支项>  endcase

2)casex(表达式)    <case分支项>  endcase

3)casez(表达式)    <case分支项>  endcase

case分支项的一般格式如下:

分支表达式:             语句;

默认项(default)      语句;

1)case后括号内的表达式称为控制表达式,分支项后的表达式称作分支表达式,又称作常量表达式。控制表达式通常表示为控制信号的某些位,分支表达式则用这些控制信号的具体状态值来表示。

2)当控制表达式和分支表达式的值相等时,就执行分支表达式后的语句。

3)default项可有可无,一个case语句里只准有一个default项。(为了防止程序自动生成锁存器,一般都要设置default项,P57)

4)每一个case的表达是必须各不相同,执行完case分支项的语句后,跳出case块。

5)case语句的所有表达式的值的位宽必须相等。

                                               case casex 和 casez 的真值 

case0   1   x   z casez0    1   x   z casex0   1   x   z
01   0   0   0 01   0   0   1 01   0   1   1
10   1   0   0 10   1   0   1 10   1   1   1
x0   0   1   0 x0   0   1   1 x 1   1   1   1 
z0   0   0   1 z1   1   1   1 z1   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


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 3

    获赞
  • 1

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-10 00:23 , Processed in 0.023996 second(s), 19 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部