Spartan-3A a AN -signed/unsigned matematika

balu@home balu na k-net.fr
Pondělí Prosinec 30 23:24:18 CET 2013


prihovaram sa za signed. Na tom jednom bite navyse u fpga nezalezi a 
pouzijete len jednu instanciu scitacky na pricitanie/odcitanie. Ak 
budete mat unsigned a flag na pricitanie alebo odcitanie budete tam mat 
jednu scitacku a jednu odcitacku co je na logiku ovela narocnejsie ako 
jeden bit.
b.



On 30/12/2013 19:11, hw na itherm.cz wrote:
> Dekuji to je celkem vtipny postup. A asi jej budu pouzivat. Napriklad u
> citacu mam stejne prednastavne do kolika pocita takze z teto hodnoty se mi
> muzou rovnou generovat deklarace.
>
> Jinak s tim signed, asi se na to vykaslu a udelam vse unsigned, jedna se o
> dve mista kde se musi pocitat smer pri integraci a bude mozna rychlejsi si
> udelat bit pro smer a pak to pricitat/odecitat
> Nebutu tak muset premyslet nad tim co je signed a co ne.
>
> Presto ale dekuju za rady a tipy.
>
> Pavel
>
>
> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of David
> Belohrad
> Sent: 30. prosince 2013 19:03
> To: HW-news
> Subject: Re: Spartan-3A a AN -signed/unsigned matematika
>
>
> Jenom tak na okraj. Pouzivam tuhle funkci:
>
>      function bits_to_fit (N : natural) return natural is
>          variable vIntermediatexD : natural;
>          variable vBitCountxD     : natural;
>      begin
>          vIntermediatexD := N;
>          vBitCountxD     := 0;
>          loop
>              exit when vIntermediatexD = 0;
>              vIntermediatexD := vIntermediatexD / 2;
>              vBitCountxD     := vBitCountxD + 1;
>          end loop;
>
>          if vBitCountxD = 0 then
>              return 1;
>          end if;
>
>          return vBitCountxD;
>      end;
>
>
> Date tomu cislo, a ono vam to vypocita, kolik potrebujete bitu. Priklad napr
> deklarace entity (za predpokladu, ze funkce je nekde v package a je
> zadeklarovana use blabla.blablabl.all;)
>
>
> entity calcme is
>
>      generic (MAX_NUMBER : natural := 293);
>
>      port (ClkxC     : in  std_logic;
>            ResetxRNA : in  std_logic;
>            DxD       : in  unsigned(bits_to_fit(MAX_NUMBER)-1 downto 0)
>            QxD       : out unsigned(bits_to_fit (MAX_NUMBER) - 1 downto 0));
>
> end entity calcme;
>
>
> Pak se nemusite starat o to, kolik bitu na co potrebujete. Funkce funguje
> jenom pro unsigned, ale nebyl by problem ji modifikovat napr tak, aby pri
> zapornem cisle davala pocet bitu pro signed
>
> .d.
>
>
>
>
>
>
> "balu na home" <balu na k-net.fr> writes:
>
>> 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
>>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> "balu na home" <balu na k-net.fr> writes:
>
>> 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_c
> onversions.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
>>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


Další informace o konferenci Hw-list