2011-10-08 152 views
-1

假设我有一个向量value[6:0]和一个输入向量input[3:0]。问题是我想了许多在值向量位的设定为1点的基础上输入的值,例如:使用系统verilog中的运行时值选择位向量范围

input = 0011(3中分解)然后value = 000111(组3位以1
input = 0101(5中分解)然后value = 011111(设置5位到1

由于我们可以做到这一点,只有当值不变,但在这里它是运行时改变。任何想法解决这个问题?

回答

4

这里没有必要选择一个范围。

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; 
+0

感谢亚当,我会试试这种方式,我做了另一种方式用于循环。也许会试图看看哪些方法可以节省我的资源。再次感谢 – princegialai

0

这可能是如此简单:

wire [3:0] input; 
wire [31:0] constant_value = 32'h0000_FFFF; 
wire [15:0] output; 

assign output = constant_value[ input +: 16 ]; 

注 “+” 范围选择。

+0

'assign output = constant_value [0 +:input];',它会给我正确的输出吗? – Jithin