programovací jazyk From Wikipedia, the free encyclopedia
ABEL-HDL (neboli ABEL Hardware Description Language) je jazyk pro popis hardwaru, který se používá pro konfiguraci logických polí používaný firmou Lattice Semiconductor Corporation. Zdrojové soubory jsou tvořeny textovými soubory kódovanými ve formátu ASCII.
ABEL - HDL se používá stejně jako ostatní hdl jazyky k programování logických polí. Programování v hdl jazycích je mnohem rychlejší a jednodušší než programování v asembleru. Práce nimi se v mnoha aspektech zásadně liší od programovacích jazyků pro počítače. Tento jazyk umožňuje zapsání kódu pomocí pravdivostních tabulek, stavových diagramů nebo logických rovnic. Jazyk rozlišuje velká a malá písmena v proměnných, ale nikoliv u klíčových slov.
Zdrojové kódy mohou být psány v libovolném editoru umožňující export do ASCII formátu. Každá řádka může mít max. 150 znaků. Na konec řádku se standardně umísťuje středník.
Proměnné v makrech, modulech a příkazech jsou označovány jako argumenty konstrukcí, které je používají. V ABEL-HDL existují dva typy argumentů: Actual argument a Dummy argument.
Operátory jsou rozděleny do čtyř základních tříd: logické, aritmetické, relační a přiřazovací.
Operátor | Popis |
---|---|
! | NOT, neboli jedničkový doplněk |
& | AND, logický součin |
# | OR, logický součet |
$ | XOR, exclusive OR |
!$ | XNOR, exclusive NOR |
Operátor | Popis | Příklad |
---|---|---|
- | Dvojkový doplněk, !A+1 | -A |
- | Odčítání | A-B |
+ | Sčítání | A+B |
Nedostupné pro množiny: | ||
* | Násobení | A*B |
/ | Neznaménkové celočíselné dělení | A/B |
% | Zbytek po dělení | A%B |
<< | Posun doleva o B bitů | A<<B |
>> | Posun doprava o B bitů | A>>B |
Operátor | Set | Popis |
---|---|---|
= | ON(1) | Kombinační (okamžité) přiřazení |
:= | ON(1) | Implicitní registrové přiřazení |
?= | DC(X) | Kombinační (okamžité) přiřazení |
?:= | DC(X) | Implicitní registrové přiřazení |
Pro komunikaci s ostatními logickými obvody existují speciální konstanty, jejich seznam je v Tabulce speciálních konstant.
Konstanta | Význam |
---|---|
.C. | Hodinový vstup; nízká-vysoká-nízká úroveň |
.D. | Sestupná hodinová hrana |
.F. | Plovoucí vstupní nebo výstupní signál |
.K. | Hodinový vstup; vysoká-nízká-vysoká úroveň |
.P. | Reset registrů |
.SVn. kde n = (2 .. 9) | Řízený vstup 2V až 9V |
.U. | Vzestupná hodinová hrana |
.X. | Don't care stav |
.Z. | Třístavová logika (vysoká impedance) |
Speciální konstanty musí být použity, jak je uvedeno, včetně teček.
Tento jazyk obsahuje obdobu pole prvků, která je nazývána set. Jedná se o uspořádanou množinu (tj. záleží na pořadí). Pokud jsou čísla použita v přiřazení nebo v porovnávání se sety (množinami), tak jsou převedena do binární reprezentace a dále je použita booleovská algebra. Pokud je bitů více než prvků v množině, je binární číslo zaokrouhleno doleva. Pokud je bitů méně, je binární číslo zleva doplněno nulami.
Operátor | Popis | Příklad |
---|---|---|
= | kombinační přiřazení | A = 5 |
:= | registrové přiřazení | A:=[1,0,1] |
! | NOT, jedničkový doplněk | !A |
& | Logický součin, AND | A & B |
# | Logický součet, OR | A # B |
$ | Exclusive OR, XOR | A $ B |
!$ | Exclusive NOR, XNOR | A !$ B |
- | Negace | -A |
- | Odčítání | A-B |
+ | Sčítání | A+B |
== | Rovná se | A==B |
!= | Nerovná se | A!=B |
< | Menší než | A<B |
> | Větší než | A>B |
<= |
Menší nebo rovno | A <= B |
>= |
Větší nebo rovno | A >= B |
Zdrojové kódy se mohou skládat z nezávislých modulů. Každý z těchto modulů obsahuje kompletní logický popis obvodu. Do jednoho zdrojového kódu může být umístěn neomezený počet modulů. Každý modul může mít pouze jednu hlavičku, ostatní sekce zdrojového kódu se mohou libovolně opakovat. Deklarace musí následovat hned za označením deklarací. Všechny identifikátory musí být deklarovány dříve, než jsou uvedeny v kódu.
Hlavičkou začíná každý modul. Obsahuje označení modulu (module), dané rozhraní (interface) a záhlaví (title).
Module je povinné a je párováno s klíčovým slovem End. Označení modulu začíná klíčovým slovem Module za kterým následuje jeho název. Za označení modulu se neumisťuje středník. Může být třeba toto:
Module nejaky_nazev
Rozhraní je volitelná položka. Slouží u nižších modulů k označení signálů, které jsou pak použity ve vyšších modulech. Klíčové slovo je Interface.
Záhlaví začíná klíčovým slovem Title a za ním následuje string uvozený apostrofy. Pro funkci obvodu nemá žádný význam, slouží jen k popisu funkce modulu pro lepší přehlednost.
Title 'Tento kod slouzi jako ukazka uzivatelum wiki'
Deklarace deklaruje moduly a přiřazuje jména instancím funkčních bloků, pinům, uzlům, konstantám, makrům a množinám. Každý modul musí mít nejméně jednu deklarační sekci. Všechny deklarace mají platnost pouze v modulu, ve kterém jsou uvedeny. Deklarace zařízení může být použita jen jedna v celém bloku.
Deklarace klíčových slov začíná klíčovým slovem declarations. Takto definovaná klíčová slova mohou být použita v celém zdrojovém kódu.
Deklarace zařízení je volitelná. Pro daný modul definuje device_id se specifickým programovatelným zařízením. Zapisuje se identifikátorem programovatelného pole, který je následován klíčovým slovem Device.
device_id Device real_device;
Deklarace Interface je, na rozdíl od uvedení interface v hlavičce, povinná ve všech zdrojových kódech, kde je mechanizmus interface použit (tj. je povinná nejen v lower-level ale i v top-level modulech). V této sekci není možné použít přípony (dot extension).
// pro top-level modul: (tri tecky znamenaji moznost vice parametru) low-level nazev_modulu Interface (inputs[=hodnoty] -> outputs :> bidirs ...) //tato deklarace se pouziva ve spojeni s deklarací FUNCTIONAL_BLOCK pro kazdy konkretni modul // pro lower-level modul: Module nazev_modulu Interface (input/set=value... -> output/set :> bidir/set)
Deklarace signálů znamená přiřazení použitých signálů k číslům pinů a nodů, popř. přiřadit i typ signálu. Piny a nody nemusí být přiřazeny k žádnému signálu, dokud není konkrétní program nahrán do obvodu.
Přiřazení pinů a nodů se provádí pomocí klíčových slov Pin a Node, detailněji je ukázáno na příkladu.
Typ signálu se přiřazuje pomocí klíčového slova Istype, za kterým následují atributy pro ISTYPE.
V této sekci je možné použít přípony (dot extension).
//deklarace pinu, (zavorky [ a ] ohranicuji volitelne parametry) [ ! ] oznaceni_pinu [, [ ! ] oznaceni_pinu...] Pin [pin# [, pin# ] ] [ISTYPE 'atributy'] //deklarace nodu [ ! ] oznaceni_nodu [, [ ! ] oznaceni_nodu...] Node [node# [, node#] ] [ISTYPE 'atributy'] //prirazeni atributu signal [, signal]... Istype 'atributy';
Deklarace konstant se provádí pomocí klíčového slova =. Za konstantu je považován identifikátor, který má konstantní hodnotu v modulu, kde je jako konstanta deklarován. Deklarace konstant musí být v sekci deklarací nebo za příkazem @Const.
//deklarace konstant identifikator [, identifikator]... = vyraz [, vyraz]...;
Deklarace maker se provádí pomocí klíčového slova Macro. Používání maker umožňuje opakovaně používat již hotové bloky kódu.
//deklarace makra oznaceni_makra Macro [(dummy_argument [, dummy_argument]...)] {blok_kodu};
Logický popis obsahuje vlastní funkci jednotlivých prvků. K popisu mohou být použity rovnice, pravdivostní tabulky, stavové diagramy, tavné pojistky (fuses) nebo XOR. V této sekci mohou být použity i tečkové přípony (dot extension). Funkční syntaxe je jméno signálu následováno tečkou a konkrétní příponou. Přípony jsou rozdělené do dvou hlavních skupin, na přípony nezávislé na použité architektuře a na přípony závislé na použitém zařízení.
// pouziti pripon (dot extension), za teckou následuje pozadovana pripona muj_signal.ext
Popis pomocí rovnic se zapisuje užitím klíčového slova Equations, které definuje začátek bloku logických rovnic.
// zapis bloku rovnic // prvni moznost: Equations [WHEN podminka THEN] [ ! ] prvek = vyraz; [ELSE rovnice]; // druha moznost: [WHEN podminka THEN] rovnice; [ELSE rovnice]; jmeno_instance LSC_jmeno_makra (definice_portu);
Pravdivostní tabulky se definují za klíčovým slovem Truth_table.
// pravdivostni tabulka // prvni moznost: Truth_table (vstupy -> vystupy) vstupy -> vystupy; ...atd... // druha moznost: Truth_table (vstupy [:> registrove vystupy ][-> vystupy])
Stavové diagramy se zapisují pomocí klíčového slova State_diagram. Následuje přiřazení rovnic k výrazům.
// stavove diagramy:
State_diagram stavovy_registr
[-> stavovy_vystup]
[STATE stavovy_vyraz: [rovnice]
[rovnice]
...atd...
trans_stmt ...]
Deklarace pojistek (fuses) se provede pomocí klíčového slova Fuses.
// fuses: Fuses cislo_fuse = fuse value; set_cisel_fuse = fuse value;
XOR faktory umožňují specifikovat přímo proměnné typu boolean a vkládat je jako argumenty do funkce XOR.
// XOR XOR_factors jmeno_signalu = xor_factors
Testovací vektory slouží k testování funkce a časování obvodu. Ke spolehlivému ověření, by měly pokrýt celý rozsah očekávaných operací. Kromě testovacích vektorů může tato sekce obsahovat ještě testovací skripty a sledovací příkazy (trace statement).
Testovací vektory definují výstupy jako funkci vstupů. Začínají klíčovým slovem Test_vectors, může následovat poznámka.
Test_vectors [konkretni_priklad] (inputs -> outputs) [invalues -> outvalues ;]
Sledovací příkazy definují, které vstupy a výstupy budou zobrazeny ve výstupu simulace. Začínají klíčovým slovem Trace za kterým následují definované vstupy a výstupy.
Trace (inputs -> outputs);
Každý modul musí být ukončen ukončovacím příkazem. Klíčové slovo End je následováno názvem modulu, který byl definován v hlavičce.
End nejaky_nazev
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.