logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

atmega32 - Emulacja ROM 27xx za pomocą ATMEGA32 w systemie z procesorem 6502

Rafraf 13 Lut 2015 22:17 1467 15
REKLAMA
  • #1 14436465
    Rafraf
    Poziom 16  
    Nie wchodząc we wszystkie szczegóły - staję przed próbą podłączenia mikrokontrolera Atmega do pewnego systemu mikroprocesorowego jako emulatora pamięci zewnętrznej z programami. Aktualnie zadanie jest realizowane przez CPLD xc95 podlaczony do dwóch układów ROM 27c040. Zarys był taki, żeby użyc atmegi i karty SD ale timing jest raczej nieosiągalny, więc póki co chciałbym widziec atmege w roli 27xx.

    Czy ktoś już próbował wykonać tego typu zadanie? Czy ktoś może przedstawić jakis dowód, ze wykonanie takiego zadania jest nierealne? (nie jest dla mnie problemem taktowac ta atmege nawet powyżej 20MHz, teoretycznie rozważałem pracę na przerwaniu jak i polling magistrali sterujacej). System nadrzędny ma procesor 6502 taktowany 0.75Mhz.
  • REKLAMA
  • #2 14436765
    shadow0013
    Poziom 34  
    Rafraf napisał:
    chciałbym widziec atmege w roli 27xx

    ATmega 644 (1284) lub nowsze -szybsze, więcej pamięci, rozbudowane przerwania zewnętrzne.
  • REKLAMA
  • #3 14436778
    Rafraf
    Poziom 16  
    Zgadzam się, ale ja póki co szukam "proof of concept", jesli uda mi sie poprawnie zaemulowac sekwencje startowa dla tego urządenia, to przejście na uC z wiekszą liościa flasha jak wspomniane 644/1284 czy atmege 64/128 z interface do zewnetrznej przestrzeni adresowej juz nie jest az takim problemem.
  • #4 14437257
    shadow0013
    Poziom 34  
    Rafraf napisał:
    jesli uda mi sie poprawnie zaemulowac sekwencje startowa dla tego urządenia

    Dwa lata temu przy próbach zrobiłem błąd i próbowałem emulować 27xx na 644 wraz z układami sterującymi 27xx. Wydaje mi się że sama emulacja 27xx powinna zadziałać, a potem ewentualnie rozbudować o układy sterujące na PCINT.
  • REKLAMA
  • #5 14437267
    BlueDraco
    Specjalista - Mikrokontrolery
    Nie napisałeś NIC o parametrach czasowych. Przyjmując, że pamięć ROM miałaby pracować z czasem dostępu 150 ns zadanie jest niewykonalne na jakimkolwiek mikrokontrolerze 8-bitowym. Podejrzewam, że na ATmega dałoby się symulować ROM z czasem dostępu rzędu kilku mikrosekund. Na STM32F42x (180 MHz) być może masz szanse osiągnąć jakieś 150..200 ns przy uważnym programowaniu.
  • #6 14437294
    Rafraf
    Poziom 16  
    Czas dostepu wyznaczony jest przez czestotliosc pracy procesora:

    http://archive.6502.org/datasheets/mos_6500_mpu_nov_1985.pdf (str 5)

    nie jestem absolutnie pewien, ze dobrze odczytalem wykresy czasowe, ale wydaje mi sie, ze interesujacy jest parametr Tacc vel Memory Read Access time, dla 1MHz wynosi max 575ns.
  • #7 14437303
    BlueDraco
    Specjalista - Mikrokontrolery
    No to na STM32F4xx bez problemu, a na ATmega bez jakichkolwiek szans. Zacząłem coś podobnego robić jakiś czas temu z MC68008, ale płytka leży w pudełku i czeka.
  • #8 14439063
    tmf
    VIP Zasłużony dla elektroda
    @BlueDraco - proszę nie żartuj. Jeśli to tylko ma emulować pamięć o czasie dostępu ok. 500 ns to mamy aż 10 instrukcji asemblera na to przy taktowaniu 20 MHz, jest to aż nadto, zważywszy, że trzeba tylko odczytać adres, następnie bajt z FLASH i wystawić go na port IO. Kiedyś budowałem taki emulator, ale bez MCU - jako pamięć był SRAM o przełączanych przez multipleksery liniach adresowych pomiędzy systemem, a MCU który pamięć programował. W czasie emulacji pamięć bezpośrednio sterował uruchamiany system, a MCU tylko na czas jej programowania nowym wsadem.
  • #9 14439153
    BlueDraco
    Specjalista - Mikrokontrolery
    "Aż 10 instrukcji.." Ok. Zarejestrowanie strobu - min. 2 instrukcje w pętli. Odczyt dwóch części adresu po 8 bitów - min 2 instrukcje. Sklecenie adresu i odczyt pamięci (skąd w ATmega wziąć 64 KiB RAM na emulowany EPROM?) - załóżmy optymistycznie, że 3 instrukcje. Wystawienie danych na port - min. 1 instrukcja. Wykrycie końca cyklu - min. 2 instrukcje w pętli. Na moje oko 13 instrukcji niewyjęte, przy założeniu, że NICZYM innym procesor nie może się zajmować. Przy 16 MHz mamy jakieś 800 ns, o ile potrafimy artystycznie wyrzeźbić w asemblerze taki programik.

    To samo na CM4 - obsługa sprzętowa przerwania od strobu - 13..20 cykli. Obsługa programowa - jakieś 20 cykli. Powrót z przerwania - 13..20 cykli. Razem max. 50 cykli, czyli < 300 ns przy niezbyt starannym programowaniu w C. Przy programowaniu asemblerowym zapewne da się zejść do 40 cykli, a w międzyczasie możemy jeszcze obsługiwać przerwania o niższych priorytetach, np. do komunikacji.
  • #10 14440316
    tmf
    VIP Zasłużony dla elektroda
    @BlueDraco - nawet twoje wyliczenia wskazują na 10 taktów, a nie 13, więc w czym masz problem? A wsad ma być raczej we FLASH, nie w SRAM. Więc tu też problemu nie ma. Programik w asemblerze jest banalny - 2xSIBC, 2xIN, 1xOUT, 1xLPM. Wkrótce nawet do migania LEDami będziemy potrzebować ARM z koprocesorem...
  • #11 14440401
    BlueDraco
    Specjalista - Mikrokontrolery
    Problemu nie mam żadnego - w tej sekwencji instrukcji są dwie pętle badające wartość bitu strobu odczytu, w których trzeba się zakręcić. ATmega do symulacji EPROM się nie nadaje i koniec, no chyba, że chcemy symulować EPROM o pojemności 512 bajtów i czasie dostępu > 2us.

    Do migania LED biorę to, co tańsze, a migać mam zwyczaj płynnie, z modulacją PWM. Taki np. STM32F030F4 kosztuje 2 zł i ma 6..8 kanałów PWM. ;) Można też przy jego użyciu zamigać paroma setkami diod WS2812 na choince, symulując migające gwiazdki, pełznące robaczki, fajerwerki lub świeczki na delikatnym wietrzyku... Ech, rozmarzyłem się... ;)
  • #12 14440596
    tmf
    VIP Zasłużony dla elektroda
    @BlueDraco - to twoja opinia, ale fakty jej przeczą. AVR ma instrukcję testowania stanu IO z pętlą (SBIC, SBIS), więc podana wcześniej sekwencja wykona się w wystarczającym czasie (500 ns). Autor sprecyzował jakie są wymogi czasowe i na AVR da się je spełnić. Co do WS2812 - obsługa tych diod i na AVR i na ARM będzie taka sama. Jeśli potrzebujesz do ich obsługi więcej mocy obliczeniowej to twój problem, ale miałem cię za dobrego programistę... 8 kanałów PWM tak samo jest do dyspozycji na prostym i tanim AVR. Proponuję się jednak trzymać tematu, czyli emulacji EPROM 27CXXX.
    BTW, gdzie masz STM32F030F4 za 2zł?
  • #13 14441783
    piotrva
    VIP Zasłużony dla elektroda
    A ja ze swojej strony dorzucę - jeśli ATMega nie da rady, to może w ogóle dać sobie spokój z mikroklockami, tylko sięgnąć po jakiś tani i prosty układ FPGA/CPLD?
  • #14 14441872
    gaskoin
    Poziom 38  
    tmf napisał:
    STM32F030F4 za 2zł?


    W farnellu, ale trzeba kupić 100 sztuk.
  • #15 14442892
    vania
    Poziom 24  
    gaskoin napisał:
    tmf napisał:
    STM32F030F4 za 2zł?


    W farnellu, ale trzeba kupić 100 sztuk.


    Raczej 1000szt wtedy faktycznie wychodzi 1,84zł ale netto. Zawsze szukam tych osławionych Cortexów po 2zł i dla amatora (<20szt) to raczej ciężko.
  • REKLAMA
  • #16 14458310
    elektryk
    Poziom 42  
    Mam wrażenie że wyważasz otwarte drzwi. Od co najmniej 20 lat buduje sie takie urządzenia a oparciu o kości statycznej pamięci RAM która na czas programowania jest odłącza multiplexerami.
    Jeśli chciałbyś przeładowywać szybciej to istnieje coś takiego jak pamięć dwu-portowa RAM, a w ostateczności można ją zaemulować układem FPGA ale nie będzie to trywialne.
REKLAMA