条件运算符是否逐位评估索引零件选择



我希望使用另一索引零件选择的每个位的值在两个索引零件选择中进行选择。输入看起来像的代码

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中合法吗?如果没有,是否有更好的方法来实现相同的功能,同时为总线选择索引零件?

条件表达式(或谓词(是布尔表达式——它是truefalse。要按位评估谓词,可以使用foreach循环

for(int I=idx*WIDTH;I<(idx+1)*WIDTH;I++)
output[I] = condition[I] ? expression1[I] : expression2[I];

或者等效的mux方程:

output[idx*WIDTH+:WIDTH] = 
condition[idx*WIDTH+:WIDTH] & expression1[idx*WIDTH+:WIDTH) |
~condition[idx*WIDTH+:WIDTH] & expression2[idx*WIDTH+:WIDTH];

最新更新