[PLD] zastosowanie prostych układów programowalnych na przykładzie dekodera adresowego

Pozostałe układy mikrokontrolerów, układy peryferyjne i inne, nie mieszczące się w powyższych kategoriach.
Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

[PLD] zastosowanie prostych układów programowalnych na przykładzie dekodera adresowego

Postautor: tasza » poniedziałek 22 maja 2017, 10:51

#slowanawiatr

Projektując swojego dino-85 bardzo szybko spotkało mnie zagadnienie zbudowania dekodera adresowego,
który po pierwsze podzielił by dostępną przestrzeń adresową na ROM i RAM, tak po połowie najlepiej,
po drugie zapewniłby podział przestrzeniu I/O procesora 8085 na kilka jakby segmentów, na różnego rodzaju peryferia.

Jakie sygnały są aktywne podczas dostępu do pamięci, a jakie do I/O - to wynika bezpośrednio ze specyfikacji procesora, trzeba tylko to wszystko ubrać w jakąś logikę i dekoder gotowy.

Do wyboru miałam wykorzystanie garści układów cyfrowych typu 74138, 74139 etc z ewentualnym dodatkiem bramek luzem albo układ programowalny. Zależało mi jednak na tym, aby płytka była niezbyt skomplikowana, zestaw przenikających się magistral adresowych i danych już i tak gwarantował mi sporo atrakcji. Stanęło zatem na układzie GAL.

Przygotowanie pliku źródłowego dla kompilatora eqn2jed to dwa zagadnienia, trzeba:
* `wyobrazić sobie dekoder` na płytce i to, jakie sygnały wyboru mają być na poszczególnych pinach
* pracowicie napisać równania logiczne warunkujące aktywność kolejnych wyjść dekodera

Aby łatwiej się dalej opowiadało, posłużę się schematem dino-85, dekoder mieszka w prawym, górnym rogu

:arrow: http://bienata.waw.pl/dino85/cpu-board-sch.jpg (jako link, bo forum nie chce takich dużych grafik)

Specyfika procesora 8085 jest taka, że chęć wykonania operacji na pamięci lub porcie I/O sygnalizuje on wyjściem IO/M, które w stanie H oznacza dostęp do portów a w L dostęp do pamięci. Druga przydatna cecha procesora jest taka, że adresując porty I/O procesor powiela stan młodszych linii adresowych A7..A0 na starszych A15..A8. To jest mega ułatwienie, bo chcąc dostać się ścieżką do przykładowo bitu A1 równie dobrze możemy zapiąć się na bit A9.

Podział dostępnej pamięci na pół linią adresową A15 nie wymaga jakiegoś wielkiego komentarza poza stwierdzeniem, że ROM jest w zakresie 0000-7FFF, a RAM pokrywa 8000-FFFF

Z portami I/O, no wtedy to ja miała rozmach (i planów co do dino-85 całą masę) zatem
przestrzeń z portami została podzielona na sześć banków, zgodnie z tabelką poniżej:

Kod: Zaznacz cały

bity adresu      baza   nazwa    zastosowanie
101xxxxx       A0h    /CS2   uniwersalne iocsA0
100xxxxx       80h     /CS2   uniwersalne iocs80
011xxxxx       60h    /CS2   uniwersalne iocs60
010xxxxx       40h    /CS2   uniwersalne iocs40
001xxxxx       20h    /CS2   pio np. 8255
000xxxxx       00h    /CS1    komunikacja


Dodatkowo do dekodera wprowadzone są tak na wszelki wypadek sygnały /RD i /WR procesora, bo a nuż widelec. Na podobnej zasadzie dwa wolne piny wejściowe opatrzyłam zworkami (jumperami) i są one dostępne dla równań logicznych jako sygnały J1 oraz J2. Takie rozwiązanie, o ile zajdzie potrzeba umożliwi mi dodatkowe oddziaływanie na pracę dekodera adresowego przy pomocy zworkowej konfiguracji na płytce.

Plik z równaniami oraz słownomuzycznym komentarzem poniżej.

Kod: Zaznacz cały

chip dino85 gal16v8
{

sygna│ IO_/M
stan H - dostŕp do IO, na A8...A15 jest to samo co na A0...A7
stan L - dostŕp do MEM, adresy A0...A14, A15 wybiera ROM lub RAM

dla IO mamy 6 zestawˇw portˇw
101xxxxx A0h - iocsA0
100xxxxx 80h - iocs80
011xxxxx 60h - iocs60
010xxxxx 40h - iocs40
001xxxxx 20h - pio
000xxxxx 00h - komunikacja

}

{ przypisania sygna│ˇw do pinˇw uk│adu GAL }

J1 = 2      { na przysz│e pomys│y }
J2 = 3      { na przysz│e pomys│y }
A15 = 4      { RAM lub ROM }
A13 = 5    { to┐same z A5 }
A14 = 6    { to┐same z A6 }
RD = 7      { na przysz│e pomys│y}
WR = 8      { na przysz│e pomys│y}
IOM = 9      { MEM lub IO }

CS3 = 12   { wybˇr zestawu IO }
CS2 = 13
CS1 = 14
CS4 = 15
CS5 = 16
CS6 = 17

ROM = 19   { selekcja pamiŕci }
RAM = 18

equations

{
dla IOM = L wybieramy pamiŕc
dla A15 = L bŕdzie ROM 0000...7FFF
dla A15 = H bŕdzie RAM 8000...FFFF
}

/RAM =  A15 & /IOM
/ROM = /A15 & /IOM


{
dla IOM = H wybieramy IO, na szynie addr. A15...A8 = A7..A0,
zatem korzystamy z bitˇw A12...A15, bo tak jest │atwiej ťcie┐ki poprowadziŠ
}

/CS1 = /A15 & /A14 & /A13 & IOM { 00h }
/CS2 = /A15 & /A14 &  A13 & IOM { 20h }
/CS3 = /A15 &  A14 & /A13 & IOM { 40h }
/CS4 = /A15 &  A14 &  A13 & IOM { 60h }
/CS5 =  A15 & /A14 & /A13 & IOM { 80h }
/CS6 =  A15 & /A14 &  A13 & IOM { A0h }

{ koniec }


Po przepuszczeniu przez kompilator eqn2jed otrzymujemy plik *.jed, taki zbiorek podajemy programatorowi układów logicznych celem zaprogramowania kostki.

Plik *.log zawiera 'pinout' naszego własnego układu scalonego oraz informacje o tym ile zasobów układu skonsumowało nasze rozwiązanie.

Kod: Zaznacz cały

EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991

Document file for dino85.eqn
Device: 16V8

$LABELS 20 nc J1 J2 A15 A13 A14 RD WR IOM GND nc CS3 CS2 CS1 CS4 CS5 CS6 RAM
 ROM VCC


Pin   Label               Type
---   -----               ----
2     J1                  unused
3     J2                  unused
4     A15                 com input
5     A13                 com input
6     A14                 com input
7     RD                  unused
8     WR                  unused
9     IOM                 com input
12    CS3                 neg,com output
13    CS2                 neg,com output
14    CS1                 neg,com output
15    CS4                 neg,com output
16    CS5                 neg,com output
17    CS6                 neg,com output
18    RAM                 neg,com output
19    ROM                 neg,com output

EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991

Device Utilization:

No of dedicated inputs used               :  4/10 (40.0%)
No of dedicated outputs used              :  2/2  (100.0%)
No of feedbacks used as dedicated outputs :  6/6  (100.0%)

      ------------------------------------------
      Pin   Label                 Terms Usage
      ------------------------------------------
      19    ROM                   1/8   (12.5%)
      18    RAM                   1/8   (12.5%)
      17    CS6                   1/8   (12.5%)
      16    CS5                   1/8   (12.5%)
      15    CS4                   1/8   (12.5%)
      14    CS1                   1/8   (12.5%)
      13    CS2                   1/8   (12.5%)
      12    CS3                   1/8   (12.5%)
      ------------------------------------------
      Total                       8/64  (12.5%)
      ------------------------------------------

EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991

                            Chip diagram (DIP)

                             ._____    _____.
                             |     \__/     |
                             |  1        20 | VCC
                          J1 |  2        19 | ROM
                          J2 |  3        18 | RAM
                         A15 |  4        17 | CS6
                         A13 |  5        16 | CS5
                         A14 |  6        15 | CS4
                          RD |  7        14 | CS1
                          WR |  8        13 | CS2
                         IOM |  9        12 | CS3
                         GND | 10        11 |
                             |______________|



Na podobnej zasadzie zbudowałam lokalny dekoder adresowy pracujący w module komunikacyjnym dino-85.

Obrazek

Tam dla odmiany wykorzystane są do obliczeń sygnały sterujące /WR i /RD ponieważ oprócz UART modułek zawierał też proste ośmiobitowe wejście i wyjście zrealizowane na buforze szyny 74LS541 i ośmiokrotnym rejestrze D typu 74LS574. Równania wspomnianego dekodera są takie:

Kod: Zaznacz cały

chip dinocom gal16v8

{ wejťcia }
A3 = 2
A2 = 3
A1 = 4
A0 = 5

RD = 6
WR = 7

CS = 8   { g│ˇwny /CS modu│u czyli /CS1 z dino, dekodowane tylko I/O }

{ wyjťcia }
UART = 12
POUT = 13
PIN = 14

equations

/UART    =  /CS & /A3 & /A2 & /A1         { uart pod adresem   xxxx0000 i xxxx0001 }
POUT    =  /CS & /A3 & /A2 & A1 & /A0 & /WR { zatrzask wyj      xxxx0010 do zapisu  }
/PIN   =  /CS & /A3 & /A2 & A1 & /A0 & /RD { bufor wej       xxxx0010 do odczytu  }


A tak wygląda pinout układu:

Kod: Zaznacz cały

EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991

Document file for dinocom.eqn
Device: 16V8

$LABELS 20 nc A3 A2 A1 A0 RD WR CS nc GND nc UART POUT PIN nc nc nc nc nc VCC


Pin   Label               Type
---   -----               ----
2     A3                  com input
3     A2                  com input
4     A1                  com input
5     A0                  com input
6     RD                  com input
7     WR                  com input
8     CS                  com input
12    UART                neg,com output
13    POUT                pos,com output
14    PIN                 neg,com output

EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991

Device Utilization:

No of dedicated inputs used               :  7/10 (70.0%)
No of dedicated outputs used              :  2/2  (100.0%)
No of feedbacks used as dedicated outputs :  1/6  (16.7%)

      ------------------------------------------
      Pin   Label                 Terms Usage
      ------------------------------------------
      14    PIN                   1/8   (12.5%)
      13    POUT                  1/8   (12.5%)
      12    UART                  1/8   (12.5%)
      ------------------------------------------
      Total                       3/64  (4.7%)
      ------------------------------------------

EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991

                            Chip diagram (DIP)

                             ._____    _____.
                             |     \__/     |
                             |  1        20 | VCC
                          A3 |  2        19 |
                          A2 |  3        18 |
                          A1 |  4        17 |
                          A0 |  5        16 |
                          RD |  6        15 |
                          WR |  7        14 | PIN
                          CS |  8        13 | POUT
                             |  9        12 | UART
                         GND | 10        11 |
                             |______________|



W podsumowaniu - wprawdzie komputerek stracił odrobinę na klimatyczności, ale konstrukcja sporo się uprościła a co najważniejsze jest ona modyfikowalna, wystarczy przeprogramować układy innymi równaniami. No i cenowo odpowiadają one garści adekwatnej drobnicy w TTL.

Trochę do poczytania o programiku eqn2jed jest w załączonych pdf i w sumie to jedyne co mam pod ręką.
Rozpracowywałam to na zasadzie rozpoznania bojem i rozkminiania przykładowych źródełek z sieci, no i jakoś poszło.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Wróć do „Inne mikroklocki, również peryferyjne”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości