-
Aoizora
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 1
-
Спасибо получено: 0
-
-
|
Хочу реализовать быстрый умножитель на константный многочлен из книги. Вот схема
По этой схеме я написал такой код на верилоге:
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 схема работает неправильно. По математический расчетам должно получиться 1101000 - результат умножения многочлена g(x) = x^3 + x^2 + 1 на x^3. В логе симулятора получается такое: x00010000$stop Тут непонятно откуда появился икс, а последовательность бит вообще другая какая-то. Скажите, пожалуйста, как правильно реализовать эту схему и симулировать ее, чтобы получился верный результат.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.119 секунд