如何在 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;
我有一个数组,比方说 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;