【发布时间】:2020-05-13 23:44:41
【问题描述】:
我有逻辑将一个变量与多个值进行比较。 例如:
logic [3:0] a;
always_comb begin
flag = (a == 'd13) || (a == 'd2) || (a=='d1); //can this be simplified?
end
有没有简单的方法来写这个语句?
【问题讨论】:
标签: verilog system-verilog register-transfer-level
我有逻辑将一个变量与多个值进行比较。 例如:
logic [3:0] a;
always_comb begin
flag = (a == 'd13) || (a == 'd2) || (a=='d1); //can this be simplified?
end
有没有简单的方法来写这个语句?
【问题讨论】:
标签: verilog system-verilog register-transfer-level
使用inside 运算符更简洁:
always_comb begin
flag = (a inside {1, 2, 13});
end
这也更具可扩展性,让您可以轻松地在集合中添加或删除值。
语法还支持值的范围:
flag = (a inside {[1:2], 13});
请参阅 IEEE Std 1800-2017,第 11.4.13 节 设置成员运算符。
由于集合中的值都是常数,所以应该是可综合的(但YMMV)。
【讨论】: