W ramach ćwiczenia staram się zaprojektować implementację Gry Życia Conwaya w prostej cyfrowej logice. Mógłbym zrobić wszystko, minimalizując funkcję 9-zmiennych, ale wyobrażam sobie, że nadal będzie dość duża. Jednym z podstawowych elementów algorytmu jest ustalenie, ilu z twoich ośmiu sąsiadów „żyje”.
Biorąc pod uwagę 8 danych wejściowych, jaki jest najłatwiejszy sposób ustalenia, ile jest ustawionych? Szczególnie potrzebuję wyjścia, które jest wysokie, gdy ustawione są 2, i wyjścia, które jest wysokie, gdy ustawione są 3.
Mój główny pomysł składa się teraz z rejestru przesuwnego PISO, licznika i dekodera 3: 8, ale do sterowania tym wszystkim potrzebuję mikrokontrolera. Nie wydaje się to skomplikowane z powodu funkcji. Może ROM 256x2 też by działał, ale moje wyszukiwania nie wykazały żadnej z tego rodzaju części.
Wiem, że każde zdjęcie z 10 IO może zrobić to trywialnie, ale chcę go wdrożyć w jak najmniejszy możliwy sposób.
źródło
Co jest minimalne? Mikrokontroler jest tylko jedna część i może powodować wynik z minimalnym opóźnieniem (<1μ s). Przy 54 centach ATTiny20 jest najtańszym mikrokontrolerem z 10 I / O w Digikey.
Tabela przeglądowa jest również tylko 1 częścią i jest szybsza niż mikrokontroler. Zapomnij o równoległych pamięciach EEPROM, są drogie. Użyj równoległej lampy błyskowej o szerokości całego bajtu . Ten ma 512 kB, czyli 2000 razy więcej niż potrzebujesz, ale jest to najtańsze rozwiązanie (1 dolar). I możesz dodać 6 dodatkowych funkcji 1-bitowych w tej samej cenie.
Możesz także użyć CPLD . Napisz funkcję w VHDL lub Verilog jako jedną długą instrukcję SOP (Sum Of Products) i pozwól syntezatorowi utworzyć logikę.
Rejestr przesuwny jest OK, jeśli można poczekać na wynik; to najwolniejsze rozwiązanie.
Wreszcie możesz to zrobić za pomocą bramek logicznych , ale poświęcisz dużo czasu na zredukowanie SOP do minimalnej postaci, jeśli chcesz przejść na wszystkie podstawowe. Rocketmagnet ma dobry pomysł, używając sumatorów, ale jego liczby są wyłączone: 1 bitowy sumator pół daje 2 bity, a nie 3. Tak więc dodanie wyjść pół sumatora dwa na dwa wymaga dwóch 2-bitowych pół sumatorów, dając dwa 3- bitowe wyniki. Użyj 3-bitowego sumatora, aby uzyskać wynik 4-bitowy. Używając 1-bitowych sumatorów potrzebujesz tylko jednego 2-bitowego sumatora.
źródło
Hybrydowe obwody równolegle-sekwencyjne mogą być znacznie bardziej kompaktowe niż obwody czysto równoległe. Na przykład, jeśli dostosujesz reguły tak, aby pole 3x3 obróci komórkę w środku martwą, jeśli będzie mniej niż trzy żywe komórki lub więcej niż cztery, i przełączysz ją, jeśli będą dokładnie trzy żywe komórki (zachowanie pod tymi nowe reguły będą pasować do oryginału), można uprościć logikę, wykonując dwuetapową sekwencję:
Tablica
tempVal[x,y]
ma dwa bity na komórkę; ta ostatnia operacja sumuje trzy takie liczby, aby uzyskać wartość 0–9 (chociaż wszystkie wartości przekraczające cztery są równoważne), które można następnie wykorzystać do obliczenia jednobitowego stanu bieżącego / martwego dla następnej generacji.BTW, alternatywą do wykonania sumy arytmetycznej w drugim etapie i zbadania wartości byłoby przekonwertowanie tempVal [x, y] na jedną gorącą reprezentację, a następnie jawne sprawdzenie jednej z dziewięciu kombinacji wartości, która dałaby trzy komórki lub jeden z dwunastu, który dałby cztery.
źródło