XiangShan (XiangShan) – procesador RISC-V de alto rendimiento de código abierto
(github.com/OpenXiangShan)- XiangShan(香山) es un proyecto de código abierto orientado a un procesador RISC-V de alto rendimiento, y la versión actual Kunminghu(昆明湖) se está desarrollando en la rama master
- La documentación está publicada en docs.xiangshan.cc, y los documentos de diseño de Kunminghu V2R2 y la guía de usuario se ofrecen por separado
- Las microarquitecturas estables son Yanqihu(雁栖湖) y Nanhu(南湖), y Yanqihu fue la primera microarquitectura estable, desarrollada desde junio de 2020
- El flujo de desarrollo está compuesto por código de diseño en Scala, transformación FIRRTL, subsistema de caché, framework de cosimulación difftest e imágenes de simulación preconstruidas
- Se proporciona la generación de Verilog, la ejecución de un simulador basado en Verilator y la ruta de ejecución de xspdb para realizar la generación del diseño y la simulación de programas dentro del proyecto
Descripción general del proyecto
- XiangShan(香山) es un proyecto de procesador RISC-V de alto rendimiento y código abierto
- La explicación en chino se ofrece en un README separado
- La documentación del proyecto puede consultarse en docs.xiangshan.cc
- La documentación de diseño de XiangShan para Kunminghu V2R2 se publica por separado en docs.xiangshan.cc/projects/design
- La guía de usuario de XiangShan está disponible en docs.xiangshan.cc/projects/user-guide y XiangShan-User-Guide/releases
- La traducción de la documentación usa Weblate y recibe contribuciones para inglés y otros idiomas
- Toda la documentación de XiangShan sigue la licencia CC-BY-4.0
Artículos publicados y metodología de desarrollo
- El artículo de MICRO 2022 “Towards Developing High Performance RISC-V Processors Using Agile Methodology” trata sobre XiangShan y la aplicación de metodologías ágiles al desarrollo de procesadores RISC-V de alto rendimiento
- El artículo cubre las herramientas desarrolladas y utilizadas para acelerar el proceso de desarrollo del chip
- Diseño
- Verificación funcional
- Depuración
- Validación de rendimiento
- Ese artículo recibió las tres insignias Available, Functional y Reproduced en la evaluación de artefactos
- Enlaces de referencia:
Versiones de microarquitectura
- La primera microarquitectura estable es Yanqihu(雁栖湖) y está en la rama yanqihu
- Se desarrolla desde junio de 2020
- La segunda microarquitectura estable es Nanhu(南湖) y está en la rama nanhu
- La versión actual también se conoce como Kunminghu(昆明湖) y todavía está en desarrollo en la rama master
- El README incluye un diagrama general de la microarquitectura Kunminghu
Estructura del repositorio
- Los directorios principales se dividen en código de diseño, scripts de desarrollo, submódulos, caché, cosimulación e imágenes de ejecución
src/main/scala: ubicación de los archivos de diseñodevice: dispositivos virtuales para simulaciónsystem: wrapper del SoCtop: módulo de nivel superiorutils: código utilitarioxiangshan: código principal de diseñoxiangshan/transforms: transformaciones FIRRTL útiles
scripts: scripts para desarrollo ágilyunsuan: submódulo yunsuan de XiangShanXSCache: subsistema de caché de XiangShandifftest: framework de cosimulación difftestready-to-run: imágenes de simulación preconstruidas
IDE y generación de Verilog
- La configuración de BSP se realiza con
make bsp - La configuración de IDEA se realiza con
make idea - El código Verilog se genera con
make verilog- Se generan varios archivos
.sven la carpetabuild/rtl/ - Un archivo de ejemplo es
build/rtl/XSTop.sv - Consulta el
Makefilepara más información
- Se generan varios archivos
Ejecución de la simulación
- Para ejecutar un programa en simulación se requieren variables de entorno y herramientas dependientes
- Preparación:
- Configurar
NEMU_HOMEcon la ruta absoluta del proyecto NEMU - Configurar
NOOP_HOMEcon la ruta absoluta del proyecto XiangShan - Configurar
AM_HOMEcon la ruta absoluta del proyecto AM - Instalar
mill - Después de clonar el proyecto, inicializar los submódulos con
make init
- Configurar
- Simulador basado en Verilator:
- Requiere instalar Verilator
make emucompila el simulador C++ basado en Verilator./build/emu- Los argumentos de ejecución pueden consultarse con
./build/emu --help - Consulta
Makefileyverilator.mkpara más información
- Ejemplo de ejecución:
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
Ruta de ejecución de xspdb
- xspdb puede usarse de dos maneras
- Inicio rápido con un binario precompilado:
- No requiere compilación y puede ejecutarse con un entorno estándar de Python
- Ofrece la experiencia completa de XiangShan con bajo uso de memoria
- La versión más reciente de XSPdb puede descargarse desde el resumen de ejecución del workflow de Actions del repositorio
- Compilar desde el código fuente:
- Requiere instalar picker, una herramienta de verificación compatible con lenguajes de alto nivel
make pdbcompila el binario Python de XiangShanmake pdb-runejecuta el binario de XiangShan
- Los ejemplos de interacción con xspdb incluyen cargar un binario, configurar un watchpoint del commit PC, ejecutar paso a paso por instrucción, imprimir información del PC y ejecutar hasta el punto de salida del binario
Solución de problemas, comunidad y licencia
- La documentación para resolver problemas está disponible en la Troubleshooting Guide
- Canales de contacto:
- WeChat: procesador de código abierto XiangShan
- Zhihu: procesador de código abierto XiangShan
- Weibo: procesador de código abierto XiangShan
- Lista de correo: xiangshan-all@ict.ac.cn
- Archivo de la lista de correo: mail-archive.com
- La implementación está inspirada en varios artículos clave, y la lista de trabajos relacionados puede consultarse en Acknowledgements de la documentación de XiangShan
- La mención de copyright incluye a las siguientes instituciones
- 2020-2025 Institute of Computing Technology, Chinese Academy of Sciences
- 2021-2025 Beijing Institute of Open Source Chip
- 2020-2022 Peng Cheng Laboratory
- XiangShan sigue la licencia Mulan PSL v2
1 comentarios
Opiniones de Hacker News
Si quieres probar una simulación, con el Dockerfile que uso puedes crear un entorno basado en Ubuntu 24.04.
Clona
OpenXiangShan/xs-envy hace la instalación de herramientas, la instalación de Verilator, la inicialización de XiangShan, la compilación de DRAMsim3, la compilación del emuladorDefaultConfigy hasta la compilación del ejemplonexus-am/apps/hello.Se necesitan 64 GB de RAM; en mi caso funcionó con 16 GB de RAM y 48 GB de swap agregados. Puede haber pasos duplicados, pero la última vez que lo intenté, este método funcionó.
Este proyecto fue el primero en mucho tiempo que realmente me estimuló la cabeza, porque encaja de forma curiosa con mis intereses recientes.
Dicho eso, con solo darle una mirada muy rápida, terminé empatizando mucho con los usuarios no angloparlantes. El README es lo bastante amable para usuarios angloparlantes, pero al leerlo sentía que tenía que ir cambiando constantemente los nombres de los tokens en mi cabeza para seguir el hilo, y en ese proceso noté dos cosas.
Primero, me recordó por qué no puedo terminar de leer literatura rusa clásica: desde el principio aparecen nombres que no pertenecen al conjunto de nombres que me resulta familiar, y termino perdido como si fuera un cache miss.
Segundo, parece que los usuarios angloparlantes no han necesitado mucho ese músculo cultural. Esto se debe a que, durante bastante tiempo, el mundo ha usado en cierta medida el inglés como una especie de lengua común, y también me vino a la mente el chiste: “¿Cómo se le dice a una persona que solo sabe un idioma? Monolingüe… es broma, estadounidense”.
Parece posible que “estadounidenses como yo” mantengan un registro público que preprocese los tokens en la documentación y el código fuente. Un registro de definiciones al estilo de
DefinitelyTypedsería muy de nicho, pero bastante útil.https://structuredprocrastination.com/light/biling.php
https://github.com/OpenXiangShan/XiangShan-doc/blob/main/doc...
La lista de instrucciones fusionadas es algo peculiar. Fuera de las correspondientes a
SH{1,2,3,4}ADD, el resto no me lo esperaba.La estoy viendo con Google Translate, pero tampoco veo ahí la ejecución condicional de saltos cortos al estilo SiFive.
La wiki técnica que usan es bastante difícil de navegar y buscar, y los repositorios no oficiales en GitHub no son mucho mejores, así que es difícil incluso saber si existe.
Hace unas semanas también publiqué un enlace a este proyecto; es realmente interesante ver este tipo de proyectos académicos.
Para quienes tengan interés, el blog quincenal está enlazado aquí, y algunas entradas también están disponibles en inglés: https://docs.xiangshan.cc/zh-cn/latest/blog/
Me gusta que los nombres de las microarquitecturas tengan una temática de lagos, como Yanqihu (lago Yanqi), Nanhu (lago Nan) y Kunminghu (lago Kunming).
¿Coffee Lake? ¿Skylake? No: Kunming Lake.
https://en.m.wikipedia.org/wiki/List_of_Intel_codenames
Vale la pena tener presente que China está avanzando mucho en IA, robótica y procesadores, y también es impresionante que una buena parte de eso la publiquen como open source.
Excelente trabajo, e inspira.
La cultura china está construida en torno a la reproducción constante y la mejora incremental, algo que se remonta al menos a la época de Confucio. Algunas personas ven eso como copia indiscriminada, pero en realidad se parece más a aprender en profundidad y pararse sobre los hombros de otros.
Esa actitud de “haz un fork” encaja bastante bien con el open source, aunque por supuesto puede resultar irritante para licencias de propiedad intelectual o patentes.
Sin embargo, eso no significa que esta apertura se extienda fácilmente fuera de China, especialmente fuera del ámbito cultural y lingüístico chino.
Hay un producto comercial que usa la arquitectura Nanhu anterior de XiangShan. No parece haber salido todavía, pero aun así es interesante.
https://milkv.io/ja/ruyibook
¿Cuál será la estrategia detrás de publicar esto como open source?
Una de las cosas que dijeron allí fue que querían que RISC-V en general, y en particular sus propios cores, se convirtieran en una plataforma de investigación académica. Si eso ocurre, las ideas de vanguardia se comparten públicamente y la industria se beneficia a nivel mundial.
Visto con optimismo, desean un futuro mejor para todos; visto con cinismo, el open source es mucho más difícil de sancionar o controlar mediante restricciones de exportación. La verdad probablemente esté en algún punto intermedio.
De todos modos es difícil ganar dinero con eso y la universidad normalmente lo permite, así que queda muy bien en el currículum.
En Europa también hay mucho open source y, francamente, no es que los gobiernos estén conspirando para destruir a Estados Unidos. No veo a Linux como un plan del gobierno sueco para destruir a Estados Unidos.
Según mi experiencia, la mayoría de los chinos tampoco se preocupan mucho por países fuera de China, salvo que trabajen en comercio internacional. China es tan grande, incluso comparada con países como Estados Unidos, que da la sensación de vivir dentro de su propia burbuja, y no parece que piensen en esos temas todos los días, ni siquiera todos los meses.
Es una forma de regalar algo “suficientemente bueno” que ataque el foso defensivo de los competidores. Si la brecha no es grande, incluso podría dañar el negocio del rival.
Que Apple y las grandes tecnológicas financien OpenStreetMap para competir con Google Maps puede verse de forma similar. Con solo reducir los ingresos de un competidor ya hay valor estratégico.
Va en la misma línea de cuando Satya Nadella dijo en una entrevista que, si ChatGPT simplemente aumentaba los costos de la Búsqueda de Google, eso ya sería una gran victoria para Microsoft.
Me alegra ver otro proyecto que usa Chisel. Me pregunto hacia dónde va la industria.
Parece que ya va siendo hora de que Verilog y VHDL sean reemplazados. Recuerdo que uno de los dos fue realmente desagradable de usar en la universidad.
Mi supervisor de tesis de licenciatura dirige una empresa que intenta reemplazar Verilog y VHDL, y lleva haciéndolo mucho más de 10 años. No parece que haya dejado una gran huella todavía, aunque no he seguido de cerca este campo: https://github.com/clash-lang/clash-compiler
También hay una implementación de RISC-V escrita con eso.
Las herramientas de este campo son demasiado caras de crear y verificar, y el mercado es demasiado pequeño, así que parece casi imposible que surja algo capaz de amenazar al ecosistema existente en un plazo razonable.