Q
quan228228
Guest
I min 8051, det er en Synopsys DW02_mac blokk.Simuleringen er rett.Men
Når jeg kjører FPGA, finner at mac ikke kan arbeide.
Mac funciotn er a * b c;
for eksempel
A = 16'h0001, b = 16'hffff, c = 32'h0000_0000;
the FPGA Resultatet er 32'h0000_00001;
simuleringen Resultatet er 32'hffff_ffff;
Er feilen i slekt med FPGA syntese eller kode?Eller er det tilsvarende lib for DW02_mac?
Behage hjelpe meg.Thanks very much.
Følgende er DW02_mac.v;
modul DW02_mac
(A, B, C, TC, MAC);
parameter A_width = 8;
parameter B_width = 8;
/ / Port listen erklæring for
input [A_width-1: 0] A;
input [B_width-1: 0] B;
input [A_width B_width-1: 0] C;
input TC;
output [A_width B_width-1: 0] MAC; reg. [A_width B_width-1: 0] MAC;
function [A_width B_width-1: 0] signed_mult;
input [A_width-1: 0] A;
input [B_width-1: 0] B;
reg [A_width-1: 0] A1;
reg [B_width-1: 0] B1;
reg [A_width B_width-1: 0] c1;
begynne
/ / Synopsys synthesis_off
if ((A [A_width-1] === 1'bx | | B [B_width-1] === 1'bx)) begin
signed_mult = (A_width B_width (1'bx));
end else
/ / Synopsys synthesis_on
begynne
if (A [A_width-1] === 1'b1)
= A1-A;
ellers
A1 = A;
if (B [B_width-1] === 1'b1)
B1 =-B;
ellers
B1 = B;
C1 = A1 * B1;
if (A [A_width-1]! == B [B_width-1])
signed_mult =-c1;
ellers
signed_mult = c1;
slutt
slutt
endfunction
alltid begynne
if (TC === 1'b1) begynne / / signert multiplikasjon
MAC <= signed_mult (A, B) C;
end else begin
MAC <= A * B C;
end / / if
@ (TC eller A eller B eller C);
end / / prosess
endmoduleLagt etter 44 1 timer minutter:
Jeg lurer på om funksjonen er sythesisable.David
Når jeg kjører FPGA, finner at mac ikke kan arbeide.
Mac funciotn er a * b c;
for eksempel
A = 16'h0001, b = 16'hffff, c = 32'h0000_0000;
the FPGA Resultatet er 32'h0000_00001;
simuleringen Resultatet er 32'hffff_ffff;
Er feilen i slekt med FPGA syntese eller kode?Eller er det tilsvarende lib for DW02_mac?
Behage hjelpe meg.Thanks very much.
Følgende er DW02_mac.v;
modul DW02_mac
(A, B, C, TC, MAC);
parameter A_width = 8;
parameter B_width = 8;
/ / Port listen erklæring for
input [A_width-1: 0] A;
input [B_width-1: 0] B;
input [A_width B_width-1: 0] C;
input TC;
output [A_width B_width-1: 0] MAC; reg. [A_width B_width-1: 0] MAC;
function [A_width B_width-1: 0] signed_mult;
input [A_width-1: 0] A;
input [B_width-1: 0] B;
reg [A_width-1: 0] A1;
reg [B_width-1: 0] B1;
reg [A_width B_width-1: 0] c1;
begynne
/ / Synopsys synthesis_off
if ((A [A_width-1] === 1'bx | | B [B_width-1] === 1'bx)) begin
signed_mult = (A_width B_width (1'bx));
end else
/ / Synopsys synthesis_on
begynne
if (A [A_width-1] === 1'b1)
= A1-A;
ellers
A1 = A;
if (B [B_width-1] === 1'b1)
B1 =-B;
ellers
B1 = B;
C1 = A1 * B1;
if (A [A_width-1]! == B [B_width-1])
signed_mult =-c1;
ellers
signed_mult = c1;
slutt
slutt
endfunction
alltid begynne
if (TC === 1'b1) begynne / / signert multiplikasjon
MAC <= signed_mult (A, B) C;
end else begin
MAC <= A * B C;
end / / if
@ (TC eller A eller B eller C);
end / / prosess
endmoduleLagt etter 44 1 timer minutter:
Jeg lurer på om funksjonen er sythesisable.David