SystemVerilog 中的错误消息“抱歉:当前不支持 always_* 进程中的常量选择(将包含所有位)。”
Error message ”sorry: constant selects in always_* processes are not currently supported (all bits will be included).“ in SystemVerilog
我需要用“case”语句来实现一个4位优先级的编码器,代码如下:
module case2(
input [3 : 0] in,
output logic [1 : 0] pos
);
always_comb begin
case(1)
in[0]:pos=2'b00;
in[1]:pos=2'b01;
in[2]:pos=2'b10;
in[3]:pos=2'b11;
default:pos=2'b00;
endcase
end
endmodule
在 always_comb block.I 中搜索的 google 中,我似乎无法使用 '1' 作为大小写表达式,但是 acquired.How 没有任何帮助] 我可以解决这个问题吗?常量不能用作case的expr吗?我认为这是不合理的。
谢谢你的建议!
"当前不支持" 表示该工具认为代码有效,但尚未实施。你没有说你用的是什么工具。
总有蛮力方法:
always_comb
case(in)
4'b0001,4'b0011, ... 4'b1111 :pos=2'b00;
4'b0010,4'b0110, 4'b1010,4'b1110 :pos=2'b01;
4'b0100,4'b1100 :pos=2'b10;
4'b1000 :pos=2'b11;
default :pos=2'b00;
endcase
另一种写法是使用 priority if
语句
always_comb
priority if (in[0]) pos=2'b00;
else if (in[1]) pos=2'b01;
else if (in[2]) pos=2'b10;
else if (in[3]) pos=2'b11;
else pos=2'b00;
我需要用“case”语句来实现一个4位优先级的编码器,代码如下:
module case2(
input [3 : 0] in,
output logic [1 : 0] pos
);
always_comb begin
case(1)
in[0]:pos=2'b00;
in[1]:pos=2'b01;
in[2]:pos=2'b10;
in[3]:pos=2'b11;
default:pos=2'b00;
endcase
end
endmodule
在 always_comb block.I 中搜索的 google 中,我似乎无法使用 '1' 作为大小写表达式,但是 acquired.How 没有任何帮助] 我可以解决这个问题吗?常量不能用作case的expr吗?我认为这是不合理的。 谢谢你的建议!
"当前不支持" 表示该工具认为代码有效,但尚未实施。你没有说你用的是什么工具。
总有蛮力方法:
always_comb
case(in)
4'b0001,4'b0011, ... 4'b1111 :pos=2'b00;
4'b0010,4'b0110, 4'b1010,4'b1110 :pos=2'b01;
4'b0100,4'b1100 :pos=2'b10;
4'b1000 :pos=2'b11;
default :pos=2'b00;
endcase
另一种写法是使用 priority if
语句
always_comb
priority if (in[0]) pos=2'b00;
else if (in[1]) pos=2'b01;
else if (in[2]) pos=2'b10;
else if (in[3]) pos=2'b11;
else pos=2'b00;