我设计了一个 16*16 的蒙哥马利乘法器。该代码使用一个 16*16 乘法器来执行三个乘法。使用相同的乘法器一个接一个地执行乘法,并且每次乘法的结果存储在寄存器中。单个 16*16 乘法器的执行频率约为 1550 MHz,但当三个乘法器串联执行时,Montgomery 乘法器(使用单个 16*16 乘法器 3 次)的频率降低到几乎 500 MHz。我想避免频率降低,并希望以单倍频器的频率对其进行操作。在这方面需要帮助。
提供了代码。(在这种情况下仅提供乘法。为简单起见,已排除加法,移位)
`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