Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将16位(15:0)数组中的特定位设置为1,同时清除剩余位_Arrays_Verilog_System Verilog - Fatal编程技术网

Arrays 如何将16位(15:0)数组中的特定位设置为1,同时清除剩余位

Arrays 如何将16位(15:0)数组中的特定位设置为1,同时清除剩余位,arrays,verilog,system-verilog,Arrays,Verilog,System Verilog,我有一个16位(15:0)的数组。我有一个注册的4位变量,称为“pos”,它会根据其他条件进行更改。根据变量pos的值,我想设置一个位并清除剩余的位(0)。例如,如果pos=5,则第5位应变为1,所有其他位应设置为0(清除)。0000 0000 0010 0000是所需的值。这应该可以在系统verilog中进行综合 我可以设置所需的位,但清除剩余的位一直是一项挑战。1)查看另一个带有移位的答案 2) 对于更复杂的情况,例如,如果您想将另一个值的右或左部分保留在1之后或之前,您只需使用case语句

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

我可以设置所需的位,但清除剩余的位一直是一项挑战。

1)查看另一个带有移位的答案
2) 对于更复杂的情况,例如,如果您想将另一个值的右或左部分保留在1之后或之前,您只需使用case语句从16个可能值中指定完整答案/结果。

3) 您还可以在所有位上使用循环设置其自身的逻辑方程式,如1(如果等于计数器)、0(如果高于计数器)、源位(如果低于/else)等等…

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

value = 16'b1 << pos;

value=16'b1谢谢你的回答。这会清除位左右的位吗?是的,在左移位时,你总是从右边得到零,16'b1是一个有15个前导零的数字,从中你会在左边失去一些,这看起来太复杂了。一个更简单的方法可以利用上面的例子:new_value=old_value |(16'b1)