Использование входных данных в качестве параметров в Verilog - PullRequest
0 голосов
/ 07 мая 2019

Хотите использовать входные данные, передаваемые в диапазоне другого вектора, для извлечения соответствующего значения

Скажем, например, см. Приведенный ниже код Verilog.

Но проблема в том, что я не могу передать переменную(вход) в диапазон другой переменной.Но это должно быть сделано так.Есть ли еще какой-нибудь исполняемый код с аналогичным функционалом?На самом деле мой вопрос касается исправления синтаксиса этого кода, а также вариантов, доступных для выполнения аналогичных функций.

module foo(input1, input2, output1)
input [3:0] input1;
input [3:0] input2;
output reg [3:0] output1;
always@(*) begin
output1 <= input2[3:3-input1[1:0]];
end
endmodule

1 Ответ

2 голосов
/ 07 мая 2019

Если вы хотите извлечь фрагмент из вектора, вы должны обойти неравный размер на 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
...