How to convert 'echte' waarden std_logic_vector?

G

GeekWizard

Guest
Is er een manier om de reële waarden std_logic_vector formaat?

De conv_std_logic_vector () blijkbaar slechts in integer waarden en geeft een fout voor anderen!

Many thanks.

 
Allereerst, wat voor soort behandeling wil je voor niet-gehele getallen?

Het werkelijke aantal 5,25 moet worden wat bit patroon?
00000101 voor 5?
00010101 voor 21 kwartalen (uitgedrukt met de LSB wordt vierde eenheid)?

In ieder geval dient u gebruik te maken ieee.numeric_std.all, en gebruik to_unsigned.U kan uitbrengen aan de werkelijke getal als je gewoon wilt nemen de integer deel

my_sig <= to_unsigned (getal (5,25), my_sig'length);

 
1.Real rekenkundig en type conversie impliceert echt niet behandeld door IEEE.NUMERIC_STD pakket in plaats van IEEE.MATH_REAL.

2.Converteren naar echte getal vereist IEEE.MATH_REAL ronde () functie.E. g.:
Code:

CONSTANTE UREF: INTEGER: = AFRONDEN (1,23 * 2,0 ** 15);
 
Heres mijn probleem:

1."integer" is slechts 32 bits.Ik werk met getallen groter dan die uptil 48 bits.(bijv. 4.456E13)

2.Mijn idee is gebruik te maken van 'echte' nummers voor alle berekeningen en vervolgens converteren naar een std_logic_vector van 48 bits output poorten.

Dus het is niet de floating point getallen die ik
maak me zorgen over.Enig idee hoe je kunt dit probleem?

Bedankt!Toegevoegd na 2 minuten:Op een zijde nota, is er een ALU-eenheid in de qu (at) rtus compiler?Ik heb door de beschikbare 'symbolen' in de bibliotheek en kon niet een dergelijk onderdeel.

 
be used for synthesis, isn't limited to 32 bit (although some IP, eg Xilinxs divider core has an arbitrary 32 bit limitation).

Ondertekend of niet-ondertekende rekenen, dat kan
worden gebruikt voor de synthese, is niet beperkt tot 32 bit (hoewel sommige IP, bijvoorbeeld Xilinxs doseertoestel kern heeft een willekeurige 32-bits beperking).Ik noemde integer type alleen aan te tonen gebruik van IEEE.MATH_REAL in de synthese.

be used - with special IP.

Ook floating-point kan
worden gebruikt - met een speciale IP.opencores.org heeft enkele zweven spul.

@ ltera in het bijzonder heeft FP_ADD_SUB, FP_MULT, FP_DIV, FP_SQRT en FP_COMPARE Megafunctions geleverd met qu (at) rtus.

 
Ik koos om te werken met alle 'unsigned' type nummers en ik krijg een fout bij het gebruik van "/" (afdelingen) operator!

Citaat:

Fout (10327): VHDL fout bij computation2.vhd (90): kan niet bepalen definitie van exploitant ""/"" - 0 gevonden mogelijke definities
 
Verdelers niet infered uit "/" exploitant in de meeste synthese tools.

 
Dus hoe moet verdelers worden uitgevoerd in VHDL voor qu (at) rtus?

Het ding is qu (at) rtus compiler werd inferring de "/" exploitant als doseertoestel wanneer de nummers betrokken waren integer typen, maar niet voor unsigned!

 
Ik denk niet dat Quartus leidt verdelers met integer typen (of ik was niet op de hoogte van de functie nog).Het kan evalueren "/" exploitant in constante blijken of voor compileer berekeningen.Maar voor de synthese doeleinden, moet u gebruik maken alt_divide Megafunction of andere divider kern, je aanbod.

PS: Ik vond dat Quartus daadwerkelijk leidt verdelers van integer divisison.Echter, de functie is effectief ongedocumenteerde in Quartus handboek.Ik heb om te leren, als de tussenstijl parameters kunnen worden conrolled op een nuttige manier.Dank u voor dit interessant inzicht.

PPS: We kunnen de operandlengte grootte door INTEGER RANGE instellingen, ook> = 0 subrange wordt behandeld als unsigned operand.Maar lijkt te werken met INTEGER type alleen.

 

Welcome to EDABoard.com

Sponsor

Back
Top