假设我有一个向量value[6:0]
和一个输入向量input[3:0]
。问题是我想了许多在值向量位的设定为1点的基础上输入的值,例如:使用系统verilog中的运行时值选择位向量范围
input = 0011
(3中分解)然后value = 000111
(组3位以1
)
input = 0101
(5中分解)然后value = 011111
(设置5位到1
)
由于我们可以做到这一点,只有当值不变,但在这里它是运行时改变。任何想法解决这个问题?
假设我有一个向量value[6:0]
和一个输入向量input[3:0]
。问题是我想了许多在值向量位的设定为1点的基础上输入的值,例如:使用系统verilog中的运行时值选择位向量范围
input = 0011
(3中分解)然后value = 000111
(组3位以1
)
input = 0101
(5中分解)然后value = 011111
(设置5位到1
)
由于我们可以做到这一点,只有当值不变,但在这里它是运行时改变。任何想法解决这个问题?
这里没有必要选择一个范围。
wire [3:0] input;
wire [7:0] shifted;
wire [6:0] value; //This can only hold 0 to 7
//Assign 2^input then subtract 1
assign shifted = 1'b1 << input;
assign value = shifted - 1;
这可能是如此简单:
wire [3:0] input;
wire [31:0] constant_value = 32'h0000_FFFF;
wire [15:0] output;
assign output = constant_value[ input +: 16 ];
注 “+” 范围选择。
'assign output = constant_value [0 +:input];',它会给我正确的输出吗? – Jithin
感谢亚当,我会试试这种方式,我做了另一种方式用于循环。也许会试图看看哪些方法可以节省我的资源。再次感谢 – princegialai