Forum: FPGA, VHDL & Co. PicoRV32 korrekt konfigurieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Risc (Gast)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.