Abel hdl katedra Mikroelektroniki I Technik Informatycznych Zbigniew Kulesza Dostępne znaki ascii: a z



Pobieranie 189,03 Kb.
Data08.11.2017
Rozmiar189,03 Kb.

ABEL - HDL

Katedra Mikroelektroniki i Technik Informatycznych
Zbigniew Kulesza

Dostępne znaki ASCII:

  • a - z

  • A - Z

  • 0 - 9

  • ! @ # $ ? + & * ( ) - _ = [ ] { } ; : ' " ` \ | , < > . / ^ %


Identyfikatory:

  • długość maks. 31 znaków

  • muszą się zaczynać od znaku alfabetu lub podkreślenia

  • z wyjątkiem pierwszego znaku mogą zawierać znaki alfabetu małe i duże, cyfry i podkreślenia

  • nie mogą zawierać spacji

  • z wyjątkiem słów kluczowych identyfikatory rozróżniają małe i wielkie litery

  • nie wolno używać kropek, wyjątek - dozwolone rozszerzenia kropkowe

  • przykłady: HELLO, hello, _K5input, P_h, Long_indentifier


Stałe specjalne:

-.C. zegar (stan niski - wysoki - niski)

-.D. zegar zbocze opadające (stan wysoki - niski)

-.F. wejście lub wyjście wiszące

-.K. zegar (stan wysoki - niski - wysoki)

-.P. preładowanie rejestru (do wskazanego stanu)

-.SVn. n = 2 do 9 - sterowanie wejścia od 2 do 9

-.U. zegar zbosze narastające (stan niski - wysoki)

-.X. DC don't care - bez znaczenia

-.Z. stan trzeci


Bloki

  • {}

  • przykład:

{ A = B $ C;

{ D = A; }

E = C;

}
znaki specjalne w blokach:

{ \{ \} }
Słowa kluczowe:

case declarations device else enable end endcase endwith equations flag fuses goto if in istype library macro module node options pin property state state_diagram test_vectors then title trace truth_table when with

Komentarze:

znak "

przykłady:

A = B + C; "suma

IC5 "dekoder PAL" device 'P10L8';
Liczby:

binarne ^b ^b101 5

ósemkowe ^o ^o17 15

dziesiętne (domyślne) ^d 75 75

heksadecymalne ^h ^h0F 15
Operatory logiczne:

! NOT

& AND

# OR

$ XOR (exclusive OR)

!$ XNOR (exclusive NOR)

Operatory arytmetyczne:

- -A negacja

- A - B odejmowanie

+ A + B dodawanie

* A * B mnożenie

/ A / B dzielenie (liczby całkowite bez znaku)

% A % B moduł (reszta z dzielenia / )

<< A << B przesunięcie A w lewo o B bitów

>> A >> B przesunięcie A w prawo o B bitów
Operatory relacji:

== równy

!= nie równy

< mniejszy niż

<= mniejszy niż lub równy

> większy niż

>= większy niż lub równy

Operatory przypisania:

= przypisanie kombinacyjne

:= przypisanie rejestrowe

Priorytet:

1 -(neg) !(not)

2 & << >> * / %

3 + - # $ !$

4 == != < <= > >=

Grupy sygnałów:

[B0,B1,B2,B3,B4,B5,B6,B7] inaczej [B0..B7]

[.X.,.X.,.X.,.X.,A10..A7]
Wielokrotne przypisanie do tego samego identyfikatora:
A = B;

A = C; równoważne A = B # C;

A = B;

A = C & D; równoważne A = B # (C & D);

A = !B;

A = !C; równoważne A = !B # !C;

!A = B;

!A = C; równoważne A = !(B # C);

!A = B;

A = !C; równoważne A = !C # !B;

!A = B;

!A = C;

A = !D;

A = !E; równoważne A = !D # !E # !(B # C);
Rozwinięcia operacji (na przykładzie &):
sygnał & sygnał

a & b proste użycie (True gdy a i b True)

sygnał & liczba

a & 4 liczba konwertowana do postaci binarnej

używany jest najmniej znaczący bit

tutaj: a & 0 (czyli False)

sygnał & grupa sygnałów

a & [x,y,z] [a & x, a & y, a & z]

grupa & grupa

[a,b] & [x,y] [a & x, b & y] (błąd, gdy różna długość grup)

grupa & liczba

[a,b,c] & 5 liczba konwertowana do postaci binarnej

o długości równej długości grupy (obcinanie lub uzupełnianie zerami)

tutaj: [a,b,c]&[1,0,1] = [a & 1, b & 0, c & 1]

czyli [a,0,c]

liczba & liczba

9 & 5 liczby konwertowane do postaci binarnej

używany jest najmniej znaczący bit

tutaj: 1 & 1 czyli True
UWAGA:

przykład

definiujemy: count = [a,b,c];

operacja: 9 & (count == 0)

otrzymujemy:

9 & (!a & !b & !c)

czyli ostatecznie: 1 & (!a & !b & !c) !!!
Rozszerzenia kropkowe:

signal_name . ext
Niezależne od architektury (Architecture-Independent)

.CLK wejście zegara do wyzwalanego zboczem przerzutnika

.OE zezwolenie wyjścia (output enable)

.PIN sprzężenie wyprowadzenia (pin feedback)

.FB sprzężenie rejestrowe (register feedback)
Zależne od architektury (Architecture-specific)

.D wejście danych D do przerzutnika D

.J wejście danych J do przerzutnika JK

.K wejście danych K do przerzutnika JK

.S wejście danych S do przerzutnika SR

.R wejście danych R do przerzutnika SR

.T wejście danych T do przerzutnika T

.Q sprzężenie rejestrowe

.PR preset rejestrowy

.RE reset rejestrowy

.AP asynchroniczny preset przerzutnika

.AR asynchroniczny reset przerzutnika

.SP synchroniczny preset przerzutnika

.SR synchroniczny reset przerzutnika

.LE wejście zezwolenia zatrzasku (latch-enable)

.LH j.w. stanem wysokim

.LD wejście ładowania przerzutnika

.CE wejście zezwolenia zegara (clock-enable) do

przerzutnika z bramkowanym wejściem zegarowym

.FC tryb pracy przerzutnika (mode control)

Deklaracje stałych:

id [,id] = expr [,expr]....;
id - identyfikator

expr - wyrażenie definiujące stałą wartość
(zabroniona jest "samodeklaracja" np. a = a;)

przykłady:

ABC = 3 * 17; " ABC przypisane zostaje wartość 51

Y = 'Bc'; " Y = +H4263

X = .X.; " X oznacza "don't care"

ADDR = [1,0,15]; " grupa 3 elementowa

A,B,C = 5,[1,0],6; " deklaracja 3 stałych

D pin 6;

E = [5 * 7, D]; " nazwa sygnału może być włączona

G = [1,2]+[3,4]; " operacje na grupach są dozwolone

A = B & C; " operacje na identyfikatorach są dozwolone

A = [!B,C]; " grupy i identyfikatory

Atrybuty sygnałów:

signal_id [,signal_id] ISTYPE 'attr';

signal_id [,signal_id] [(PIN | NODE) [## [,## ]]] ISTYPE 'attr';
atrybuty sygnałów usuwają dwuznaczności w projekcie niezależnym od architektury, ich użycie zwiększa prawdopodobieństwo poprawnego działania projektu mimo zmiany urządzenia
Atrybuty:
'buffer' docelowa architektura nie zawiera inwertera

między wyjściem przerzutnika (jeśli istnieje)

a wyjściowym wyprowadzeniem

'com' sygnał jest kombinacyjny

'invert' docelowa architektura zawiera inwerter

między wyjściem przerzutnika (jeśli istnieje)

a wyjściowym wyprowadzeniem

'neg' zaneguj sygnał przed pobraniem do równań.

'Neg' jest typowo używany w kombinacji z opcją

"-reduce fixed" w celu kontroli polaryzacji

docelowego urządzenia z programowalną polaryzacją

'pos' nie negować sygnału przed przetwarzaniem

(domyślne)

'reg' element pamięciowy z zegarem (podstawowy przerzutnik)

'reg_D' element pamięciowy z zegarem (przerzutnik D)

'reg_T' element pamięciowy z zegarem (przerzutnik T)

'reg_SR' element pamięciowy z zegarem (przerzutnik SR) 'reg_JK' element pamięciowy z zegarem (przerzutnik JK)

'reg_G' element pamięciowy z bramkowanym zegarem

(przerzutnik D)

'xor' architektura przeznaczenia zawiera bramkę XOR

(zatem wysokopoziomowe wyrażenie z operatorem

ex-OR jest zachowywane w równaniach projektu)
CASE
CASE expression : state_exp;

[expression : state_exp;]

[expression : state_exp;]

...

ENDCASE;
wyrażenie używane w automacie stanowym (state_diagram) do wskazania przejść między stanami, w sytuacji gdy wiele możliwych warunków warunkuje przejście między stanami
przykład:

case a == 0 : 1;

a == 1 : 2;

a == 2 : 3;

a == 3 : 0;

endcase;
uwaga 1: po wyrażeniu state_exp opcjonalnie może występować WITH - ENDWITH

uwaga 2: należy wyczerpywać wszystkie możliwe warunki, w przeciwnym wypadku przy niezdefiniowanym warunku urządzenie zachowa się zależnie od wewnętrznej architektury (dla przerzutników D najprawdopodobniej nastąpi ich wyzerowanie)

DECLARATIONS
to słowo kluczowe umożliwia wykonanie deklaracji stałych, grup sygnałów itp. (słowo nie jest wymagane gdy deklaracje występują tuż po poleceniach dotyczących modułów, opcji, tytułu)
przykład:

Declarations

C,D,E,F,Out2 pin 3,4,5,6,16

Temp1 = C & D;

Temp2 = E & F;
DEVICE

device_id DEVICE real_device;
przyporządkowuje nazwę urządzenia używaną w module z aktualnie programowanym urządzeniem logicznym, na którym projekt jest implementowany
przykład:

D1 DEVICE 'P16R4';


END

end module_name
wyrażenie oznaczające koniec modułu (nazwa modułu wymagana w źródłach wielmodułowych)

EQUATIONS

equations

[ WHEN condition THEN ] [ ! ] element = expression;

[ ELSE equation];

lub

[ WHEN condition THEN ] equation;

[ ELSE equation];
wyrażenie definiuje początek grupy równań skojarzonych z urządzeniem (uwaga: istotne jest rozróżnienie operatorów przyporządkowania kombinacyjnego i rejestrowego czyli "=" i ":=")
przykłady:

equations

A = B & C # A;

[W,Y] = 3;

!F = (B == C);

FUSES

fuse_number = fuse_value;

lub

fuse_number_set = fuse_value;
wyrażenie wprost definiuje stan przełączników programujących (bezpieczników) w skojarzonym urządzeniu

UWAGA: polecenie ściśle zależne od rodzaju urządzenia
przykład:

FUSES

3552 = 1;

[3478...3491] = ^Hff;
GOTO

GOTO state_exp;
wyrażenie używane w automacie stanowym do określania bezwarunkowych przejść między stanami (opcjonalnie może za nim występować wyrażenie WITH - ENDWITH)
przykłady:

GOTO 0; " idź do stanu 0

GOTO x + y; " idź do stanu x + y
IF-THEN-ELSE
IF exp THEN state_exp

[ ELSE state_exp ];
postać łańcuchowa:

IF exp THEN state_exp

ELSE IF exp THEN state_exp

ELSE state_exp;
postać zagnieżdżona:

IF exp THEN state_exp

ELSE IF exp THEN

IF exp THEN state_exp

ELSE state_exp

ELSE state_exp;
wyrażenie używane w automacie stanowym do określania warunkowych przejść między stanami (opcjonalnie może za nim występować wyrażenie WITH - ENDWITH)

dowolna liczba wyrażeń IF może być użyta w podanym stanie, użycie ELSE jest opcjonalne

w postaci łańcuchowej istotne jest zakończenie z użyciem średnika szczególnie w przypadku nie wykluczających się wzajemnie warunków; natomiast w przypadku wzajemnie wyłączających się poleceń IF... zalecane jest użycie polecenia CASE
przykład:

STATE S0:

IF (address < ^h0400)

THEN S0

ELSE

IF (address <= ^hE100)

THEN S2

ELSE S1;
UWAGA: polecenia IF-THEN-ELSE i CASE mogą być wzajemnie zagnieżdżane
przykłady:

if A == B then 2; " gdy A równe B to przejście do stanu 2

if x - y then j else k; " gdy x - y nie równe 0, to stan j

if A then b * c; " gdy A prawdziwe (nie zero), to stan b*c
if a then 1

else

if b then 2

else

if c then 3

else 0;
STATE S0:

CASE (select == 1): IF (address == ^h0100)

THEN S15

ELSE

IF (address > ^hE100)

THEN S17

ELSE

S0;

(select == 2): S2;

(select == 3): IF (address <= ^h0400)

THEN IF (reset)

THEN S3;

ELSE S0;

ELSE S17;

(select == 0): S0;

ENDCASE;

State_diagram
State_diagram state_reg

[-> state_out]

[State state_exp : [equation]

[equation]

:

trans_stmt; ....]
state_reg - identyfikator lub grupa identyfikatorów określająca bieżący stan automatu

state_out - identyfikator lub grupa identyfikatorów determinująca następny stan automatu (dla projektów z zewnętrznymi rejestrami)

state_exp - wyrażenie określające bieżący stan

equation - równania definiujące stan wyjść automatu

trans_stmt - wyrażenia IF-THEN-ELSE, CASE, GOTO z opcjonalnie występującymi po nich równaniami przejść WITH-ENDWITH

Automat stanowy startuje ze stanu określonego przez state_exp

Równania występujące po state_exp są rozwiązywane i wyrażenie przejścia (trans_stmt) jest rozwiązywane po następnym cyklu zegara, powodując przejście automatu do następnego stanu.

Równania skojarzone ze stanem są opcjonalne.

Każdy stan musi mieć wyrażenie przejścia (jego brak powoduje przejście do stanu zależnego od sprzętu).
przykłady:

bezwarunkowy skok GOTO

STATE S0:

GOTO S1;
instrukcja wyboru CASE

STATE S0:

CASE (sel == 0): S0;

(sel == 1): S1;

ENDCASE
instrukcja warunkowa IF-THEN-ELSE

STATE S0:

IF (Address > ^hE100) THEN S1 ELSE S2;
wyrażenie ustawiania wyjść rejestrowych WITH-ENDWITH

STATE S0:

IF (reset) THEN S9 WITH ErrorFlag := 1;

ErrorAddress := adress;

ENDWITH

ELSE

IF (address <= ^hE100) THEN S2 ELSE S0;
przykłady automatów

state_diagram [a,b]

state 3 : y = 3;

goto 0;

state 1 : y = 1;

goto 2;

state 0 : y = 0;

goto 1;

state 1 + 1 : y = 2;

goto 3;
current_state = [a,b];

state_diagram current_state

state 1 : w = 1; y = 1;

goto 4;

state 2 : if y == 3 then 3 else 4;

state 3 : w = 2; y = w;

goto 2;

state 4 : y = 3;

case w == 1 : 2;

w == 2 : 1;

endcase;

Test_vectors
Test_vectors [note]

(input [,input]... -> output [,output])

[invalues -> outvalues;]

....
note - łańcuch używany do opisu wektorów testowych

inputs - identyfikator lub grupa identyfikatorów określający nazwy sygnałów wejściowych do urządzenia lub sprzężenia zwrotnego z sygnałów wyjściowych

outputs - identyfikator lub grupa identyfikatorów określająca sygnały wyjściowe z urządzenia

invalues - wartści wejściowe lub grupy wartości wejściowych

outvalues - wartości wyjściowe będące rezultatem dla podanych wartości wejść
Wektory testowe służą procesowi symulacji i funkcjonalnego testowania projektu i urządzenia.

Rozmiar wektorów testowych jest nieograniczony.

Format wektorów testowych jest określany w nagłówku.

Tabela określa wejścia kombinacyjne i ich rezultat na wyjściach.

Dla automatów stanowych wektory testowe musza być sekwencyjne (muszą "przechodzić" przez dozwolone stany i przejścia między stanami).

Słowo kluczowe TRACE może być użyte do kontroli wyjść symulatora z wnętrza pliku źródłowego.
przykłady:

Test_vectors

( [A,B] -> [C,D]) lub inaczej ( [A,B] -> [C,D])

[0,0] -> [1,1]; 0 -> 3 ;

[0,1] -> [1,0]; 1 -> 2 ;

[1,0] -> [0,1]; 2 -> 1 ;

[1,1] -> [0,0]; 3 -> 0 ;
w tym wypadku można użyć także stałych numerycznych

Truth_table
Truth_table (in_ids -> out_ids)

inputs -> outputs;

lub

Truth_table (in_ids :> reg_ids)

inputs :> reg_outs;

lub

Truth_table (in_ids :> reg_ids -> out_ids)

inputs :> reg_outs -> outputs;
inputs - wejścia funkcji logicznych

outputs - wyjścia z funkcji logicznych

reg_outs - wyjścia rejestrowe

-> - wyjście funkcji kombinacyjnej

:> - wyjście rejestrowe

Tabela prawdy jest sposobem opisu, który może być użyty zamiast lub w uzupełnieniu opisu w postaci równań lub automatów stanowych.

Końcowy średnik jest wymagany na końcu każdej linii tabeli.

Wejścia i wyjścia (kombinacyjne i rejestrowe) mogą być w postaci pojedynczych sygnałów lub ich grup.

Dostępne są trzy postacie tabeli prawdy: dla układu z wyjściami kombinacyjnymi, rejestrowymi i postać mieszana.

Znaczną optymalizację obwodów opisanych tabelą prawdy można uzyskać korzystając z dyrektywy @DCSET.
przykład:

truth_table ([A,B] :> [C,D] -> E)

0 :> 1 -> 1;

1 :> 2 -> 0;

2 :> 3 -> 1;

3 :> 0 -> 1;

przykład równoważnych opisów:

equations

q := a & load & !q.fb & !load;

truth_table ([a,q.fb,load] :> q)

[0, 0 , 0 ] :> 1;

[0, 1 , 0 ] :> 0;

[1, 0 , 0 ] :> 1;

[1, 1 , 0 ] :> 0;

[0, 0 , 1 ] :> 0;

[1, 0 , 1 ] :> 1;

[0, 1 , 1 ] :> 0;

[1, 1 , 1 ] :> 1;

funkcja XOR

truth_table ([en,a,b] -> q)

[ 1,0,0] -> 0;

[ 1,0,1] -> 1;

[ 1,1,0] -> 1;

[ 1,1,1] -> 0;

WHEN-THEN-ELSE
[WHEN condition THEN] [ ! ] element = expression;

[ELSE equation];

lub

[WHEN condition THEN] equation;

[ELSE equation];
condition - dowolne dostępne wyrażenie

element - identyfikator określający sygnał lub grupę sygnałów, do których wartość wyrażenia powinna być przypisana

expression - dowolne dostępne wyrażenie

= lub := - operator przypisania kombinacyjnego lub rejestrowego

"!" - operator negacji, używany w logice "odwrotnej"

Wyrażenie jest używane do opisu funkcji logicznych.

przykład:

WHEN B THEN A = B; ELSE A = C;

WITH-ENDWITH
trans_stmt state_exp WITH equation

[equation]...

ENDWITH;
trans_stmt - wyrażenie IF-THEN-ELSE, CASE, GOTO

state_exp - następny stan

equation - równanie dla wyjść automatu stanowego
Wyrażenie używane w automacie stanowym (State_diagram) i gdy jest użyte łącznie z wyrażeniami IF-THEN-ELSE lub CASE, pozwala na zapisanie równań wyjścia w termach przejść.
Wyrażenie WITH-ENDWITH może być użyte w dowolnym wyrażeniu przejścia.

Jest użyteczne gdy zachowanie dla wyjść rejestrowych zapisane tylko dla aktualnego stanu powinno być opóźnione o jeden cykl zegara.

Do określenia ustawienia rejestrowych wyjść zawierających specyficzną wartość po pojedynczym przejściu, należy określać równania dla nich z wyrażeniem WITH podobnym do podanego niżej.
STATE S0:

IF (reset) THEN S9 WITH ErrorFlag := 1;

ErrorAddress := adress;

ENDWITH

ELSE

IF (address <= ^hE100) THEN S2 ELSE S0;

STATE 5:

IF a == 1 then 1 WITH x := 1;

y := 0;

ENDWITH;

ELSE 2 WITH x := 0;

y := 1;

ENDWITH;

LIBRARY
LIBRARY 'name'
Polecenie pozwala na wstawienie wskazanego pliku do pliku źródłowego.

Wstawianie zaczyna się od miejsca, gdzie polecenie Library jest położone.

Nazwa pliku bibliotecznego name jest nazwą pliku z wyjątkiem rozszerzenia.

Wyszukiwane są pliki z rozszerzeniem .inc, lecz jeśli plik o wskazanej nazwie nie zostanie znaleziony, jest on wyszukiwany w pliku bibliotecznym abel3lib.inc.

MACRO
macro_id MACRO [ ( dummy_arg [, dummy_arg ] ... ) ] {block};
dummy_arg parametr

Deklaracja makra jest używana do wstawiania w plik źródłowy kod bez jego konieczności pisania lub kopiowania.

Makro jest definiowane raz w sekcji deklaracji i następnie używane w module tak często, jak potrzeba.

Makra mogą być używane tylko w module, w którym zostały zadeklarowane.

Gdziekolwiek wystąpi macro_id wstawiany jest tekst skojarzony z makrem, dokładnie tak jak został on wpisany w bloku.

Wyjątkiem są parametry, zastępowane argumentami aktualnymi. Wewnątrz makra parametry są poprzedzane znakiem "?" dla wskazania, że argumenty aktualne mają je zastąpić w procesie kompilacji.

Makro nie może odwoływać się samo do siebie (samowywołanie) - powoduje to wystąpienie błędu.

przykłady:

bramka nand 3 wejścia

NAND3 MACRO (A,B,C) { !(?A & ?B & ?C) };

zastosowanie

D = NAND3 (Clock, Hello, Busy);

wynik

D = !(Clock & Hello & Busy);
zastosowanie w tabeli prawdy:

NAND3 MACRO (A,B,C,Y)

{ Truth_table ( [ ?A, ?B, ?C] -> ?Y )

[ 0 ,.x.,.x.] -> 1;

[.x., 0 ,.x.] -> 1;

[.x.,.x., 0 ] -> 1;

[ 1 , 1 , 1 ] -> 0; };
w tym przypadku wynik działania po zastosowaniu polecenia:

NAND3 (Clock, Hello, Busy, D)

jest następujący

Truth_table ( [Clock,Hello,Busy] -> D )

[ 0 , .x. ,.x. ] -> 1;

[ .x. , 0 ,.x. ] -> 1;

[ .x. , .x. , 0 ] -> 1;

[ 1 , 1 , 1 ] -> 0;

Makro bez parametrów:

A macro { W = S1 & S2 & S3 ;};

Makro z 1 parametrem:

B macro (d) { !?d };
Ich zastosowanie:

A

X = W + B(inp);

Y = W + B( )C; " pusty argument aktualny!!

Wynik:

W = S1 & S2 & S3 ;

X = W + !inp;

Y = W + ! C;

MODULE
MODULE modname [ ( dummy_arg [,dummy_arg ] ... ) ]
dummy_arg parametr

Wyrażenie definiuje początek modułu i musi współwystępować z wyrażeniem END - definiującym koniec modułu.

Opcjonalne parametry pozwalają na wstawienie argumentów aktualnych podczas kompilacji. Parametry są poprzedzane znakiem "?".
przykład:

MODULE my_example (A,B)

:

C = ?B + ?A;

:

END " zatem C podaje wartość "A+C" gdzie A i B zawierają aktualne argumenty wstawione w procesie kompilacji.

NODE
[!] node_id [,[!]node_id...] NODE [node# [,node# ]]

[ISTYPE 'attributes'];
Słowo kluczowe używane do deklaracji tych sygnałów, które mogą być przypisane do węzłów zagrzebanych (buried nodes) w urządzeniu.
node_id identyfikator używany w projekcie

node# numer węzła w rzeczywistym urządzeniu

attributes atrybuty węzła
Końcowy średnik jest wymagany.

Identyfikatorowi node_id odpowiada numer węzła node#.

przykłady:

A, B, C node ;

B node istype 'reg';

OPTIONS
Options 'option [,option ] ...' [;]
Wyrażenie options jest alternatywą metodą definiowania opcji kompilacji.
option łańcuch zawierający dostępne komendy kompilatora
Normalnie opcje kompilatora są wstawiane w linii komend lub z menu - alternatywą jest użycie polecenia options w pliku źródłowym.

Nie wszystkie opcje można użyć w wyrażeniu opcje! (zależne od wersji kompilatora ABEL).
przykład:

Options '-reduce fixed';

PIN
[!] pin_id [,[!]pin_id...] PIN [pin# [,pin# ]]

[ISTYPE 'attributes'];
Słowo kluczowe PIN jest używane do deklaracji wejść i wyjść sygnałów które muszą być dostępne na wyprowadzeniach urządzenia.
pin_id identyfikator używany w projekcie

pin# numer wyprowadzenia w rzeczywistym urządzeniu

attributes atrybuty wyprowadzenia
Końcowy średnik jest wymagany.

Identyfikatorowi pin_id odpowiada numer węzła pin#.

Numery wyprowadzeń nie muszą być przyporządkowane przed kompilacją, optymalizacją i symulacją, ale muszą być wykonane przed procesem końcowego fittingu (implementacji w danym urządzeniu) ręcznie lub w procesie automatycznym.

Operator [!] w deklaracji wyprowadzenia wskazuje, że wyprowadzenie jest aktywne stanem niskim i powinno być automatycznie negowane przez językowy procesor.
przykłady:
Clock, !Reset, S1 pin 1, 15, 3;
Oczywiście Clock jest przyporządkowywany wyprowadzeniu 1, Reset to wyprowadzenie 15, S1 wyprowadzenie 3.
UWAGA: przyporządkowanie numerów wyprowadzeń jest niezbędne w projektach wymagających narzuconego rozkładu wyprowadzeń. Liczba deklaracji wyprowadzeń jest ograniczona przez właściwości urządzenia. W przypadku automatycznego fittingu jest też podstawą do wyboru urządzenia o minimalnej liczbie wyprowadzeń wejścia - wyjścia.

PROPERTY
property_id PROPERTY 'string';
Wyrażenie pozwalające na specyfikację dodatkowych informacji o projekcie wykorzystywanych przez zewnętrzny moduł np. specjalizowany fitter.
property_id identyfikator rozpoznawany przez moduł zewenętrzny
string argument zawierający aktualne dane przekazywane modułowi zewnętrznemu

TITLE
title 'string'
Wyrażenie używane do nadania nazwy modułowi - nazwa ta jest używana we wszystkich plikach i dokumentach wytworzonych przez procesor języka ABEL.

Długość nazwy jest ograniczona do 324 znaków.

Użycie wyrażenia jest opcjonalne.
przykłady:

module m6809a

title '6809 memory decode

Ron Designer

Lodz'


TRACE
trace (inputs -> outputs);
Polecenie używane do kontroli wyświetlania modułów symulacyjnych.

Powinno być położone przed sekcją wektorów testowych lub włączone w ich sekwencję.

przykład:

TRACE ([A,B] -> [C ]);

Test_vectors ([A,B] -> [C,D])

0 -> 3;

1 -> 2;

TRACE ([A,B] -> [ D]);

2 -> 1;

3 -> 0;

XOR_Factors
XOR_Factors

signal name = xor_factors;

Polecenie pozwala na zmniejszenie rozmiaru zredukowanych równań, jeśli jest używane urządzenie pozwalające na wykorzystanie do opisu równań bramek XOR.

XOR_Factors jest techniką do konwersji sumy mintermów w wyrażenie z użyciem funkcji XOR. Wynikowe wyrażenie zawiera sumę xor mintermów równoważną oryginalnemu wyrażeniu.

przykład:

XOR_Factors := A & B;

equations

!Q16 = A & B & !D

# !B & C & D

# !A & C & D

# A & B & !C ;

wynik redukcji

!Q16 := ((A & B) $ (C & D));

Deklaracja układu

device

device_id DEVICE real_devevice ;
Deklaracja sygnałów

Deklaracja pinów (wyprowadzeń)

pin

[ ! ]pin_id [,[ ! ]pin_id...] PIN [pin# [,pln# ] ] [ISTYPE 'attribiites' ] ;

Deklaracja nód (węzłów)

node

[ ! ] node_id [, [ l ]node id...} NODE [node# [,node# ] ] [ISTYPE 'attributes'];

Przyporządkowanie atrybutów

istype

signal [,signal]... ISTYPE 'attributes';
Atrybuty
'buffer' The target architecture does not have an inverter between the associated flip-flop (if any) and the actuał output pin.

'com' The signal is combinatorial.

'invert' The target architecture has an inverter between the associated flip-flop (if any) and the actuał output pin.

'neg' Complement signal prior to processing into sum-of-products equations. 'Neg' is typically used in combination with the -reduce fixed option to control the polarity of a target device with programmable polarity.

'pos' Do not complement signal prior to processing [default].

'reg' A clocked memory elennent (generic flip-flop).

'reg_D' A clocked memory element (D-type flip-flop).

'reg_T' A clocked memory element (T-type flip-flop).

'reg_SR' A clocked memory element (SR-type flip-flop).

'reg_JK' A clocked memory elennent (JK-type flip-flop).

'reg_G' A memory element (D-type flip-flop with a gated clock).

'xor' The target architecture has an XOR gate, so one top-level exdusive-OR operator is retained in the design equations.
Deklaracje stałych

=

id [, id]... = expr [, expr]... ;
Deklaracja makra

macro

macro_id MACRO [ (dummy_arg [, dummy_arg] ... ) ] {block} ;
Deklaracja biblioteki

library

LIBRARY 'name'

Wyrażenia logiczne

Równania Equations

Tablice prawdy Truth tables

Opis stanów State diagrams

Bezpieczniki Fuses

XOR Factors


Równania

Equations

Equations

[ WHEN condition THEN ] [ ! ] element-expression;

[ ELSE equation ];

or

[ WHEN condition THEN ] equation; [ ELSE equation];
Tablice prawdy

truth_table

TRUTH_TABLE (inputs -> outputs)

inputs -> outputs;

:

or
TRUTH_TABLE (inputa [:> registereci outputs] (-> outputs ] )
Opis stanów

state_diagram
STATE_DIAGRAM state_reg

[-> state_out]

[STATE state_exp : [equation]

[equation]

:

:

trans_stmt ...]

Deklaracja bezpieczników

fuses
fuse_number = fuse value ;

or

fuse_number_set = fuse value ;
XOR Factors

XOR_Factors
signal_name = xor_factors
Wektory testowe

test_vector

Test_vectors [note ]

(Inputs -> outputs)

[invalues -> outvalues ; ]

:
Polecenie trasowania

trace

trace (inputs ~> outputs) ;

Polecenie końca pliku end

end module_name







©operacji.org 2017
wyślij wiadomość

    Strona główna