Если вы хотите извлечь фрагмент из вектора, вы должны обойти неравный размер на RHS и LHS.Вот такое решение:
always @( * )
case (input1)
2'b00 : output1 = input2[3];
2'b01 : output1 = input2[3:2];
2'b10 : output1 = input2[3:1];
2'b11 : output1 = input2[3:0];
endcase
Я считаю это несколько неряшливым.Ниже то же самое, но векторы одинакового размера на RHS и LHS:
always @( * )
case (input1)
2'b00 : output1 = {3'b000,input2[3] };
2'b01 : output1 = { 2'b00,input2[3:2]};
2'b10 : output1 = { 1'b0,input2[3:1]};
2'b11 : output1 = input2[3:0];
endcase
Вы неожиданно упоминаете 8-битный вход.Я предполагаю, что вы имеете в виду, что input2 имеет ширину 8 бит.Но для этого требуется только максимальная длина input1 в 3 бита.Таким образом, решение, приведенное выше, будет в два раза больше, но все же выполнимо.
Просто для вашего удобства здесь есть версия для 8-битного индекса, который требует 256-битные векторы.:-) Это немного сложнее для понимания, но также работает для вашего конкретного случая, когда вам всегда нужны только биты MS X.
module foo(
input [ 7:0] input1,
input [255:0] input2,
output [255:0] output1
);
wire [7:0] shift_right = 255-input;
assign output1 = input2 >> shift_right ;
endmodule