Release v0.2.3
External Interface Refactoring for Third Party Integration
This new release includes major changes to Vortex’s external interface that will simplify integration with third party designs. These changes include; (1) memory mapped CSRs, (2) _ebreak _signal removal. To support memory mapped CSRs, we had to first added support for non-cacheable memory such that CSR write requests from the kernel will bypass the cache subsystem to go directly to memory. Details about individual features are described below.
New Features
- Non-Cacheable Memory
A new module VX_nc_bypass was added to the cache top module to detect requests to I/O memory regions (defined in the configuration file VX_config.vh) and redirect those requests to memory, bypassing its normal caching operation. This was implemented by extending the cache request tag interface with a I/O bypass flag that is computed inside the Load/Store Unit based on the address range. _VX_nc_bypass _manages core request to memory bypassing as well as memory response to core bypassing for I/O addresses.
- Memory Mapped CSRs
The original Vortex’s external interface had CSR request/response ports to allow the host processor to read the content of the CSR registers. This interface was mainly used for gathering performance counters. This feature removed that external interface from Vortex and instead implemented the performance counters support via memory mapped I/O. More specifically, we reserved a memory space for storing the performance counters and then added a new stage into the application exit routine to dump the performance counters to memory. Now, the host application reads the performance from a dedicated memory region instead of using a dedicated I/O bus.
- Multi-Bank Memory Support
Original Vortex implementation was using a single memory bank to handle all the memory transactions. This feature extends the command processor (AFU) module to expose the memory banks to the Vortex processor. Our current FPGA devices include Intel Arria 10 and Stratix 10 that support 2 memory channels and 8 memory channels respectively.
- OpenCL Debug Printf
This feature takes advantage of the new no-cacheable memory feature to support debug printf interface for OpenCL applications. Most of the changes related to this feature were implemented in our POCL codebase (https://github.com/vortexgpgpu/pocl).
- Memory Fence Support
This feature is about adding support for the RISC-V data fence extension. This work was completed last semester in our private repository and finally ported into the public repository.
Changes & Improvements
-
Documentation
- The public repository now includes a doc folder where we have the current documentation for the processor.
- ebreak external Interface cleanup
- The Vortex public interface used to have an ebreak signal that was used in simulation to trap the returned exitcode of RISC-V unit tests. This change removes the signal from the external interface and instead uses an internal debug interface to retrieve the exitcode.
-
New regression tests
- Io_addr: non-cacheable memory test
- Diverge: branch divergence test
- Fence: fence feature test
- mtress: memory stress
- printf: opencl printf test
- sort: parallel sort benchmark
-
Tests folders reorganization
- We reorganized all Vortex tests into one test location which includes OpenCL benchmark, driver tests, runtime tests.
-
Regression Tests Migration to travis.org
- Vortex was using travis.com for the continuous integration tests but the service was discontinued last month. This task is about migrating our regression tests to the new service travis.com.
Bug Fixes
- Shared Memory Bug
- This was a synchronization bug in the dcache/shared memory arbiter.