OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 12:22

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 33 ]  Přejít na stránku 1, 2, 3  Další
Autor Zpráva
 Předmět příspěvku: Emulace Z80 v HDL
PříspěvekNapsal: 04.10.2021, 17:35 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Zajimalo by mne kdo pouziva jakou HDL emulaci Z80 a jak realne popisuje vlastni Z80. Zatim pouzivam T80. Ta kterou mam nepopisuje realny obvod dokonale. Spravne kazdy CPU cykl ma dve casti. Jeden je pri log1 a druhy pri log0. Takze spravne ma byt frekvence emulatoru 2x vetsi a na kazdou nabeznou hranu by se mel zmenit stavovy automat. Pak se da zajistit ze pri T1 v casti kdy jsou hodiny v log0 se da signal /mreq do log0 jako na realnem stroji.

Jestli mate nejake odkazy na popis realneho Z80 tak je sem dejte. Take pripadne odkazy na stranky kde jsou emulatory Z80 v HDL.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 04.10.2021, 19:59 
Offline
Pan Štábní

Registrován: 11.11.2013, 10:29
Příspěvky: 1198
Has thanked: 359 times
Been thanked: 304 times
A proc by mel byt kmitocet hodin 2x vetsi? Prece jeden tik hodin obsahuje log1 a log0. Nic nebrani tomu, aby stavovy automat menil stav pri vzestupne i sestupne hrane. Pokud bude strida rozume okolo 50:50 tak na to bude stejny cas pri obou zmenach.

_________________
Sharp MZ-800++, MZ-1500++, MZ-2500++, SM-B-80T, MK-14_replica, HP-85, ZX-80+replica, ZX81, ZX-Spectrum+replica++, PMI-80+replica, SAM coupe++, PMD-85-2A+3, Didaktik-M, SORD-M5, TI-57, TI-59+PC-100, TI99/4A, ZetaV2+ppp, ZX-uno, Petr


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 04.10.2021, 20:36 
Offline
Kecka

Registrován: 10.09.2017, 21:13
Příspěvky: 54
Has thanked: 51 times
Been thanked: 6 times
není to teda VHDLm ale Verilog, nicméně vzhledem k tomu, že to je údajně od základu psaný dle "low level schematics" tak pro inspiraci dobrý

https://opencores.org/projects/a-z80

a ještě sice krátké, ale zajímavé téma

https://www.atari-forum.com/viewtopic.php?t=33781


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 04.10.2021, 23:36 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Charlie_XZ píše:
není to teda VHDLm ale Verilog, nicméně vzhledem k tomu, že to je údajně od základu psaný dle "low level schematics" tak pro inspiraci dobrý

https://opencores.org/projects/a-z80


HDL je i Verilog a jeho nastupce System Verilog.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 04.10.2021, 23:58 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Mikes21 píše:
A proc by mel byt kmitocet hodin 2x vetsi? Prece jeden tik hodin obsahuje log1 a log0. Nic nebrani tomu, aby stavovy automat menil stav pri vzestupne i sestupne hrane. Pokud bude strida rozume okolo 50:50 tak na to bude stejny cas pri obou zmenach.


Brani mi v tom "assign a variable only in a single always block".

=========

Reseni pres nabeznou a sestupnou hranu je mozno udelat. Ale vzdy bude to mit vetsi celkove zpozdeni nez 2x vetsi frekvence a vse pouze v jednom nabeznem bloku. Take bych chtel rici, ze "profesionalove" vyuzivaji v test bench sestupnou hranu na nastaveni UUT.

==========

Na NMOS verzi je vhodne se divat jako na obvod kde uvnitr obvodu je "naboj" jako informace a proto je potreba aby porad bezel alespon nejakou malou rychlosti (minimalni takt je 12us - cca 83KHz). Je to zajimava konstrukce. Otazka je jak dobre se to da prepsat do HDL jazyka.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 14.08.2022, 09:57 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Tak jsem se ted podival trosku podrobneji na projekt A-Z80.

zajimave odkazy:
http://www.righto.com/2013/09/the-z-80- ... ow-it.html
http://www.righto.com/2013/09/understan ... -gate.html
http://www.righto.com/2013/11/the-z-80s ... ement.html
http://www.righto.com/2014/10/how-z80s- ... -down.html
https://opencores.org/projects/a-z80
https://baltazarstudios.com/

Velmi podrobne je popsana ALU jednotka. Hezky obrazek je napr. https://baltazarstudios.com/wp-content/ ... 09/ALU.gif .
Pekne schema kde jsou vsechny klicove veci je na https://baltazarstudios.com/z80-cpu/ , konkretne obrazek https://baltazarstudios.com/wp-content/ ... -thumb.png

Hlavne na tomto obrazku jsou nakreslene prepinace SW1 a SW2. Najde se tam i SW4. Ale klicovy soubor kde je popsano kam je co pripojene je core.vh.

Pro toho koho zajima Z80, ma smysl se na projekt podivat. Zacatecnik si vystaci z texty z www.righto.com. Koho zajima vice se treba dozvi ze i rada trivialnich instrukci se dokoncuje az pri nacitani pristi instrukce v case M1T1. Dulezita vec je ze instrukce zacina v M1T3 a konci u "pristi" instrukce v M1T2.

Autor zmenil Latch na Flip-flop. A tak adresni a datova sbernice se ted casove chova hodne jinak nez original Z80 CPU. Pro FPGA pokusy je to ok ale pro realny hw muze byt problem.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 15.08.2022, 08:27 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Toto je obrazek jak zhruba jsou zapojene cesty uvnitr Z80 https://baltazarstudios.com/wp-content/ ... buffer.png

Pekny obrazek je http://static.righto.com/images/z80/z80 ... s_addr.png
-cervena sbernice je v projektu pojmenovana DS0 - bezne je zde opt code instrukce (nebo data z/do padu). Sbernice vede az do ALU - pouzivaji to BITove intrukce.
-zelena sbernice je v projektu pojmenovana DS1 - zde bezne jsou flag bity z ALU a rizeni ALU. - Pres SW1 je pripojena k cervene sbernici. Na DS1 jsou pripojene general-purpose registers (dolni bajt)
-oranzova sbernice je v projektu pojmenovana DS2 - spojuje general-purpose registers (horni bajt) s ALU - pres SW2 je pripojena k zelene sbernici

Dalsi pekny obrazek je http://static.righto.com/images/z80/reg ... ucture.png - zde mezi IR a WZ je SW4 - ten umoznuje odpojit levou cast obvodu a napr. udelat inkrementaci citace programu. Pritom prava cast muze delat neco jineho.

Jeste k obrazku a-z80-block-diagram.psd. Modul "bus_control" ma byt zakresleny nad "data_switch_mask". Je pripojeny k cervene sbernici a ne k zelene. Tento modul napr. pri stavu HALT dava log.0 na sbernici a tak procesor provadi NOP instrukci.

Kdo by hledal SW3, tak ho najde na https://baltazarstudios.com/wp-content/ ... 09/ALU.gif - vstup do ALU je uplne vlevo "d2" zelene podbarvene (d1,d3 - pri shift instrukci). Vystup z ALU je "d2" bez podbarveni.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 20.08.2022, 19:41 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Tak jsem se dival trosku dovnitr projektu A-Z80. Je divne ze autor na https://opencores.org/projects/a-z80 ma stale otevrene nejake bugy a je tam info ze ne vsechny instrukce funguji spravne. Pritom stejny autor udelal https://baltazarstudios.com/z80explorer/ a to funguje spravne?

Z projektu z80explorer jsem vzal data. Koukal jsem do dat co popisuji obvod. Je zde vice zajimavych souboru. Pro mne je ted nejdulezitejsi transdefs.js. Prvni 4 transistory v seznamu maji zmast toho kdo chce kopirovat chip. Jsou to placebo transistory. Nasel jsem tam i 7 transistoru co jsou jinak zapojene nez ostatni, tesim se na co budou delat. Je tam obrovske mnozstvi depletion transistoru.

Na https://en.wikipedia.org/wiki/Transistor_count se pise ze Z80 CPU obsahuje 8500 transistoru. A ze plati 6,813 without depletion mode pull-up transistors. Ja tam zatim vidim 6809 funkcnich transistoru. Uz to cislo 6809 je zajimave. Hlavne ze to neni Motorola :-).

z80explorer mi nedava data co bych presne potreboval. Spise bych radeji videl bloky jak jsou transistory zapojene. Myslenka aliasu cisel na jmena je vyborna, to pouzivam i u sebe pri dekodovani GDG Sharpa. Nejdrive jsem vzal data a dal jsem si je do tabulkoveho procesoru. To ukazalo par zajimavych veci. Pak jsem udelal maly script v Pythonu co nactou data a vybiraji z toho uzitecne informace. Tech 6800 transistoru je velke cislo ale ono v realu se to bude hodne rychle zpracovavat. Duvod je ten ze napr. vyvod /M1 ma 5 transistoru mezi vyvodem a VCC. Takze lze predpokladat ze jen techto vstupnich transistoru bude celkem cca 350.

Uvnitr obvodu se treba 8x opakuje jedno zapojeni D padu. Takze bude stacit to jednou dekodovat a pak jen pouzit.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 22.08.2022, 10:47 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Tak jsem udelal maly rekursivni program co od vyvodu D0 hleda sousedy. Uz u hloubky 10 najde vsechny okolni vyvody a soucasne vybere 218 transistoru. Zkusil jsme ze srandy dat maximalni pocet pruchodu a max je cca 950. Pak uz Pythonu dojdou zdroje pro rekursi :-). Realne ale bude potreba bezne cislo 7.

Take jsem zkusil zjistit jak slozite by bylo dat data do Kicadu. Nainstaloval jsem uplne novou verzi a zalozil projekt a rucne jsem tam dal par transistoru a propoju. Kdyz jsem videl kolik dat se na pozadi uklada a musel bych je vygenerovat, tak jsem tuto myslenku opustil. Mensi cast obvodu by sla takto pekne prekeslit ale stejne by tam bylo hodne rucniho casu na umisteni transistoru na spravna mista a pekne to cele propojit.

Radeji jsem otevrel cestu pres Verilog a Vidado. Udelal jsem zatim maly pokusny program co generuje data jen pro tech 218 transistoru. Synteza prochazi s kladnym vysledkem. Takze jako prilohu davam jak vypada zapojeni. Ted to vypada neprehledne, protoze to neni rozdelene do bloku.


Přílohy:
z80-pokus1.png
z80-pokus1.png [ 40.82 KiB | Zobrazeno 3707 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 22.08.2022, 13:57 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Takto vypada zapojeni okolo vyvodu D0 cpu. 7 transistoru vlevo nahore pripojuji vyvod na VCC napeti. 7 transistoru vpravo to pripojuje na VSS. Transistory 3534 a 3695 zajistuji pripojeni VSS pri log1 na vstupu - je to vstup do obvodu.


Přílohy:
z80-pokus2.png
z80-pokus2.png [ 86.5 KiB | Zobrazeno 3662 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 23.08.2022, 20:39 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Tak jsem upravil rutinky. Udelal jsem modul s ctyriceti vyvody cpu. Rutinky nedelaji uplne vse ale jako zaklad OK.

Samozrejme to nejde prelozit do zadneho fyzickeho FPGA. Ale synteza je OK. Dela to i pekny obrazek. Jdou rozbalovat moduly a tak videt jen co je potreba, soustredit se na cast obvodu. Chtel bych udelat viceurovnove moduly. To uz bude ale velka vyzva.

Casem bude ale mozno vymenit casti obvodu za definice co uz pujdou implementovat a pak by melo byt mozno to i prelozit do realneho hardware.


Přílohy:
z80-pokus3.png
z80-pokus3.png [ 66 KiB | Zobrazeno 3577 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 25.08.2022, 09:12 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Tak jsem se vcera vecer podival na data co generuji. Zjistil jsem jak se generuje NOR hradlo. Je to zapojene takto https://www.electronicsandcommunication ... rcuit.html . Ale pozor aby nasleduji cast mela kvalitni VCC tak jsou vlastne tyto NOR dvakrat. Prvni je zapojeny jako na obrazku. Dva transistory uzemnuji vyvod. Jeden transistor dela pull-up, tato logicka 1 neni ale prilis silna a tak se vystup dava do dalsiho obvodu kde jsou dalsi tri transistory. Dva opet uzemnuji vystup, presne jako v prvni skupine. Vyvod z prvni skupiny ale jde na tranzistor co je pripojen na VCC. Takze na vystupu techto sesti transistoru je vzdy kvalitni log0 nebo log1.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 25.08.2022, 10:11 
Offline
Pan Štábní

Registrován: 11.11.2013, 10:29
Příspěvky: 1198
Has thanked: 359 times
Been thanked: 304 times
Ktera konkretni cast uvnitr CPU reaguje na sestupnou hranu? A jaky to ma vliv na okoli? Pokud by to emulace delala spatne, tak by se to muselo navenek nejak projevit a je otazkou, co je tedy vlastne spatne na emulaci, jak pises.

IMHO bude pri emulaci vzdy neco trochu jinak, ale je to v realnem pouziti problem? A jak velky?

_________________
Sharp MZ-800++, MZ-1500++, MZ-2500++, SM-B-80T, MK-14_replica, HP-85, ZX-80+replica, ZX81, ZX-Spectrum+replica++, PMI-80+replica, SAM coupe++, PMD-85-2A+3, Didaktik-M, SORD-M5, TI-57, TI-59+PC-100, TI99/4A, ZetaV2+ppp, ZX-uno, Petr


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 25.08.2022, 16:52 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Da se najit i na webu, ze projekt A-z80 puvodne pouzival hladinove latch obvody, ktere logicky jsou i uvnitr cipu. Bohuzel se nedarilo to cele rozchodit a tak v jeden okamzik bylo rozhodnuto ze se to prevede na d flip-flop obvody. Pozdeji se zjistilo ze problem byl maly nedostatek uvnitr PLA ale uz podle vseho nebyla sila to zmenit zpet na puvodni typy obvodu. Takze ted se meni stav 2x za takt. V originalnim zapojeni se vzdy kdyz se zmeni hodiny se neco zacne menit. Za par nanosekund nebo i dele se stav uklidni a pak je "setup time" pred dalsi zmenou hodin. Proto se napr. adresni sbernice v originalni cpu nastavuje jen par ns po nabezne hrane. V emulaci to udela az pri dobezne hrane hodin. Jinak receno, zmena v emulaci se provede klidne i 100ns pozdeji oproti originalu.

Hezky nakreslene co se kdy deje je na obrazku a-z80-block-diagram z projektu a-z80. Zde je videt ze pri nabezne hrane se otevrou cesty z registru (napr. z registru A) do ALU. Tam se pri sestupne hrane zapamatuje operand. Pri dalsi nabezne hrane je vysledek ulozen do result registru alu (spocitane 4 bity). Pripadne pri druhem taktu pri nabezne hrane je mozno to ulozit do ciloveho registru (spocitane horni 4 bity - komplet ma 8 bitu).

Predstavme si ze by se podarilo cpu prevest do verilog kodu. U pocitace Sharp MZ800 nebo ZX128 se kazdych 141 ns udela jedna operace uvnitr cpu. V soucasne dobe se daji realne sehnat fpga co je jen cip na desce za 120 USD nebo s motherboardem za 160 USD. Teoreticky se to da dat az na rychlost 666MHz. Takze jeden takt je 1,5 ns. Pak se da rici ze az 93 taktu se da dat do jednoho taktu z80 cpu. To je hodne velke cislo. Lze usuzovat ze treba uvnitr originalniho z80 ma zpozdeni tranzistoru 1,5 ns. Pak by dva flip-flop obvody v FPGA velmi realne simulovali treba ten NOR2 obvod. Stav do log0 by se provedl za 1,5 ns, stav do log1 by se provedl za dva takty, za 3 ns. Presne jak se to podle vseho deje i v realnem obvodu.

Budeme-li usuzovat ze uvnitr z80 cpu je cca 8500 tranzistoru. A jeden NOR2 obsahuje 6 tranzistor, tak muzeme rici, ze je uvnitr nejakych 1400 logickych hradel.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulace Z80 v HDL
PříspěvekNapsal: 27.08.2022, 10:58 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Opet jsem trosku pokrocil. Cil ted byl zjistovat zda cesty jsou vnitrni nebo vnejsi a podle toho vytvaret verilog kod.

Zmenil jsem nazev vss na gnd. Spravne by se mel vcc stejne nazyvat vdd. Takto to bude trosku lepe citelne pri prohlizeni vysledku. Zmenit se to da vzdy.

Koukal jsem hlavne na ty pull-up obvody. Z80Explorer tomu rikaji pull-up resistory ale jiste to jsou pull-up transistory. Takze jsem vygeneroval mraky transistoru navic (nekolik tisic). Vsechny maji cislo pres 10000 aby to slo lehce identifikovat.

V priloze je nove vygenerovany modul. Ma dva vstupy, jmena vstupu jsou prevzata z projektu Z80Explorer. Je to NOR obvod. Vystupni signal je n170. Stejne cislo je opet v projektu Z80Explorer. Proto je mozno si vse lehce overit v tomto projektu. Cisla transistoru a hlavne cest jsem zachoval. Unvitr tohoto modulu je cesta n1203 a protoze je uvnitr pouze tohoto modulu, tak je definovana jen zde a ne na globalni urovni. Jinak ja mam u cest prefix "n" jako net.


Přílohy:
z80-pokus4.png
z80-pokus4.png [ 43.66 KiB | Zobrazeno 3340 krát ]
Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 33 ]  Přejít na stránku 1, 2, 3  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 17 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz