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

时间:2019-06-03 21:19:18

标签: arrays verilog system-verilog

我有一个16位(15:0)的数组。我有一个注册的4位变量,称为“ pos”,它会根据其他情况而变化。根据变量pos的值,我想设置一个位并清除剩余的位(0)。例如,如果pos = 5,则位5应该变为1,所有其他位都设置为0(清除)。 0000 0000 0010 0000是所需值。这应该可以在系统Verilog中综合

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

2 个答案:

答案 0 :(得分:3)

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

value = 16'b1 << pos;

答案 1 :(得分:0)

1)查看带有班次的其他答案
2)对于更复杂的情况,例如,如果您想将另一个值的左或右部分保留在1之前或之后,则可以使用case语句简单地在16个可能的值中分配完整的答案/结果。
3)您还可以在所有位上使用循环来设置自己的逻辑方程式,例如1(如果等于计数器),0(如果高于计数器),源位(如果低于/其他),等等...