私は16×16モンゴメリ乗算器を設計しました。このコードでは、16×16の乗算器を使用して3回の乗算を行います。乗算は同じ乗算器を使用して順次実行され、各乗算の結果はレジスタに記憶される。単一の16×16乗算器は約1550MHzの周波数で動作するが、3回の乗算を直列に実行すると、モンゴメリ乗算器(単一の16×16乗算器を3回使用する)の周波数はほぼ500MHzに低下する。私は周波数の低下を避けたいと思うし、単一乗数の周波数でそれを操作したい。これで助けが必要です。モンゴメリ乗算の頻度
コードと共に提供される。(唯一の乗算は、この場合に設けられている。追加、シフトを簡単にするために除外されている)
`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.55Ghzのクロック周波数に設計されたが、500Mhzに時間がかかると言っていますか?状態変数(count)がありますが、何もサイクルを何もしないように見えるので、これはバックエンドのタイミング問題ですが、確かに確認したいと確信しています。 –