Programowanie układów cyfrowych

Możesz zaprojektować własne cyfrowe układy scalone, używając elementu układu programowalnego (znajduje się w menu, w Cyfrowych układach).

Każdy układ scalony ma swój symbol wskazujący model, który opisuje jego funkcję logiczną. Na schemacie możesz umieścić nieograniczoną liczbę układów scalonych o tym samym symbolu. Programowanie układu o danym symbolu ma wpływ na wszystkie.

Edycja modelu polega na określeniu liczby wejść, wyjść, opisu ukazującego się w prawym dolnym rogu okna (gdy układ zostanie podświetlony) i tablicy prawdy.

W polach wejść i wejść wpisywane są litery (także dwuznaki alfanumeryczne) odpowiadające wyprowadzeniom układu rozdzielane przecinkiem (bez odstępu). Przy pomocy ukośnika można pokazać negację, np. wpisanie /Q skutkuje Q, zatem wpisanie A,B,/C,/D w pole wejść doda wejścia A, B, C i D do układu, z czego C i D będą odwracały stan logiczny.

W polu tablicy prawdy wpisywany jest kod programu w postaci wejście=wyjście. Układ wybiera z tablicy pierwszą kombinację stanów wejściowych i według niej ustawia swoje wyjścia. Kombinację tworzą wartości bitowe (0, 1), zbocza (+, -), stan dowolny (?) lub litery (A, B, itd.).

Przykładowe programy:

Trójwejściowa negacja koniunkcji:

Wejścia: A,B,C
Wyjścia: X
Tablica prawdy:

111=0
???=1

Stan na wyjściu jest niski wtedy, gdy stan na trzech wejściach jest wysoki. W przeciwnym razie jest wysoki.

Sumator:

Wejścia: A,B,C
Wyjścia: S,C
Tablica prawdy:

111=11
110=10
011=10
101=10
100=01
010=01
001=01
000=00

Przerzutnik SR:

Wejścia: S,R
Wyjścia: Q,/Q
Tablica prawdy:

?? 00=10
10 ??=10
01 ??=01
?? AB=AB
Kolejność znaków kombinacji (lewej strony równania) odpowiada S, R, Q oraz Q. Prawa strona równania wskazuje wynik, stan na wyjściach Q oraz Q.

Pierwsza linijka kodu ustawia wyjście Q, gdy na żadnym z wyjść nie pojawia się sygnał (to istotne w chwili odświeżania symulacji). Druga linijka tak samo ustawia wyjście Q, gdy na wejście S podano stan wysoki. Kolejna definicja zeruje wyjście Q, gdy na wejście R podano stan wysoki. Ostatnia linijka podtrzymuje stan na wyjściu układu bez względu na stan na jego wejściach. (Dwie pierwsze litery odpowiadają zaciskom wejściowym, a kolejne dwie — wyjściowym.) Odstępy nie wpływają na działanie układu, natomiast ułatwiają czytanie kodu.

Przerzutnik D:

Wejścia: D,Clk
Wyjścia: Q,/Q
Tablica prawdy:

?? 00=10
0+ ??=01
1+ ??=10
?? AB=AB
Pierwsza linijka kodu ustawia wyjście Q, gdy na żadnym z wyjść nie pojawia się sygnał (to istotne w chwili odświeżania symulacji). Dwie następne definicje ustawiają stan na wyjściu Q taki, jak na wejściu D wtedy, gdy na wejściu zegarowym następuje zbocze narastające. Ostatnia linijka podtrzymuje stan na wyjściu układu bez względu na stan na jego wejściach.

Przerzutnik JK:

Inputs: J,K,Clk
Outputs: Q,/Q
Definition:

??? 00=10
00- AB=AB
10- ??=10
01- ??=01
11- AB=BA
??? AB=AB
Pierwsza linijka kodu ustawia wyjście Q, gdy na żadnym z wyjść nie pojawia się sygnał (to istotne w chwili odświeżania symulacji). Cztery następne definicje realizują funkcję przerzutnika dla zbocza opadającego na wejściu zegarowym. Ostatnia linijka podtrzymuje stan na wyjściu układu w przeciwnym razie.

Komparator:

Inputs: A2,A1,A0,B2,B1,B0
Outputs: Eq,A>,A<
Definition:

ABC ABC=100
1?? 0??=010
A1? A0?=010
AB1 AB0=010
??? ???=001
Pierwsza linijka kodu sprawdza, czy wartości na wejściach są równe. Trzy następne definicje sprawdzają, czy wartość na wejściu A0–2 jest większa od B0–2. W przeciwnym razie wartość B0–2 musi być większa.