XiangShan (XiangShan) – processador RISC-V open source de alto desempenho
(github.com/OpenXiangShan)- XiangShan(香山) é um projeto open source voltado a processadores RISC-V de alto desempenho, e a versão atual Kunminghu(昆明湖) está em desenvolvimento no branch master
- A documentação está disponível em docs.xiangshan.cc, e os documentos de projeto do Kunminghu V2R2 e o guia do usuário são fornecidos separadamente
- As microarquiteturas estáveis são Yanqihu(雁栖湖) e Nanhu(南湖), sendo Yanqihu a primeira microarquitetura estável, desenvolvida desde junho de 2020
- O fluxo de desenvolvimento é composto por código de projeto em Scala, transformação FIRRTL, subsistema de cache, framework de cossimulação difftest e imagens de simulação pré-compiladas
- O projeto oferece caminhos para geração de Verilog, execução de simulador baseado em Verilator e execução via xspdb, permitindo realizar a geração do design e a simulação de programas dentro do próprio projeto
Visão geral do projeto
- XiangShan(香山) é um projeto open source de processador RISC-V de alto desempenho
- A descrição em chinês é fornecida em um README separado
- A documentação do projeto pode ser vista em docs.xiangshan.cc
- A documentação de projeto do XiangShan para Kunminghu V2R2 está publicada separadamente em docs.xiangshan.cc/projects/design
- O guia do usuário do XiangShan está disponível em docs.xiangshan.cc/projects/user-guide e XiangShan-User-Guide/releases
- A tradução da documentação usa Weblate e aceita contribuições de tradução em inglês e outros idiomas
- Toda a documentação do XiangShan segue a licença CC-BY-4.0
Artigos publicados e metodologia de desenvolvimento
- O artigo da MICRO 2022 “Towards Developing High Performance RISC-V Processors Using Agile Methodology” trata do XiangShan e da aplicação de metodologia ágil no desenvolvimento de processadores RISC-V de alto desempenho
- O artigo aborda as ferramentas desenvolvidas e usadas para acelerar o processo de desenvolvimento de chips
- Projeto
- Verificação funcional
- Depuração
- Verificação de desempenho
- O artigo recebeu os três selos da avaliação de artefatos: Available, Functional e Reproduced
- Links de material:
Versões de microarquitetura
- A primeira microarquitetura estável é Yanqihu(雁栖湖), disponível no branch yanqihu
- Em desenvolvimento desde junho de 2020
- A segunda microarquitetura estável é Nanhu(南湖), disponível no branch nanhu
- A versão atual também é chamada de Kunminghu(昆明湖) e ainda está em desenvolvimento no branch master
- O README inclui um diagrama de visão geral da microarquitetura Kunminghu
Estrutura do repositório
- Os principais diretórios são divididos em código de projeto, scripts de desenvolvimento, submódulos, cache, cossimulação e imagens de execução
src/main/scala: local dos arquivos de projetodevice: dispositivos virtuais para simulaçãosystem: wrapper de SoCtop: módulo de topoutils: código utilitárioxiangshan: código principal do projetoxiangshan/transforms: transformações FIRRTL úteis
scripts: scripts para desenvolvimento ágilyunsuan: submódulo yunsuan do XiangShanXSCache: subsistema de cache do XiangShandifftest: framework de cossimulação difftestready-to-run: imagens de simulação pré-compiladas
IDE e geração de Verilog
- A configuração do BSP é feita com
make bsp - A configuração do IDEA é feita com
make idea - O código Verilog é gerado com
make verilog- Vários arquivos
.svsão gerados na pastabuild/rtl/ - Um arquivo de exemplo é
build/rtl/XSTop.sv - Para mais informações, consulte o
Makefile
- Vários arquivos
Execução de simulação
- Para executar programas na simulação, são necessários variáveis de ambiente e ferramentas de dependência
- Etapas de preparação:
- Definir
NEMU_HOMEcomo o caminho absoluto do projeto NEMU - Definir
NOOP_HOMEcomo o caminho absoluto do projeto XiangShan - Definir
AM_HOMEcomo o caminho absoluto do projeto AM - Instalar
mill - Clonar o projeto e inicializar os submódulos com
make init
- Definir
- Simulador baseado em Verilator:
- É necessário instalar Verilator
- Compila o simulador C++ baseado em Verilator
./build/emucommake emu - Os argumentos de execução podem ser vistos em
./build/emu --help - Para mais informações, consulte
Makefileeverilator.mk
- Exemplo de execução:
make emu CONFIG=MinimalConfig EMU_THREADS=2 -j10./build/emu -b 0 -e 0 -i ./ready-to-run/coremark-2-iteration.bin --diff ./ready-to-run/riscv64-nemu-interpreter-so
Caminho de execução do xspdb
- O xspdb pode ser usado de duas formas
- Início rápido com binário pré-compilado:
- Não requer compilação e pode ser executado apenas com um ambiente Python padrão
- Oferece a experiência completa do XiangShan com baixo uso de memória
- A versão mais recente do XSPdb pode ser baixada no resumo de execução do workflow Actions do repositório
- Build a partir do código-fonte:
- Requer a instalação da ferramenta de verificação picker, que oferece suporte a linguagens de alto nível
- Compila o binário Python do XiangShan com
make pdb - Executa o binário do XiangShan com
make pdb-run
- O exemplo de interação com xspdb inclui carregamento do binário, configuração de watchpoint no PC de commit, execução passo a passo por instrução, exibição das informações de PC e execução até o ponto de término do binário
Solução de problemas, comunidade e licença
- A documentação de solução de problemas está disponível no Troubleshooting Guide
- Canais de contato:
- WeChat: XiangShan Open Source Processor
- Zhihu: XiangShan Open Source Processor
- Weibo: XiangShan Open Source Processor
- Lista de e-mails: xiangshan-all@ict.ac.cn
- Arquivo da lista de e-mails: mail-archive.com
- A implementação foi inspirada em vários artigos fundamentais, e a lista de artigos relacionados está na seção Acknowledgements da documentação do XiangShan
- A atribuição de copyright inclui as seguintes instituições
- 2020-2025 Institute of Computing Technology, Chinese Academy of Sciences
- 2021-2025 Beijing Institute of Open Source Chip
- 2020-2022 Peng Cheng Laboratory
- O XiangShan segue a licença Mulan PSL v2
1 comentários
Opiniões no Hacker News
Se você quiser fazer uma simulação, dá para criar um ambiente baseado no Ubuntu 24.04 com o Dockerfile que eu uso
Ele clona
OpenXiangShan/xs-enve passa pela instalação das ferramentas, instalação do Verilator, inicialização do XiangShan, build do DRAMsim3, build do emuladorDefaultConfige até o build do exemplonexus-am/apps/helloSão necessários 64 GB de RAM; no meu caso, funcionou com 16 GB de RAM e mais 48 GB de swap. Pode haver etapas duplicadas, mas, na última vez que tentei, foi esse método que deu certo
Este projeto foi o primeiro em um bom tempo que realmente mexeu com a minha cabeça, porque alguns interesses recentes se encaixaram de um jeito curioso
Mas, mesmo dando só uma olhada bem rápida, passei a ter muita empatia por usuários não anglófonos. O README é suficientemente amigável para quem fala inglês, mas, enquanto eu lia, parecia que eu precisava ficar trocando mentalmente os nomes dos tokens para acompanhar, e nesse processo percebi duas coisas
Primeiro, lembrei por que não consigo terminar literatura russa clássica: desde o começo aparecem nomes que não fazem parte do conjunto de nomes com que estou familiarizado, e eu me perco como se fossem cache misses
Segundo, parece que usuários anglófonos quase nunca precisaram desenvolver esse músculo cultural. Isso porque o planeta já usa o inglês há bastante tempo como uma espécie de língua franca, e também me veio à cabeça a piada: “como se chama alguém que fala só uma língua? monolíngue… brincadeira, americano”
Parece viável que “americanos como eu” mantenham um registro público que pré-processe tokens em documentação e código-fonte. Um registro de definições no estilo
DefinitelyTypedseria algo bem de nicho, mas bastante útilhttps://structuredprocrastination.com/light/biling.php
https://github.com/OpenXiangShan/XiangShan-doc/blob/main/doc...
A lista de instruções fusionadas é meio incomum. Tirando as correspondentes a
SH{1,2,3,4}ADD, eu não esperava as outrasEstou lendo com o Google Translate, mas também não vejo ali a execução condicional de saltos curtos no estilo da SiFive
O wiki técnico que eles usam é bem difícil de navegar e pesquisar, e os repositórios não oficiais no GitHub não são muito melhores, então é difícil até saber se isso existe
Publiquei o link deste projeto também algumas semanas atrás; é realmente interessante ver esse tipo de projeto acadêmico
Para quem tiver interesse, o blog quinzenal está linkado aqui, e algumas partes também estão disponíveis em inglês: https://docs.xiangshan.cc/zh-cn/latest/blog/
Gosto do fato de os nomes das microarquiteturas seguirem um tema de lagos, como Yanqihu (Lago Yanqi), Nanhu (Lago Nan) e Kunminghu (Lago Kunming)
Coffee Lake? Skylake? Não: Kunming Lake
https://en.m.wikipedia.org/wiki/List_of_Intel_codenames
Vale notar que a China está avançando bastante em IA, robótica e processadores, e também é impressionante que grande parte disso esteja sendo disponibilizada como open source
Excelente trabalho e inspirador
A cultura chinesa é construída em torno de reprodução contínua e melhorias incrementais, algo que remonta pelo menos à época de Confúcio. Algumas pessoas veem isso como cópia indiscriminada, mas, na prática, está mais próximo de aprender profundamente e ficar sobre os ombros dos outros
Essa atitude de “faça um fork” combina muito bem com open source, embora naturalmente possa ser irritante para licenças de propriedade intelectual ou patentes
Ainda assim, essa abertura não significa que ela se estenda facilmente para fora da China, especialmente fora da cultura e do espaço linguístico chineses
Existe um produto comercial que usa a antiga arquitetura Nanhu do XiangShan. Parece que ainda não foi lançado, mas continua sendo interessante
https://milkv.io/ja/ruyibook
Qual é a estratégia de publicar isso como open source?
Uma das coisas que disseram lá foi que esperam que o RISC-V em geral, e especialmente seus próprios cores, se tornem uma plataforma de pesquisa acadêmica. Assim, ideias de ponta são compartilhadas publicamente e a indústria se beneficia globalmente
Numa leitura otimista, é desejar um futuro melhor para todos; numa leitura cínica, open source é muito mais difícil de bloquear com sanções ou controles de exportação. A verdade provavelmente fica em algum lugar no meio
De qualquer forma é difícil ganhar dinheiro com isso, e a universidade geralmente permite, então é ótimo para o currículo
Também há muito open source na Europa e, francamente, não é como se os governos estivessem conspirando para destruir os EUA. Não vejo o Linux como um plano do governo sueco para destruir os Estados Unidos
Pela minha experiência, a maioria dos chineses também não se importa muito com países fora da China, a menos que trabalhe com comércio exterior. A China é tão grande, mesmo comparada a países como os EUA, que dá a sensação de viver dentro da própria bolha; eles parecem não pensar nesse tipo de questão todos os dias, nem sequer todos os meses
É uma forma de distribuir gratuitamente algo “bom o suficiente” que ataca o fosso defensivo dos concorrentes. Se a diferença não for grande, pode até prejudicar os negócios deles
O financiamento do OpenStreetMap pela Apple e por grandes empresas de tecnologia como contraponto ao Google Maps pode ser visto de modo parecido. Só reduzir a receita de um concorrente já tem valor estratégico
A fala de Satya Nadella em uma entrevista, dizendo que, se o ChatGPT apenas aumentar o custo da Busca do Google, isso já seria uma grande vitória para a Microsoft, segue a mesma lógica
Fico feliz em ver outro projeto usando Chisel. Pergunto-me para onde a indústria está indo
Parece que já passou da hora de Verilog e VHDL serem substituídos. Lembro que usei um dos dois na universidade e foi uma experiência realmente desagradável
Meu orientador de graduação dirige uma empresa que tenta substituir Verilog e VHDL, e faz isso há bem mais de 10 anos. Não parece ter deixado uma marca grande ainda, mas também não acompanhei a área de perto: https://github.com/clash-lang/clash-compiler
Também existe uma implementação de RISC-V escrita com isso
As ferramentas nessa área são caras demais para criar e verificar, e o mercado é pequeno demais; por isso, parece quase impossível surgir, em um prazo razoável, algo que ameace o ecossistema existente