Хочу реализовать быстрый умножитель на константный многочлен из книги. Вот схема
По этой схеме я написал такой код на верилоге:
Код:
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
Но на последовательности
схема работает неправильно. По математический расчетам должно получиться 1101000 - результат умножения многочлена
на
. В логе симулятора получается такое:
Цитата:
x00010000$stop
Тут непонятно откуда появился икс, а последовательность бит вообще другая какая-то. Скажите, пожалуйста, как правильно реализовать эту схему и симулировать ее, чтобы получился верный результат.