1 pontos por GN⁺ 2024-04-29 | 1 comentários | Compartilhar no WhatsApp
  • Depois que a Zilog anunciou o End-of-Life do Z80 em 15 de abril de 2024, este projeto passou a mirar uma implementação Free and Open Source Silicon(FOSSi) para substituir o Z80
  • O objetivo é desenvolver um substituto drop-in compatível em pinos para uso em computadores de 8 bits e kits DIY como ZX Spectrum e RC2014
  • A implementação é baseada no núcleo TV80 em Verilog de Guy Hutchison e é sintetizada em silício real usando OpenROAD e PDKs abertos como SKY130, SG13 e GF180
  • Em 2025, os dois primeiros chips tapeout foram entregues, o primeiro silício SKY130 do Tiny Tapeout 7 está em estado FUNCTIONAL, e a versão QFN64 com 40 pinos expostos também está em teste após a entrega
  • Nos testes, o Z80 se comunica usando RP2040/RP2350 como se fosse RAM, o bug da instrução DAA foi corrigido, mas dois testes de flags não documentadas do ZEXALL ainda falham

Objetivo do projeto e estado atual

  • rejunity/z80-open-silicon é um projeto para criar um clone em silício moderno, gratuito e de código aberto do Zilog Z80
  • A Zilog anunciou o End-of-Life do Z80 em 15 de abril de 2024
  • O projeto tem como meta oferecer um substituto FOSSi do Z80 para a comunidade de preservação de hardware e de código aberto
  • Em 2025, os dois primeiros chips tapeout foram entregues, os chips estão em estado funcional e seguem em teste
  • Atualmente, uma versão DIP40 para GF180MCU está em desenvolvimento

Como o silício é implementado

  • O hardware-alvo é um chip que funcione como substituto drop-in do Z80 em computadores domésticos de 8 bits e kits de computador DIY mais recentes
  • A implementação sintetiza silício fabricável usando o fluxo do OpenROAD e PDKs de código aberto
  • A infraestrutura do Tiny Tapeout é usada para agrupar vários projetos e reduzir o custo de fabricação de chips reais na Skywater Foundries
  • O núcleo de CPU usado como base é o núcleo TV80 em Verilog de Guy Hutchison, disponível em TV80

PDKs suportados e tapeouts

  • Há suporte para 3 PDKs abertos
    • SKY130: nó de 130nm da SkyWater Technology Foundry
    • SG13: nó BiCMOS de 130nm da IHP Foundry
    • GF180: nó de 180nm da Global Foundry
  • Estado do andamento dos tapeouts
    • FUNCTIONAL: primeiro tapeout em silício SKY130 de 130nm via Tiny Tapeout 7
    • DELIVERED/TESTING: encapsulamento QFN64 com todos os 40 pinos expostos via shuttle CI2406 da eFabless, em processo SKY130 de 130nm
    • A versão multiplexada SG13g2 de 24 pinos tem uma entrada no shuttle experimental IHP 2024, e a versão do shuttle IHP 2025a já foi entregue
    • WIP: formato clássico DIP40 baseado em COB via GF180MCU Run 1 da Wafer.Space

O primeiro silício FOSSi do Z80

  • A primeira iteração foi desenvolvida com a infraestrutura do Tiny Tapeout em processo de 130nm, cabendo em uma área de die de 0,064mm²
  • O primeiro tapeout foi submetido ao eFabless ChipIgnite CI2406 Shuttle em junho de 2024
  • O layout de circuito integrado em GDSII é resultado do fluxo automatizado de posicionamento e roteamento do OpenROAD, usando elementos de lógica de portas de 130nm

Testes e trabalho restante

  • Plano já concluído
    • Tapeout da revisão de 24 pinos no nó de 130nm via Tiny Tapeout 07
    • Tapeout em QFN64 com todos os 40 pinos expostos via eFabless ChipIgnite
    • Tapeouts em SKY130 e SG13 concluídos, GF180 em andamento
    • Execução de testes do chip
  • Resumo dos testes
    • O Z80 se comunica usando RP2040/RP2350 como se fosse RAM
    • O bug da instrução DAA identificado pela suíte de testes ZEXDOC/ZEXALL foi corrigido
    • Dois testes do ZEXALL relacionados a flags não documentadas ainda falham
  • Trabalho em andamento ou restante
    • Produção de um adaptador PCB para converter de QFN64 para DIP40
    • Produção de uma PCB COB DIP40
    • Testes de temporização dos sinais de entrada e saída comparados com o Z80 original
    • Reforço do testbench para cobrir todas as instruções do Z80 e também instruções illegal
    • Comparação com outras implementações, como o núcleo em Verilog A-Z80 e o Z80Explorer baseado em netlist
    • Criação de um layout em nível de portas com aparência semelhante ao layout do Z80 original
    • Encapsulamento cerâmico DIP40 e logo/chip art do projeto

Código e execução local

  • São fornecidos um slide deck com visão geral do projeto e um vídeo de discussão com Matthew Venn
  • Principais locais do código
    • src/tt_um_rejunity_z80.v: módulo de topo, segue as restrições do Tiny Tapeout e multiplexa os pinos de saída nos 8 pinos do chip Tiny Tapeout
    • src/tv80: implementação principal do Z80 em Verilog
    • src/config.tcl: configuração de síntese, posicionamento e roteamento do OpenROAD
    • src/test/test.py: testbench
  • Os artefatos de layout gerados ficam na pasta gds e podem ser inspecionados com KLayout
    • Arquivo GDSII do núcleo Z80
    • Arquivo OASIS do chip Tiny Tapeout 07
  • Para testar localmente, siga o guia de testes do Tiny Tapeout, instale iverilog, verilator, cocotb e pytest, e execute make em src

Dispositivos Z80 considerados para teste

  • Computadores e consoles clássicos são listados como casos de teste para um substituto de hardware do Z80
    • ZX Spectrum 48K: Z80 de 3,5MHz
    • ZX Spectrum 128K: Z80 de 3,54690MHz
    • Amstrad CPC: Z80 de 4MHz
    • Família MSX: 3,579MHz
    • SG-1000, Sega Master System, ColecoVision, TRS-80, Sinclair ZX80/ZX81 etc.
  • Kits de computador DIY mais recentes também são citados como casos de teste

Coleção de materiais de referência

  • Documentação relacionada ao Z80
    • Z80 Datasheet
    • Manual do Usuário da Zilog, Manual do Usuário da Mostek, Data Book da Zilog
    • Instruções não documentadas, tabela de opcodes e documentação de temporização
  • História e patentes do Z80
    • Material de painel de história oral do desenvolvimento do Z80
    • Material de projeto de microprocessadores de M. Shima
    • Patentes expiradas relacionadas ao Z80, como proteção contra picos de tensão de entrada e circuito de reset
  • Dieshots e materiais de engenharia reversa
    • Dieshots do Zilog Z8400, Z84C00, SGB-CPU 01 do Nintendo Super Game Boy, Mostek MK3880 e outros
    • Materiais de engenharia reversa sobre registradores de instruções do Z80, bus gates, PLA, implementação de registradores, ALU de 4 bits e mais
  • Implementações existentes
    • Implementação TV80 em Verilog
    • A-Z80
    • Z80Explorer
    • Emulador online de netlist do Z80 da Visual6502.org

1 comentários

 
GN⁺ 2024-04-29
Comentários do Hacker News
  • O que a Tiny Tapeout faz é incrível. Quem imaginaria que makers e estudantes poderiam transformar seus próprios projetos de chip em algo real com tão pouco dinheiro?
    As ferramentas também parecem excelentes. Você não vai projetar o próximo CPU da Intel em um processo de 130 nm, mas é impressionante que um Z80 caiba em 0,064 mm²
    Também é bom que ainda exista uma alternativa agora que o chip oficial não é mais produzido. Agora fiquei com vontade de ter aquele lindo encapsulamento cerâmico roxo com tampa banhada a ouro em cima do chip
    https://twitter.com/l_vanek/status/1783557817133039738/photo...
    https://tinytapeout.com/

    • Um processo de 130 nm seria mais ou menos da era do Pentium III. Nada mal
    • Para poupar cliques, o preço padrão de tile de 160 x 100 µm + ASIC + placa de demonstração é de US$ 300 sem frete, e a Efabless está patrocinando um desconto antecipado de US$ 150 sem frete, limitado a um pedido por pessoa
      Tiles adicionais custam US$ 50 cada, e pinos analógicos extras começam em US$ 40 por pino. Se eu não errei feio, 160 x 100 µm dá 0,16 x 0,1 mm, então um tile tem 0,016 mm², e um die de 0,064 mm² usaria 4 slots
  • Para quem estiver curioso, o 6502 e várias de suas derivadas ainda são produzidos por uma das empresas dos desenvolvedores originais. Então não parece que algo parecido vá acontecer tão cedo com o arquirrival do Z80
    [0] https://www.westerndesigncenter.com/wdc/chips.php

  • O Z80 era a CPU do ZX Spectrum. Traz muitas lembranças
    https://en.wikipedia.org/wiki/ZX_Spectrum

    • Havia muitas máquinas ótimas. A linha Amstrad CPC, vários consoles da Sega, os primeiros aparelhos MSX e, claro, até o Tatung Einstein. Unam-se, máquinas de disco de 3 polegadas
    • Também havia o TRS-80 e seus clones, e na Austrália e Nova Zelândia existia o Dick Smith System-80. Tenho ótimas lembranças de programar com EDTASM
      Como eu só tinha unidade de cassete, quando havia algum erro no código normalmente era preciso apertar reset e recarregar o EDTASM e meu código da fita
    • Eu achava que também tinha sido usado no Game Boy, mas apesar das muitas semelhanças, aparentemente ele é incompatível em essência[0]
      0. https://forums.nesdev.org/viewtopic.php?t=18335
    • Também era a CPU do meu primeiro computador, o Coleco ADAM
      https://en.wikipedia.org/wiki/Coleco_Adam
      Ainda tenho o livro Programming the Z80 que comprei quando era criança
      https://en.wikipedia.org/wiki/Programming_the_Z80
    • Também apareceu bastante nos obscuros players de MP3/"MP4" que se espalharam em meados e no fim dos anos 2000: https://en.wikipedia.org/wiki/S1_MP3_player
  • A verdadeira graça dessas antigas CPUs de 8 bits está na simplicidade e no fato de que uma pessoa consegue montar um computador manualmente, fazendo toda a fiação
    Na faculdade, construí uma placa com 8088 numa disciplina de microprocessadores, e foi uma das melhores matérias que já fiz, porque tirou muito do ar de mistério sobre drivers e hardware. Depois tentei redesenhar tudo no KiCAD, adicionando portas de expansão de E/S, um layout melhor e uma porta LCD para um LCD de caracteres 2x16
    Fiz um protótipo na Futurlec, mas cometi um erro grande na definição do footprint e acabei precisando de um interposer. Depois de chegar ao ponto de soldar o 8284 e o soquete de CI, a vida atropelou tudo e o projeto continua numa caixa até hoje
    Microcontroladores são ótimos porque colocam tudo num único encapsulamento, mas existe uma satisfação enorme em poder projetar e construir um computador com as próprias mãos. FPGA recupera um pouco dessa sensação, mas o ecossistema de ferramentas é bizantino de tão horrível

    • As ferramentas open source não são perfeitas, mas estão evoluindo rápido. Trabalho nessa área e recomendo o projeto OpenROAD[1], que oferece suporte a síntese completa e placement-and-routing para alguns FPGAs
      [1] https://theopenroadproject.org/
  • Fui ver e me surpreendi ao descobrir que o Z80 já é uma CPU de 50 anos

  • O layout do circuito chamou atenção porque parece mais um arranjo uniforme de portas lógicas do que o layout sob medida que normalmente se vê em fotos do die

    • Como isso é uma implementação em Verilog, está muito mais próximo de um emulador de CPU em software do que do chip real. Por exemplo, não tem relação com o arranjo de transistores do Z80 original
      Por exemplo, o “payload da instrução” de LD A,(DE) está aqui
      https://github.com/rejunity/z80-open-silicon/blob/974c7711b2...
      E a parte correspondente no meu emulador em software, que implementa o mesmo ciclo de máquina, está aqui
      https://github.com/floooh/chips/blob/bd1ecff58337574bb46eba5...
      Nos dois casos, o barramento de endereços é configurado com o conteúdo do registrador DE e, ao mesmo tempo, os pinos MREQ|RD precisam ser acionados em algum lugar para sinalizar externamente uma leitura de memória. No meu emulador, isso acontece na macro _mread, e no ciclo de clock seguinte o barramento de dados é lido para o registrador A
      O interessante é que a implementação em Verilog aparentemente não atualiza o registrador interno WZ para DE+1. Então fico curioso se o comportamento não documentado foi implementado com precisão, embora a atualização de WZ possa estar sendo tratada em outro lugar
      No fim, se por fora ele parecer e se comportar como um Z80, ou seja, se os pinos corretos forem ativados no momento certo, a implementação interna não importa
  • Fico curioso sobre o nível de compatibilidade com o Z80 original. O original tinha várias instruções não documentadas e também aquele infame “trap gate”, que pode ter afetado certas sequências raras de instruções
    Vendo o “Oral History Panel on the Founding of the Company and the Development of the Z80 Microprocessor” linkado na página, é possível que o projeto tenha sido pensado para distinguir o original dos clones

  • Parece muito legal. Eu estava na equipe inicial da efabless.com, no lado de EDA open source

  • Já ouvi falar da ALU de 4 bits do Z80. Pelo que entendo, ela era usada duas vezes para operações de 8 bits, e fico curioso se isso era visto como um grande gargalo
    Também queria saber se depois houve extensões com operações inteiras de largura maior. E se a versão open source do chip pode possibilitar novos recursos e variantes

    • Não é um grande gargalo. Instruções de ALU que usam registradores como fonte já são executadas o mais rápido possível, ou seja, em 4 ciclos de clock. Esse tempo é igual à duração do “ciclo de máquina” de busca da instrução
      Vendo por outro ângulo, mesmo que existisse uma ALU de 8 bits, as instruções aritméticas não seriam mais rápidas; em compensação, gastaria o dobro de transistores
      A ALU de 4 bits é apenas um detalhe de implementação interna, invisível externamente. Dá para argumentar que isso vale com a exceção da existência do sinalizador half-carry, que representa o carry ao passar do nibble baixo para o nibble alto
      Se você quer um substituto de CPU para encaixar diretamente em computadores domésticos antigos, precisa manter o timing original das instruções. Caso contrário, software que depende de cycle counting não vai funcionar. O ZX Spectrum talvez sofra menos com isso do que máquinas como o Amstrad CPC, por não ter hardware de vídeo programável
      O eZ80 é um projeto mais moderno e eficiente, incluindo uma ALU mais larga: https://en.wikipedia.org/wiki/Zilog_eZ80. Mas não serve como opção para reviver computadores domésticos antigos; para isso, é preciso um clone de Z80 realmente preciso, incluindo o timing original e até os comportamentos não documentados
    • O Netburst P4 também usava uma ALU de 16 bits com metade da largura, rodando a 2x a frequência de clock. Na prática, o clock era aplicado nas duas bordas, como DDR RAM, e por isso operações de ALU com carry/borrow entre as duas metades levavam um ciclo extra: https://www.realworldtech.com/isscc-2001/7/
  • Fico curioso para saber se alguém tem ideia de que velocidade de clock dá para esperar disso

    • Nesta página consta 50 MHz
      https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
    • Se você for projetar um novo processador compatível para sistemas antigos, o fator limitante será o barramento de memória. Para atingir velocidades altas, será necessário cache
      O cache precisa conhecer toda a comutação de bancos feita pelo sistema e também entender como os bancos de memória são mapeados no espaço de memória
      ROM comum pode ser colocada em cache. RAM comum que não é compartilhada com outros dispositivos também pode ser colocada em cache. IO mapeado em memória não deve ser colocado em cache
      RAM compartilhada com outros dispositivos, como memória de vídeo, mas na qual esse dispositivo não grava, permite cache write-through e cache completo de leitura. RAM compartilhada na qual outros dispositivos podem gravar não deve ser colocada em cache