Verilog中case(1‘b1)的使用说明

        在用Verilog进行RTL代码编写的时候基本不会用到case(1‘b1),而且一般的语法说明也如下:

case(case_expr)
    condition1     :             true_statement1 ;
    condition2     :             true_statement2 ;
    ……
    default        :             default_statement ;
endcase

//case 语句执行时,如果 condition1 为真,则执行 true_statement1 ; 
//如果 condition1 为假,condition2 为真,则执行 true_statement2;依次类推。
//如果各个 condition 都不为真,则执行 default_statement 语句。

        因此遇到case(1‘b1)的情况会比较迷惑,这里对case(1‘b1)的情况做个说明。

        下面的例子就很好地说明了使用方法。case(1‘b1)的写法与if-else的写法得到的结果是一样的,即均完成了优先级的编码:

case(1'b1):

module encoder(
input D0,
input D1,
input D2,
input D3,
input D4,
input D5,
input D6,
input D7,
output reg [2:0]Q2Q1Q0
    );
always@(*)begin
Q2Q1Q0=0;
case(1'b1)
D0:Q2Q1Q0=3'b000;
D1:Q2Q1Q0=3'b001;
D2:Q2Q1Q0=3'b010;
D3:Q2Q1Q0=3'b011;
D4:Q2Q1Q0=3'b100;
D5:Q2Q1Q0=3'b101;
D6:Q2Q1Q0=3'b110;
D7:Q2Q1Q0=3'b111;
endcase
end			
endmodule

if-else:

module encoder(
input D0,
input D1,
input D2,
input D3,
input D4,
input D5,
input D6,
input D7,
output reg [2:0]Q2Q1Q0
    );
	
always@(*)	
begin
Q2Q1Q0=3'b000;
if(D0)       Q2Q1Q0=3'b000;	
else if(D1)  Q2Q1Q0=3'b001;
else if(D2)  Q2Q1Q0=3'b010;
else if(D3)  Q2Q1Q0=3'b011;
else if(D4)  Q2Q1Q0=3'b100;
else if(D5)  Q2Q1Q0=3'b101;
else if(D6)  Q2Q1Q0=3'b110;
else if(D7)  Q2Q1Q0=3'b111;
	
end	
	
endmodule

        小结:case和if-else都是有优先级的,case语句也是先判断写才前面的情况是否满足,前面的满足了就直接跳出case了。一直印象里的并行处理是一般写法中case的的控制表达式是互斥的,但是在case(1‘b1)的写法中,处理逻辑就如上所述。

        目前来说,现在的仿真和综合工具已经足够强大,最后综合后的结果if..else...与case...语句其实是一样的,无非是两种不同的实现方式。

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沧海一升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值