Реализация схемы умножения полиномов на 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 бит) выставить коэффициенты многочлена единовременно, а не по одному биту? Как это сделать?

умножение полиномов


Ответы (0 шт):