abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Navštivte Abc obchůdek se samolepkami a přívěsky!
Rozšířené hledání
×
dnes 06:11 | Komerce
Rozrůstající se softwarová společnost v Plzni zabývající se telematikou hledá schopné vývojáře a nadšence se zájmem o OS Linux. Uplatnění zde najdou především vývojáři C++ se znalostí OS Linuxu, dále programátoři v jazyku Java nebo vývojáři se zkušenostmi s Oracle DB a Oracle ADF. Více informací o společnosti. … více »
Reklama | Komentářů: 0
24.5. 22:45 | IT novinky
NASA, která společně s Rackspace stála u zrodu projektu OpenStack, se již nadále nebude podílet na dalším vývoji této "infrastructure-as-a-service" platformy. V NASA totiž došli k závěru, že vzhledem k podpoře OpenStacku ze strany společností jako Red Hat, AT&T a HP lze jejich práci považovat za dokončenou. Posléze se NASA plánuje stáhnout i z vývoje další platformy pro cloud computing jménem Nebula.
Migilenik | Komentářů: 0
24.5. 22:45 | Upozornění
Blíží se svátek IPv6 a s ním i konference IPv6 Day. Na návštěvníky této akce čeká nejen bohatý program, ale také jedna speciální nabídka – v průběhu setkání bude možné získat se slevou 66 procent třetí vydání knihy IPv6 vysokoškolského pedagoga a publicisty Pavla Satrapy, tedy za 105 korun. … více »
Vilem Sladek | Komentářů: 4
24.5. 16:14 | Pozvánky

Přijďte si zasprintovat na Djangu, jiném Python open-source projektu, nebo jen potkat ostatní vývojáře!

… více »
Whit | Komentářů: 0
24.5. 10:20 | Nová verze
Na zrcadlech a torrentech jsou již k dispozici ISO obrazy distribuce Mageia 2. Poznámky k vydání čtěte zde.
Liborek | Komentářů: 14
23.5. 13:47 | Pozvánky

Letos v říjnu se v Praze uskuteční hned několik konferencí. Odehraje se zde nově vzniklá konference LinuxDays. K ní se přidá čtvrtý ročník openSUSE Conference, dvanáctý ročník SUSE Labs conference a aby to nebylo málo, přidá se i první ročník Gentoo miniconf. A to vše ve stejné dny a na stejném místě.

… více »
Miška | Komentářů: 7
23.5. 13:27 | Zajímavý projekt
Printerd je název nového projektu tiskového démona, který bude využívat PolicyKit a D-Bus. Projekt je zatím na úplném začátku, takže nejde o nic vhodného k produkčnímu nasazení. Mimo jiné aktuálně akceptuje jako vstup jen PDF dokumenty.
Luboš Doležel (Doli) | Komentářů: 56
23.5. 13:25 | Zajímavý software
Tři vývojáři ze společnosti Engine Yard přecházejí po dohodě mezi firmami do Red Hatu. Jde o vývojáře zabývající se rozvojem projektu JRuby. To ukazuje, že Red Hat má zájem o podporu alternativních jazyků nad OpenJDK.
Luboš Doležel (Doli) | Komentářů: 1
23.5. 13:20 | Zajímavý software
Fedora přejde na knihovnu libusbx, což je fork původní knihovny libusb. Důvodem pro fork byl zjevný nedostatek času nebo zájmu ze strany správce projektu. libusbx už teď nabízí užitečné funkce navrch.
Luboš Doležel (Doli) | Komentářů: 4
23.5. 10:29 | Nová verze
Vyšlo LLVM 3.1. Vylepšení se dotýkají podpory C++ 11 nebo architektur ARM a MIPS. Dále se můžete těšit z Python bindings nebo nástroje AddressSanitizer pro detekci chyb při práci s pamětí.
Luboš Doležel (Doli) | Komentářů: 0
Pokud by se prohlížeč Opera stal svobodným:
 (9%)
 (32%)
 (1%)
 (58%)
Celkem 247 hlasů
 Komentářů: 31, poslední včera 22:38
    Rozcestník
    Reklama
    Autoškola testy online Levný benzín

    Jak se píše procesor - 3 (Procesy)

    26. 8. 2005 | Luděk Crha | Programování | 6377×

    Minule jsme navrhli jednoduchou ALU a ukázali si, jak ji odsimulovat. Dnešní článek bude o procesech.

    Prozatím lze všechny příkazy, které jsme si ukazovali, zařadit mezi tzv. souběžné příkazy - všechny se provádí najednou bez ohledu na pořadí. V obvodové realizaci to ukazuje na paralelní obvody. Pomocí procesu můžeme použít příkazy sekvenční, kde naopak pořadí příkazů hraje důležitou roli. Proces sám o sobě je jeden souběžný příkaz.

    Sekvenční zpracování příkazů v procesu se řídí následujícími pravidly:

    1. Pokud jednomu signálu přiřazujeme různé hodnoty, předchozí příkazy jsou přepsány posledním z nich.
    2. Pokud signál využíváme jako vstup i výstup, jeho hodnota se mění až po ukončení procesu

    Proces můžeme také chápat jako myšlenkovou přípravu na vytvoření signálů. Nejlepší bude ukázat si činnost procesu na příkladu. Předpokládejme dvě různé architektury k entitě example_1 (deklaraci entity neuvádím), která má pouze jeden výstupní signál O:

    ARCHITECTURE arch_1 OF example_1 IS
    BEGIN
       O <= '1';
       O <= '0';
    END arch_1;
    ARCHITECTURE arch_2 OF example_1 IS
    BEGIN
       p_1: process 
       begin
          O <= '1';
          O <= '0';
       end process;
    END arch_2;

    V prvním případě se snažíme do výstupního signálu O napojit současně dvě hodnoty - log. '1' a log. '0'. To by mohlo mít v reálném obvodu katastrofální následky. Pokud například uvažujeme logiku, kde log. '1' znamená připojení na +5V a log. '0' připojení na zem, zapisujeme tímto kódem zkrat. Ve druhém případě se ale příkazy zpracovávají sekvenčně. Druhý přiřazovací příkaz "přebije" první a na výstupu O bude '0';

    V procesu není možné použít souběžný příkaz when, místo něj můžeme aplikovat sekvenční příkaz if. Uvažujme příklad z minulého dílu, kde jsme vytvořili multiplexor pomocí příkazu

    O <= I1 when A = '0' else I2

    V procesu by vypadal zápis tohoto multiplexoru následovně:

    p_1: process (I1, I2, A)
    begin
       if A = '0' then
          O <= I1;
       else
          O <= I2;
       end if;
    end process;

    mux

    Zaměřme se nyní více na syntaxi procesu. Před klíčovým slovem process je návěští, v našem případě p_1. To je důležité pro případnou identifikaci procesu v průběhu simulace nebo syntézy. Za klíčovým slovem process je tzv. sensitivity list. V něm říkáme simulátoru, kdy má proces spustit a obnovit hodnoty výstupních signálů. Tento výpočet provede simulátor právě při změně libovolného signálu obsaženého v sensitivity listu. V praxi to znamená, že do sensitivity listu je třeba zapsat všechny signály, které do procesu vstupují. V našem případě jsou to signály I1, I2 a A.

    Vezměme nyní následující proces:

    p_1: process (I1, I2, A)
    begin
       O <= I2;
       if A = '0' then
          O <= I1;
       end if;
    end process;

    Tento zápis je zcela identický s předchozím procesem. Nejdříve do výstupního signálu O přiřazujeme signál I2, ale v případě, že je hodnota signálu A '0', dostane se ke slovu přiřazovací příkaz O <= I1. Výsledek je tedy opět stejný multiplexor.

    Jak psát design

    Nyní uděláme malou odbočku k tomu, jakým způsobem psát design. Budeme hovořit o synchronním designu, tzn. v obvodu se vyskytuje jediný hodinový signál clk. Dnešním standardem je jasně rozdělit design na registry (paměťové prvky, realizovatelné např. klopným obvodem D) a kombinační logiku (prvky AND, OR, NOT...) bez cyklů. Registry jsou všechny taktovány na stejnou (např. náběžnou) hranu clk. V okamžiku této náběžné hrany se přepíše signál ze vstupu registru na výstup. Následuje cesta signálu přes kombinační logiku, než dorazí na vstup dalšího registru. Jakmile všechny signály projdou přes logiku a ustálí se, může přijít další náběžná hrana hodin a celý proces se opakuje.

    reg_log

    Z toho vyplývá i maximální frekvence hodin. Jejich perioda musí být minimálně taková, aby se signál ustálil i na nejdelší cestě v celém obvodu. Pokud tedy taktujeme např. procesor na 1600 MHz, znamená to, že nejdelší cestou (mezi dvěma registry spojenými pouze logikou) v jeho designu projde signál za méně než 0,625 nanosekundy.

    Podívejme se nyní na následující proces:

    p_1: process (I1, I2, A)
    begin
       if A = '0' then
          O <= I1;
       end if;
    end process;

    Pokud má signál A hodnotu '0', bude na výstupu I1. Co ale když bude A '1'? To potom znamená zachovat na výstupu aktuální hodnotu. A zde se dostáváme k jádru problému. K zachování hodnoty potřebujeme paměťový prvek. V tomto konkrétním případě bude tvořen zpětnou vazbou, např. takto:

    latch

    A právě tato zpětná vazba (latch) není přípustná. Proč je vlastně zpětná vazba v logice problém? Např. může zmást syntezátor při počítání délky cesty v obvodu. Obvod potom může fungovat, ale také nemusí (což většinou nastane v nejméně vhodnou dobu).

    Jaký z toho plyne závěr? V příkazu if (pokud proces netvoří registr, ukážeme si příště) je třeba vždy pokrýt všechny stavy vstupních signálů pro výstupní signály. Jinými slovy, každý výstupní signál musí mít jasně definovanou hodnotu pouze v závislosti na vstupních signálech. Podobný problém může nastat i u souběžného signálu when - tam je také vhodné vždy uvádět klauzuli else.

           

    Hodnocení: 92 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    26.8.2005 08:43 Robert
    Rozbalit Rozbalit vše Obrazky
    Nemate neco s obrazkama, 1. a 3. nelze zobrazit (FF ani IE)?
    26.8.2005 09:21 Robert Krátký | skóre: 94 | blog: Robertův bloček | Praha
    Rozbalit Rozbalit vše Re: Obrazky
    Mohl bys prosím upřesnit, co znamená "nelze zobrazit"? Právě jsem vyzkoušel jak FF, tak IE a v obou to bylo bez problému... Co se stane, když zkusíš zobrazit tohle: http://www.abclinuxu.cz/images/clanky/crha/vhdl3-latch.png?
    29.8.2005 09:37 Robert
    Rozbalit Rozbalit vše Re: Obrazky
    No prave ze se nezobrazi nic. Je to divny. Prostredni obrazek bez problemu, misto 1. a 3. prazdne ramecky.
    29.8.2005 10:04 Robert Krátký | skóre: 94 | blog: Robertův bloček | Praha
    Rozbalit Rozbalit vše Re: Obrazky
    No, a ten uváděný odkaz také nezobrazí nic?
    30.8.2005 08:17 Robert
    Rozbalit Rozbalit vše Re: Obrazky
    Vubec nic. Je divne ze jeden obrazek je v poradku a dalsi 2 se nezobrazi.

    Založit nové vláknoNahoru

    ISSN 1214-1267   Powered by Hosting 90 Server hosting
    © 1999-2012 Argonit s. r. o. Všechna práva vyhrazena.