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

时间:2021-06-09 20:05:13

标签: verilog system-verilog conditional-operator

我希望使用另一个索引部分选择的每个位的值在两个索引部分选择的位之间进行选择。输入如下代码:

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] 包含 { {1}}。

这在 System Verilog 中合法吗?如果没有,是否有更好的方法来实现相同的功能,同时保持为总线选择索引部分?

1 个答案:

答案 0 :(得分:1)

条件表达式(或谓词)是布尔值——它是。要按位计算谓词,您可以使用 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];
相关问题