我希望使用另一个索引部分选择的每个位的值在两个索引部分选择的位之间进行选择。输入如下代码:
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 中合法吗?如果没有,是否有更好的方法来实现相同的功能,同时保持为总线选择索引部分?
答案 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];