条件运算符是否按位评估索引部分选择
Does the Condition Operator Evaluate Bitwise for indexed part selection
我希望使用另一个索引部分 selection 的每个位的值在两个索引部分 selection 的位之间进行选择。输入如下代码:
output[idx*WIDTH+:WIDTH] = (condition[idx*WIDTH+:WIDTH]) ? (expression1[idx*WIDTH+:WIDTH) : expression2[idx*WIDTH+:WIDTH];
例如看一个位,如果 condition[idx*WIDTH] = 1
我希望 output[idx*WIDTH]
包含 expression1[idx*WIDTH]
的值,如果 condition[idx*WIDTH] = 0
,我希望 output[idx*WIDTH]
包含 expression2[idx*WIDTH]
.
这在 System Verilog 中合法吗?如果没有,是否有更好的方法来实现相同的功能,同时保留总线的索引部分 select?
条件表达式(或predicate)是布尔值——它是true或false .要按位评估谓词,您可以使用 foreach
循环
for(int I=idx*WIDTH;I<(idx+1)*WIDTH;I++)
output[I] = condition[I] ? expression1[I] : expression2[I];
或等效的多路复用方程:
output[idx*WIDTH+:WIDTH] =
condition[idx*WIDTH+:WIDTH] & expression1[idx*WIDTH+:WIDTH) |
~condition[idx*WIDTH+:WIDTH] & expression2[idx*WIDTH+:WIDTH];
我希望使用另一个索引部分 selection 的每个位的值在两个索引部分 selection 的位之间进行选择。输入如下代码:
output[idx*WIDTH+:WIDTH] = (condition[idx*WIDTH+:WIDTH]) ? (expression1[idx*WIDTH+:WIDTH) : expression2[idx*WIDTH+:WIDTH];
例如看一个位,如果 condition[idx*WIDTH] = 1
我希望 output[idx*WIDTH]
包含 expression1[idx*WIDTH]
的值,如果 condition[idx*WIDTH] = 0
,我希望 output[idx*WIDTH]
包含 expression2[idx*WIDTH]
.
这在 System Verilog 中合法吗?如果没有,是否有更好的方法来实现相同的功能,同时保留总线的索引部分 select?
条件表达式(或predicate)是布尔值——它是true或false .要按位评估谓词,您可以使用 foreach
循环
for(int I=idx*WIDTH;I<(idx+1)*WIDTH;I++)
output[I] = condition[I] ? expression1[I] : expression2[I];
或等效的多路复用方程:
output[idx*WIDTH+:WIDTH] =
condition[idx*WIDTH+:WIDTH] & expression1[idx*WIDTH+:WIDTH) |
~condition[idx*WIDTH+:WIDTH] & expression2[idx*WIDTH+:WIDTH];