Реализация схемы умножения полиномов на verilog
Хочу реализовать схему для умножения полиномов на фиксированный полином по книге. Не уверен, что все делаю правильно. По методичке, нагугленной в интернете, пытался разобраться в регистрах сдвига и написал такой код:
module shift_reg(input logic clk,
input logic in,
input logic enable,
output logic out);
reg [2:0] data = 3'b000;
always @(posedge clk) begin
if (enable)
data <= { in, data[2:1] };
end
assign out = in ^ data[2] ^ data[0];
endmodule
Я плохо понимаю, как в SystemVerilog происходит конкатенация шин:
data <= { in, data[2:1] };
Здесь получается шина, где in - старший разряд, а data1 - самый младший? Что будет, если поменять переменные местами и написать:
data <= { data[2:1], in };
Теперь data[2] и data1 будут старшие разряды, а in - самый младший? Будет ли схема работать по-другому, если написать:
data <= { in, data[1:0],};
Здесь регистр сдвигает полученные биты влево, поэтому конкатенация должна быть соответствующая, при которой эти биты сдвигаются влево.
И еще вопрос. Есть ли возможность сразу на широкую шину (скажем, 8 бит) выставить коэффициенты многочлена единовременно, а не по одному биту? Как это сделать?
