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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.