주변 논리가 모두 최소화되었다고 가정하면 플립 플롭 출력은 플립 플롭으로 직접 출력됩니다. RTL에서 a*b
스타일을 갖는
는
module multiplier(
WDITH = 24
)(
input clk,
input signed [WIDTH-1:0] a,
input signed [WIDTH-1:0] b,
output logic signed [(WIDTH*2) -1:0] mul
);
logic signed [WIDTH-1:0] a_i;
logic signed [WIDTH-1:0] b_i;
always @(posedge clk) begin
a_i <= a;
b_i <= b;
mul <= a_i * b_i;
end
endmodule
합성 라이브러리가 가장 승수 스타일 (속도 대 지역/전력)를 선택할 수 있습니다. 질문은 합성의 결과로 타이밍을 닫을 수 없다고 가정합니다.
승수 속도가 제한되는 이유는 무엇입니까?
입력 속도를 최소화하여 설계 속도를 높일 수 있습니다.
ASIC 설계의 경우 다음 프로세스 노드를 선택할 수 있습니다. 즉, 22nm에서 14nm로 진행할 수 있습니다. FPGA의 경우 더 빠른 승수 속도를 지원하는보다 값 비싼 칩.
다른 방법으로는 멀티 플라이어의 목표 클럭 속도를 반으로 줄이고 두 개를 병렬로 사용할 수 있습니다. 실제 클럭이 동일하게 유지되지만 다른 클럭마다 샘플링되는 경우 멀티 사이클 클럭을 합성에 사용할 수 있습니다.
( 입력 CLK가 입력 rst_n가 입력 서명
모듈 배율 (= 24 WDITH는) WIDTH-1 : 0] A, 입력 부호는 [WIDTH-1 : 0], B, 출력 로직 서명 [(폭 × 2) -1 : 0] mul );
logic signed [WIDTH-1:0] a1_i;
logic signed [WIDTH-1:0] b1_i;
logic signed [WIDTH-1:0] a2_i;
logic signed [WIDTH-1:0] b2_i;
logic signed [(WIDTH*2) -1:0] mul1;
logic signed [(WIDTH*2) -1:0] mul2;
logic state;
always @(posedge clk, negedge rst_n) begin
if (~rst_n) begin
state <= 'b0;
end
else begin
state <= ~state;
end
end
always @* begin
mul1_i = a1_i * b1_i;
mul2_i = a2_i * b2_i;
end
always @(posedge clk, negedge rst_n) begin
if (~rst_n) begin
a1_i <= 'b0;
b1_i <= 'b0;
a2_i <= 'b0;
b2_i <= 'b0;
mul <= 'b0
end
else begin
if (state) begin
a1_i <= a;
b1_i <= b;
mul <= mul2_i;
end
else begin
a2_i <= a;
b2_i <= b;
mul <= mul1_i;
end
end
end
endmodule
여기서, mul1_i 및 mul2_i; 합성시 멀티 사이클 특성이 주어지기 때문에 해결할 클럭주기가 두 배입니다.
또 다른 가능성은 다중주기 디자인 도자기 배율기 인 using the designware Datapath and buiding block IP을 설치하는 것입니다. 그들은 2,3,4,5와 6 사이클 승수를 가지고 있습니다.
2-Stage Multiplier의 예 :
module DW02_mult_2_stage_inst(inst_A, inst_B, inst_TC,
inst_CLK, PRODUCT_inst);
parameter A_width = 8;
parameter B_width = 8;
input [A_width-1 : 0] inst_A;
input [B_width-1 : 0] inst_B;
input inst_TC;
input inst_CLK;
output [A_width+B_width-1 : 0] PRODUCT_inst;
// Instance of DW02_mult_2_stage
DW02_mult_2_stage #(A_width, B_width)
U1 (.A(inst_A), .B(inst_B), .TC(inst_TC),
.CLK(inst_CLK), .PRODUCT(PRODUCT_inst));
endmodule
당신은 무엇을 시도? 승수 속도가 왜 문제가됩니까? 어떤 클럭 속도를 사용하고 있습니까? – Morgan
저에게 묻습니다. 멀티 플라이어 속도는 클럭 속도를 높이 지 않고 속도를 높이고 싶을 때 중요합니다. 그래서 몇 가지 방법을 찾으려고 노력했지만 쉽지 않습니다. 우리는 거의 300 ~ 400Mhz 클럭 속도를 사용합니다. – JamJI
플립 플롭으로 combinational 로직 측면을 최소화하는 것이 단순히 멀티플렉서가 아닌 전체 시스템 클럭 속도라는 것을 생각합니다. – JamJI