floating point adder: brug for hjælp til løsning af fejl

M

mo.khairy.mo

Guest
Hej alle,
Jeg forsøger at designe en floating point adder hjælp fordel pro, og jeg forestiller den hjælp modelsim
denne min kode

Kode:

LIBRARY IEEE;

BRUG ieee.std_logic_1164.all;

BRUG ieee.std_logic_arith.all;ENTITY fp_adder IS

- Erklæringer

havn (a, b: i std_logic_vector (31 downto 0);

c: out std_logic_vector (31 downto 0)

);

SLUT fp_adder;- HDS interface_end

ARKITEKTUR adder AF fp_adder IS

- angivelse af tegn

signalet sa, sb, sc: std_logic;

- erklæring om eksponent

signal ea, eb, ec: unsigned (7 downto 0);

- erklæring om mantisse

signal ma, mb, mc: unsigned (22 downto 0);

BEGIN

- asignement tegn signaler

sa <= a (31);

sb <= b (31);

- assignement af eksponent signaler

ea <= usigneret (a (30 downto 23));

eb <= usigneret (b (30 downto 23));

- assignement af mantisse signaler

ma <= usigneret (a (22 downto 0));

mb <= usigneret (b (22 downto 0));

-------------------------------------------------- -------------------------------------------------- --

proces (ea, eb, ec, ma, mb, mc, sa, sb, sc)

begynd

if (ea> eb) derefter loop

eb <= eb 1;

mb <= '0 '& MB (7 downto 1);

afslutte, når ea = eb;

END LOOP;

elsif (eb> ea) derefter loop

ea <= ea 1;

ma <= '0 '& MA (7 downto 1);

afslutte, når ea = eb;

END LOOP;

anden

mc <= ma MB;

ec <= ea;

sc <= sa xor sb;

end if;

end process;

c (22 downto 0) <= std_logic_vector (mc);

c (30 downto 23) <= std_logic_vector (EF);

c (31) <= sc;

SLUT adder;
 
Jeg tror det kunne være fordi du ikke tildele produktion i den første del af det, hvis.Du kun tildelt det for ellers tilstand ..

 
thanks a lot, men det stadig den samme fejl
Jeg tror, at fejlen på signalet opgaven, fordi der ikke er nogen ændring i ethvert signal hverken mantisse eller eksponent

 
Ja, har du ikke tildele signalet mc eller EF i den, hvis kun den anden.Derfor opstod et problem i produktionen.Så prøv at tildele MC og mig i, om og se hvad der sker.

 
denne koden efter at redigere denKode:

LIBRARY IEEE;

BRUG ieee.std_logic_1164.all;

BRUG ieee.std_logic_arith.all;ENTITY fp_adder IS

- Erklæringer

havn (a, b: i std_logic_vector (31 downto 0);

c: out std_logic_vector (31 downto 0)

);

SLUT fp_adder;- HDS interface_end

ARKITEKTUR adder AF fp_adder IS

- angivelse af tegn

signalet sa, sb, sc: std_logic;

- erklæring om eksponent

signal te, TEB: std_logic_vector (7 downto 0);

signal ea, eb, ec: unsigned (7 downto 0);

- erklæring om mantisse

signal TMA, TMB: std_logic_vector (22 downto 0);

signal ma, mb, mc: unsigned (22 downto 0);

BEGIN

- asignement tegn signaler

sa <= a (31);

sb <= b (31);

- assignement af eksponent signaler

te <= std_logic_vector (a (30 downto 23));

TEB <= std_logic_vector (b (30 downto 23));

ea <= unsigned (te);

eb <= unsigned (TEB);

- assignement af mantisse signaler

TMA <= std_logic_vector (a (22 downto 0));

TMB <= std_logic_vector (b (22 downto 0));

ma <= unsigned (TMA);

mb <= unsigned (TMB);

-------------------------------------------------- -------------------------------------------------- --

proces (ea, eb, ec, ma, mb, mc, sa, sb, sc)

begynd

if (ea> eb) derefter loop

eb <= eb 1;

mb <= '0 '& MB (7 downto 1);

afslutte, når ea = eb;

END LOOP;

mc <= ma MB;

ec <= ea;

sc <= sa xor sb;

elsif (eb> ea) derefter loop

ea <= ea 1;

ma <= '0 '& MA (7 downto 1);

afslutte, når ea = eb;

END LOOP;

mc <= usigneret (MA mb);

ec <= unsigned (EA);

sc <= sa xor sb;

anden

mc <= usigneret (MA mb);

ec <= unsigned (EA);

sc <= sa xor sb;

end if;

end process;

c (22 downto 0) <= std_logic_vector (mc);

c (30 downto 23) <= std_logic_vector (EF);

c (31) <= sc;

SLUT adder;
 
Bortset fra simuleringen fejl, er det ikke synthesizable design.Det har også VHDL udtryk fejl, f.eks nonmatching størrelse
mb <= '0 '& MB (7 downto 1);

 
kan du forklare mig, hvorfor det ikke synthesizable design?
beklager, men jeg er ny på vhdl og flydende komma sin en del af mit afgangsprojekt "udformning af grafikkort, processor" kan du foreslå mig en metode til at designe floating point adder & multiplikator jeg også nødt til at lære mine fejl på dette kode til ikke at gentage de samme fejl igen

 
dette den nye vhdl kode efter tilføje en standardværdi for alle interne
signaler

Kode:

LIBRARY IEEE;

BRUG ieee.std_logic_1164.all;

BRUG ieee.std_logic_arith.all;ENTITY fp_adder IS

- Erklæringer

havn (a, b: i std_logic_vector (31 downto 0);

c: out std_logic_vector (31 downto 0)

);

SLUT fp_adder;- HDS interface_end

ARKITEKTUR adder AF fp_adder IS

- angivelse af tegn

signalet sa, sb, sc: std_logic: = '0 ';

- erklæring om eksponent

signal te, TEB: std_logic_vector (7 downto 0): = (andre => '0 ');

signal ea, eb, ec: unsigned (7 downto 0): = (andre => '0 ');

- erklæring om mantisse

signal TMA, TMB: std_logic_vector (22 downto 0): = (andre => '0 ');

signal ma, mb, mc: unsigned (22 downto 0): = (andre => '0 ');

BEGIN

- asignement tegn signaler

sa <= a (31);

sb <= b (31);

- assignement af eksponent signaler

te <= std_logic_vector (a (30 downto 23));

TEB <= std_logic_vector (b (30 downto 23));

ea <= unsigned (te);

eb <= unsigned (TEB);

- assignement af mantisse signaler

TMA <= std_logic_vector (a (22 downto 0));

TMB <= std_logic_vector (b (22 downto 0));

ma <= unsigned (TMA);

mb <= unsigned (TMB);

-------------------------------------------------- -------------------------------------------------- --

proces (ea, eb, ec, ma, mb, mc, sa, sb, sc)

begynd

if (ea> eb) derefter loop

eb <= eb 1;

mb <= '0 '& mb (22 downto 1);

afslutte, når ea = eb;

END LOOP;

mc <= ma MB;

ec <= ea;

sc <= sa xor sb;

elsif (eb> ea) derefter loop

ea <= ea 1;

ma <= '0 '& MA (22 downto 1);

afslutte, når ea = eb;

END LOOP;

mc <= ma MB;

ec <= ea;

sc <= sa xor sb;

anden

mc <= ma MB;

ec <= ea;

sc <= sa xor sb;

end if;

end process;

c (22 downto 0) <= std_logic_vector (mc);

c (30 downto 23) <= std_logic_vector (EF);

c (31) <= sc;

SLUT adder;
 
Når de forsøger at syntetisere det design som er med VHDL compiler, får du en "uendelig løkke" fejl på den første sløjfe.Dette skyldes, at oversætteren ikke let kan finde det maksimale antal gentagelser.Tilsyneladende din simulator forstyrres ikke af dette problem.Du kan ændre koden ved at tilføje en explicite loop interval (f.eks 1 til 255), men du løber ind i en mere grundlæggende begrænsning.

Du bør overveje, at VHDL er en hardware desciption sprog og en iteration betyder ikke at gentage en bestemt blok, men kræver samtidig forekomster af den medfølgende kode.

Så hvis du tillader op til 255 iterationer (forøgning af en 8-bit unsigned), du bygge 255 skifteregister tilfælde.

Du kan muligvis få det rigtige resultat i en VHDL simulator, det er kun fortolke kode, men det er effektivt unsynthesizable.

X i din simulering skyldes yderligere VHDL design fejl.Et signal kan ikke tildeles flere gange i en løkke, er du nødt til at bruge en variabel i stedet.
Dette er tilfældet med ea, eb, ma, mb.

Alvorligt, ingen synthesizable flyde aritmetiske centrale værker uden et ur og pipelined udførelse over en række ur cyklusser.

 

Welcome to EDABoard.com

Sponsor

Back
Top