Accelerator for multi-thread processing IP.
LOTR: Lord-Of-The-Ring
Based on a Ring architecture to share all memory regions between threads, cores & other devices.
The Design is loaded to the DE10Lite FPGA.
Writing to Display - accessable with LOAD/STORE from any Thread.
Written in System verilog.
Main Blocks:
- Core - 4 HW thread. Compatible with RV32I/E.
- I_MEM (Instruction Memory). 4KB of SRAM memory with dual access (core & Fabric).
- D_MEM (Data Memory) - 4KB of SRAM memory with duel access (core & Fabric).
Devided to: Compiler Scratchpad(.data.bss.rodata) + Shared MEM Space + CR Space (Control Registers)
Written in SystemVerilog.
Ring EP (EndPoint) to Manage the cores & ring RD/WR traffic.
Main logic:
- A2F buffer (Agent2Fabric).
- F2A buffer (Fabric2Agent).
- Ring output Arbiter. (A2F,F2A,Ring input)
Written in SystemVerilog. Instantiating the Cores and Ring into a single Fabric IP design. Main Blocks:
- GPC_4T core with its own "local" 4k memory - interface with the RC (ring controller).
- RC - Ring EndPoint to arbitrate requests - interface with the other RC and the core.
The GPC&RC are always coupled and have a unique "ID".
In the fabric, we can link many RC to each other.
which will enable the Many-core Ring Fabric Design.
Written in C and compiled using the RISCV toolchain (rv32i/e).
Proof of concept for multi-thread applications for the multi-core design.
- Design programs that can run on the 4 threaded core and share data between threads.
- Design programs that can be run on many cores, utilize the threads in each core, and share data between all cores.
To see your build and run options, run the following command:
python build.py -h
example:
python build.py -dut 'lotr' -debug -tests 'wip' -app
Will compile using gcc the program called 'wip', which then can be used to load the FPGA with the uart:
cd source/uart_io/pyterminal/src
Then:
python uart_term.py < sequence_abd/load_wip.txt
will load the FGPA with the program 'wip' and run it.
Before you start, make sure you have the following tools and software installed:
- RISCV gcc releases & install, a Windows gcc for RISCV ISA.
- Intel design SW for windows , modelsim + quartus + MAX10 (de10-lite). used to compile, simulate & load to FPGA the HW systemverilog design.
To make your experience smoother, we recommend installing the following tools:
-
GitBash, a Windows version of Git that includes a "Unix-like" shell.
-
Visual Studio Code, a code editor that supports many programming languages.
-
RISCV GCC for windows: TODO - write a script to download and install the toolchain.
-
Compilation and Simulation:
Using Modelsim - https://fpgasoftware.intel.com/
- Core - GPC_4T - RTL Design:
HAS (High-Level-Architecture-Specification):
RISCV Spec - https://github.com/amichai-bd/riscv-multi-core-lotr/blob/master/doc/GPC_4T_doc/riscv-spec-20191213.pdf
HW Spec -
MAS (Micro-Level-Architecture-Specification):
see under documentation
- Ring Controler - RC - RTL Design:
HAS (High-Level-Architecture-Specification):
see under documentation
MAS (Micro-Level-Architecture-Specification):
- Fabric - LOTR - (Integration Model) - RTL Design:
HAS (High-Level-Architecture-Specification):
MAS (Micro-Level-Architecture-Specification):
- uart_io tile- RTL Design & python terminal for FPGA IO:
HAS (High-Level-Architecture-Specification):
MAS (Micro-Level-Architecture-Specification):
- Validation: