我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 语句 >

Verilog HDL基础之:条件语句

归档日期:06-01       文本归类:语句      文章编辑:爱尚语录

  if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。Verilog HDL语言提供了3种形式的if语句。

  (1)3种形式的if语句中,在if后面都有“表达式”,一般为逻辑表达式或关系表达式。系统对表达式的值进行判断,若为0、x或z,按“假”处理;若为1,按“真”处理,执行指定的语句。

  (2)第二、第三种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。

  这是由于分号是Verilog HDL语句中不可缺少的部分,这个分号是if语句中的内嵌套语句所要求的。如果无此分号,则出现语法错误。

  但应注意,不要误认为上面是两个语句(if语句和else语句)。它们都属于同一个if语句。else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。

  (3)在if和else后面可以包含一个内嵌的操作语句,也可以有多个操作语句,此时用begin和end这两个关键词将几个语句包含起来成为一个复合块语句如下所示。

  在end后不需要再加分号,因为begin_end内是一个完整的复合语句,不需再附加分号。

  在if语句中又包含一个或多个if语句,称为if语句的嵌套,一般形式如下:

  应当注意if与else的配对关系,else总是与它上面的最近的if配对。如果if与else的数目不一样,为了实现程序设计者的企图,可以用begin_end块语句来确定配对关系,例如:

  这时begin_end块语句限定了内嵌if语句的范围,因此else与第一个if配对。注意begin_end块语句在if_else语句中的使用,因为有时begin_end块语句的不慎使用会改变逻辑行为,如下所示:

  尽管程序设计者把else写在与第一个if(外层if)同一列上,希望与第一个if对应,但实际上else是与第二个if对应,因为它们相距最近。正确的写法如下:

  下面这段程序用if_else语句来检测变量index以决定modify-seg1、modify-seg2、modify-seg3中哪一个的值应当与index相加作为memory的寻址地址。并且将相加值存入寄存器index以备下次检测使用。程序的前10行定义寄存器和参数。

  case语句是一种多分支选择语句,if语句只有两个分支可供选择,而实际问题中常常需要用到多分支选择。Verilog语言提供的case语句直接处理多分支选择。case语句通常用于微处理器的指令译码,它的一般形式如下:

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

  (2)当控制表达式的值与分支表达式的值相等时,就执行分支表达式后面的语句。如果所有的分支表达式的值都没有与控制表达式的值相匹配的,就执行default后面的语句。

  (3)default项可有可无,一个case语句里只能有一个default项。下面是一个简单的使用case语句的例子。该例子中对寄存器rega译码以确定result的值。

  (4)每一个case分项的分支表达式的值必须互不相同,否则就会出现矛盾现象(对表达式的同一个值,有多种执行方案)。

  (5)执行完case分项后的语句,则跳出该case语句结构,终止case语句的执行。

  (6)在用case语句表达式进行比较的过程中,只有当信号的对应位的值能明确进行比较时,比较才能成功,因此要详细说明case分项的分支表达式的值。

  (7)case语句的所有表达式的值的位宽必须相等,只有这样控制表达式和分支表达式才能进行对应位的比较。一个经常犯的错误是用bx、bz 来替代nbx、nbz,这样写是不对的,因为信号x、z的缺省宽度是机器的字节宽度,通常是32位(此处 n 是case控制表达式的位宽)。

  (1)与case语句中的控制表达式和多分支表达式相比,if结构中的条件表达式更为直观一些。

  (2)对于那些分支表达式中存在不定值x和高阻值z时,case语句提供了处理这种情况的手段。下面的两个例子介绍了处理x、z值case语句。

  针对电路的特性,Verilog HDL提供了case语句的其他两种形式用来处理不必考虑的情况(dont care condition)。其中casez语句用来处理不考虑高阻值z的比较过程,casex语句则将高阻值z和不定值都视为不必关心的情况。

  所谓不必关心的情况,即在表达式进行比较时,不将该位的状态考虑在内。这样在case语句表达式进行比较时,就可以灵活地设置,以对信号的某些位进行比较。如表3.10所示为case、casez、casex 的线 case语句真值表

  硬件描述语言Verilog HDL设计进阶之:自动转换量程频率计控制器

  硬件描述语言Verilog HDL设计进阶之:使用函数实现简单的处理器

  硬件描述语言Verilog HDL设计进阶之:有限状态机的设计原理及其代码风格

  硬件描述语言Verilog HDL设计进阶之: 逻辑综合的原则以及可综合的代码设计风格

本文链接:http://belanovica.com/yuju/2.html