[abc80] ABC80 med SD micro

H. Peter Anvin hpa at zytor.com
Tors Dec 12 10:56:38 PST 2019


On 2019-12-11 23:00, juhasz wrote:
> jag tar inte illa upp iaf! ;) allt som går att ansluta till abc80 är bra
> tycker jag! o fpgakortet verkar intressant! dessutom kanske inte ubw32
> kommer tillverkas i en evighet...
> 
> Robert

Skönt att höra! En stor motivering för detta är att på ABC800 är
signalen XM# viktig för att kunna skapa plats i minneskartan för
drivrutiner, eftersom 800:ans minneskarta är mer än full från första
början. XM# kan ha så lite som bara en halv klockcykel (167 ns) på sig,
vilket måste också inkludera alla fördröjningar i signalvägarna. Än
värre är att man inte får en konkret signal att denna tidsperiod börjat,
vilket betyder att man måste kunna evaluera den åtminstone varje
halvcykel. Om man ska göra det i en MCU (jag tittade väldigt mycket på
ESP32) måste man i praktiken reservera en CPU-kärna för att polla
kontinuerligt. En FPGA är naturligtvis helt parallel så det är inga problem.

Med den något modifierade kontakt som jag använt finns *alla*
ABC-bussens signaler tillgängliga oavsett vad det är för maskin, t.o.m.
ABC1600 :)

En kul grej med en FPGA är att de också går att använda som
logikanalysatorer och timingen går att kontrollera med mycket hög
precision, så nu kan jag säga med rätt hög säkerhet att ABC80 behöver få
svar inom 345±15 ns efter XMEMFL# för att en minnesaccess ska fungera.
Det är mer än jag trodde: visar sig att Z80 alltid ger minst 1.5 cykler
från MREQ#/RD# innan den samplar, och ABC80 get XMEMFL# asynkront när
MREQ# och RD# är båda låga, så det ger en halvcykel (167 ns) mer än jag
trodde.

Nackdelen med just det kortet är att det inte har några som helst
I/O-enheter på själva kortet; det är byggt specifikt för att montera på
ett dotterkort. Jag håller som bäst på att fundera hur man ska göra det;
det enklaste är naturligtvis att bygga ett eget dotterkort; det är ju
billigt numera, men kräver jobb att bygga. Ett mindre antal färdiga
moduler (i praktiken max 2, i bästa fall 4) skulle gå att koppla direkt
in på FPGA-kortet, annars behövs någon form av dotterkort.

Vad gäller en CPU tittar jag f.n. på ett par olika varianter av små
RiscV32 softcores, troligen runt 66-83 MHz men möjligen upp till 120-133
MHz; det senare har problemet att jag inte klurat ut än hur man kan
garantera att ABC-bussen har garanterad access till *allt* minne inom
~330 ns oavsett var som händer i resten av systemet.

Jag vill att hela grejen ska (med lämpliga kontakter och montering)
kunna installeras internt i ABC800 eller ett expansionschassi. Jag har
redan kollat, och det finns tillräckligt vertikalt utrymme även om det
sitter ovanpå ett dotterkort, i alla fall om det är permanent monterat
(en kontakt emellan skulle kunna bli för mycket, men om man har en
kontakt kan man använda 90°-kontakter och montera dem linjärt.

Så vitt jag kan se, några alternativ är:

1. Specialdesignat dotterkort med moduler (kan göras utan ytmonterade
komponenter, kanske t.o.m. på stripboard i alla fall till prototyp);

2. Specialdesignat dotterkort med I/O-enheter/kontakter fast monterade;
en del, b.la. SD-kort-kontakter finns endast som ytmonterade.

3. Moduler direkt inkopplade till FPGA-kortet; lätt att bygga men
begränsat p.g.a. VCC/GND-pinnar som behöver vara på rätt ställe -- men
det kan man förstås fixa med kontaktmodifikationer om man inte har något
emot lite "fullödning."

4. Någon form av billigt MCU-kort som har de I/O-kontakter vi vill ha. I
sådant fall blir FPGA-kortet möjligen bara bussinterface och minne.

Det här kortet ser intressant ut för den varianten, och verkar ha en
pinout som man troligen kan få att funka:

https://www.aliexpress.com/item/4000396361074.html

5. Om man har riktig tur och hittar ett "shield"-kort som har de I/O man
vill, och som dessutom passar till pinout... tror man skulle behöva rätt
mycket tur!

Vad tror ni?

	-hpa


More information about the ABC80 mailing list