Gau*_*pte 0 verilog system-verilog
我需要使用控制信号为4位的case语句。我有很多情况下这4位执行相同的操作,如何使代码更简洁?
例如:
casez (fbe) //fbe is defined as logic [3:0] fbe;
4'b0000: begin
// operation a
end
4'b???1 : begin
// operation b
end
Run Code Online (Sandbox Code Playgroud)
操作a和操作b完全相同。如何将这两个折叠成一个盒子?像(fbe == 4'b0000)| (fbe == 4'b ??? 1)变成单个情况?
在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
Run Code Online (Sandbox Code Playgroud)
如果fbe是4'bz000出于某种原因,默认将采取。casez本来可以匹配的4'b0000。
您可以使用逗号分隔将执行操作的所有大小写表达式。该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
Run Code Online (Sandbox Code Playgroud)
这在IEEE Verilog和SystemVerilog LRM中带有示例记录。如IEEE1364-1995 §9.5 Case语句和IEEE1800-2012 §12.5 Case语句。