Хочу реализовать быстрый умножитель на константный многочлен из книги. Вот схема
![Изображение](https://i.ibb.co/VpQ2rwP/1.png)
По этой схеме я написал такой код на верилоге:
Код:
module multiplier(
input logic clk,
input logic reset,
input logic in,
output logic out
);
reg [2:0] s;
always @(posedge clk)
if (reset)
s <= '0;
else begin
s[2] <= in;
s[1] <= s[2];
s[0] <= s[1];
end
assign out = in ^ s[2] ^ s[0];
endmodule
И тестбенч к нему:
Код:
module multiplier_tb();
logic clk;
logic reset;
logic in;
logic out;
initial begin
clk = 0;
forever #5 clk = ~clk;
end
multiplier m(clk, reset, in, out);
initial begin
#1 reset = 1; #10
reset = 0;
/*
// data 11111
in = 1; #10
in = 1; #10
in = 1; #10
in = 1; #10
in = 1; #10
// tail
in = 0; #10
in = 0; #10
in = 0; #10
$stop;
*/
// data 1000
in = 0; #10
in = 1; #10
in = 0; #10
in = 0; #10
in = 0; #10
// tail
in = 0; #10
in = 0; #10
in = 0; #10
$stop;
end
always @(posedge clk)
#2 $write(out);
endmodule
Но на последовательности
![$f(x) = 1000$ $f(x) = 1000$](https://dxdy-04.korotkov.co.uk/f/7/b/b/7bb43242b511e7a95fca6cd0be71211182.png)
схема работает неправильно. По математический расчетам должно получиться 1101000 - результат умножения многочлена
![$g(x) = x^3 + x^2 + 1$ $g(x) = x^3 + x^2 + 1$](https://dxdy-02.korotkov.co.uk/f/d/0/4/d0401c7c96b0ca1857ae1893d70ef8c482.png)
на
![$x^3$ $x^3$](https://dxdy-04.korotkov.co.uk/f/3/c/6/3c63d4517a41fc372162eaa29bc7d97082.png)
. В логе симулятора получается такое:
Цитата:
x00010000$stop
Тут непонятно откуда появился икс, а последовательность бит вообще другая какая-то. Скажите, пожалуйста, как правильно реализовать эту схему и симулировать ее, чтобы получился верный результат.