verilog语法-006—case、casex、casez

verilog语法-006case、casex、casez

1、使用规则

在rtl仿真中,x和z是两个情况,而在综合时被视为一种情况。因此在需要综合的代码中,是不允许出现x和z的。verilog使用规则如下:

  1. case 分支中不允许出现x、z、?
  2. 可以使用casez,但是不允许使用z和x
  3. 禁止使用casex语句

2、case 分支中不允许出现x、z、?

case语句中出现“x”,“z”,“?”,容易导致综合前后不一致。

如下代码错误:

always@(posedge clk)
begin
  case(sel)
1’b0: out =!in;
1’b1: out = in ;
1’bz: out = 1’b1;
1’bx: out = 1’b0;
default: out = 1’b1 ;
endcase
end

3、可以使用casez语句,但是只能用“?”

使用casez语句和”?”配合,可以过滤不相关的比特位,但是casez语句中不能“x”和“z”

如下代码正确:“?”表示为0或者1

wire sel [2:0] ;
always@(posedge clk)
begin
  casez(sel)
  3’b001: data_out <= data_in0 ;
  3’b01?: data_out <= data_in1 ;
  3’b1??: data_out <= data_in2 ;
default : data_out  <= 4’b0 ;
end

4、禁止使用casex语句

在可综合设计中,推荐使用用case和casez,慎重使用casex,因为综合时casex中的x和z都被视为don’t care,综合前后仿真结果不一致。

casex(sel)
  2’b00:  data_out=data_in0 ;
  2’b01:  data_out=data_in1 ;
  2’bx0:  data_out=data_in2 ;
  2’bz0:  data_out=data_in3 ;
  2’b1?:  data_out=data_in4 ;
  default: data_out=data_in5   ;

综合前后结果如下:

sel

00

x0

z0

xx

综合前

data_in0

data_in2

data_in3

data_in5

综合后

data_in0

x

x

x

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值