Forum: FPGA, VHDL & Co. PicoRV32 korrekt konfigurieren


von Risc (Gast)


Lesenswert?

Ich habe mich mal etwas in das PicoRV32 projekt von cliffordwolf 
reingelesen
https://github.com/cliffordwolf/picorv32

und habe dazu parallel auch mal das picosoc projekt für den TinyFPGA-BX 
ausprobiert (hier zu finden):
https://discourse.tinyfpga.com/t/riscv-example-project-on-tinyfpga-bx/451

Ich habe mir gestern mal die Toolchain aufgesetzt und nach ein paar 
Anpassungen das Projekt das original für den TinyFPGA gedacht war, zum 
laufen bekommen.


Jetzt sind mir aber ein paar folgende Sachen nicht klar.
Auf Clifford's Seite wird gezeigt, dass es drei Toolchains gibt:
RV32I, RV32IC, RV32IM, RV32IMC

Aktuell ist das TinyFPGA projekt auf Basis einen RV32I (also basic 
integer math) ohne multiplikation in HW. Da ich aber gerne viel 
Multiplikationen laufen lassen würde, denke ich macht die "M" 
Erweiterung hier Sinn für mich.

Jetzt gibt es aber in der picorv32.v Datei einige Erweiterungen zu 
aktivieren / deaktivieren. Mir ist nicht klar aktuell, welche 
Erweiterungen in HW ich an oder ausschalten muss, um den Befehlssatz für 
eine bestimmte Toolchain zu treffen?

Wäre nett, wenn mich hier mal jemand aufklärt.
Danke.
  parameter [ 0:0] ENABLE_COUNTERS = 1,
  parameter [ 0:0] ENABLE_COUNTERS64 = 1,
  parameter [ 0:0] ENABLE_REGS_16_31 = 1,
  parameter [ 0:0] ENABLE_REGS_DUALPORT = 1,
  parameter [ 0:0] LATCHED_MEM_RDATA = 0,
  parameter [ 0:0] TWO_STAGE_SHIFT = 1,
  parameter [ 0:0] BARREL_SHIFTER = 0,
  parameter [ 0:0] TWO_CYCLE_COMPARE = 0,
  parameter [ 0:0] TWO_CYCLE_ALU = 0,
  parameter [ 0:0] COMPRESSED_ISA = 0,
  parameter [ 0:0] CATCH_MISALIGN = 1,
  parameter [ 0:0] CATCH_ILLINSN = 1,
  parameter [ 0:0] ENABLE_PCPI = 0,
  parameter [ 0:0] ENABLE_MUL = 0,
  parameter [ 0:0] ENABLE_FAST_MUL = 0,
  parameter [ 0:0] ENABLE_DIV = 0,
  parameter [ 0:0] ENABLE_IRQ = 0,
  parameter [ 0:0] ENABLE_IRQ_QREGS = 1,
  parameter [ 0:0] ENABLE_IRQ_TIMER = 1,
  parameter [ 0:0] ENABLE_TRACE = 0,
  parameter [ 0:0] REGS_INIT_ZERO = 0,
  parameter [31:0] MASKED_IRQ = 32'h 0000_0000,
  parameter [31:0] LATCHED_IRQ = 32'h ffff_ffff,
  parameter [31:0] PROGADDR_RESET = 32'h 0000_0000,
  parameter [31:0] PROGADDR_IRQ = 32'h 0000_0010,
  parameter [31:0] STACKADDR = 32'h ffff_ffff

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Risc schrieb:
> parameter [ 0:0] ENABLE_MUL = 0,
> parameter [ 0:0] ENABLE_FAST_MUL = 0,
> parameter [ 0:0] ENABLE_DIV = 0,

Bin mir nicht hunderprozentig sicher, aber ENABLE_MUL und ENABLE_DIV 
müsste reichen, um ihn zum rv32im umzuschalten.

https://content.riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf

Chapter 6 erklärt die M-Extension.

Es sind wohl nur mul und div nötig.

von S. R. (svenska)


Lesenswert?

Risc schrieb:
> parameter [ 0:0] ENABLE_PCPI = 0,
> parameter [ 0:0] ENABLE_MUL = 0,
> parameter [ 0:0] ENABLE_FAST_MUL = 0,
> parameter [ 0:0] ENABLE_DIV = 0,

Du brauchst PCPI, MUL (oder FAST_MUL) und DIV. PCPI ist die 
Schnittstelle, mit der man PicoRV32 um eigene Befehle erweitern kann. 
Multiplikation und Division sind als solche Erweiterungen implementiert.

Nachtrag: PCPI musst du nur aktivieren, wenn du es auch extern nutzen 
willst. Andernfalls aktivieren MUL/DIV es nur für sich.

Nachtrag: Die Parameter sind alle in der README 
(https://github.com/cliffordwolf/picorv32/blob/master/README.md) 
beschrieben.

: Bearbeitet durch User
von Risc (Gast)


Lesenswert?

Ich danke euch vielmals für die Kommentare.

Ich hatte das in der ReadMe zwar auch gelesen, war aber trotzdem nicht 
wirklich schlüssig für mich.

Ich versuche es einfach mal :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.