Tento zápis znamená: do signálu O přiřaď signál I1, pokud je hodnota signálu A '0', jinak do signálu A přiřaď signál I2.
Jediný výstupní signál je O, takže by mělo být: "jinak do signálu O přiřaď signál I2."
Zdravim,
zjimavy clanek, ale nekde na konci by neskodil navod nebo info o tom zda a jak se podarilo rozchodit tyto softy pod Wine. Sam jsem to zkousel a docela se zadarilo. Ale jeste jsem nenasel nejakou vec co bych v tom zkusil.
26.7.2005 11:07
finn | skóre: 43
| blog: finnlandia
| 49° 44´/13° 22´
RozbalitRozbalit vše
Re: Dobre, ale jak si ty softy pustim pod linuxem ?
Wine pro simulaci není třeba, existuje VHDL Simili (komerční, ale zdarma), FreeHDL (už dlouho jsem nezkoušel) a ještě jsem někde viděl další program, ale nevzpomenu si na jméno…
Užívej dne – možná je tvůj poslední.
26.7.2005 11:47
megi | skóre: 11
| blog: RozbalitRozbalit vše
Re: Dobre, ale jak si ty softy pustim pod linuxem ?
Moje znalosti numerickych metod jsou praktricky nulove, proto bych se rad zeptal, jakym algoritmem je simulovan logicky obvod?
V realnem svete ma kazdy prvek urcite spozdeni, takze se signal "siri" do obvodu postupne.
Jak probiha takova simulace rekurzivniho obvodu, kde vystup je zapojen na jeden ze vstupu?
Simulace probíhá po malých časových intervalech, takže rekurzivní obvod není problém, prostě je na počátku vstup i výstup nule, za nějaký časový interval už je na vstupu signál, ale na výstupu se ještě neobjevil, za další čas už tam nějaký signál je, ale ještě se nepromítne do vstupu, ... a po určitém počtu iterací máme výsledek.
When your hammer is C++, everything begins to look like a thumb.
V praxi se pouzivaji dva druhy simulaci - funkcni a casova. U funkcni simulace se predpoklada zpozdeni logickych clenu nulove, simulator reaguje pouze pri zmene signalu v tzv. sensitivity listu procesu (bude v pristim dilu). Tato simulace je oproti casove simulaci velmi rychla.
Casova simulace uvazuje zpozdeni clenu realneho obvodu. Je podstatne pomalejsi nez funkcni simulace.
V clanku budeme uvazovat pouze funkcni simulaci, pro jednoduchost.
Co se tyce zpetne vazby - u casove simulace bylo zodpovezeno v prispevku prede mnou, u funkcni myslim zalezi na simulatoru, napr. ModelSim bude zpetnou vazbu ignorovat. Moc o tom ale nema smysl uvazovat, ve spravne napsanem sekvencnim designu (o nem take budeme hovorit priste ) nemaji zpetne vazby v logice co delat - v kazde zpetne vazbe musi byt v ceste registr.
x(k+1)=A.x(k)+B.y(k) kde x je stavovy vektor, A a B jsou matice a y je vstupni vektor. A tahle rovnice se resi mockrat od toho mame pocitace. Jak proste >:)
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
Dobry den,
som zaciatocnik vo VHDL a mam skor taky mensi problem s Modelsimom. Napriklad ked som isiel simulovat jednoduchy obvod XOR, dal som simulovat a vsade mi kreslilo iba same ciary. to iste pri scitacke. neviem kde robim chybu, ktoru entitu mam dat simulovat, resp. co mam nastavit? skusil som uz vsetky mozne aj nemozne moznosti.
-- deklarácia entity (entity declaration)
entity Obvod_XOR is
port (In1:in Bit; In2:in Bit;
Out1:out Bit);
end Obvod_XOR;
-- telo architektúry (architecture body)
architecture Spravanie_P of Obvod_XOR is
begin
Out1 <= In1 xor In2;
end Spravanie_P;
-- telo architektúry (architecture body)
architecture Spravanie_Q of Obvod_XOR is
signal Internal1, Internal2: Bit;
begin
Internal1 <= In1 and In2;
Internal2 <= not(In1) and not(In2);
Out1 <= not (Internal1 or Internal2);
end Spravanie_Q;
-- návrhová entita podsystému Stage_1
entity Stage_1 is
port ( In1:in Bit; In2:in Bit;
Out1:out Bit; Out2:out Bit );
end Stage_1;
architecture Spravanie of Stage_1 is
begin
Out1 <= In1 and In2;
Out2 <= not(In1) and not(In2);
end Spravanie;
-- návrhová entita podsystému Stage_2
entity Stage_2 is
port ( In1:in Bit; In2:in Bit;
Out1:out Bit );
end Stage_2;
architecture Spravanie of Stage_2 is
begin
Out1 <= not (In1 or In2);
end Spravanie;
-- telo architektúry - struktura diskrétneho systému Q
architecture Struktura_Q of Obvod_XOR is
--deklarácia vnútorných signálov
signal Internal1, Internal2: Bit;
--lokálna deklarácia komponentov
component Stage_1
port ( In1:in Bit; In2:in Bit;
Out1:out Bit; Out2:out Bit );
end component;
component Stage_2
port (In1:Bit; In2:Bit; Out1:out Bit);
end component;
begin
--príkazy vytvorenia inštancií komponentov
S1:Stage_1
port map ( In1=>In1, In2=>In2, Out1=>Internal1, Out2=>Internal2 );
S2:Stage_2
port map ( In2=>Internal1, In1=>Internal2, Out1=>Out1 );
end Struktura_Q;
entity TESTBNCH is
end TESTBNCH;
architecture stimulus of TESTBNCH is
component Obvod_XOR is
port ( in1 : in BIT; -- in1
in2 : in BIT; -- in2
out1 : out BIT);
end component;
for DUT: Obvod_XOR use entity Work.Obvod_XOR(Spravanie_Q);
--for DUT: Obvod_XOR use entity Work.Obvod_XOR(Spravanie_P);
--for DUT: Obvod_XOR use entity Work.Obvod_XOR(Struktura_Q);
signal in1, in2, out1: BIT :='0';
begin
DUT: Obvod_XOR port map (in1, in2, out1);
STIMULUS1: in1 <= '1' after 5 ns, '0' after 20 ns;
STIMULUS2: in2 <= '1' after 15 ns, '0' after 30 ns;
end stimulus;
Dakujem.
Dobry den,
zrejmou chybu v kodu nevidim, spis jsou zde veci ktere bych napsal jinak. Prikladam proto na konec komentare jednoduchy kod jak bych napsal XOR ja, spolu s TB. Zkousel jsem ho simulovat v ModelSimu a funguje.
- misto typu bit bych pouzival std_logic_vector, vice to odpovida realnemu obvodu
- v TB jsem pouzil pro testovaci vektory proces
- musite dat simulovat vzdy TestBench
- to co pripojuji by melo byt ve dvou souborech - napr. xor.vhd a tb.vhd. Oba soubory musi byt v projektu ModelSimu a zkompilovane (tzn. v knihovne work se musi objevit entity xor_ent a tb)
- pokud by byly nejake problemy, muzete mi napsat rovnou na pizi(at)centrum.cz
preji peknou nedeli
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
ENTITY xor_ent IS
PORT (
I1, I2: in std_logic;
O: out std_logic
);
END xor_ent;
ARCHITECTURE structural OF xor_ent IS
BEGIN
O <= I1 xor I2;
END structural;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity TB is
end TB;
architecture behavior of TB is
component xor_ent
PORT (
I1, I2: in std_logic;
O: out std_logic
);
END component;
signal i1, i2, o: std_logic;
begin
xor_1: xor_ent port map (I1 => i1, I2 => i2, O => o);
p_1: process is
begin
I1 <= '1'; I2 <= '1'; wait for 10 ns;
I1 <= '0'; I2 <= '1'; wait for 10 ns;
I1 <= '1'; I2 <= '0'; wait for 10 ns;
I1 <= '0'; I2 <= '0'; wait for 10 ns;
end process;
end behavior;
Tak jsem zkusil ModelSim pod win a narazil jsem na jeden problém. Když postupuji podle návodu, neprovede se mi kompilace. Když před kompilací projekt zavřu a pro kompilaci ho pak znovu otevřu, je vše v pořádku. Tušíte co asi dělám špatně?
Chtelo by to podrobnejsi popis. Hlavne vysvetlit co znamena "neprovede se kompilace". Takhle me napadaji tyhle veci:
- pred kompilaci je treba soubory ulozit na disk
- pokud mate spustenou simulaci a neco zmenite ve VHDL kodu, musite minimalne zkompilovat zmenene soubory a restartovat simulaci.
Před kompilací soubory na disk ukládám. V hlavním menu však vše co se týká kompilace zůstává neaktivní, ale pravé tlačítko v prostoru Workspace Compile -> Compile All aktivní je. Jeho spuštěním se však nic nestane (nedojde ke kompilaci do knihovny Work). Když ModelSim zavřu a znovu otevřu, mám již Compile v hlavním menu aktivní a dál je vše OK.
Tak tohle je zajimave, me to funguje normalne. Obcas se mi stane ze chvili trva nez se v knihovne work neco objevi, ale obvykle staci max. minutku pockat, trosku poklikat mysi a je to.
Videl bych to nejspis jako problem nejake verze ModelSimu, ja pouzivam asi trosku starsi. Ale moc bych si s tim hlavu nedelal - jestli to spravne chapu, znamena to pouze jednou vystoupit a nastoupit pri vytvareni projetku.
Pokud byste chtel patrat po pricine, asi bych se podival primo do adresare Work, jestli se tam objevuji adresare kompilovanych entit.
Take je moznost se na graficke prostredi ModelSimu vykaslat, a pouzivat z prikazove radky prikazy vcom (zkompiluje dany soubor, obvykle pozivam parametry -93 -explicit), vmake >Makefile (pokud chcete, vytvori se Vam automaticky makefile pro zkompilovane soubory) a vdel (smaze entitu z knihovny work).
Tohle všechno si vyzkouším a když bude nejhůř, snesu trochu nepohodlí. V každém případě dík za radu. Mám však otázku i když odpověď nečekám. Pořád je velký skok od těchto základů k tomu co je ve věci VHDL na internetu nebo ve skriptech Doc.Ing.Koloucha. Nedal by se udělat nějaký meziskok v podobě návazného seriálu?
Pokud myslite to ovladani z prikazove radky, nerikal bych tomu nepohodli - naopak muzete napr. velmi jednoduse kompilovat primo z oblibeneho editoru.
Co se tyce navazneho serialu, nejsem si moc jisty. Premyslim o tom, ale nevim jake bych zvolil tema, aby bylo zajimave pro vetsi okruh ctenaru. Napr. pokud by se melo jit vic do hloubky, uz by to chtelo i zadavat ukoly, ktere si kazdy zkusi napsat a odsimulovat. V kazdem pripade napady a nazory na toto tema jen uvitam.
Tím nepohodlím myslím zavřít-otevřít (nepodařilo se mi ten nedostatek odstranit). Nápad na další pokračování bych měl. Víc rozebrat syntézu. Šlo by to?
Synteza by bylo urcite pekne tema. Je jen otazka jak ho udelat zajimave pro sirsi okruh ctenaru. Navic ted zjistuji ze mam cim dal tim min casu, coz je patrne i z reakcni doby na prispevek :), takze bohuzel myslenku na pokracovani musim odlozit na neurcito.