저는 16 * 16 몽고메리 승수를 설계했습니다. 이 코드는 16 * 16 배수를 사용하여 세 배의 곱셈을 수행합니다. 곱셈은 동일한 곱셈기를 사용하여 차례로 수행되고 각 곱셈의 결과는 레지스터에 저장됩니다. 단일 16 * 16 승산기는 약 1550 MHz의 주파수에서 수행되지만 3 회의 승수가 직렬로 수행 될 때 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
http://electronics.stackexchange.com/ – toolic
에 더 적합 할 수 있습니다. FPGA 툴은 다른 유형의 승수가 구성에 더 적합하다고 결정했을 수 있습니다. 제약 조건을 사용하여 도구의 자유를 제한해야합니다. 그러나 솔직히 나는 당신이하려고하는 것을 이해하는 데 어려움을 겪습니다. 겉보기에 임의의 카운터 값은 무엇입니까? test_mul16이 출력을 지연시키기 위해 레지스터를 통해 곱셈을 전달하는 이유는 무엇입니까?그리고 reg0은 사용되기 전에 값으로 설정되지 않습니다. – Hida
문제를 확인하기위한 몇 가지 질문입니다. 타이밍 질문입니까? 직렬 곱셈기를 수행 할 때 단일 승수를 수행 할 때 1.55Ghz의 클록 주파수에 맞춰 설계를 수행하지만 500Mhz까지만 시간을 계산한다고 말하고 있습니까? 상태 변수 (count)가 있습니다.이 변수는 순환을 전혀하지 않는 것으로 보입니다. 그래서 이것은 백엔드 타이밍 질문이지만 확신하고 싶습니다. –