Escola de Síntese de Circuitos Digitais · basics-graphics-music · edição de 5 de outubro de 2026
Este manual descreve a instalação do software necessário para os
laboratórios da Escola de Síntese de Circuitos Digitais e, de modo mais geral,
para trabalhar com o repositório de exemplos
basics-graphics-music (BGM, daqui para frente).
Ele substitui a edição anterior,
Инструкция_по_установке_ПО.pdf, de 3 de outubro de 2025. As fotos
e capturas de tela daquela edição foram mantidas. Onde uma informação ficou
desatualizada, uma observação Era verdade antes ao lado explica o que
mudou. A lista completa das divergências está em um
arquivo separado.
A Escola de Síntese de Circuitos Digitais (Школа синтеза цифровых схем) é um programa educacional gratuito mantido pela empresa YADRO. Ele trata de projeto digital: desenvolvimento em nível RTL, verificação funcional e os fundamentos do projeto de circuitos integrados.
Segundo o site da própria Escola, o programa reúne mais de 2000 participantes e 24 universidades da Rússia e de Belarus. As aulas da temporada 2026/2027 acontecem nos sábados, das 12h às 15h no horário de Moscou, presencialmente nos polos universitários e online com gravação. A participação é gratuita; a YADRO oferece trabalho em projetos com seus próprios engenheiros, estágios e um banco de talentos.
Informações atualizadas e inscrição: edu.yadro.com/chip-design-school.
Se você está lendo a edição em português, provavelmente seu interesse é o BGM em si, e não a Escola. Tudo da seção 3 em diante se aplica da mesma forma; apenas as referências à Escola e ao seu grupo de conversa são específicas dela. Os mesmos exemplos são usados nos seminários internacionais (veja a seção 1.2).
O BGM é um conjunto de exemplos portáveis em SystemVerilog para placas de
FPGA e para circuitos integrados dedicados. Mais de 60 pessoas
já contribuíram com ele (69 autores segundo o git log no momento
em que esta edição foi preparada); o desenvolvedor principal é
Yuri Panchul.
O repositório é usado pela Escola de Síntese de Circuitos Digitais e em seminários em vários países: Bishkek (2022), Tbilisi (2023), Baku e o Hacker Dojo no Vale do Silício (2024), Tijuana e Erevan (2025).
Existem três cópias do repositório, e a escolha entre elas importa:
| Finalidade | Endereço |
|---|---|
| Cópia de desenvolvimento, experimental | github.com/yuri-panchul/basics-graphics-music |
| Cópia estável usada pela Escola de Síntese de Circuitos Digitais | github.com/chipdesignschool/basics-graphics-music |
| Cópia estável usada nos seminários internacionais | github.com/verilog-meetup/basics-graphics-music |
Para as aulas da Escola, use a cópia
chipdesignschool: ela permanece estável ao longo do
semestre. A cópia yuri-panchul é a de trabalho — o
desenvolvimento acontece nela e o comportamento pode mudar de um dia para o
outro.
03_synthesize_for_fpga.bash executa o Altera
Quartus, o AMD Vivado, o Gowin EDA ou o fluxo aberto baseado em Yosys. O aluno
não precisa aprender a interface gráfica de cada um desses programas para
começar.Mais sobre a estrutura do curso na seção 8 e neste artigo (em russo): habr.com/ru/articles/1071736.
O systemverilog-homework (SVH) é um conjunto de pequenos
exercícios de SystemVerilog com verificação automática. Ele complementa o BGM:
no BGM os exemplos rodam em uma placa, enquanto no SVH você pratica as
construções da linguagem e as técnicas de microarquitetura em um
simulador.
| Finalidade | Endereço |
|---|---|
| Cópia usada pela Escola | github.com/chipdesignschool/systemverilog-homework |
| Cópia de desenvolvimento | github.com/yuri-panchul/systemverilog-homework |
| Cópia dos seminários internacionais | github.com/verilog-meetup/systemverilog-homework |
O SVH precisa apenas de Icarus Verilog e Git — não exige placa nem ferramenta de fabricante. Veja a seção 9.
Os exemplos do BGM não se limitam a placas de FPGA; eles podem se tornar um chip de verdade.
lab_top do exemplo. Veja a seção 10 e o artigo
habr.com/ru/articles/1084844.07_synthesize_for_asic.bash, e o layout pode ser inspecionado com
os scripts 08_ e 09_. A instalação está na seção
4.1.11.A edição anterior descrevia a instalação do
OpenLane por meio do Docker. O repositório agora usa o
LibreLane — a continuação do mesmo projeto, instalada pelo
Nix. O antigo 00_setup_open_lane.source_bash continua no
repositório, mas o script que importa é o
00_setup_libre_lane.source_bash.
Um panorama rápido; os detalhes técnicos estão nas seções correspondentes, e a análise item por item da edição anterior está no arquivo de correções.
| Assunto | O que há de novo |
|---|---|
| Altera em vez de Intel | A Intel voltou a ser Altera. O Quartus Lite 25.1 se instala em
altera_lite e o Quartus Pro em altera_pro. Os
scripts conhecem todas as oito grafias do diretório do fabricante. |
| Versões antigas do Quartus | Placas com Cyclone II (DE1, DE2) exigem o Quartus II 13.0sp1; placas com Cyclone III (DE0, Marsohod MCY316) exigem 13.1 ou 13.0sp1. As versões mais novas simplesmente não suportam mais essas famílias. |
| Quartus Pro e uma placa nova | A Terasic DE23-Lite (Agilex 3) exige a edição Pro junto com uma licença gratuita. Nenhuma edição Lite consegue compilar para esse chip. |
| Localização das ferramentas | Configurar o PATH deixou de ser necessário — os scripts
localizam Quartus, Vivado, Gowin EDA, Icarus e o restante por conta
própria. |
| USB Blaster III | Foi acrescentada a regra udev para o USB Blaster III
(idProduct 6022), necessária para a DE23-Lite. |
| Icarus Verilog | A versão 13 é o mínimo, e a 14 é melhor. A edição anterior descrevia a versão 12. |
| OSS CAD Suite | O fluxo aberto para placas Gowin e Lattice; traz também o seu próprio Icarus Verilog, que os scripts sabem usar. |
| Surfer | Um visualizador de formas de onda, alternativa ao GTKWave, disponível
como programa e como extensão do VS Code. Se o surfer é
encontrado, os scripts o utilizam. |
| LibreLane em vez de OpenLane | Toda a parte sobre o OpenLane foi reescrita. |
| XPACK RISC-V GCC | O compilador de C e assembly para programas que rodam nos núcleos
aps (MIET), yrv e picorv32 dentro do
FPGA. |
| Programas de terminal | O 14_run_terminal_program.bash funciona com minicom,
picocom e putty. |
| Mais placas | 54 placas, em vez das 39 da lista anterior. Os scripts também passaram a suportar a ferramenta Efinity, para FPGAs Efinix, mas ainda não há placa Efinix ativa — veja a seção 11. |
| Um script renomeado | O 00_setup_intel_fpga.source_bash agora se chama
00_setup_altera.source_bash. |
| Endereços obsoletos | Os repositórios em gitflic.ru não são mais usados, e o
valid-ready-etc está obsoleto. Tudo está no GitHub. |
O repositório suporta 54 placas construídas com FPGAs de
quatro fabricantes. A tabela abaixo é uma cópia do arquivo
boards/README.md
do repositório, onde os mesmos dados também existem
em russo
e nos formatos .html e .csv. Os dados daqui são lidos
do arquivo boards/README.csv desse repositório, de modo que esta
tabela não pode divergir dele.
| Fabricante do FPGA | Fabricante da placa | Placa | Família de FPGA | Ferramenta e versões aceitáveis | TM1638 | Vídeo ligado |
|---|---|---|---|---|---|---|
| Altera | ALINX | alinx_ax301 | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | não | VGA |
| Altera | ALINX | alinx_ax4010 | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | não | VGA |
| Altera | Altera | dk_dev_3c120n | Cyclone III | Quartus 13.1 ou anterior | não | não |
| Altera | Marsohod | marsohod_mcy112 | Cyclone | Quartus 9.1 SP2; de 13.0sp1 em diante exige licença † | não | não |
| Altera | Marsohod | marsohod_mcy316 | Cyclone III | Quartus 13.1 ou anterior | não | não |
| Altera | OMDAZZ | omdazz | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | não | VGA + LCD |
| Altera | OMDAZZ | omdazz_epm570 | MAX II | Quartus de 13.0sp1 a 25.1std | não | VGA + LCD |
| Altera | Piswords | piswords6 | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | não | VGA |
| Altera | Terasic | c5gx | Cyclone V | Quartus de 13.0sp1 a 25.1std | não | HDMI/DVI |
| Altera | Terasic | de0 | Cyclone III | Quartus 13.1 ou anterior | não | VGA |
| Altera | Terasic | de0_cv | Cyclone V | Quartus de 13.0sp1 a 25.1std | não | VGA |
| Altera | Terasic | de0_nano | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | sempre | VGA |
| Altera | Terasic | de0_nano_soc | Cyclone V | Quartus de 13.0sp1 a 25.1std | sempre | VGA |
| Altera | Terasic | de1 | Cyclone II | Quartus 13.0sp1 ou anterior | não | VGA |
| Altera | Terasic | de10_lite | MAX 10 | Quartus 14.0.2 ou posterior † | opcional | VGA |
| Altera | Terasic | de10_nano | Cyclone V | Quartus de 13.0sp1 a 25.1std | sempre | HDMI/DVI |
| Altera | Terasic | de1_soc | Cyclone V | Quartus de 13.0sp1 a 25.1std | não | VGA |
| Altera | Terasic | de2 | Cyclone II | Quartus 13.0sp1 ou anterior | não | VGA |
| Altera | Terasic | de23_lite | Agilex 3 | Quartus Pro 26.1.1 | não | HDMI/DVI |
| Altera | Terasic | de2_115 | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | não | VGA |
| Altera | Terasic | terasic_sockit | Cyclone V | Quartus de 13.0sp1 a 25.1std | não | VGA |
| Altera | ZEOWAA | zeowaa | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | não | VGA |
| Altera | unknown | emooc_cc | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | não | não |
| Altera | unknown | rzrd | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | não | VGA + LCD |
| Altera | unknown | saylinx | Cyclone IV E | Quartus de 13.0sp1 a 25.1std | não | VGA |
| Gowin | Marsohod | marsohod3gw2 | GW1NR-9 | Gowin EDA, qualquer versão † | não | HDMI/DVI |
| Gowin | Sipeed | tang_mega_138k | GW5AST | Gowin EDA, 1.9.9 ou posterior † | sempre | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_mega_138k_pro | GW5AST-138 | Gowin EDA, qualquer versão † | sempre | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_nano_20k | GW2AR-18 | Gowin EDA, qualquer versão † | sempre | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_nano_4k | GW1NSR-4 | Gowin EDA, qualquer versão † | sempre | HDMI/DVI |
| Gowin | Sipeed | tang_nano_9k | GW1NR-9 | Gowin EDA, qualquer versão; Yosys/OSS † | sempre | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_primer_20k_dock | GW2A-18C | Gowin EDA, qualquer versão; Yosys/OSS † | sempre | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_primer_20k_lite | GW2A-18 | Gowin EDA, qualquer versão † | sempre | não |
| Gowin | Sipeed | tang_primer_25k | GW5A | Gowin EDA, 1.9.9 ou posterior † | sempre | HDMI/DVI + VGA |
| Gowin | Xunlong | orangepi_msoc | GW5AT-138B | Gowin EDA, qualquer versão † | sempre | não |
| Lattice | 1BitSquared | icebreaker | iCE40 | sem ferramenta atribuída; Yosys/OSS † | opcional | HDMI/DVI |
| Lattice | Colorlight | colorlight75b | ECP5 | Yosys/OSS † | sempre | não |
| Lattice | Colorlight | colorlightI5 | ECP5 | Yosys/OSS † | sempre | não |
| Lattice | Fabmicro | karnix | ECP5 | Yosys/OSS † | sempre | não |
| Lattice | Greg Davill | orangecrab | ECP5 | Yosys/OSS † | sempre | não |
| Lattice | Olimex | ice40hx8k_evb | iCE40 | Yosys/OSS † | sempre | VGA |
| Xilinx | ALINX | alinx_ax7035b | Artix-7 | Vivado, qualquer versão † | não | não |
| Xilinx | Digilent | arty_a7_100 | Artix-7 | Vivado, qualquer versão † | não | não |
| Xilinx | Digilent | arty_a7_35 | Artix-7 | Vivado, qualquer versão † | não | não |
| Xilinx | Digilent | basys3 | Artix-7 | Vivado, qualquer versão † | não | VGA |
| Xilinx | Digilent | cmod_s7 | Spartan-7 | Vivado, qualquer versão † | não | não |
| Xilinx | Digilent | eclypse_z7 | Zynq-7000 | Vivado, qualquer versão † | sempre | não |
| Xilinx | Digilent | nexys4 | Artix-7 | Vivado, qualquer versão † | não | VGA |
| Xilinx | Digilent | nexys4_ddr | Artix-7 | Vivado, qualquer versão † | não | não |
| Xilinx | Digilent | nexys_a7_100 | Artix-7 | Vivado, qualquer versão † | não | não |
| Xilinx | Digilent | nexys_a7_50 | Artix-7 | Vivado, qualquer versão † | não | não |
| Xilinx | Digilent | zybo_z7 | Zynq-7000 | Vivado, qualquer versão † | não | não |
| Xilinx | QMTech | qmtech_kintex_7 | Kintex-7 | Vivado, qualquer versão † | não | não |
| Xilinx | unknown | a7_lite_35t | Artix-7 | Vivado, qualquer versão † | sempre | HDMI/DVI |
Sobre as colunas:
A mesma placa aparece no repositório em várias configurações — com e sem o
módulo TM1638, com HDMI ou com uma das telas de LCD, com a ferramenta do
fabricante ou com o fluxo aberto. No total são 112 diretórios em
boards/ para essas 54 placas.
Para a maioria das placas, qualquer Quartus Lite recente serve. Mas há três exceções que tornam errado o conselho de "simplesmente instalar a versão mais nova":
| Placas | Chip | O que instalar | Por quê |
|---|---|---|---|
| Terasic DE1, DE2 | Cyclone II | Quartus II 13.0sp1 | A versão 13.1 já abandonou o Cyclone II |
| Terasic DE0, Marsohod MCY316, DK-DEV-3C120N | Cyclone III | Quartus II 13.1 (ou 13.0sp1) | A versão 21.1 e as mais novas não suportam mais o Cyclone III |
| Terasic DE23-Lite | Agilex 3 | Quartus Prime Pro + licença gratuita | Nenhuma edição Lite compila para esse chip |
Várias versões do Quartus podem conviver na mesma máquina sem interferir uma na outra. Os scripts escolhem a que serve à placa selecionada — veja a seção 4.1.1.4. É justamente por isso que, para uma placa antiga, convém instalar a 13.0sp1 ou a 13.1 ao lado de um Quartus Lite recente, e não em vez dele.
A placa Marsohod MCY112 é construída com um
Cyclone de primeira geração (EP1C12). Nenhuma das versões testadas — de
13.0sp1 até 25.1std e Pro 26.1.1 — consegue compilar para ela: todas relatam
Error (20005), dizendo que é necessária uma licença. O arquivo de
projeto da própria placa no repositório foi criado pelo Quartus II 9.1 SP2 Web,
isto é, por uma edição gratuita. Esta placa precisa de um Quartus daquela
geração, ou de uma licença.
A ordem das seções é Windows (4.1), Linux (4.2), macOS (4.3). Dentro de cada uma, as mesmas ferramentas aparecem na mesma ordem.
O que é obrigatório e o que não é. Git, Icarus Verilog com um visualizador de formas de onda, VS Code e RARS são obrigatórios — sem eles nenhum laboratório pode ser feito. Das ferramentas de FPGA, você só precisa da que corresponde à sua placa: Quartus para uma placa Altera, Vivado para Xilinx, Gowin EDA ou OSS CAD Suite para Gowin, OSS CAD Suite para Lattice. Se você não tem placa alguma, não precisa de nenhuma delas: os exemplos podem ser simulados no Icarus Verilog, e os exercícios do SVH são feitos inteiramente sem placa.
Em todos os casos, o caminho de instalação não deve conter espaços nem caracteres fora do alfabeto latino. Isso vale para todos os programas listados aqui e é a causa mais comum de falhas inexplicáveis.
O Quartus só é necessário para placas com FPGA Altera (antes com a marca Intel). Se a sua placa usa Xilinx, Gowin ou Lattice, pule as seções 4.1.1 a 4.1.3.
A Intel voltou a ser Altera. As versões
novas se instalam em altera_lite (edição Lite) e
altera_pro (edição Pro), enquanto as versões da época da Intel se
instalavam em intelFPGA_lite e intelFPGA. Os scripts
do repositório conhecem todos esses nomes, então a escolha não importa —
instale no diretório que o instalador propuser.
altera_lite.1. Verifique se você baixou os dois arquivos: o instalador
(QuartusLiteSetup-21.1.exe) e o pacote de suporte ao seu chip, com
a extensão .qdz. Os dois arquivos devem estar na mesma
pasta.
Qual .qdz você precisa é determinado pelo chip da placa:
| Placa | Chip | Arquivo de suporte |
|---|---|---|
| DE10-Lite | MAX 10 | max10-21.1.1.850.qdz |
| DE10-Nano, DE1-SoC, DE0-CV | Cyclone V | cyclonev-21.1.1.850.qdz |
| OMDAZZ, RzRd, ZEOWAA, DE2-115, DE0-Nano | Cyclone IV | cyclone-21.1.1.850.qdz |
O código do chip está impresso no próprio encapsulamento, na placa; ele também está na coluna "Família de FPGA" da tabela da seção 3.

2. Execute o instalador e aceite o contrato de licença.

3. Deixe o caminho de instalação no padrão.

4. Se o arquivo .qdz estava ao lado do
instalador, o seu chip aparece agora na lista Devices. Se houver
vários arquivos, marque apenas a família de que você precisa — as outras
ocupam espaço sem utilidade.

5. Pressione Next e aguarde o fim da instalação.

6. Na última tela, não deixe de marcar Launch USB Blaster II driver installation e então pressione Finish.



Não é preciso definir variáveis de ambiente
nem o PATH depois. Como os scripts encontram o Quartus está
explicado na seção 4.1.1.4.
Gravar uma placa exige o driver do gravador. O exemplo a seguir usa uma placa OMDAZZ/RzRd com um gravador DDS2022-24.
1. Conecte o gravador. Ligue uma ponta do cabo plano JTAG ao conector JTAG da placa (não ao AS!) e a outra ponta ao gravador. Observe a reentrância do conector: o cabo entra de um único jeito.


2. Alimente a placa pelo cabo USB tipo B e ligue-a no botão ao lado do conector. Uma placa pronta para funcionar se parece com isto:


3. Abra o Gerenciador de Dispositivos (o caminho mais rápido é a caixa de busca ao lado do botão Iniciar). Um novo dispositivo aparece na lista depois que o gravador é conectado.
4. Clique nele com o botão direito → Atualizar driver → Procurar drivers no meu computador.
5. Aponte a busca para o diretório de instalação do
Quartus. O driver está dentro dele, em
quartus/drivers/usb-blaster.


Se nenhum dispositivo aparecer no Gerenciador: tente outra porta USB (inclusive uma USB 2.0 em lugar de 3.0 — nem todas funcionam), confira a ligação do JTAG e verifique se o LED do gravador está aceso. Se todos os segmentos do display de sete segmentos da OMDAZZ acenderem ao mesmo tempo, a placa está com defeito. Se nada resolver, escreva aos moderadores da Escola.
USB Blaster III. Cada geração de gravador tem
identificadores USB próprios e precisa do seu próprio driver. As placas com USB
Blaster III — entre elas a DE23-Lite — usam o identificador de produto
6022. No Windows o driver se instala da mesma forma, a partir do
diretório do Quartus; no Linux é preciso uma regra udev, veja a seção
4.2.1.2.
1. Inicie o Quartus. Aparece uma janela de escolha; pressione Run the Quartus Prime Software.

2. Se você tem uma placa, abra a janela Programmer.

3. Pressione Hardware Setup.

4. Se a lista suspensa contiver USB-Blaster, o driver está instalado corretamente.


5. Use Add File para adicionar um bitstream
.sof pronto e pressione Start. A palavra
Successful significa que tanto o Quartus quanto o gravador
funcionam.



Não é obrigatório baixar um bitstream separado para essa
verificação: compilar qualquer exemplo do repositório com o
03_synthesize_for_fpga.bash já compila e grava a placa. A edição
anterior sugeria baixar um top.sof de um serviço de nuvem; isso
continua funcionando, mas é dispensável.


A janela Programmer depois de uma gravação bem-sucedida
No BGM, a síntese, a gravação da placa e a abertura da interface gráfica do fabricante são feitas pelos mesmos scripts, qualquer que seja a ferramenta:
./03_synthesize_for_fpga.bash # sintetizar e gravar a placa
./04_configure_fpga.bash # apenas gravar
./05_run_gui_for_fpga_synthesis.bash # abrir a interface gráfica
Localizar o Quartus é tarefa do
scripts/steps/00_setup_altera.source_bash. A ordem da busca é a
seguinte, e o primeiro passo bem-sucedido encerra a procura:
QUARTUS_ROOTDIR — se a variável estiver definida e apontar
para o diretório quartus dentro de uma instalação, essa instalação
é usada e nenhuma busca acontece.quartus no PATH — se já estiver disponível
e for adequado à sua placa, o script não altera nada.INTEL_FPGA_HOME, depois ALTERA_HOME, depois
QUARTUS_HOME — um diretório que contém diretórios de
instalação./opt e
/tools (no Windows, as raízes de disco /c,
/d e /e).Em cada um desses locais são verificados todos os nomes de diretório que os instaladores da Altera e da Intel usaram ao longo dos anos:
altera altera_lite altera_std altera_pro
intelFPGA intelFPGA_lite intelFPGA_std intelFPGA_pro
Configurar o PATH não é
necessário. A edição anterior do manual mandava acrescentar
QUARTUS_ROOTDIR, QSYS_ROOTDIR e PATH ao
~/.bashrc. Isso deixou de ser preciso: para uma instalação em
local padrão, os scripts encontram o Quartus sozinhos. As variáveis continuam
úteis em dois casos — quando a instalação está em um diretório incomum e
quando você tem várias versões e quer forçar uma delas.
O nome do diretório não diz nada nem sobre a versão nem
sobre a edição. Na máquina do desenvolvedor,
altera_lite/25.1std contém uma edição Lite, enquanto
altera/13.1 contém uma edição Web (o nome antigo da Lite). Por
isso o script não confia em nomes: ele executa quartus_sh e
pergunta à própria ferramenta a sua versão, a sua edição e a lista de
dispositivos para os quais consegue compilar.
Em seguida o script lê o número exato do chip no arquivo de projeto da sua
placa (boards/<placa>/board_specific.qsf) e mantém apenas as
instalações que o suportam. Entre as que sobram, a escolha segue esta
ordem:
Consultar uma instalação leva de um a cinco segundos,
portanto a resposta é guardada em cache em
~/.cache/basics-graphics-music, vinculada à data do arquivo
quartus_sh. Uma execução normal de laboratório não gasta esse
tempo.
Se nenhuma instalação for capaz de compilar para o chip da sua placa, o
script avisa imediatamente, nomeando o chip e listando as versões encontradas —
em vez de escolher uma inadequada e falhar mais tarde, no meio da síntese. Se
você mesmo apontou uma instalação, por QUARTUS_ROOTDIR ou por
INTEL_FPGA_HOME / ALTERA_HOME /
QUARTUS_HOME, o script confia em você: emite um aviso e
continua.
O Vivado só é necessário para placas com FPGA AMD Xilinx. Placas com chips Altera, Gowin ou Lattice não precisam dele.
A imagem do instalador do Vivado passa de 80 GB e o programa instalado ocupa mais de 50 GB. Confira o espaço livre com antecedência.
Os laboratórios foram escritos para a versão 2022.2. A comunidade da Escola verificou que eles também funcionam nas versões 2018, 2021 e 2023, mas a recomendada é a 2022.2.
1. Pressione Next na tela de boas-vindas do instalador.

2. Marque Vivado.
3. Na página Product Devices, marque as famílias de chips que o repositório suporta: Zynq-7000, Artix-7, Kintex-7 e Spartan-7. As outras famílias ocupam dezenas de gigabytes sem proveito.


4. Aceite o contrato de licença, deixe o caminho de instalação no padrão e pressione Install.
A edição anterior citava apenas Zynq-7000, Artix-7 e Kintex-7. O repositório hoje tem também placas com Spartan-7 (a Digilent Cmod S7, por exemplo), de modo que essa família também vale a pena marcar.
A busca é feita pelo
scripts/steps/00_setup_xilinx.source_bash. Em essência, a ordem é
a mesma do Quartus:
XILINX_VIVADO — um ponteiro direto para o diretório de uma
versão;vivado no PATH;XILINX_HOME — um diretório que contém instalações;/opt,
/tools; no Windows, /c, /d,
/e.Dentro de cada local são verificados os diretórios Xilinx,
AMD e AMDDesignTools, em duas disposições
diferentes:
<local>/<fabricante>/Vivado/<versão> — Vivado 2024.1 e anteriores
<local>/<fabricante>/<versão>/Vivado — Vivado 2024.2 e posteriores
A partir da versão 2024.2 a AMD mudou a disposição dos
diretórios: o número da versão passou a ficar acima do nome do
produto, e o diretório do fabricante já não se chama necessariamente
Xilinx. Versões anteriores dos scripts não encontravam o Vivado
por causa disso; agora as duas disposições são aceitas.
Se várias instalações forem encontradas, a versão mais nova é usada. Não é
preciso configurar o PATH.
O repositório traz o seu próprio guia ilustrado de instalação do Vivado: docs/vivado_installation_guide.
Uma comparação detalhada: verilog-meetup.com — Can Gowin beat Xilinx and Altera in the educational market?
O download exige cadastro no site do fabricante. A Escola pressupõe a versão V1.9.9 Education.
Para as placas Tang Primer 25K e Tang Mega 138K (famílias GW5A e GW5AST) a versão 1.9.9 não basta — esses chips vieram depois. Use um Gowin EDA mais novo.
1–2. Pressione Next na tela de boas-vindas e aceite o contrato de licença.


3–4. Marque todas as caixas, para instalar todos os componentes. Deixe o caminho no padrão e pressione Install.


5–6. Ao terminar, marque as caixas de instalação dos drivers do gravador e pressione Finish. Na janela FTDI CDM Drivers pressione Extract.


7–9. Avançar → aceitar o contrato → aguardar → Concluir.



10–12. Um ícone de escudo começa a piscar na área de notificação — clique nele, deixe o caminho no padrão, Install e então Close.



O scripts/steps/00_setup_gowin.source_bash verifica:
GOWIN_VERSION_DIR — o diretório de uma versão (ele precisa
conter os subdiretórios IDE e Programmer);GOWIN_HOME — um diretório que contém versões;/opt, /tools e, dentro
deles, os subdiretórios Gowin ou gowin.Se várias versões forem encontradas, a mais nova é usada (nomes como
Gowin_V1.9.9 são ordenados e o último vence), e um aviso lista o
que foi encontrado.
O OSS CAD Suite é um único pacote que reúne todo o fluxo aberto: Yosys (síntese), nextpnr (posicionamento e roteamento), openFPGALoader (gravação), além de compilações próprias de Icarus Verilog, GTKWave e Verilator. É a única forma de trabalhar com placas Lattice (ECP5, iCE40) e uma forma alternativa de trabalhar com placas Gowin.
~/oss-cad-suite — isto é, diretamente no seu diretório pessoal.
Os scripts do BGM procuram exatamente esse caminho, e também
~/Downloads/oss-cad-suite.Nada mais é necessário: o script
scripts/steps/00_setup_yosys.source_bash encontra o diretório e o
ativa com source ~/oss-cad-suite/environment. Não é preciso editar
o PATH à mão.
Se o diretório não existir, o script procura o yosys no sistema
e, não o encontrando, exibe uma mensagem com o endereço da página de
lançamentos.
O fluxo aberto avança rápido, e alguns exemplos do repositório ainda não funcionam completamente nele — especialmente para placas Lattice. Se você encontrar um exemplo assim, esse é um bom tema de trabalho independente: a Escola conta com os alunos para depurar esses casos. Relate o que encontrar pelas issues do repositório.
O Icarus Verilog é um simulador aberto, suficiente para simular todos os exemplos do repositório. O GTKWave e o Surfer são os programas que exibem as formas de onda no formato VCD.
A versão 13 é o mínimo; a 14 é melhor. A edição anterior descrevia a versão 12. Os scripts do repositório verificam a versão na inicialização: abaixo de 12 emitem erro e, na 12, um aviso recomendando a 13 ou a 14. Alguns exemplos usam construções de SystemVerilog que só a versão 13 e as posteriores entendem.
Onde baixar: bleyer.org/icarus — compilações para Windows. Pegue a versão 14.
1–2. Execute o instalador e aceite o contrato de licença.


3–4. O instalador avisa que o caminho de instalação não
pode conter espaços. Deixe-o no padrão
(C:\iverilog).


5–6. Marque as duas caixas, para uma instalação completa — ela inclui o GTKWave. Deixe o nome da pasta no menu Iniciar como está.


7–8. Marque Add executable folder(s) to the user PATH e pressione Install.


O scripts/steps/00_setup_icarus.source_bash:
iverilog estiver disponível no PATH, usa
esse;/c/iverilog (isto é,
C:\iverilog) e, no Linux e no macOS,
~/install/iverilog;iverilog -V, interpreta o número da versão
e avisa se ela for antiga demais;-g2023, de que alguns exemplos
precisam.O Icarus que vem no OSS CAD Suite também serve. Se você instalou o OSS CAD Suite (seção 4.1.4), uma instalação separada do Icarus é opcional: o pacote traz o simulador e o GTKWave, e os scripts os utilizam.
Se, em lugar do GTKWave, o programa surfer for encontrado no
sistema, os scripts o usam e leem o arquivo de configuração
surfer.scr em vez do gtkwave.tcl. Veja a seção
4.1.7.
1–3. Baixe o instalador em code.visualstudio.com, execute-o e aceite o contrato de licença.



4–5. Deixe o caminho de instalação no padrão. O caminho não deve conter caracteres fora do alfabeto latino. Deixe o nome da pasta no menu Iniciar como está.


6–7. Vale marcar "Criar um ícone na área de trabalho" e as duas entradas "Abrir com o Code" — elas acrescentam o comando ao menu de contexto do Explorador.


8. Instale a extensão de realce de sintaxe: aba de extensões → procure SystemVerilog → SystemVerilog - Language Support → Install.

Esta seção não existia na edição anterior. O Surfer é uma alternativa moderna ao GTKWave para ver formas de onda. Existe em duas formas, e as duas são úteis.
Abra a aba de extensões, procure Surfer e instale. A partir daí os
arquivos .vcd abrem dentro do próprio editor, ao lado do código —
não é preciso alternar para outra janela.
Baixe uma compilação na página de lançamentos,
gitlab.com/surfer-project/surfer/-/releases,
e coloque o executável em um diretório que esteja no PATH.
Os scripts do repositório verificam a existência do comando
surfer e, se ele existir, usam o Surfer em lugar do GTKWave
automaticamente. Para cada exemplo o repositório mantém um arquivo
surfer.scr ao lado do gtkwave.tcl, com o mesmo
conjunto de sinais exibidos.
O Git é necessário para baixar o repositório de exemplos e receber atualizações. Além disso, no Windows ele traz o Git Bash — o shell em que todos os scripts do repositório são executados.
No Windows, os scripts do BGM são executados pelo
Git Bash, e não pelo cmd.exe nem pelo
PowerShell. Isso não é opcional.
1–3. Baixe o instalador em git-scm.com/downloads/win, aceite o contrato e deixe as três telas seguintes no padrão.



4. Como editor padrão, convém escolher na lista o Visual Studio Code.



5. Marque Override the default branch name for new
repositories e deixe o nome como main.



6. Deixe as demais páginas no padrão e conclua a instalação.



7. Depois disso o sistema passa a ter Git Bash e Git CMD, e o menu de contexto do Explorador ganha Open Git GUI here e Open Git Bash here.


mkdir -p ~/projects
cd ~/projects
git clone https://github.com/chipdesignschool/basics-graphics-music.git
git clone https://github.com/chipdesignschool/systemverilog-homework.git
A edição anterior mandava clonar os repositórios de
gitflic.ru, incluindo o valid-ready-etc. Esses
endereços não são mais usados: o valid-ready-etc está obsoleto e os
repositórios atuais ficam no GitHub (veja as seções 1.2 e 1.3). É justamente
por isso que a opção main em vez de master importa
agora — no GitHub o ramo principal se chama main.
O RARS é um simulador do conjunto de instruções RISC-V. É
nele que se fazem os exercícios de assembly da parte do curso sobre
arquitetura de processadores, e é ele que o
10_run_instruction_set_simulator.bash executa.
O RARS é distribuído como um único arquivo jar executável, portanto é preciso Java 8 ou mais novo.
1. Baixe uma compilação do OpenJDK em
jdk.java.net e descompacte-a, por exemplo
em C:\Program Files\OpenJDK.
2. Crie a variável de sistema JAVA_HOME com o
caminho do diretório descompactado e acrescente
%JAVA_HOME%\bin ao PATH.
A edição anterior escrevia esse valor como
%JAVA_HOME\bin — sem o sinal de porcentagem de fechamento, o que
torna a entrada inútil. A grafia correta é
%JAVA_HOME%\bin.
3. Verifique a instalação no cmd:
java --version



4. Baixe o rars1_6.jar da página de
lançamentos:
github.com/TheThirdOne/rars/releases.


O 00_setup_rars.source_bash procura o arquivo jar no diretório
pessoal e no diretório de downloads; se encontrar várias versões, usa a mais
nova.
Esta seção não existia na edição anterior. Ela é necessária para a parte do curso em que um núcleo de processador é sintetizado no FPGA e programas em C e assembly rodam sobre ele.
O repositório contém três núcleos RISC-V que podem ser sintetizados em um FPGA:
aps — um núcleo do MIET;yrv — um núcleo compacto com interface de depuração;picorv32 — o conhecido núcleo pequeno.O núcleo é selecionado com o
13_choose_another_riscv_core_for_software.bash.
Compilar software para um núcleo desses exige um compilador cruzado. O
repositório usa a distribuição XPACK RISC-V GCC
(riscv-none-elf-gcc).
~/xpack-riscv-none-elf-gcc-14.2.0-3/, contendo um subdiretório
bin.O 00_setup_riscv.source_bash procura diretórios chamados
xpack-riscv-none-elf-gcc-* até dois níveis abaixo do diretório
pessoal, e também um diretório xpack/bin. Se encontrar várias
versões, emite um aviso e usa uma delas.
Compilação e envio de um programa:
./11_build_software_to_run_on_cpu.bash
./12_upload_software_to_the_board_using_uart.bash
./14_run_terminal_program.bash
O 14_run_terminal_program.bash funciona com três
terminais: minicom, picocom e
putty. O script descobre quais estão instalados, oferece a
escolha entre as portas UART disponíveis e inicia o terminal na velocidade
correta. No Windows, o PuTTY é o mais fácil de instalar; no Linux, minicom ou
picocom.
A edição anterior descrevia o OpenLane instalado por Docker, e aquela seção deve ser considerada inteiramente obsoleta. O repositório agora usa o LibreLane — a continuação do mesmo projeto, instalada pelo Nix.
O LibreLane é um fluxo aberto que transforma código SystemVerilog em layout de circuito integrado (RTL a GDSII). Ele roda apenas no Linux e no macOS; no Windows é preciso o WSL ou uma máquina virtual com Linux (veja a seção 4.2.11 e o arquivo docs/wsl.md do repositório).
# instalar o gerenciador de pacotes Nix
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
# no diretório do LibreLane
nix develop
Dentro do shell do nix develop o comando
librelane está disponível e os scripts do repositório o
encontram.
Aponte a variável LIBRELANE_PATH para o diretório que contém o
executável:
export LIBRELANE_PATH=/caminho/para/librelane/bin
O 00_setup_libre_lane.source_bash acrescenta esse caminho ao
PATH. Se o comando librelane ainda assim não for
encontrado, o script exibe uma mensagem descrevendo as duas formas de
instalação.
./07_synthesize_for_asic.bash # sintetizar para um ASIC
./08_visualize_asic_synthesis_results_1.bash # inspecionar o layout
./09_visualize_asic_synthesis_results_2.bash
O visualizador é escolhido pela variável LAYOUT_VIEWER e pode
ser openroad (o padrão) ou klayout.



Capturas de tela da edição anterior, mostrando o OpenLane. Foram mantidas para comparação: o fluxo em si foi substituído pelo LibreLane.
A ordem é a mesma do Windows, e a numeração das subseções coincide. Onde um passo não difere, ele não é repetido — indica-se a subseção correspondente de 4.1.
No Linux os scripts rodam em um terminal comum; não é preciso um shell separado como o Git Bash do Windows.
O Quartus só é necessário para placas com FPGA Altera. Se a sua placa usa Xilinx, Gowin ou Lattice, vá para as subseções 4.2.2 a 4.2.4.
1. Baixe o instalador
QuartusLiteSetup-21.1.0.842-linux.run e o pacote
.qdz do seu chip (veja a tabela da subseção 4.1.1.1), colocando os
dois na mesma pasta.
2. No terminal:
chmod +x QuartusLiteSetup-21.1.0.842-linux.run
./QuartusLiteSetup-21.1.0.842-linux.run



O diretório de instalação não deve conter espaços nem caracteres fora do alfabeto latino — isso quebra o Quartus.
Daí em diante o instalador se comporta como no Windows: apresenta o
contrato, o diretório e uma lista Devices montada a partir dos
arquivos .qdz que encontrou. Uma lista vazia significa que o
.qdz não estava ao lado do instalador; ele pode ser acrescentado
depois pelo menu Tools → Install Devices.
Nenhuma variável de ambiente é necessária.
A edição anterior exigia estas linhas no ~/.bashrc:
export QSYS_ROOTDIR=…
export QUARTUS_ROOTDIR=…
PATH=$PATH:/home/user/intelFPGA_lite/20.1/quartus/bin:…
Isso deixou de ser necessário — os scripts encontram o Quartus sozinhos
(subseção 4.2.1.4). Note também que, naquele exemplo, os números de versão não
concordavam entre as linhas (21.1 em duas variáveis e 20.1 no
PATH) — um erro de digitação que colocava no PATH um
diretório inexistente.
Sem uma regra udev, o gravador fica acessível apenas ao root, e o Quartus "não o vê".
1. Conecte a placa e o gravador e confirme que o sistema os enxerga:
lsusb
Deve aparecer uma linha com o identificador de fabricante
09fb — que é a Altera.
2. Crie o arquivo de regras:
sudo nano /etc/udev/rules.d/51-usbblaster.rules
e escreva nele:
# USB Blaster
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE:="0666", SYMLINK+="usbblaster/%k"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6002", MODE:="0666", SYMLINK+="usbblaster/%k"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6003", MODE:="0666", SYMLINK+="usbblaster/%k"
# USB Blaster II
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6010", MODE:="0666", SYMLINK+="usbblaster2/%k"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6810", MODE:="0666", SYMLINK+="usbblaster2/%k"
# USB Blaster III (necessário para a Terasic DE23-Lite)
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6022", MODE:="0666", SYMLINK+="usbblaster3/%k"
O terceiro grupo de linhas é novo. O USB
Blaster III (idProduct 6022) é usado na Terasic DE23-Lite. A
edição anterior não tinha regra para ele, e a placa não podia ser
gravada.
3. Aplique as regras e reconecte o cabo do gravador:
sudo udevadm control --reload
# depois desconecte e reconecte o cabo do USB Blaster
Se o diretório /etc/udev/rules.d/ acabar com
dois arquivos contendo regras de Blaster — digamos o seu
51-usbblaster.rules e o 90-altera.rules que vem com o
Quartus —, nada quebra: o udev lê todos os arquivos e aplica
todas as regras que casam. Mas, se eles definirem permissões diferentes, vence
o arquivo que vem primeiro na ordem alfabética, porque o operador
:= proíbe alterações posteriores. Para ver qual regra valeu, use
udevadm test.
Os passos são os da subseção 4.1.1.3: iniciar o Quartus, abrir o Programmer, pressionar Hardware Setup e conferir que USB-Blaster está na lista.



No Lubuntu, a janela Programmer às vezes se recusa a encaixar. O menu Window → Attach Window resolve.






A palavra Successful significa que o Quartus e o gravador funcionam
Exatamente como no Windows — veja a subseção
4.1.1.4. Só muda a lista de locais padrão: no Linux são
o diretório pessoal, /opt e /tools (no Windows, as
raízes de disco /c, /d e /e ocupam esse
lugar).
Baixe o instalador no site da AMD, torne-o executável e execute-o:
chmod +x FPGAs_AdaptiveSoCs_Unified_*_Lin64.bin
./FPGAs_AdaptiveSoCs_Unified_*_Lin64.bin
Daí em diante as caixas de diálogo são as do Windows (subseção 4.1.2): escolher o Vivado, marcar as famílias Zynq-7000, Artix-7, Kintex-7 e Spartan-7, aceitar o contrato.
Depois da instalação, execute o script dos drivers do cabo — sem ele o gravador não fica acessível a um usuário comum:
cd $XILINX_VIVADO/data/xicom/cable_drivers/lnx64/install_script/install_drivers
sudo ./install_drivers
Em distribuições fora da lista oficialmente suportada, o
Vivado pode não iniciar por falta da biblioteca
libtinfo.so.6 — a mensagem é
couldn't load file "libxv_tcltasks.so", seguida de
Failed to load feature 'core'. A causa é que o próprio
ldlibpath.sh do Vivado não conhece a sua distribuição e por isso
não acrescenta o caminho correto para ela. A solução é colocar uma biblioteca
compatível em
$XILINX_VIVADO/lib/lnx64.o/Default/.
Como os scripts encontram o Vivado está na subseção 4.1.2; a ordem é a mesma em todos os sistemas.
Baixe o pacote para Linux (é preciso cadastro no site da Gowin) e
descompacte-o no diretório pessoal ou em /opt, de modo a obter um
caminho como ~/Gowin/Gowin_V1.9.9/IDE.
O acesso ao gravador exige uma regra udev — o gravador das placas Tang é feito com um chip FTDI:
sudo nano /etc/udev/rules.d/91-sipeed.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE:="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE:="0666"
sudo udevadm control --reload
Como os scripts encontram o Gowin EDA está na subseção 4.1.3.
Exatamente como no Windows (subseção 4.1.4): descompacte o pacote em
~/oss-cad-suite e não faça mais nada — os scripts o
ativam.
cd ~
tar xzf oss-cad-suite-linux-x64-*.tgz
Para o Ubuntu 22.04 e mais novos:
sudo add-apt-repository ppa:team-electronics/ppa
sudo apt-get update
sudo apt install iverilog gtkwave
Confira a versão:
iverilog -V

A versão 13 é o mínimo; a 14 é melhor. Se a sua distribuição traz apenas a versão 11 ou 12, há três saídas: usar o Icarus do OSS CAD Suite (subseção 4.2.4), compilá-lo a partir do código-fonte, ou instalar uma compilação de bleyer.org/icarus (o código-fonte também está lá). Os scripts verificam a versão e avisam se ela for antiga demais.
Compilação a partir do código-fonte em ~/install/iverilog — um
caminho que os scripts conhecem:
git clone https://github.com/steveicarus/iverilog.git
cd iverilog && sh autoconf.sh
./configure --prefix=$HOME/install/iverilog
make -j$(nproc) && make install
Baixe o pacote .deb em
code.visualstudio.com e
instale-o:
sudo dpkg -i code_*.deb








Em seguida instale as extensões SystemVerilog - Language Support e Surfer, exatamente como no Windows (subseções 4.1.6 e 4.1.7)
Baixe a compilação para Linux na página de lançamentos,
gitlab.com/surfer-project/surfer,
descompacte-a e coloque o executável em um diretório que esteja no
PATH — por exemplo ~/.local/bin:
mkdir -p ~/.local/bin
tar xzf surfer-*-linux.tar.gz -C ~/.local/bin --strip-components=1 surfer/surfer
surfer --version
Para que os scripts abram as formas de onda no Surfer, e não no GTKWave:
export WAVE_VIEWER=surfer
Mais sobre a escolha do visualizador na subseção 4.1.7.
sudo apt install git
Defina o seu nome e endereço — sem isso o Git se recusa a registrar commits:
git config --global user.name "Seu Nome"
git config --global user.email "voce@example.com"
git config --global init.defaultBranch main
Nenhum shell separado é necessário: no Linux os scripts rodam em um terminal comum.
É preciso Java. No Linux ele se instala com um comando, e nem
JAVA_HOME nem PATH precisam ser mexidos:
sudo apt install default-jre
java --version
Em seguida baixe o rars1_6.jar da página de lançamentos
(github.com/TheThirdOne/rars)
no seu diretório pessoal e execute-o:
java -jar rars1_6.jar
O 10_run_instruction_set_simulator.bash encontra o
.jar por conta própria — veja a subseção 4.1.9.
O compilador. Descompacte o pacote XPACK no seu diretório pessoal — os scripts o encontram (subseção 4.1.10):
cd ~
tar xzf xpack-riscv-none-elf-gcc-*-linux-x64.tar.gz
O programa de terminal. Ele é necessário para enviar um programa para a placa pela UART e conversar com o processador dentro do FPGA:
sudo apt install minicom picocom
O 14_run_terminal_program.bash escolhe o programa pela variável
TERMINAL_PROGRAM (minicom, picocom ou
putty).
Para acessar a porta serial sem sudo, acrescente-se ao grupo
dialout:
sudo usermod -aG dialout $USER
# depois saia da sessão e entre de novo
Esse grupo é a causa mais comum de um
Permission denied em /dev/ttyUSB0. A mudança só vale
depois de um novo login; reiniciar o terminal não basta.
Veja a subseção 4.1.11 — a instalação pelo Nix é a mesma no Linux e no macOS. No Linux esse é o caminho normal e nativo: nem WSL nem máquina virtual entram na história.
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
nix develop
./07_synthesize_for_asic.bash
Não existe Quartus nem Vivado para o macOS. Nem a Altera nem a AMD lançam esses programas para macOS, de forma alguma. Isso significa que placas com FPGA Altera e Xilinx não podem ser usadas diretamente do macOS — é preciso uma máquina virtual com Linux ou Windows (seções 5 e 7), ou um computador separado.
Estes, por outro lado, funcionam plenamente e não exigem truque algum:
Em outras palavras, um Mac é um lugar confortável para aprender com uma Tang Nano 9K — mais uma razão para a Escola recomendá-la como a opção barata.
No restante, o macOS se comporta como o Linux: os mesmos scripts, o mesmo terminal, os mesmos comandos. Mas há quatro particularidades, todas elas embutidas nos próprios scripts.
Em Macs com processador Intel o Gowin EDA não inicia, e o script diz isso diretamente:
Gowin IDE is not working on your platform (Mac x64?)
Em Macs com M1 e posteriores ele funciona.
No macOS o Gowin EDA é distribuído como um pacote de aplicativo, com os
executáveis dentro dele. O script procura os diretórios
GowinIDE.app, Gowin e gowin e, dentro
deles, verifica também o subcaminho:
Contents/Resources/Gowin_EDA
Assim, o caminho de instalação fica, por exemplo,
/Applications/GowinIDE.app/Contents/Resources/Gowin_EDA/IDE/bin.
As variáveis DYLD_FRAMEWORK_PATH e
DYLD_LIBRARY_PATH, sem as quais o Gowin EDA não encontra as suas
próprias bibliotecas no macOS, são definidas pelo script — você não precisa
defini-las à mão.
O macOS marca tudo o que é baixado da internet com o atributo
com.apple.quarantine e se recusa a executar. Essa é a razão mais
comum pela qual o Gowin EDA, o OSS CAD Suite e o compilador XPACK "não
funcionam" em um Mac.
Os scripts do repositório detectam isso e sugerem o comando, mas remover o atributo é com você. São verificados:
IDE e
Programmer;~/oss-cad-suite e
~/Downloads/oss-cad-suite;O comando para qualquer um deles:
xattr -rd com.apple.quarantine ~/oss-cad-suite
# se der Permission denied:
sudo xattr -rd com.apple.quarantine ~/oss-cad-suite
Ao encontrar o atributo, o script pergunta
Abort, Retry, Ignore? [a/R/i]. Isso quer dizer: abra uma segunda
janela de terminal, execute o comando xattr sugerido, volte e
pressione Enter — Retry é o padrão, e o script verifica o
atributo de novo. Responder i continua sem remover o atributo
(muito provavelmente para um erro); a aborta.
Em Macs com M1 ou posterior os scripts abrem as formas de onda no Surfer, e não no GTKWave, e exigem que ele esteja instalado:
brew install surfer # ou baixe uma compilação na página de lançamentos
Em Macs com Intel usa-se o GTKWave, e o executável de dentro do pacote do aplicativo é chamado diretamente:
/Applications/gtkwave.app/Contents/MacOS/gtkwave-bin
Ali, portanto, basta arrastar o gtkwave.app para
/Applications. Iniciá-lo com open -a gtkwave não
serve: desse jeito o GTKWave não lê o script gtkwave.tcl que
organiza previamente os sinais na forma de onda — o próprio comentário no
script registra isso.
Mais um detalhe embutido nos scripts: ao procurar o
compilador XPACK no macOS, o diretório Desktop é excluído da
busca. Isso evita que o macOS peça permissão para ler os arquivos da sua área
de trabalho a cada execução.
Instalação do restante pelo Homebrew:
brew install git icarus-verilog
brew install surfer # em Apple Silicon
brew install gtkwave # em um Mac com Intel
brew install --cask visual-studio-code
Esta seção sobre o macOS foi escrita a partir do
código dos scripts do repositório (os ramos darwin em
00_setup_gowin, 00_setup_yosys,
00_setup_icarus, 00_setup_riscv e
00_setup.source_bash), e não verificada em uma máquina macOS real.
Se você encontrar uma divergência, relate-a: a seção será
corrigida.
A parte do curso dedicada à verificação funcional precisa do simulador Questa. Ele é distribuído separadamente e pode exigir licença, por isso a Escola distribui uma máquina virtual pronta com o simulador instalado.
.vbox do diretório descompactado.1234.vsim. A janela de boas-vindas do simulador deve aparecer.



Em caso de dificuldade, escreva no grupo de conversa da Escola.
Em vez de instalar tudo à mão, é possível obter uma imagem de SSD com o software pré-instalado e inicializar o computador a partir dela. Isso é prático em laboratórios de ensino.
A seção se baseia no artigo de Yuri Panchul: habr.com/ru/articles/754262.
A imagem contém o software para placas Altera (Quartus). O Vivado e o Gowin EDA são instalados separadamente, se necessário. O Questa da imagem pode exigir licença.
Baixe o arquivo .img (o link é fornecido pela Escola).
Sobre o GPT. Um disco carrega duas tabelas de partição GPT — a principal e uma de reserva. A imagem (cerca de 50 GB descompactada) é menor do que qualquer SSD atual, de modo que, depois da gravação, a tabela de reserva sobrevive intacta e atrapalha a primeira inicialização. Por isso a segunda tabela precisa ser apagada.
Um script do próprio repositório faz isso:
scripts/admin/erase_ssd_gpt_and_write_bootable_image.bash
Coloque o script no diretório da imagem (ou a imagem no diretório do script)
e execute-o com sudo. O script confere que há exatamente uma
imagem, pergunta qual disco sobrescrever, garante que esse disco não está
montado e grava a imagem. A operação leva dezenas de minutos.
Conecte o SSD ao computador desligado, ligue-o e comece a pressionar a tecla que abre o menu de inicialização:
| Fabricante | Tecla |
|---|---|
| ASUS, Acer | Del ou F2 |
| Dell | F12 ou F2 |
| HP | F10 |
| Lenovo | F2 ou Fn+F2 (notebooks), F1 (desktops), Enter e depois F1 (ThinkPad) |
| MSI | Del |
| Samsung | F2 |
A imagem funciona tanto por UEFI quanto por inicialização legada.




Se as teclas não responderem na hora de ligar (a inicialização rápida do Windows causa isso), use o próprio Windows: Configurações → Recuperação → Inicialização avançada → Reiniciar agora, depois Usar um dispositivo, e escolha a entrada Linpus lite (a entrada EFI USB Device não funciona sempre).




O Simply Linux então inicia. Login verilog, senha
verilog.



Conecte-se à internet e atualize os exemplos. Se o diretório já existir:
cd ~/projects/basics-graphics-music
git pull
Se não existir:
cd ~/projects
git clone https://github.com/chipdesignschool/basics-graphics-music.git
git clone https://github.com/chipdesignschool/systemverilog-homework.git
A edição anterior sugeria clonar de gitflic.ru e
mencionava o repositório valid-ready-etc. Esse está obsoleto; o
seu material foi incorporado ao BGM. Os endereços atuais estão nas seções 1.2
e 1.3.
Primeiro selecione a placa:
cd ~/projects/basics-graphics-music
./check_setup_and_choose_fpga_board.bash
O script mostra a lista de placas suportadas, guarda a sua escolha no
arquivo fpga_board_selection na raiz do repositório e oferece
criar os diretórios de trabalho de todos os exemplos.
Depois compile um exemplo e grave a placa:
cd labs/1_basics/1_01_and_or_not_xor_de_morgan
./03_synthesize_for_fpga.bash
Os nomes dos diretórios de exemplo mudaram: agora eles estão
agrupados por parte do curso —
labs/1_basics/1_01_and_or_not_xor_de_morgan em vez do antigo
labs/01_and_or_not_xor_de_morgan.
Se a gravação falhar na primeira tentativa, reconecte o cabo do USB Blaster e execute apenas a etapa de gravação:
./04_configure_fpga.bash
Depois disso você pode apertar os botões da placa e observar os LEDs se comportarem conforme o código do exemplo manda.
Se inicializar por um SSD separado for inconveniente, a mesma imagem pode rodar em uma máquina virtual.
.img.qemu-img:
qemu-img convert -f raw -O vdi imagem.img imagem.vdi.vdi
resultante como um disco rígido existente.verilog, senha verilog.










Gravar uma placa de dentro da máquina virtual exige repassar o dispositivo USB para ela (Dispositivos → USB), e para isso o VirtualBox precisa do seu Extension Pack. Se o gravador insistir em não aparecer, é mais fácil trabalhar com a placa no sistema anfitrião e usar a máquina virtual apenas para simulação e verificação.
Os exemplos do repositório estão agrupados por parte do curso. Eis um mapa resumido, conforme habr.com/ru/articles/1071736.
| Parte | Sobre o quê | O que aparece na placa |
|---|---|---|
1_basics |
Portas lógicas, multiplexadores, flip-flops D, contadores, registradores de deslocamento, máquinas de estados | LEDs, o display de sete segmentos, botões |
2_graphics |
Geração de imagem com lógica combinacional e, depois, com memória | Uma imagem em VGA, HDMI ou tela de LCD; jogos |
3_music |
Reconhecimento de notas por microfone, síntese de som por um DAC | Som em um alto-falante, detecção da nota tocada |
4_microarchitecture |
Pipelines, filas FIFO, controle de fluxo por créditos | Aquilo que as entrevistas de emprego perguntam |
5_cpu |
O processador schoolRISCV (cerca de 300 linhas de Verilog e uma dúzia
de instruções RISC-V), além dos núcleos picorv32,
yrv e aps |
O seu próprio processador no FPGA, rodando os seus programas |
As partes 3 a 5 do curso da Escola seguem essa estrutura: assembly RISC-V no simulador RARS, depois a microarquitetura de um núcleo de processador, depois a integração do núcleo em um sistema — entrada e saída de sensores e concorrência por interrupções. O exemplo Femto Threads implementa troca de contexto de tarefas em cerca de 400 linhas de assembly, isto é, multitarefa em um processador que você mesmo sintetizou.
Cada exemplo é um diretório com o mesmo conjunto de scripts. A ordem usual de trabalho é:
./check_setup_and_choose_fpga_board.bashlab_top.sv — é esse
o arquivo que se espera que você altere../02_simulate_rtl.bash./03_synthesize_for_fpga.bashA lista completa dos scripts:
| Script | O que faz |
|---|---|
| 01_clean | apagar os resultados das execuções anteriores |
| 02_simulate_rtl | simular no Icarus Verilog e mostrar as formas de onda no GTKWave ou no Surfer |
| 03_synthesize_for_fpga | síntese, posicionamento, roteamento e gravação — em um comando |
| 04_configure_fpga | apenas gravar um bitstream já compilado |
| 05_run_gui_for_fpga_synthesis | abrir o projeto na interface gráfica do fabricante |
| 06_choose_another_fpga_board | selecionar outra placa |
| 07_synthesize_for_asic | sintetizar para um circuito integrado pelo LibreLane |
| 08_, 09_visualize_asic_… | inspecionar o layout (OpenROAD, KLayout) |
| 10_run_instruction_set_simulator | executar o RARS |
| 11_build_software_to_run_on_cpu | compilar C e assembly com o compilador XPACK |
| 12_upload_software_to_the_board_using_uart | enviar o programa para a placa pela UART |
| 13_choose_another_riscv_core_for_software | selecionar um núcleo: aps, yrv, picorv32 |
| 14_run_terminal_program | um terminal: minicom, picocom ou putty |
Um passo a passo do primeiro exemplo para iniciantes: verilog-meetup.com — Beginner's guide, e o arquivo docs/beginner-s-guide-to-basics-graphics-music.md do repositório.
O SVH é um conjunto de pequenos exercícios com verificação automática. A estrutura é simples: o arquivo do exercício contém um módulo incompleto e, ao lado dele, um testbench que informa se a sua solução passa.
O que é preciso: apenas Icarus Verilog e Git. Nenhuma placa e nenhuma ferramenta de fabricante, o que torna o SVH um bom ponto de partida antes de a placa chegar.
git clone https://github.com/chipdesignschool/systemverilog-homework.git
cd systemverilog-homework
# dentro do diretório de um exercício:
./run.bash
Os exercícios vão de circuitos combinacionais simples a aritmética, máquinas
de estados, pipelines e interfaces com handshake — isto é, às mesmas técnicas
de microarquitetura da parte 4_microarchitecture do BGM, mas sem
placa.
Há três cópias do repositório, como no caso do BGM; para as aulas da Escola,
use a chipdesignschool:
| Escola de Síntese de Circuitos Digitais | github.com/chipdesignschool/systemverilog-homework |
| Desenvolvimento | github.com/yuri-panchul/systemverilog-homework |
| Seminários internacionais | github.com/verilog-meetup/systemverilog-homework |
O Tiny Tapeout é um serviço que reúne projetos de muitos participantes em uma única pastilha e a envia para uma fábrica. Essa forma de fabricação se chama MPW (multi-project wafer), ou shuttle: o custo da máscara é dividido entre todos os participantes, o que torna a fabricação de um circuito pequeno acessível para uma universidade e, às vezes, para uma pessoa física.
Existe um modelo pronto para o BGM que aproveita o módulo
lab_top do exemplo — exatamente o arquivo que o aluno editava
enquanto depurava aquele exemplo na placa. A fabricação é feita na fábrica do
instituto IHP (Leibniz-Institut für innovative Mikroelektronik), na
Alemanha.
./07_synthesize_for_asic.bash
./08_visualize_asic_synthesis_results_1.bash
É o mesmo fluxo de RTL a GDSII usado na fabricação real, de modo que os
problemas aparecem antes.lab_top para ele.Mais informações:
O custo de participação e as datas dos shuttles mudam, e as fontes disponíveis durante a preparação desta edição não traziam números concretos. Consulte o site do Tiny Tapeout.
O diretório docs/ guarda arquivos que vale a pena ler junto com este manual:
| Arquivo | Sobre o quê |
|---|---|
| IntelQuartus.md | observações sobre o Quartus |
| GowinEDA.md | observações sobre o Gowin EDA |
| Yosys.md | o fluxo aberto |
| vivado_installation_guide/ | instalação do Vivado, com ilustrações |
| wsl.md | uso no Windows Subsystem for Linux |
| qemu.md | execução no QEMU |
| beginner-s-guide-to-basics-graphics-music.md | guia para iniciantes |
| boards/README.md | a tabela de placas (veja a seção 3) |
Os scripts do repositório também suportam uma ferramenta a mais — o
Efinity, para FPGAs Efinix
(scripts/steps/00_setup_efinity.source_bash, apenas Linux). A sua
instalação não é descrita aqui, de propósito: a única placa Efinix (Trion T20)
está em boards/zzz_postponed_and_retired/, isto é, não está entre
as placas ativas e não aparece na tabela da seção 3. Se você vier a ter uma
placa dessas, leia o script: ele procura o Efinity pela variável
EFINITY_HOME e por um comando efinity_sh.sh no
PATH.
O grupo de conversa da Escola de Síntese de Circuitos Digitais é o lugar para dúvidas sobre as aulas e sobre a instalação. Erros e inconsistências nos próprios exemplos é melhor registrar como issues no repositório: é a forma mais confiável de os desenvolvedores tomarem conhecimento.
Não. Apenas a que corresponde à sua placa: Quartus para Altera, Vivado para Xilinx, Gowin EDA ou OSS CAD Suite para Gowin, OSS CAD Suite para Lattice. Se você não tem placa, não precisa de nenhuma delas: os exemplos simulam no Icarus Verilog e os exercícios do SVH são feitos inteiramente sem placa.
Sim. A simulação no Icarus Verilog com visualização de formas de onda cobre boa parte do curso, e o repositório SVH inteiro não precisa de placa alguma. Para os exemplos gráficos há como olhar o resultado como imagem, sem ter um monitor ligado a uma placa.
Não, desde que as ferramentas estejam instaladas em locais padrão; os
scripts as encontram. As variáveis (QUARTUS_ROOTDIR,
XILINX_VIVADO, GOWIN_VERSION_DIR e as demais) servem
para dois casos: instalação em um diretório incomum, e várias versões em que
você quer forçar uma delas.
Sim, e para placas antigas você precisa: o Cyclone II exige o Quartus II 13.0sp1, o Cyclone III exige o 13.1, e as placas atuais querem o Quartus Lite 21.1 ou mais novo. Elas convivem sem problema, e os scripts escolhem a que serve ao chip da sua placa.
Porque nenhuma das versões instaladas consegue compilar para o chip da placa selecionada. A mensagem lista o que foi encontrado. As causas usuais são uma placa antiga (que precisa do Quartus 13.x) ou a DE23-Lite (que precisa do Quartus Pro). Veja a seção 3.1.
Execute-os pelo Git Bash, e não pelo cmd.exe
nem pelo PowerShell. O Git Bash vem com o Git (seção 4.1.8).
O mais provável é que você tenha a versão 11 ou 12. É preciso a 13, de preferência a 14 — alguns exemplos usam construções que as versões mais antigas não entendem. Veja a seção 4.1.5.
Reconecte o cabo do gravador e execute
./04_configure_fpga.bash — não é preciso compilar de novo. No
Linux, confira a regra udev (subseção 4.2.1.2), inclusive a linha do USB
Blaster III, se você tem uma DE23-Lite.
Remova o atributo de quarentena:
xattr -rd com.apple.quarantine ~/oss-cad-suite. Veja a seção
4.3.
Uma Tang Nano 9K com o módulo de tela de LCD e os módulos de som: cerca de 60 dólares o conjunto, síntese rápida, e funciona nos três sistemas operacionais, inclusive macOS. Placas Altera e Xilinx exigem uma máquina virtual no macOS.
Na seção 3 deste manual e no arquivo boards/README.md do repositório, que é atualizado junto com o código.