case语句,多个case执行相同的操作

问题描述 投票:0回答:2

我需要使用一个case语句,控制信号是4位。我有多个这4位进行相同操作的情况,如何使代码更简洁?

例如:

  casez (fbe)  //fbe is defined as logic [3:0] fbe;
   4'b0000: begin
    // operation a
   end
   4'b???1 : begin
    // operation b
   end

操作a和操作b完全相同。如何将这2个折叠成一个案例?像(fbe == 4'b0000)|的东西(fbe == 4'b ??? 1)成一个案例?

verilog system-verilog
2个回答
4
投票

在SystemVerilog中,您应该使用case (expression) inside语句。 (§12.5.4设置成员资格案例陈述)。这使您可以使用inside运算符使用的相同类型的表达式列表,例如一系列值。它还具有不对称的通配符匹配。这意味着只有案例项中的Z变为通配符,而不是案例表达式中的Z.例如

case (fbe) inside
  4'b0000, 4'b0??1: begin end // 0, and 1,3,7
  [9:11]: begin end // 9,10,11
  default: begin end //2,4,6,8,12-15
endcase

如果由于某种原因fbe4'bz000,则会采用默认值。 casez将匹配4'b0000


3
投票

您可以使用逗号分隔将执行操作的所有案例表达式。 default条件不能在此列表中(因为它将是多余的)。

例:

casez(fbe)
  4'b0000, 4'b???1 : begin /* do same stuff */ end
  4'b??10 : begin /* do other stuff */ end
  default : begin ... end
endcase

这在IEEE Verilog和SystemVerilog LRM中有记录,并附有示例。如IEEE1364-1995§9.5案例陈述和IEEE1800-2012§12.5案例陈述。

© www.soinside.com 2019 - 2024. All rights reserved.