Spartan-3A a AN -signed/unsigned matematika

balu@home balu na k-net.fr
Pondělí Prosinec 30 15:11:55 CET 2013


s 8 bitmi pokryjete 0..255, nie 256 :-)
Pokial tato hodnota vstupuje do matematickej operacie a predpokladate 
overflow (napriklad pripocitavate konstantu, alebo nasobite koeficientom 
 >1) tak treba zvysit pocet bitov.
Ak pouzijete ieee.numeric_std ten podporuje aj signed aj unsigned 
operacie. Ako bude k vektoru pristupovat kompilator zavisi od toho ake 
kniznice pouzite a ako signal zadefinujete.

Vytlacte si tento obrazok 
http://www.doulos.com/knowhow/vhdl_designers_guide/numeric_std/numeric_std_conversions.gif

a mozete veselo tycastovat :-)

FPGAcku je jedno co ten signal prenasa a aky ma format, pren su to len 
bity. Ja zvyknem vsetko dratovat ako std_logic_vector

     PocetPulzov : in std_logic_vector (11 downto 0)

lokalny signal (nikdy nepouzivat premenne!!)

     signal Loc_CelkovyPocetPulzov: unsigned (11 downto 0);

a potom si zadefinujem typ az pri konkretnej operacii, napriklad

    Loc_CelkovyPocetPulzov <= Loc_CelkovyPocetPulzov + 
Unsigned(PocetPulzov);

a na konci vnutorny signal vytiahnete von a skonvertujete znova na 
genericku zbernicu

	CelkovyPocetPulzov <= std_logic_vector(Loc_CelkovyPocetPulzov);


Ak pracujete so signalom stale ako s cislom tak ho mozete samozrejme 
deklarovat len raz a prenasat stale ako cislo.

Pokial prechadzate z unsigned na signed tak treba urobit riadnu 
konverziu a pridat znamienkovy bit. Sign extension sa robi v 2's 
complement tak ze okopirujete znamienko do vsetkych volnych MSB bitov.

b.



On 30/12/2013 09:29, hw na itherm.cz wrote:
> Pokud tedy dobre chapu, pokud mam citac zadefinovane jako vector(9 downto 0
> ) a potrebuju citat do 627 tak musim pridat bit.
> Tyka se to tedy vseho nad cim se delaji matematicke operace.
>
> Co kdyz mam 8bit branu ze ktere jde unsigned hodnota (0-256)  a tato
> vstupuje do nejake matematicke operace. Bude k ni pristupovano jako k
> signed, tzn nebude vypocet sedet, nebo se pletu?
> Jak se resi takove situace? Musim to presunout do interni promenne a pridat
> tam 0 na zacatek?
>
> Pavel
>


Další informace o konferenci Hw-list