Powrót

Podstawy układów cyfrowych – układy sekwencyjne, część 3

W poprzedniej części został zrealizowany generator liczb pseudolosowych bazujący na rejestrach przesuwających. W konfrontacji z „marzeniami” dotyczącymi jego funkcjonalności jest to rozwiązanie dalece niedoskonałe. Można to jednak ulepszyć przez dodanie odpowiedniego układu sterującego.


Koncepcja rozwiązania bazująca na rejestrach przesuwających 74xx194 zaprezentowana w poprzedniej części cyklu ma wszelkie cechy wymagane do stworzenia rozwiązania wręcz idealnego. W to wchodzi możliwość wpisu do zestawu rejestrów wartości startowej, gdzie na przełącznikach można ustawić sobie dowolną liczbę i dokonać wpisu do zestawu rejestrów. Ręczne „dzierganie” tych wszystkich ustawień i realizacja wpisu są trochę kłopotliwe. Pamiętając, że generowany ciąg pseudolosowy jest mocno uzależniony od pierwszego stanu zapisanego w rejestrach, fajnie by było, gdyby ta wartość również była losowa. Czy to znaczy, że potrzebujemy generatora losowego by zbudować generator losowy? I tak (gdyż uzyskany wynik jest losowy) i nie (nie będzie to powielenie istniejącego rozwiązania oraz uzyskuje się jedynie jedną liczbę losową – tyle jest potrzebne). Jest to kwestia interpretacji.

Generator losowy dla wartości początkowej

Literalnie rzecz biorąc, do wygenerowania początkowego stanu w rejestrach przesuwających jest potrzebny generator losowy. Naturalnym jest, że rodzi się pytanie: jak to zrobić? Tu naszą uwagę zapewne przykuje wykorzystanie pewnych zjawisk fizycznych, związanych przykładowo z temperaturą. Ja zaproponuję rozwiązanie najprostsze z możliwych: wykorzystujące pewne cechy ludzkie. Wyobraźmy sobie 16-bitowy licznik zliczający impulsy o częstotliwości przykładowo 1 MHz. Stan tego licznika zostanie wpisany do rejestrów przesuwających jednym krótkim impulsem w wyniku reakcji na naciśnięcie przez człowieka jakiegoś przycisku. Moment „ingerencji” człowieka jest w pełni losowy. Ograniczając się obecnie do operacji wpisu wartości początkowej do rejestrów przesuwających (oraz nie rozpatrując szczegółów rozwiązania układu reagującego na naciśnięcie przycisku), koncepcję pokazuje rysunek 1.

Rysunek 1

 

Przy proponowanej częstotliwości generatora (1 MHz), cały licznik „przekręci się” po około 0,06 s. Praktycznie nie istnieją szanse, by komukolwiek udało się „wygenerować” dokładnie tę samą liczbę naciskając przycisk Start i generując pojedynczy impuls wpisu danych z licznika 16-bitowego do rejestru przesuwającego.

Co byśmy jeszcze chcieli

Jest to dobry moment na to, by określić inne swoje zachcianki. Przykładowo moje wymagania co do funkcjonalności całego generatora były następujące:

1. Po włączeniu zasilania, generator „stoi” a na wyjściu na wszystkich bitach panuje zero logiczne.

2. Chcąc uruchomić generowanie liczb losowych należy nacisnąć przycisk startowy.

3. Chcąc zatrzymać generowanie należy nacisnąć przycisk zatrzymujący i przechodzimy do punku 1.

Z tych oczekiwanych funkcji całego układu wyłania się sekwencja pewnych czynności do wykonania. Należy ją „przetłumaczyć” na działania w świecie układów logicznych, co można zapisać następująco (by uniknąć zjawisk hazardowych należy zadbać, by włączenie zasilania było dla rejestru automatu równoznaczne z przejściem do punktu 1):

1. Wygenerować impuls zerujący dla rejestrów przesuwających oraz włączyć blokadę impulsów taktujących pracą rejestru przesuwającego i przejść do punktu 2.

2. Sprawdzić, czy został aktywowany sygnał startu, jeżeli tak, to przejść do punktu 3, w przeciwnym razie przejść do punktu 2 (pozostać w tym stanie).

3. Jeżeli wartość startowa binarnie nie odpowiada liczbie 0, to przejść do stanu 4, w przeciwnym wypadku pozostać w tym stanie.

4. Wygenerować impuls wpisu wartości startowej do rejestrów przesuwających i przejść do punktu 5.

5. Wyłączyć blokadę impulsów taktujących rejestr przesuwający i przejść do punktu 6.

6. Sprawdzić, czy został aktywowany sygnał stop, jeżeli tak, to przejść do punktu 1, w przeciwnym razie przejść do punktu 6 (czyli pozostać w tym stanie).

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze grudniowym czasopisma Zrozumieć Elektronikę (ZE 12/2023). Pełna wersja czasopisma umieszczona jest pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 12/2023 znajduje się tutaj.

 

Andrzej Pawluczuk
apawluczuk@vp.pl

 

Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (Cappuccino = 10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Postaw mi kawę na buycoffee.to
Następnie wybrać:
– jeśli jeden numer ZE – CAPPUCINO (10 zł),
– jeśli kilka numerów ZE – WSPIERAM ZA. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dołączyć wiht=”215” />