Witam,
paluszasty napisał: Szczerze to nie kapuje tego pomysłuu z pamieciami nieulotnymi. Rozumier jak mozna zrealizowac komperator na uC, pojedynczych bramkach., czy ukłądach PLD, w sumei miedzy tymi 2 ostatnimi wersjami nei ma zadnej róznicy. Ale na pamieci EEPROM??? Zupełnei nei rozumiem koncepcji.
przecież to proste i chyba oczywiste jeśli pamięta się, iż pamięć nieulotna o adresowaniu i wyjściu równoległym to zapisana tablica adresowana wektorem wejściowym, czyli słowem adresowym;
A(a1, a2, ...am) której zawartość danej komórki pojawia się w postacji słowa - wektora wyjściowego;
W(w1, w2, ... wn).
Niech jak poprzednio będzie:
X(x1, x2, x3, x4) i
Y(y1, y2, y3, y4).
Z powyższych bitów dwóch liczb czterobitowych
X i
Y tworzymy ośmiobitowy wektor adresu;
A(x1, x2, x3, x4, y1, y2, y3, y4), przy czym najstarszy bit obu liczb
X i
Y to bit z największym indeksem ==>
x4,
y4.
Jak widać, przestrzeń adresowa pamięci nieulotnej musi być conajmniej ośmiobitowa i niech przyporządkowanie bitów adresowych od
a0 do
a7 do bitów liczb
X i
Y będzie następujące:
a7_a6_a5_a4|a3_a2_a1_a0 pozycja
x4_x3_x2_x1|y4_y3_y2_y1 dziesiętna
----------------|----------------| adresu, "relacja"
_0 _0 _0 _0 |_0 _0 _0 _0 | 0 "Y = X"
_0 _0 _0 _0 |_0 _0 _0 _1 | 1 "Y > X"
_0 _0 _0 _0 |_0 _0 _1 _0 | 2 "Y > X"
..................................................
_0 _0 _0 _0 |_1 _1 _1 _1 | 15 "Y > X"
..................................................
_0 _0 _0 _1 |_0 _0 _0 _0 | 16 "Y < X"
_0 _0 _0 _1 |_0 _0 _0 _1 | 17 "Y = X"
..................................................
_1 _0 _0 _0 |_0 _0 _0 _0 | 128 "Y < X"
_1 _0 _0 _0 |_0 _0 _0 _1 | 129 "Y < X"
..................................................
_1 _0 _0 _0 |_1 _0 _0 _0 | 136 "Y = X"
_1 _0 _0 _0 |_1 _0 _0 _1 | 137 "Y > X"
...................................................
_1 _0 _0 _1 |_1 _0 _0 _0 | 152 "Y < X"
...................................................
_1 _1 _1 _1 |_1 _1 _0 _1 | 253 "Y < X"
_1 _1 _1 _1 |_1 _1 _1 _0 | 254 "Y < X"
_1 _1 _1 _1 |_1 _1 _1 _1 | 255 "Y = X"
Oczywiście powyższą tablicę prawdy należy wypełnić w całości, czyli od pierwszego adresu: 0_0_0_0_0_0_0_0 (0) do ostatniego 1_1_1_1_1_1_1_ 1 (255), oraz wpisać właściwe relacje.
Pozostaje jeszcze przypisanie wartości (słowo wyjściowe) dla odpowiednich relacji, czyli dla:
"Y = X",
"Y < X",
"Y > X".
Jeśli użyjemy, jak wcześniej wspominałem, pamięci PROM o czterobitowym słowie danych, to mamy do dyspozycji szesnaście stanów tego słowa - wektora wyjściowego;
W(w1, w2, w3, w4), które możemy dowolnie zagospodarować, ponieważ dotąd wykorzystane są tylko trzy stany (0001, 0010, 0001), jest to sprawa wyboru i do ewentualnego wykorzystania.
Można np. zakodować negacje powyższych trzech stanów pamiętając jednak o tym, że:
NIE_"Y = X" to samo co:
"Y < X"_OR_"Y > X".
W wersji minimalnej można np. przyporządkować tak:
"Y = X" ==> w1 = "1", pozostałe bity równe "0" (0001),
"Y < X" ==> w2 = "1", pozostałe bity równe "0" (0010),
"Y > X" ==> w3 = "1", pozostałe bity równe "0" (0100),
wtedy dla wypisanych wyżej przykładów zawartości komórek
W muszą być takie:
w4 w3 w2 w1| pozycja
----------------| dziesiętna
_0 _0 _0 _1 | 0
_0 _1 _0 _0 | 1
_0 _1 _0 _0 | 2
.........................
_0 _1 _0 _0 | 15
_0 _0 _1 _0 | 16
_0 _0 _0 _1 | 17
..........................
_0 _0 _1 _0 | 128
_0 _0 _1 _0 | 129
..........................
_0 _0 _0 _1 | 136
_0 _1 _0 _0 | 137
..........................
_0 _0 _1 _0 | 152
.........................
_0 _0 _1 _0 | 253
_0 _0 _1 _0 | 254
_0 _0 _0 _1 | 255
Jak widać, bit
w4 nie został tu wykorzystany i równie dobrze może mieć wartość alternatywną.
Po wypełnieniu wszystkich 256 komórek, można stworzyć plik binarny właściwy do zaprogramowania danego typu pamięci nieulotnej.
Jak już wspominałem wcześniej, do wyliczenia zawartości poszczególnych komórek pamięci można wykorzystać odpowiednio spreparowany arkusz kalkulacyjny.
Zapis binarny wektorów adresu i wyjściowego zmuszony byłem rozdzielić znakiem podkreślenia
_ ponieważ inaczej nie mogłem utrzymać "pionu" kolumn...
Pozdrawiam