138
5 Języki specyfikacji dla układów programow alnych
W niektórych przypadkach instrukcje IF i CASH można stosować wymiennie.
Użycie instrukcji CASH nic zawsze jest możliwe np z powodu zbyt wielu kombinacji warunków, które należy uwzględnić. Z kolei korzystając z wyrażenia IF możemy doprowadzić do sytuacji, w której opisane warunki będą zbyt skomplikowane dla kompilatora, sprawdzanie bowiem każdego kolejnego warunku ELSIF pociąga za sobą konieczność włączenia do opisującego go równania negacji wszystkich poprzednich warunków.
Deklarowanie i odwołanie się do rejestrów /
Rejestry deklaruje się jako zmienne typu np. DFF. DFFE, JKFF, SRFF. Formalnie każdy przerzutnik rejestru jest obiektem, którego wejścia i wyjścia (wejścia informacyjne D. T, JK, SR. wejście zegarowe CLK, wejście zezwolenia ENA i wyjście Q) są obejmowane wspólną nazwą z rozszerzeniem określającym rodzaj wejścia.
SOBDESIGW bur_reg (
: INPUT;
: OUTPUT;
clk, load, d(7..0) q|7..oj
)
VARIABLE
: DFFE;
ffl7..0J
BEGIN
ffU.clk - clk; ffU.ena - load; ff11.d - d(); qll - ffll.q;
END;
Port ff(). clk jest wejściem zegarowym przerzutników, ff[]-ena - wejściem zezwolenia (enable), ffll.d - wejściem D. a wyjściem. Poszczególne
wyrażenia łączą je z portami definiowanej makrofunkcji. W przypadku potrzeby bramkowania globalnego zegara w układzie, zaleca się wykorzystywanie wejść Clock Enable. Możliwe jest deklarowanie wyjść układu jako synchronicznych; w takim wypadku wyrażenia, które zostały przypisane poszczególnym wyjściom układu są wprowadzane na wejścia D przerzutników i dopiero po aktywnym zboczu zegara pojawiają się na wyjściu układu.
3.2. Mzyk AU DL
139
przykład 5.17
SOBDESIGN reg_out
ł
clk, load, d (7..0) : INPUT;
q[7..0] : OUTPUT;
)
VARIABLE
q(7..0) : DFFE; % also declared as outputs \
BEGIN
q[].clk - clk; q(].ena - load; q() - dM;
END.
W przykładzie pokazano jedynie sposób wykorzystania przerzutników do tworzenia wyjść synchronicznych. Sposób ten może być szczególnie przydatny w przypadku automatu Mealy'ego. JeZeli w wyrażeniu boolowskim po nazwie zmiennej typu przerzutnik nie określimy portu, to przyjmuje się, że jest on:
; - wejściem d, jeżeli zmienna występuje po lewej stronie jak w linii q (J - d[|;
£r wyjściem q, jeżeli zmienna występuje po prawej stronic.
Automaty tworzy się deklarując ich nazwę oraz nazwy i kody stanów. Kodowanie nie jest jednak konieczne; można podać jedynie ich listę, a kompilator cznic zakoduje stany i wybierze odpowiedni typ przerzutnika do ich realizacji, pełnego opisu jest niezbędna specyfikacja działania automatu oraz określenie gnatów sterujących dla przerzutników: Resct, Clock, Enable. Sygnały te definiuje się T-Cbnie jak w przypadku pojedynczych przerzutników. tj. posługując się identyfikatorem z rozszerzeniem. Działanie układu (np. jego tablice przejść oraz wyjść) można opisać kilkoma sposobami, wykorzystując instrukcje typu IF, CASE lub opis tablicowy (TABLE). W podanych dalej przykładach pokazano różne sposoby opisu. W pierwszym posłużono się instrukcjami IF i CASE, za pomocą których opisano tablice przejść oraz wyjść, elementarne zaś kodowanie stanów pozostawiając kompilatorowi.
Przykład 5.18
T1TLE "Automat wykrywający sekwencje 001";
SUBDES1GN detl