如何在 16 位 (15:0) 数组中将特定位设置为 1 并同时清除其余位

How to set a particular bit to 1 in an array of say 16 bits (15:0) and clear the remaining bits at the same time

我有一个数组,比方说 16 位 (15:0)。我有一个注册的 4 位变量,比如 'pos',它会根据其他条件发生变化。根据变量 pos 的值,我想设置一点并清除剩余的位 (0)。例如,如果 pos=5,则位 5 应变为 1,所有其他设置为 0(清除)。 0000 0000 0010 0000 是所需的值。这应该可以在系统 verilog

中综合

我能够设置所需的位,但清除剩余的位一直是一个挑战。

1) 换档看另一个答案
2)对于更复杂的情况,比如如果你想在 1 之后或之前保留另一个值的右边或左边部分,你可以简单地分配 16 个可能的完整 answer/result,用 case 语句。
3)您还可以在所有位上使用循环来设置自己的逻辑方程式,例如如果等于计数器则为 1,如果高于则为 0,如果 under/else 则为源位,依此类推...

使用逻辑移位运算符设置位

value = 16'b1 << pos;