ABEL-HDL
Z Multimediaexpo.cz
ABEL-HDL (neboli ABEL Hardware Description Language) je programovací jazyk pro programování logických polí používaný firmou Lattice Semiconductor Corporation. Zdrojové soubory jsou tvořeny textovými soubory kódovanými ve formátu ASCII.
Obsah |
Základní popis jazyka ABEL-HDL
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.
Základní syntaxe jazyka ABEL-HDL
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.
- // – na začátku řádky označují komentář
- ' – apostrofy uvozují řetězce string
- ^b, ^o, ^d, ^h, – na začátku čísla označuje použitou soustavu (tj. binární, osmičková, desítková, šestnáctková); pokud není uvedeno nic, použije se desítková soustava
- { } – začátek a konec bloku
Typy proměnných
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.
- Dummy argument: slouží k rezervaci paměti pro proměnné a všechny identifikátory těchto proměnných musí začínat otazníkem. Před kontrolou syntaxe a logiky jsou nahrazeny Actual argumenty.
- Actual argument: je použitá proměnná. Jako Actual argument může být použit jakýkoli text včetně identifikátorů, čísel, operátorů nebo množin. Actual argumenty jsou nahrazeny přesně jak se objeví. To znamená, že jsou započítány do výrazu včetně mezer.
Typy operátorů
Operátory jsou rozděleny do čtyř základních tříd: logické, aritmetické, relační a přiřazovací.
- Logické operátory
- se používají zejména ve výrazech. Logické operace se provádějí bit po bitu.
Operátor | Popis |
---|---|
! | NOT, neboli jedničkový doplněk |
& | AND, logický součin |
# | OR, logický součet |
$ | XOR, exclusive OR |
!$ | XNOR, exclusive NOR |
- Aritmetické operátory
- řídí aritmetické vztahy mezi prvky ve výrazech. Jsou zde zastoupeny i bitové posuny, protože jsou ekvivalentní násobení popř. dělení 2.
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 |
- Relační operátory
- se používají k porovnávání dvou prvků ve výrazu. Výsledkem porovnávání je proměnná true nebo false typu boolean. Všechny relační operace jsou bez znaménka.
Operátor | Popis | Operátor | Popis | |
---|---|---|---|---|
== | Rovnost | != | Nerovnost | |
< | Menší než | > | Větší než | |
<=<code>
| Menší nebo rovno | >=
| Větší nebo rovno |
- Operátory přiřazení
- se používají zejména v rovnicích. Rovnice přiřazují hodnotu výrazu k signálu výstupu. Existují dva způsoby přiřazení, kombinační a registrový. Kombinační přiřazení způsobí zobrazení dat na výstupu okamžitě, jakmile je rovnice vyhodnocena. Registrové přiřazení se projeví až při následujícím hodinovém pulsu.
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í |
Komunikace s ostatními logickými prvky
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.
Pole prvků
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 |
<code><= | Menší nebo rovno | A <= B |
>=
| Větší nebo rovno | A >= B |
Základní struktura
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čky
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
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ázano 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
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žítém zařízení.
// pouziti pripon (dot extension), za teckou nasleduje 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);
Pravdivostni 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
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áváný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);
Ukončení
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
Literatura
- ABEL-HDL Reference Manual, Version 8.0, Lattice Semiconductor Corporation
Související články
Náklady na energie a provoz naší encyklopedie prudce vzrostly. Potřebujeme vaši podporu... Kolik ?? To je na Vás. Náš FIO účet — 2500575897 / 2010 |
---|
Informace o článku.
Článek je převzat z Wikipedie, otevřené encyklopedie, do které přispívají dobrovolníci z celého světa. |