floating point huggorm: trenger hjelp for å løse feil

M

mo.khairy.mo

Guest
Hei alle,
Jeg prøver å designe et flyttall huggorm med fordel pro og jeg simulerer den ved hjelp modelsim
denne koden min

Code:

LIBRARY IEEE;

BRUK ieee.std_logic_1164.all;

BRUK ieee.std_logic_arith.all;ENTITY fp_adder IS

- Erklæringer

port (a, b: in std_logic_vector (31 downto 0);

c: out std_logic_vector (31 downto 0)

);

END fp_adder;- HDS interface_end

ARKITEKTUR huggorm AV fp_adder IS

- erklæring om tegn

signal sa, SB, SC: std_logic;

- erklæring om eksponent

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

- erklæring om mantissa

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

BEGIN

- asignement av sign signaler

SA <= a (31);

SB <= b (31);

- assignement av eksponent signaler

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

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

- assignement av mantissa signaler

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

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

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

Prosessen (ea, EB, EC, ma, mb, mc, SA, SB, SC)

begynne

if (ea> eb) så loop

eb <= eb 1;

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

exit når EA = eb;

end loop;

elsif (eb> ea) så loop

ea <= ea 1;

ma <= '0 'og ma (7 downto 1);

exit når EA = eb;

end loop;

ellers

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;

END Adder;
 
Jeg antar det kan være fordi du ikke tildele produksjon i første del av If.Du bare tildelt det for annet tilstand ..

 
takk en meget men fortsatt samme feilen
Jeg tror feilen på signalet oppdraget fordi det er ingen endring i noen signaler verken mantissa eller eksponent

 
Ja, det gjorde du ikke tildeler signalet mc eller ec i hvis bare i den andre.Derfor oppstod et problem i produksjonen.Så prøv å tilordne mc og meg i om og se hva som skjer.

 
denne koden etter redigering detCode:

LIBRARY IEEE;

BRUK ieee.std_logic_1164.all;

BRUK ieee.std_logic_arith.all;ENTITY fp_adder IS

- Erklæringer

port (a, b: in std_logic_vector (31 downto 0);

c: out std_logic_vector (31 downto 0)

);

END fp_adder;- HDS interface_end

ARKITEKTUR huggorm AV fp_adder IS

- erklæring om tegn

signal 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 mantissa

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

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

BEGIN

- asignement av sign signaler

SA <= a (31);

SB <= b (31);

- assignement av eksponent signaler

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

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

ea <= usignerte (te);

eb <= usignerte (TEB);

- assignement av mantissa signaler

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

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

ma <= usignerte (TMA);

mb <= usignerte (TMB);

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

Prosessen (ea, EB, EC, ma, mb, mc, SA, SB, SC)

begynne

if (ea> eb) så loop

eb <= eb 1;

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

exit når EA = eb;

end loop;

mc <= ma mb;

ec <= ea;

sc <= sa XOR SB;

elsif (eb> ea) så loop

ea <= ea 1;

ma <= '0 'og ma (7 downto 1);

exit når EA = eb;

end loop;

mc <= usignerte (ma mb);

ec <= usignerte (EA);

sc <= sa XOR SB;

ellers

mc <= usignerte (ma mb);

ec <= usignerte (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;

END Adder;
 
Bortsett fra simuleringen feil, er det ingen synthesizable design.Det har også VHDL uttrykk feil, f.eks nonmatching størrelse
mb <= '0 '& mb (7 downto 1);

 
kunne du forklare meg hvorfor det ikke synthesizable design?
beklager men jeg er ny på VHDL og flyttall dens en del av min eksamen prosjektet "design av grafikkortet prosessor" kan du foreslå til meg noen metode for å designe den flytende punktet huggorm og multipliserer også jeg trenger å lære meg feil på dette kode for å ikke gjenta de samme feilene igjen

 
dette den nye VHDL kode etter legger en standardverdi for alle interne
signaler

Code:

LIBRARY IEEE;

BRUK ieee.std_logic_1164.all;

BRUK ieee.std_logic_arith.all;ENTITY fp_adder IS

- Erklæringer

port (a, b: in std_logic_vector (31 downto 0);

c: out std_logic_vector (31 downto 0)

);

END fp_adder;- HDS interface_end

ARKITEKTUR huggorm AV fp_adder IS

- erklæring om tegn

signal 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 mantissa

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

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

BEGIN

- asignement av sign signaler

SA <= a (31);

SB <= b (31);

- assignement av eksponent signaler

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

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

ea <= usignerte (te);

eb <= usignerte (TEB);

- assignement av mantissa signaler

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

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

ma <= usignerte (TMA);

mb <= usignerte (TMB);

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

Prosessen (ea, EB, EC, ma, mb, mc, SA, SB, SC)

begynne

if (ea> eb) så loop

eb <= eb 1;

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

exit når EA = eb;

end loop;

mc <= ma mb;

ec <= ea;

sc <= sa XOR SB;

elsif (eb> ea) så loop

ea <= ea 1;

ma <= '0 'og ma (22 downto 1);

exit når EA = eb;

end loop;

mc <= ma mb;

ec <= ea;

sc <= sa XOR SB;

ellers

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;

END Adder;
 
Når du prøver å syntetisere design som er med VHDL kompilator, får du en "uendelig løkke" feil på den første loopen.Dette skyldes at kompilatoren ikke lett kan oppdage det maksimale antall gjentakelser.Angivelig er din simulator ikke forstyrret av dette problemet.Du kan endre koden ved å legge en explicite løkke område (for eksempel 1 til 255), men du kjører inn i en mer fundamental begrensning.

Du bør vurdere, som VHDL er en maskinvare desciption språk og en gjentakelse betyr ikke å gjenta en bestemt blokk, men forespørsler parallelt forekomster av den medfølgende koden.

Så hvis du tillater opptil 255 iterasjoner (øke en 8 bit unsigned), bygge deg 255 skift registrere forekomster.

Du kan muligens få riktige resultater i en VHDL simulator, det er bare å tolke koden, men det er effektivt unsynthesizable.

X i simuleringen din skyldes ekstra VHDL design feil.Et signal kan ikke tildeles flere ganger i en løkke, må du bruke en variabel i stedet.
Dette er tilfelle med ea, eb, ma, mb.

Seriøst, fungerer ingen synthesizable flyte aritmetiske kjerne uten klokke og pipelined kjøring over flere klokke sykluser.

 

Welcome to EDABoard.com

Sponsor

Back
Top