位向量范围选择与系统verilog中的运行时值

时间:2011-10-08 08:05:06

标签: logic verilog digital system-verilog

假设我有一个向量value[6:0]和一个输入向量input[3:0]。问题是我想在输入值的基础上将值向量中的位数设置为1,例如:

input = 0011(在dec中为3)然后value = 000111(将3位设为1
input = 0101(在dec中为5)然后value = 011111(将5位设置为1

正如我们只能在值不变时才能做到这一点,但这里是运行时的变化。有什么想法解决这个问题吗?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

这可能很简单:

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

assign output = constant_value[ input +: 16 ];

注意“+:”范围选择。