Я разработал множитель 16 * 16 Монтгомери. В коде используется множитель 16 * 16 для выполнения трех умножений. Умножения выполняются один за другим с использованием одного и того же множителя, и результат каждого умножения сохраняется в регистрах. Единичный множитель 16 * 16 работает на частоте около 1550 МГц, но частота множителя Монтгомери (который использует один умножитель 16 * 16 три раза) уменьшается до почти 500 МГц, когда три умножения выполняются последовательно. Я хочу избежать уменьшения частоты и хочу работать с частотой одиночного множителя. Нужна помощь в этом.Частота множителя Монтгомери
код предоставляются вместе с. (Только умножения предусмотрены в этом случае. Дополнения, переключение было исключены для простоты)
`define m 11
`define mbar 245
module test_mul(a,b,clk,reg2,reset);
input [15:0] a,b;
input clk,reset;
output reg [31:0] reg2;
reg [15:0] x,y;
reg [31:0] reg0,reg1;
reg [5:0] count;
wire [31:0]p;
test_mul16 a1 (x,y,clk, p);
always @ (posedge clk)
begin
if (reset)
begin x <= a; y <= b; count= 6'd0 end
else begin
if (count == 11)
reg2 <= p;
if (count == 12)
begin x <= reg0[15:0]; y <=`mbar; end
if (count == 27)
reg1 <= p;
else if (count == 28)
begin
x <= reg1[15:0];
y <= `m;
end
else if (count == 39)
begin
reg2 <= p;
end
count = count+1;
end
end
endmodule
module test_mul16(a,b,clk,reg2);
input [15:0] a,b;
input clk;
output reg [31:0] reg2;
reg [31:0] reg0, reg1;
always @ (posedge clk)
begin
reg0<= a*b;
reg1<=reg0;
reg2<=reg1;
end
endmodule
Может быть лучше подходит для http://electronics.stackexchange.com/ – toolic
Ваш FPGA-инструмент, возможно, решил, что другой тип мультипликатора более оптимален для конфигурации. Вы должны ограничить свободу инструмента, используя ограничения. Но, честно говоря, мне трудно понять, что вы пытаетесь сделать. Каковы эти, казалось бы, случайные значения счетчика? Почему test_mul16 передает умножение через регистры, чтобы задержать выход?И reg0 не получает значение до его использования. – Hida
Пара вопросов для подтверждения проблемы. Это вопрос времени? Вы говорите, что дизайн приурочен к тактовой частоте 1,55 ГГц при выполнении одного множителя, но только раз до 500 МГц при серийном умножителе? Существует переменная состояния (count), которая, похоже, делает много циклов бездействия, поэтому я вполне уверен, что это вопрос времени в фоновом режиме, но вы хотите подтвердить. –