liukulukujen lisätoiminto: Tarvitsen apua ratkaista virheen

M

mo.khairy.mo

Guest
Hei kaikki,
Yritän suunnitella liukulukujen lisätoiminto avulla etu ammattilainen ja olen simuloida sitä käyttämällä modelsim
Tässä minun koodi

Koodi:

Library IEEE;

KÄYTTÖ ieee.std_logic_1164.all;

KÄYTTÖ ieee.std_logic_arith.all;ENTITY fp_adder IS

- Julistukset

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

C: out std_logic_vector (31 downto 0)

)

END fp_adder;- HDS interface_end

ARKKITEHTUURIA lisätoiminto OF fp_adder on

- ilmoitus merkki

signaali SA, SB, SC: std_logic;

- ilmoitus eksponentti

signaali EA, EB, EY: unsigned (7 downto 0);

- ilmoitus Mantissa

signaali ma, MB, MC: unsigned (22 downto 0);

ALOITA

- asignement merkki signaalien

SA <= (31);

SB <= b (31);

- assignement ja eksponentti signaalien

ea <= unsigned ((30 downto 23));

EB <= unsigned (b (30 downto 23));

- assignement of Mantissa signaalien

ma <= unsigned ((22 downto 0));

MB <= unsigned (b (22 downto 0));

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

prosessi (EA, EB, EC, MA, MB, MC, SA, SB, SC)

aloittaa

jos (ea> EB) jälkeen loop

EB <= EB 1;

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

poistumista kun EA = EB;

end loop;

elsif (EB> EA) jälkeen loop

EA <= EA 1;

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

poistumista kun EA = EB;

end loop;

muuten

MC <= ma Mt;

EY: n <= EA;

SC <= SA xor SB;

end if;

end process;

C (22 downto 0) <= std_logic_vector (MC);

C (30 downto 23) <= std_logic_vector (EY);

C (31) <= SC;

END lisätoimintoa;
 
Kai se voi olla, koska sinulla ei ole antaa tuotannon ensimmäisessä osassa, jos.Olet vain liitetään se muuten kunnossa ..

 
Kiitoksia paljon, mutta se on edelleen sama virhe
Uskon, että virhe on signaalin siirtoon, koska ei ole muuttunut mitään signaalia ei Mantissa eikä eksponentti

 
Kyllä, ette saa antaa signaalin MC tai EY: n, jos vain toinen.Näin ollen ongelma ilmeni tuotokseen.Yritä osoitetaan MC ja minua, jos ja katso mitä tapahtuu.

 
Tämän koodin muokkauksen jälkeen seKoodi:

Library IEEE;

KÄYTTÖ ieee.std_logic_1164.all;

KÄYTTÖ ieee.std_logic_arith.all;ENTITY fp_adder IS

- Julistukset

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

C: out std_logic_vector (31 downto 0)

)

END fp_adder;- HDS interface_end

ARKKITEHTUURIA lisätoiminto OF fp_adder on

- ilmoitus merkki

signaali SA, SB, SC: std_logic;

- ilmoitus eksponentti

signaali tee, TEB: std_logic_vector (7 downto 0);

signaali EA, EB, EY: unsigned (7 downto 0);

- ilmoitus Mantissa

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

signaali ma, MB, MC: unsigned (22 downto 0);

ALOITA

- asignement merkki signaalien

SA <= (31);

SB <= b (31);

- assignement ja eksponentti signaalien

Tea <= std_logic_vector ((30 downto 23));

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

ea <= unsigned (tee);

EB <= unsigned (TEB);

- assignement of Mantissa signaalien

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

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

ma <= unsigned (TMA);

MB <= unsigned (TMB);

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

prosessi (EA, EB, EC, MA, MB, MC, SA, SB, SC)

aloittaa

jos (ea> EB) jälkeen loop

EB <= EB 1;

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

poistumista kun EA = EB;

end loop;

MC <= ma Mt;

EY: n <= EA;

SC <= SA xor SB;

elsif (EB> EA) jälkeen loop

EA <= EA 1;

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

poistumista kun EA = EB;

end loop;

MC <= unsigned (ma mb);

EY: n <= unsigned (EA);

SC <= SA xor SB;

muuten

MC <= unsigned (ma mb);

EY: n <= 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 (EY);

C (31) <= SC;

END lisätoimintoa;
 
Sen lisäksi simulaatio virhe, se ei synthesizable design.Se on myös VHDL ilmaisun virheitä, esim. nonmatching koko
MB <= '0 '& mb (7 downto 1);

 
Voisitteko selittää minulle, miksi se ei ole synthesizable suunnitteluun?
pahoillani, mutta olen uusi tällä VHDL ja liukulukujen sen osa minun valmistumisen hankkeen "suunnittelu-näytönohjain prosessori" Voitteko ehdottaa minulle tapa suunnitella liukulukujen lisätoimintotyypit ja kerroin myös minun täytyy oppia minun virheet tällä koodi ei toista samoja virheitä uudestaan

 
Tämän uuden VHDL-koodin jälkeen lisätään oletusarvo kaikissa sisäisissä
merkkejä

Koodi:

Library IEEE;

KÄYTTÖ ieee.std_logic_1164.all;

KÄYTTÖ ieee.std_logic_arith.all;ENTITY fp_adder IS

- Julistukset

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

C: out std_logic_vector (31 downto 0)

)

END fp_adder;- HDS interface_end

ARKKITEHTUURIA lisätoiminto OF fp_adder on

- ilmoitus merkki

signaali SA, SB, SC: std_logic: = '0 ';

- ilmoitus eksponentti

signaali tee, TEB: std_logic_vector (7 downto 0): = (others => '0 ');

signaali EA, EB, EY: unsigned (7 downto 0): = (others => '0 ');

- ilmoitus Mantissa

signaali TMA, TMB: std_logic_vector (22 downto 0): = (others => '0 ');

signaali ma, MB, MC: unsigned (22 downto 0): = (others => '0 ');

ALOITA

- asignement merkki signaalien

SA <= (31);

SB <= b (31);

- assignement ja eksponentti signaalien

Tea <= std_logic_vector ((30 downto 23));

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

ea <= unsigned (tee);

EB <= unsigned (TEB);

- assignement of Mantissa signaalien

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

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

ma <= unsigned (TMA);

MB <= unsigned (TMB);

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

prosessi (EA, EB, EC, MA, MB, MC, SA, SB, SC)

aloittaa

jos (ea> EB) jälkeen loop

EB <= EB 1;

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

poistumista kun EA = EB;

end loop;

MC <= ma Mt;

EY: n <= EA;

SC <= SA xor SB;

elsif (EB> EA) jälkeen loop

EA <= EA 1;

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

poistumista kun EA = EB;

end loop;

MC <= ma Mt;

EY: n <= EA;

SC <= SA xor SB;

muuten

MC <= ma Mt;

EY: n <= EA;

SC <= SA xor SB;

end if;

end process;

C (22 downto 0) <= std_logic_vector (MC);

C (30 downto 23) <= std_logic_vector (EY);

C (31) <= SC;

END lisätoimintoa;
 
Kun yrittää tiivistetään mallin on kanssa VHDL Compiler, saat Infinite loop "virhe ensimmäinen silmukka.Tämä johtuu siitä, että kääntäjä ei voi helposti havaita enimmäismäärä toistojen.Ilmeisesti sinun simulaattori ei häiritse tätä ongelmaa.Voit muokata koodia lisäämällä explicite loop-alue (esim. 1-255), mutta voit törmätä entistä keskeinen rajoitus.

Sinun pitäisi harkita, että VHDL on laitteisto desciption kielen ja iterointia ei tarkoita toistaa tiettyjä estää, mutta pyytää samanaikaisesti tapaukset mukana koodin.

Joten jos mahdollista jopa 255 toistoa (kasvamisen 8 bit unsigned), voit rakentaa 255 siirtymistä rekisteröidy tapauksissa.

Voit ehkä saada oikeita tuloksia VHDL-simulaattori, joka on vain tulkita koodia, mutta se on tehokkaasti unsynthesizable.

X teidän simulointi johtuu ylimääräisiä VHDL suunnittelu virheitä.Signaalia ei voida antaa useita kertoja silmukan, sinun on käytettävä muuttujan sijaan.
Tämä pätee EA, EB, MA, MB.

Vakavasti, ei synthesizable float aritmeettinen ydin toimii ilman kelloa ja liukuhihnanopeudesta usean vuorokauden jaksoissa.

 

Welcome to EDABoard.com

Sponsor

Back
Top