Názory k článku
Server SiFive BigSky SF-2U870 RISC-V byl představen na Hot Chips

  • Včera 21:50

    a6b

    kazda dalsi architektura je dneska jako osvezujici pramen, v 90 letech bylo tolik ruznych systemu a unixu
    a dnesni scena je skoro jako sucha poust.
    diky za kazde nove procesory.

  • Včera 23:15

    Pavel Píša

    Jinak přes weekend jsem akorát pokusničil s testem, který mělo SiFive pro bare-metal testování MMU na U74 a U54, a s naším QtRvSim simulátorem, který plánujeme před LinuxDays vydat s podporou MMU. Po řešení problémů s buildem testu, jeho úpravami pro náš UART a opravami a rozšiřováním simulátoru jsem se dostal k výpisu


    Boot Hart Entered Main!
    vm_boot reached
    vm_boot switch to user
    handle_fault
    ABhandle_fault
    handle_fault
    handle_fault
    handle_fault
    CABCABCABCAB

    První řádka je puts z M-mode přes smyčku do emulovaného QtRvSim UARTu, druhá a třetí je z M-mode přes putchar, který jsem si naimplementoval jako sysccall na CAUSE_MACHINE_ECALL handleru, ve vm_boot se nastaví nahoře MEGAPAGE pro systém a dole nevyplněný kus na stránky pro UNPRIVILEGED/USER, pak se provede mret do USER kódu, ale ten tam ještě není mapovaný, page-fault spadně do SUPERVISOR/SYSTEM, ten namapuje kód do odpovídající stránky dole a přes ten puchar ecall vypíše handle_faul přes M-mode, po návratu již běží test funkčnosti instrukcí v assembleru v U-mode. Kolem této části jsou ecall z S-mode, které píší A a B přes CAUSE_USER_ECALL zpracovávaný delegací v S-mode, který putchar předává přes ecall do M-mode. Dále jsem pak přidal postupné čtení slov přes další čtyři stránky, ty jsou postupně namapované přes ty handle_fault v S-mode. Nakonec user code vypíše přes ecall C a test jede znova, s tím, že nyní jsou stránky namapované.

    S testem byl hlavní problém najít správný způsob kompilace, kdy ze stejného buildu kódu běží M-mode na původních adresách, pak se S-mode část mapuje na 2^64-SUPERPAGE a user mode se mapuje od 4k výše. Nakonec hlavní finta byla zakázat pic (position independent), protože ten vyplní GOT na pevné adresy, a použít medany mód, který do bloku pod 2 GB vytvoří kompatní kód a data.


    riscv64-unknown-elf-gcc -march=rv64ima_zicsr -mabi=lp64 -fno-lto -ggdb -fno-pic -mcmodel=medany -nostdlib -nodefaultlibs -nostartfiles -Triscv64-bare.ld -ggdb -I . ...

    Ještě je potřeba ve správných místech (reset, přechod do U, S a M mode) nastavit global pointer


    .option push
    .option norelax
    la gp, __global_pointer$
    .option pop

    Jinak na QtRvSim nám již od jara běží upravený XV6. Je to systém odpovídající UNIX verze 6 přepsaný pro výuku do moderního C na Parallel and Distributed Operating Systems group (PDOS) at MIT CSAIL.

    Co se pak týče zkoumání kódu pro SiFive U54, tak mi to přináší znalosti i pro práci na systému
    RTEMS, kde mají kolegové zájem práci na rozvoji portu pro letové Microchip PolarFire čipy, kde jsou právě 4x U54-MC + management E51 (v podstatě SiFive Freedom U540 + FPGA).

    Pokud bude přijatá naše RISC-V přednáška na LinuxDays, tak na mnohem lépe na výuku připraveném jednoduchém příkládku pro náš QtRvSim simulátor zkusíme základy stránkování obecně a i na RISC-V vysvětlit, viz předáška o stránkování z kurzu základů architektur počítačů B35APO.

    V další přednášce (pokud bude schválená) pak bude pan Jakub Jurčík předvádět, jak si dopsat debug modul napojitelný na GDB i grafické nadstavby pro vlastní RISC-V procesor ve VHDL simulovaný v GHDL, více jeho bakalářská práce Debugging and Interrupt Support for VHDL Pipelined Educational RISC-V Core.