条件运算符是否按位评估索引部分选择

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)是布尔值——它是truefalse .要按位评估谓词,您可以使用 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];