|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
trot Član
Pridružen-a: Čet 18 Jan 2007 20:25 Prispevkov: 1270 Aktiv.: 6.04 Kraj: glej fogl
|
Objavljeno: Čet Okt 27, 2011 8:13 am Naslov sporočila: vhdl - osnove |
|
|
Gledam eno kodo, kjer so vhodi in izhodi definirani kot
PORT (
a : IN std_logic_vector(31 DOWNTO 4);
Ima ta (31 DOWNTO 4) kakšno funkcijo, ali je to isto kot std_logic_vector(27 DOWNTO 0)? _________________ lp, Klemen |
|
Nazaj na vrh |
|
|
GopherB Član
Pridružen-a: Čet 10 Mar 2011 11:44 Prispevkov: 90 Aktiv.: 0.56 Kraj: Lj
|
Objavljeno: Čet Okt 27, 2011 8:42 am Naslov sporočila: |
|
|
Efekt je enak. |
|
Nazaj na vrh |
|
|
David2204 Član
Pridružen-a: Pon 03 Nov 2008 0:01 Prispevkov: 997 Aktiv.: 5.29 Kraj: Ljubljana - Nova Gorica
|
Objavljeno: Čet Okt 27, 2011 4:09 pm Naslov sporočila: |
|
|
Manjka ti še en zaklepaj tam. |
|
Nazaj na vrh |
|
|
trot Član
Pridružen-a: Čet 18 Jan 2007 20:25 Prispevkov: 1270 Aktiv.: 6.04 Kraj: glej fogl
|
Objavljeno: Čet Nov 03, 2011 9:38 am Naslov sporočila: |
|
|
Bom kar tukaj nadaljeval... še nekaj mi ni jasno, zakaj mi tole javi napako:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
signal izbor : std_logic_vector(1 downto 0);
case izboris
when "00" => blabla1;
when "01" => blabla2;
when 2 => blabla3;
when 3 => blabla4;
end case;
ERROR:HDLParsers:800 - Type of izbor is incompatible with type of 2.
ERROR:HDLParsers:800 - Type of izbor is incompatible with type of 3.
Če enako naredim z if stavki, pa ni problem, ali ta signal primerjam npr z "00" ali 0. _________________ lp, Klemen |
|
Nazaj na vrh |
|
|
GopherB Član
Pridružen-a: Čet 10 Mar 2011 11:44 Prispevkov: 90 Aktiv.: 0.56 Kraj: Lj
|
Objavljeno: Čet Nov 03, 2011 1:33 pm Naslov sporočila: |
|
|
Citiram: |
when "00" => blabla1;
when "01" => blabla2;
when 2 => blabla3;
when 3 => blabla4;
|
da lahko pises v hex = x"0~F", moras prej popravit Izbor :
signal IZBOR : std_logic_vector(3 downto 0);
...
when "0000" => blabla1;
when "0001" => blabla2;
when x"2" => blabla3;
when x"3" => blabla4;
v izogib zmedi priporocam:
signal IZBOR : std_logic_vector(1 downto 0);
...
when "00" => blabla1;
when "01" => blabla2;
when "10" => blabla3;
when "11" => blabla4;
ali
signal IZBOR : std_logic_vector(3 downto 0);
...
when x"0" => blabla1;
when x"1" => blabla2;
when x"2" => blabla3;
when x"3" => blabla4;
Citiram: |
Če enako naredim z if stavki, pa ni problem, ali ta signal primerjam npr z "00" ali 0. |
Mi je pa zanimivo, da ti debugger prebavi tole... Si zadevo poskusil tudi skompajlat? Pa Multisim (ali kaj je ze tisti embedded simulator) ti normalno prebere primerjanje z 0?
Jaz bi se tega izogibal in bi uporabljal '0' ali "00" ali x"0", tudi ce ti nic ne zajamra. |
|
Nazaj na vrh |
|
|
chaos Član
Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.96 Kraj: Zagorje ob Savi
|
Objavljeno: Čet Nov 03, 2011 1:54 pm Naslov sporočila: |
|
|
gopherB : ta VHDL je res cuden - a zato da lahko uporabljas desetiski zapis, moras porabiti stiri bite, ceprav bi rad uporabljal vrednosti le do 3?? Kaj pa naredi z ostalimi stanji? Sicer ne poznam prevec dobro VHDL-ja, a v verilogu bi s taksnim stavkom (niso definirana vsa stanja in manjka default) dobil latch.
LP! |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Čet Nov 03, 2011 2:07 pm Naslov sporočila: |
|
|
chaos je napisal/a: |
gopherB : ta VHDL je res cuden - a zato da lahko uporabljas desetiski zapis, moras porabiti stiri bite, ceprav bi rad uporabljal vrednosti le do 3?? |
Če uporabljaš desetiški zapis, je vendar samo po sebi umevno, da so zanj potrebni 4 biti. Kako pa naj zadeva ve, da bi rad štel samo do 3 ?
Če veš, da bo šlo samo do 3, uporabiš dvobiten std_logic_vector(1 downto 0).
chaos je napisal/a: |
Kaj pa naredi z ostalimi stanji? Sicer ne poznam prevec dobro VHDL-ja, a v verilogu bi s taksnim stavkom (niso definirana vsa stanja in manjka default) dobil latch. |
Kolikor se spominjam (cca 10 let), obstaja rezervirana beseda "other" ali "others" za vsa ostala stanja. Malo poglej Help.
when "000" => blabla1;
when "001" => blabla2;
;recimo, da 010 izpustimo
when "011" => blabla4;
when "100" => blabla5;
when "other" => blabla6; To velja za vsa stanja (010, 101, 110, 111), ki niso izrecno definirana pri naštevanju. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
chaos Član
Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.96 Kraj: Zagorje ob Savi
|
Objavljeno: Čet Nov 03, 2011 2:17 pm Naslov sporočila: |
|
|
igo: ni samo po sebi umevno, to je bil moj point. V verilogu preprosto reces 2'd3 - 2 bita, desetiska stevilka 3. Sicer pa po tvoji logiki tudi stirje biti niso dovolj - kako bos zapisal devet (9)? Kvecjemu bi bilo to res za sestnajstiski zapis.
LP! |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Čet Nov 03, 2011 2:28 pm Naslov sporočila: |
|
|
chaos je napisal/a: |
igo: ni samo po sebi umevno, to je bil moj point. V verilogu preprosto reces 2'd3 - 2 bita, desetiska stevilka 3. |
To je šminka od prevajalnika. Zadaj ti definira vektor (1 downto 0), pri VHDL ga pa pač moraš sam.
chaos je napisal/a: |
Sicer pa po tvoji logiki tudi stirje biti niso dovolj - kako bos zapisal devet (9)? Kvecjemu bi bilo to res za sestnajstiski zapis. |
Verjetno si mislil, da 3 biti niso dovolj (111= 7).
9 = 1001, torej 4 biti.
Še vedno poglej "other". Verjetno ima podoben bonbonček tudi Verilog.
DODANO: Aha, to je verjetno tisti "default", ki si ga omenil zgoraj. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
aly Član
Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 42.19 Kraj: Kranj - struževo
|
Objavljeno: Čet Nov 03, 2011 8:32 pm Naslov sporočila: |
|
|
VHDL compiler ima zelo močno optimizacijo.
Če določen vektor nikoli ne pride do števila večjega od 3 in tudi ni možnosti da bi kakšna večja številka kdaj prišla gor, bo neaktivne DFFje in povezave enostavno pobrisal stran.
Zaradi tega se včasih zgodi, da se kak projekt lepo skompajla ampak za hudiča nikakor ne dela. Takrat se splača detajlno branje reporta od prevajanja - dostikrat najdeš da ti je pomembne signale enostavno pobrisal - zaradi neke majhne napake v programu. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding |
|
Nazaj na vrh |
|
|
trot Član
Pridružen-a: Čet 18 Jan 2007 20:25 Prispevkov: 1270 Aktiv.: 6.04 Kraj: glej fogl
|
Objavljeno: Pet Nov 04, 2011 3:28 pm Naslov sporočila: |
|
|
Ampak še vedno ne vidim logike. Tole (spodaj) je kot vem identično case stavku, pa ne javi nobene napake. A ni to bolj podobno hrošču?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
signal izbor : std_logic_vector(1 downto 0);
if izbor = 0 then blabla0;
elseif izbor = 1 then blabla1;
elseif izbor = 2 then blabla2;
elseif izbor = 3 then blabla3;
end if; _________________ lp, Klemen |
|
Nazaj na vrh |
|
|
aly Član
Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 42.19 Kraj: Kranj - struževo
|
Objavljeno: Pet Nov 04, 2011 10:43 pm Naslov sporočila: |
|
|
Škoda se ustavljati na takih podrobnostih. Uporabiš tisto opcijo ki zanesljivo dela _________________ I'm going to stand outside, so if anyone asks, I'm outstanding |
|
Nazaj na vrh |
|
|
trot Član
Pridružen-a: Čet 18 Jan 2007 20:25 Prispevkov: 1270 Aktiv.: 6.04 Kraj: glej fogl
|
Objavljeno: Sob Nov 05, 2011 11:57 am Naslov sporočila: |
|
|
Problem je, da sem hotel naredit en generic modul, kjer se dolžina vektorja "izbor" lahko spreminja. V tem primeru (z desetiškimi vrednostmi) mi potem ne bi bilo treba ročno popravljati dolžine zapisa. _________________ lp, Klemen |
|
Nazaj na vrh |
|
|
davide Član
Pridružen-a: Pet 10 Sep 2010 16:45 Prispevkov: 149 Aktiv.: 0.90 Kraj: Savinjska
|
Objavljeno: Pon Mar 05, 2012 6:08 pm Naslov sporočila: |
|
|
čisto osnovno vprašanje, kako napisati kodo v vhdl-u ali v verilogu za zaznavanje pozitivne fronte pritisnjene tipke, kjer ob pritisku na tipko npr. zažene števec, ko pride števec npr. do določene vrednosti se vse ustavi in spet čakamo na ponovni pritisk tipke?? |
|
Nazaj na vrh |
|
|
Dorijan Član
Pridružen-a: Ned 22 Jun 2008 10:48 Prispevkov: 2481 Aktiv.: 12.86 Kraj: južnoprimorska
|
Objavljeno: Pon Mar 05, 2012 8:20 pm Naslov sporočila: |
|
|
Koda: |
Key: process(TIPKA)
begin
if rising_edge(TIPKA) then
--koda
end if;
end process; |
_________________ Če nekaj deluje, razstavi in ugotovi zakaj. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 76 dni
Powered by phpBB © 2001, 2005 phpBB Group
|