kaiyun官方注册
您所在的位置: 首页> 模拟设计> 业界动态> Verilog语言中case、casex、casez的用法和区别

Verilog语言中case、casex、casez的用法和区别

2022-10-01
来源:FPGA设计论坛
关键词: Verilog case casex

Verilog语言中casecasex、casez的用法和区别

  casez与casex语句是case语句的两种变体, 在写testbench时用到。

  一、case、casex、casez的区别

  下表给出case、casex、casez的真值表:

1.png

  在case语句中,敏感表达式中与各项值之间的比较是一种全等比较,每一位都相同才认为匹配。

  在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。

  在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。

  二、case/casez/casex 在simulation/synthesis的区别

  有的网上说casex和casez属于不可综合语句,这是针对一般电路不会出现x状态来说的,但是综合工具并不会对x,z认识这个状态,所以综合出来的电路是一样的。

  使用过程中许需要注意的问题:

  1)一般经常使用到的是casez语句,最好少用casex

  2)case/casez/casex其实都是可综合的

  3)在电路中,可以用?来表示无关值的z

  4)case的描述,匹配都是从上到下进行的

  仿真的不同

  1)对于case

  case (sel)

  2'b00: y = a;

  2'b01: y = b;

  2'bx0: y = c;

  2'b1x: y = d;

  2'bz0: y = e;

  2'b1?: y = f;

  default : y = g;

  endcase

  对于case来说,每一种情况都会识别(1/0/z/x)

  当sel的状态是一下情况时,会出现以下结果

2.png

  2)对于casez

  casez (sel)

  2'b00: y = a;

  2'b01: y = b;

  2'bx0: y = c;

  2'b1x: y = d;

  2'bz0: y = e;

  2'b1?: y = f;

  default: y = g;

  endcase

  首先,case的描述,匹配都是从上到下进行的,如果使用了casez,看上面的casez的列表,只要输入有z/?的话,就能和任意匹配。

3.png

  3)对于casex

  casex (sel)

  2'b00 : y = a;

  2'b01 : y = b;

  2'bx0 : y = c;

  2'b1x : y = d;

  2'bz0 : y = e;

  2'b1? : y = f;

  default : y = g;

  endcase

  casex也是从上到下匹配,当出现x/z/?的输入的时候,都不会care,只管不是大大情况来匹配

4.png

  综合的不同

  综合的时候,因为综合工具其实都不会管你什么x/z/?,对于综合工具来说是一样的,所以case/casez/casex不同写法的综合结果,例子都是同样的。

  例一:

  case (sel)

  2'b00 : mux_out = mux_in[0];

  2'b01 : mux_out = mux_in[1];

  2'b1? : mux_out = mux_in[2];

  default : mux_out = mux_in[3];

  endcase

  例二:

  case (sel)

  2'b00 : mux_out = mux_in[0];

  2'b01 : mux_out = mux_in[1];

  2'b1x : mux_out = mux_in[2];

  default : mux_out = mux_in[3];

  endcase

  这俩个例子的结果是一样的。

  case(不是casez/casex的时候)的列表里面的x和z,都被综合工具认为是不可达到的状态就被去掉了。casez和casex里面的x/z都被认为是don’t care。

  对于综合、仿真的结果

  1)在实际写代码的时候,如果使用case的时候,尽量不要用x/z/?,综合工具也会不care

  2)casez和casex综合的结果是一致的。

  3)casez稍好用一些,因为它可以用来代表don’t care的值

  4)最重要的一点就是,casez和casex其实没有孰优孰劣

  5)casez语句用来处理不考虑高阻值z的比较过程,casex语句则将高阻值z和不定值都视为不必关心的情况。所谓不必关心的情况,即在表达式进行比较时,不将该位的状态考虑在内。这样在case语句表达式进行比较时,就可以灵活地设置以对信号的某些位进行比较。




更多信息可以来这里获取==>>电子技术应用-AET<<

图片.jpg

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
Baidu
map