hvordan verktøyet 'synplify' syntetisere sysnopsys DW02_mac?

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

 
Jeg tviler på om Synopsys tillate brukeren å syntetisere sitt designware moduler i andre synthesizere.

Det Verilog modulene du får er mest sannsynlig ment for simulering bare.

HTH

 
yeh, jeg har også denne tvilen.Gjøre u vite, er setningen 'function' synthesisable eller ikke.Hvis ikke, hvordan kart DW blokkere i FPGA?

Takk!David

 
/ / 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
implys det er en kode for simulering
Hvorfor ikke erstatte denne DW med din egen kode?

 

Welcome to EDABoard.com

Sponsor

Back
Top