2 years ago 4 views
 owned this note

Projet M2 SETI

https://gitea.auro.re/higepi/Projet_SETI_RISC-V

Sujet

Dépôts & liens utilisables

Simulations

Choix du(/des) processeur risc-v

0. les processeurs utilisés :

on utilise un processeur RISC-V rv32im avec des extensions pour la mesure de performance
on utilise aussi un processeur superscalaire

1. les limites de la carte DE1-SOC

la carte DE1-SOC n’a pas été pensée pour faire du sofcore mais plutot pour faire du co-processing avec les ARM et du traitement de données sur le FPGA.
Ainsi la partie programmable (PL) n’a pas accès à la SDDRAM3 de la carte. elle a cependant accès a une SDRAM x16.
On note un acces a une interface JTAG qui nous permettra un debug plus facile.
Aussi la partie ARM consomme un nombre important des pins de la puce. Si on veut emuler un coeur de manière pratique et correcte on a donc deux choixs :

on choisi en première otpion d’utiliser la ram interne au fpga pour gagner en simplicité

choix du risc

On trouve sur github pleins de projets dependants de compilateurs verilog hors IDE, ces projets sont souvent très élaborés et peu ompatibles avec des IDE comme quartus (dont les choixs de design sont parfois douteux)

si on se limite a des projets “simples” mais performant en vhdl on trouve quelques git.

Le plus pertinent pour sa documentation et la structure saine de son RTL nous est apparu etre NEORV32 un processeur 32 bits configurable et se limitant à une cinquantaine de fichiers vhdl.

implémentation simple

DONE :

TODO :

HOWTO :

etape 1 . ecrire votre fichier C++/C
etape 2 . le compiler en binaire et ecrire ce binaire en VHDL (ispirez vous des make dans les exemples)
etape 3 . re-run la synthèse quartus.
etape 4 . programmer le FPGA
etape 5 appuyer sur le boutton reset (un des 4 bouttons poussoir en bas de la carte)

./configure --prefix=/opt/riscv --with-arch=rv32imc --with-abi=ilp32

on suit alors avec un make clean et un sudo make pour build la toolchain (cette opération peut prendre plus d’une heure)

ATTENTION : la configuration de la toolchain peut etre un sous ensemble de la configuration du cpu mais pas l’inverse. Un code compilé avec la toolchain du processeur le plus simple peut tourner sur le processeur bootloadé, mais pas l’inverse.

Utiliser le processeur ARM de la carte

Utiliser le simulateur

Requirement:

La toolchain riscV gnu

Ok si fait pour Quartus

rust/cargo

Suivre https://rustup.rs/

Usage:

Cloner ce dépot https://gitlab.com/leopold_clement/riscv-full-sim

Ne pas hésiter à pull la branch master et lancer “cargo t” pour vérifier que le simulateur passe ses tests.

Lancement d’un programme:

placer le code C ou assembleur dans benchmarck/bench.
Utiliser le makefile pour build :

Ensuite, vous pouvez lancer le simulateur avec le fichier binaire ihex :
cargo run -- -v -p benchmarck/bin/machinO1.ihex -l out.log
Les paramettres du simulateur sont apres les --.

Comment avoir un code qui termine:

Je fournis une fonction void halt() qui permet au code de signaler au simulateur que l’exécution est fini.