abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 19:33 | Nová verze

    Byla vydána verze 1.78.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání na GitHubu. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    dnes 11:22 | Bezpečnostní upozornění

    Služba Dropbox Sign (původně HelloSign) pro elektronické podepisování smluv byla hacknuta.

    Ladislav Hagara | Komentářů: 2
    dnes 11:00 | Nová verze

    Byla vydána nová major verze 8.0 textového editoru GNU nano (Wikipedie). Podrobný přehled novinek a oprav v oznámení v diskusním listu info-nano nebo v souboru ChangeLog na Savannah. Volbou --modernbindings (-/) lze povolit "moderní" klávesové zkratky: ^C kopírování, ^V vložení, ^Z vrácení zpět, … Tato volba je aktivována také pokud binárka s nano nebo link na ni začíná písmenem "e".

    Ladislav Hagara | Komentářů: 3
    včera 23:22 | IT novinky

    Před 60 lety, 1. května 1964, byl představen programovací jazyk BASIC (Beginners' All-purpose Symbolic Instruction Code).

    Ladislav Hagara | Komentářů: 8
    včera 22:22 | Nová verze

    Byla vydána nová verze 12.0 minimalistické linuxové distribuce (JeOS, Just enough Operating System) pro Kodi (dříve XBMC) a multimediálního centra LibreELEC (Libre Embedded Linux Entertainment Center). Jedná se o fork linuxové distribuce OpenELEC (Open Embedded Linux Entertainment Center). LibreELEC 12.0 přichází s Kodi 21.0 "Omega".

    Ladislav Hagara | Komentářů: 0
    včera 12:55 | Nová verze

    Microsoft vydal novou velkou aktualizaci 2404.23 v září 2019 pod licencí SIL Open Font License (OFL) zveřejněné rodiny písma Cascadia Code pro zobrazování textu v emulátorech terminálu a vývojových prostředích.

    Ladislav Hagara | Komentářů: 0
    včera 05:33 | Nová verze

    OpenTofu, tj. svobodný a otevřený fork Terraformu vzniknuvší jako reakce na přelicencování Terraformu z MPL na BSL (Business Source License) společností HashiCorp, bylo vydáno ve verzi 1.7.0. Přehled novinek v aktualizované dokumentaci. Vypíchnout lze State encryption.

    Ladislav Hagara | Komentářů: 0
    30.4. 23:55 | Humor

    Spouštět webový prohlížeč jenom kvůli nákupu kávy? Nestačí ssh? Stačí: ssh terminal.shop (𝕏).

    Ladislav Hagara | Komentářů: 14
    30.4. 18:11 | Nová verze

    Yocto Project byl vydán ve verzi 5.0. Její kódové jméno je Scarthgap. Yocto Project usnadňuje vývoj vestavěných (embedded) linuxových systémů na míru konkrétním zařízením. Cílem projektu je nabídnou vývojářům vše potřebné. Jedná se o projekt Linux Foundation.

    Ladislav Hagara | Komentářů: 0
    30.4. 17:56 | Nová verze

    Operační systém 9front, fork operačního systému Plan 9, byl vydán v nové verzi "do not install" (pdf). Více o 9front v FQA.

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (14%)
     (29%)
     (43%)
     (14%)
    Celkem 14 hlasů
     Komentářů: 3, poslední dnes 19:48
    Rozcestník

    Programovatelná logika VII: Jazyky pro popis log. obvodů

    10.12.2014 08:16 | Přečteno: 1526× | Výběrový blog

    V tomto pokračování seriálu o programovatelné logice si velmi lehce představíme nejdůležitější jazyky pro popis hardwaru a verifikaci logických systémů. Případný zájemce o předchozí díly se musí na začátek postupně proklikat z minulé kapitoly.

    5 Jazyky pro popis a simulaci logických obvodů

    Přirozeným popisem logických obvodů vycházejícím z historie je schéma zapojení. Takovýto popis neposkytuje příliš vysokou úroveň abstrakce a pro dnešní integrované obvody nebo rozsáhlé návrhy FPGA by byl takový funkční popis obrovský a velmi nepřehledný. Pro ověření funkce návrhu, tedy simulaci a verifikaci jsou pak schémata naprosto nevhodná.

    Především kvůli výše uvedeným důvodům se hledaly jiné způsoby popisu logických obvodů a jejich verifikace. Výsledkem je textový popis ve formě velmi podobné programovacím jazykům. Jedná se o jazyky HDL (Hardware Description Languages) zaměřené především na návrh číslicových obvodů, HVL (Hardware Verification Languages) zaměřené hlavně na simulaci a verifikaci, a HDVL (Hardware Description and Verification Languages) určené jak pro funkční popis, tak i verifikaci.

    Na tomto místě je třeba znovu zdůraznit, že přestože jazyky z rodin HDL, HVL a HDVL připomínají běžné programovací jazyky, jejich účel i principy jsou naprosto odlišné. Na rozdíl od programovacích jazyků nepopisují sekvenčně vykonávané činnosti, ale funkci distribuovaných logických obvodů.

    5.1 Návrhové jazyky

    V současnosti jsou nejpoužívanější jazyky z rodiny HDL Verilog a VHDL. Přestože se tyto jazyky liší syntaxí i sémantikou, oba poskytují obdobné prostředky k popisu logických obvodů. To, že jsou tyto HDL určeny převážně k popisu obvodů neznamená, že je není možné použít i pro simulaci a verifikaci. Pouze neposkytují tolik nástrojů pro formální verifikaci jako specializované verifikační jazyky.

    5.1.1 Úroveň abstrakce

    Jazyky Verilog i VHDL umožňují popis obvodů na různých úrovních abstrakce:

    Behaviorální úroveň znamená popis chování obvodu na vysoké úrovni abstrakce. Tuto úroveň poskytují klasické HDL pouze částečně a ne všechny nástroje ji vždy podporují. Příkladem může být třeba nějaký komplexní výpočet v plovoucí řádové čárce zapsaný přirozeně ve formě matematické rovnice.

    RTL úroveň je typická oblast nasazení klasických HDL. Jedná se o nižší úroveň abstrakce než behaviorální popis, kdy je funkce definována kombinací kombinačních a sekvenčních prvků. Popis na této úrovni je obvykle podporován všemi nástroji.

    Strukturální úroveň popisuje vzájemné propojení jednotlivých funkčních modulů a je textovou obdobou blokových schémat.

    Úroveň hradel popisuje obvod na nejnižší úrovni, kdy je funkce vyjádřena strukturou tvořenou jednotlivými logickými hradly. Tato úroveň odpovídá klasickému schématu zapojení.

    Je obvyklé, že popis logického obvodu v HDL kombinuje několik úrovní abstrakce. Základem bývá RTL, kdy ale některé části jsou popsány na behaviorální úrovni. Hierarchie návrhu je realizována využitím strukturálního popisu, kdy jsou moduly na nižší hierarchické úrovni vkládány do vyšších úrovní.

    5.1.2 Oblasti využití

    Jak již bylo zmíněno výše, klasické HDL jsou určeny především k popisu funkce logických obvodů na různých úrovních abstrakce a částečně i k simulaci a verifikaci. To ovšem neznamená, že každá vlastnost jazyka může být vždy za každých podmínek využita. Obvykle se rozlišují podmnožiny jazyka použitelné pro syntézu, modelování a simulaci.

    Syntetizovatelná podmnožina HDL je taková část jazyka, která může být použita pro popis logického obvodu a implementační nástroje ji dokáží přeložit do netlistu.

    Podmnožina určená pro modelování obvodů nebo celých systémů může obsahovat buď vysokoúrovňové vlastnosti jazyka, které nepodporují implementační nástroje, nebo základní vlastnosti, které nejsou z principu implementovatelné jako jsou například definovaná časová zpoždění. Tato podmnožina může být využita pro modelování funkce obvodu nebo systému s využitím číslicového simulátoru, ale už ne pro jeho implementaci v hradlovém poli nebo třeba ASIC.

    Do simulační podmnožiny HDL patří vlastnosti jazyka určené k řízení simulace a verifikaci funkce simulovaného obvodu. Tato část jazyka opět není podporována implementačními nástroji, ale pouze simulátory.

    5.1.3 Verilog

    V osmdesátých letech firma Gateway Design Automation uvedla na trh číslicový simulátor Verilog-XL a s ním i jazyk pro popis číslicových obvodů Verilog HDL. V roce 1989 pohltila Gateway firma Cadence Design Systems i s autorskými právy na jazyk a simulátor. V roce 1990 dala firma Cadence jazyk (ale ne simulátor) k dispozici jako public domain se záměrem, že se z něho stane standard. Verilog HDL je od té doby udržován neziskovou organizací Open Verilog International (dnes Accellera) a prošel standardizační procedurou IEEE (Institute of Electrical and Electronics Engineers). Verilog byl standardizován v roce 1995 jako IEEE Std. 1364-1995. Tato verze jazyka se označuje jako Verilog-95. Od té doby prošel Verilog mnoha rozšířeními, po nichž byl jazyk standardizován jako IEEE Std. 1364-2001 (označovaný jako Verilog-2001) a IEEE Std. 1364-2005 (Verilog-2005).

    Samotný popis jazyka přesahuje rámec této publikace. Zájemce o výuku najde odkazy na literaturu v závěrečné části. Pro bližší představu o syntaxi může posloužit následující příklad syntetizovatelného popisu jednoduchého čtyřbitového synchronního čítače na úrovni RTL:

    module counter (clk, rst, q);
    
      input clk, rst;
      output [3:0] out;
    
      reg [3:0] cnt;
    
      always @(posedge clk)
      begin
        if (rst)
          cnt <= 4'b0000;
        else
          cnt <= cnt + 1'b1;
      end
    
      assign q = cnt;
    
    endmodule
    

    Tento kód popisuje funkční blok pojmenovaný counter, který má dva vstupy clk a rst a jeden čtyřbitový výstup q. Blok kódu uvozený always je aktivovaný při každé vzestupné hraně hodinového signálu clk. Pokud je přitom aktivní signál rst, interní registr čítače cnt se vynuluje. Pokud je reset neaktivní, dojde k inkrementaci hodnoty registru o jedničku. Výraz za assign neustále přiřazuje hodnotu interního registru cnt na výstup q.

    5.1.4 VHDL

    Název jazyka VHDL je zkratka VHSIC Hardware Description Language, přičemž VHSIC je opět další zkratka pro Very High Speed Integrated Circuit. Vývoj VHDL začal roku 1981 na popud amerického ministerstva obrany. Důvodem byla narůstající nereprodukovatelnost elektronických systémů z důvodu nedostatečné dokumentace nebo naopak neúnosně dlouhá doba strávená tvorbou dokumentace a především to, že jednotlivé části systému byly vyvíjeny a simulovány mnoha různými nekompatibilními nástroji. Požadavkem bylo vyvinout jazyk s širokou popisnou schopností, který bude interpretován stejně jakýmkoli simulátorem a bude nezávislý na technologii a návrhové metodice.

    V letech 1983 až 1985 pracovalo na specifikaci mnoho firem jako například Intermetrics, IBM, Texas Instruments. Roku 1986 byla práva převedena na organizaci IEEE, která roku 1987 publikovala první verzi jazyka IEEE Std. 1076-1987, označovanou jako VHDL-87. K jazyku VHDL se úzce váže standard IEEE Std. 1164, který definuje další logické datové typy, které kromě dvou základních logických úrovní 0 a 1 mohou vyjádřit další stavy jako například vysokou impedanci, otevřený výstup, kolizi několika budičů, a podobně.

    V roce 1993 byla vydána revidovaná verze jazyka jako IEEE Std. 1076-1993, označovaná VHDL-93. Poté bylo vydáno několik doplněných a rozšířených verzí standardu (2000 a 2002), bylo doplněno několik dalších rozšíření standardu 1076 pro další datové typy jako celá a reálná čísla apod. Důležitým krokem bylo delegování organizace Accellera správou standardu VHDL. Výsledkem pak byla publikace standardu IEEE Std. 1076-2008 (VHDL-2008), který přinesl mnoho významných rozšíření jazyka a integroval dodatečné standardy z rodiny 1076.

    Popis jazyka přesahuje rámec této publikace. Odkazy na podrobnou literaturu budou uvedeny v závěrečné části. Následující ukázka představuje syntetizovatelný popis čtyřbitového synchronního čítače:

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;
    
    
    entity counter is
      port(clk, rst : in  std_logic;
           q        : out std_logic_vector(3 downto 0));
    end counter;
    
    
    architecture rtl of counter is
    
      signal cnt: unsigned(3 downto 0);
    
    begin
    
      CNT_PROC: process (clk)
      begin
        if rising_edge(clk) then
          if rst = '1' then
            cnt <= "0000";
          else
            cnt <= cnt + 1;
          end if;
        end if;
      end process;
    
      q <= std_logic_vector(cnt);
    
    end rtl;
    

    Tento kód implementuje stejnou funkci jako předchozí kód ve Verilogu. Porovnáním těchto dvou příkladů jsou zjevné dva největší rozdíly mezi VHDL a Verilogem:

    5.1.5 Vysokoúrovňové jazyky

    Kromě klasických HDL je existují i další jazyky určené k popisu logických obvodů, které ale popisují obvody na vyšší úrovni abstrakce. Často se jedná o jazyky založené na některých klasických programovacích jazycích jako je třeba C nebo Python. Vývojová prostředí pak přinášejí kromě vlastního kompilátoru i sady knihoven funkcí implementující některé operace. Na tomto místě je třeba podotknout, že z pohledu popisu hardware je jazyk typu C skutečně vysokoúrovňový, což se může programátorům zdát poněkud úsměvné.

    Příkladem vysokoúrovňových jazyků pro popis číslicových obvodů vycházejících z jazyka C je HLS od firmy Xilinx, Catapult C od Mentor Graphics, nebo třeba Handel-C původně od firmy Celoxica. Velmi slušně udržovaný a rozvíjený open-source projekt je MyHDL, který využívá podmnožinu jazyka Python.

    5.2 Verifikační a kombinované jazyky

    S růstem velikosti a složitosti integrovaných obvodů a programovatelné logiky přestávalo stačit ověření funkce logických obvodů pomocí jednoduchých simulací. Začaly vznikat různé metody formální verifikace a společně s nimi i jazyky umožňující tyto metody implementovat. Jedná se o jazyky jako Vera, e, částečně PSL, ale také třeba C nebo C++ a z něj vycházející SystemC. Tyto jazyky jsou často kombinovány s klasickými HDL. Jak Verilog, tak i VHDL například obsahují podporu pro PSL (Property Specification Language) a umožňují tak psát samotestovací kód přímo v popisu logického obvodu. Vlastní verifikační prostředí pak bývá realizováno v některém verifikačním jazyce, který umožňuje formální verifikaci obvodu s využitím metod založených na tzv. „constrained random“ technikách řízených pomocí „functional coverage“ a využívající „assertions“. Bohužel, pro tyto výrazy neexistují v kontextu funkční verifikace logických obvodů a systémů české ekvivalenty.

    Jazyky založené na C nebo C++ jako je třeba SystemC poskytují další možnosti využití. Kromě vlastní (formální) verifikace umožňují například modelovat celé systémy zahrnující kromě logických obvodů i procesory a funkce realizované softwarově.

    5.2.1 SystemVerilog

    Samostatnou kapitolou jsou kombinované jazyky, určené jak pro popis logických obvodů a komplexních systémů, tak i pro verifikace. Hlavním představitelem těchto HDVL je SystemVerilog. SystemVerilog je velmi výrazné rozšíření jazyka Verilog-2005. Rozšíření se týkají především podpory modelování komplexních systémů a formální verifikace. Je zajímavé, že standardy jazyků Verilog a SystemVerilog byly v roce 2009 sloučeny do jednoho společného standardu IEEE Std. 1800-2009. Momentálně aktuální verze jazyka je standardizována IEEE Std. 1800-2012 (SystemVerilog-2012).

    Samotný jazyk SystemVerilog je možné rozdělit na dvě podmnožiny:

    Část jazyka určená pro RTL vychází z Verilogu ve verzi 2005. Navíc přináší mnoho nových datových typů, nové typy procedurálních bloků, rozšířené operátory, nové výrazy a mnoho dalších rozšíření.

    Verifikační podmnožina jazyka je založená na principech objektově orientovaného programování. SystemVerilog přináší především objektové třídy, generování rozsahem omezených náhodných čísel, vektorů a řad (constrained random), vlastní způsob definice assertions a podporu pro functional coverage.

    Kód čtyřbitového synchronního čítače v jazyce SystemVerilog by byl shodný s kódem ve Verilogu uvedeným výše. Lepší ilustrace jazyka proto bude jednoduchý příklad objektově orientovaného kódu. Následující příklad je převzat z Wikipedie:

    virtual class Memory;
    
      virtual function bit [31:0] read(bit [31:0] addr);
      endfunction
    
      virtual function void write(bit [31:0] addr, bit [31:0] data);
      endfunction
    
    endclass
    
    
    class SRAM #(parameter AWIDTH=10) extends Memory;
    
      bit [31:0] mem [1<<AWIDTH];
    
      virtual function bit [31:0] read(bit [31:0] addr);
        return mem[addr];
      endfunction
    
      virtual function void write(bit [31:0] addr, bit [31:0] data);
        mem[addr] = data;
      endfunction
    
    endclass
    

    Tento kód deklaruje třídu Memory, která má dvě virtuální metody read a write. Z třídy Memory je odvozena nová parametrizovatelná třída SRAM, která pro paměť typu RAM definuje pole 2AWIDTH dvaatřicetibitových vektorů jako paměťovou matici a definuje funkci virtuálních metod read a write. Metoda read vrací slovo z adresy addr, metoda write zapisuje slovo data na adresu addr. Třída SRAM tedy reprezentuje statickou paměť typu RAM s okamžitou odezvou.

           

    Hodnocení: 100 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    11.12.2014 02:42 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Programovatelná logika VII: Jazyky pro popis log. obvodů
    functional coverage
    Tomu se říká "funkční pokrytí", ne?
    11.12.2014 07:25 hw | skóre: 23 | blog: Digital Design
    Rozbalit Rozbalit vše Re: Programovatelná logika VII: Jazyky pro popis log. obvodů

    Je to možné. Osobně jsem to ale nikdy neslyšel a takovýhle doslovný překlad se mi úplně nezdál. Možná bych tu mohl pro ostatní zmínit význam dvou pojmů používaných ve verifikaci:

    • Code Coverage je ukazatel, který vyjadřuje jaké procento HDL kódu bylo během simulace/verifikace použito. Měří pouze, zda byl daný příkaz vykonán.
    • Functional Coverage je mnohem sofistikovanější ukazatel spadající do oblasti formální verifikace. Ten vyjadřuje nakolik verifikace pokryla požadavky funkční specifikace. Tento ukazatel tedy nejde generovat automaticky, ale verifikační inženýr musí definovat požadavky na funkční pokrytí v jednotlivých kontrolních bodech a za pomoci generování omezených náhodných vektorů se pak řídí proces simulace tak, aby bylo dosaženo požadovaného funkčního pokrytí.

    Když o tom tak přemýšlím, tak pokrytí kódu a funkční pokrytí nejsou zas až tak špatné výrazy. Díky.

    11.11.2015 14:20 Jarkol
    Rozbalit Rozbalit vše Re: Programovatelná logika VII: Jazyky pro popis log. obvodů
    Těch českých výrazů "pokrytí kódu" a "funkční pokrytí" bych se vůbec nebál, podle mne to odpovídá jak jejich smyslu, tak i duchu českého jazyka. A pro "assertions" bych navrhoval používat českého překladu "tvrzení".
    12.12.2014 07:32 TM
    Rozbalit Rozbalit vše Re: Programovatelná logika VII: Jazyky pro popis log. obvodů
    Proč to nevychází jako články?
    Má to co říci a je jedno, že to nesouvisí s Linuxem(úplně by stačilo nějaké závěrečné shrnutí vývojových prostředí na Linuxu provozovatelných).
    Na abclinuxu.cz v poslední době nevychází skoro nic, nechápu, proč nevyužít takto dobrého autora.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.