假设我有一个向量value[6:0]
和一个输入向量input[3:0]
。问题是我想根据输入值将值向量中的位数设置为 1,例如:
input = 0011
(3 in dec) then value = 000111
(set 3 bits to 1
)
input = 0101
(5 in dec) then value = 011111
(set 5 bits to 1
)
因为只有当值保持不变时我们才能轻松做到这一点,但这里是运行时变化。关于解决这个问题的任何想法?
假设我有一个向量value[6:0]
和一个输入向量input[3:0]
。问题是我想根据输入值将值向量中的位数设置为 1,例如:
input = 0011
(3 in dec) then value = 000111
(set 3 bits to 1
)
input = 0101
(5 in dec) then value = 011111
(set 5 bits to 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 ];
注意“+:”范围选择。