Git Product home page Git Product logo

fuxi's Introduction

Fuxi

Test

Fuxi (伏羲) is a 32-bit pipelined RISC-V processor written in Chisel3.

datapath

Implemented ISAs

  • RV32I 2.1
  • Zifencei extension 2.0
  • Zicsr extension 2.0
  • M extension 2.0
  • A extension 2.0
  • Machine-level ISA 1.11
  • Supervisor-level ISA 1.11

Unimplemented Details

Fuxi processor is designed for running GeeOS, or other simple operating systems or bare-metal software. Considering the complexity, the following functions has not yet been implemented:

  • Memory privilege in mstatus register: MPRV bit and MXR bit are hardwired to 0.
  • Virtualization support in mstatus register: TVM bit, TW bit and TSR bit are hardwired to 0.
  • Physical Memory Protection: all PMP registers are hardwired to 0.

Performance

With default configuration:

  • Dhrystone 2.1: 0.60 DMIPS/MHz.
  • CoreMark: 2.15 CoreMark/MHz.

Getting Started

By issuing the following command lines, you can get generated verilog file in directory verilog/build:

$ git clone https://github.com/MaxXSoft/Fuxi
$ cd Fuxi
$ make

Running Tests

Running Unit Tests

All unit tests are available in directory src/test/scala. For example, unit test for decode stage is available in core/DecoderTest.scala, you can run this test by executing the following command lines:

$ sbt
> test:runMain core.DecoderTest

Running CoreTest

CoreTest is a special unit test provided in this repository, it can run simple RISC-V programs using the Fuxi core. We also provided some programs in directory src/test/resources. For example, you can run one of it:

$ sbt
> test:runMain core.CoreTest -if src/test/resources/fib.txt

Trace information during running program fib.txt will be printed to the console.

CoreTest supports the following command line arguments:

Option Abbreviation Argument Description
--init-file -if path to program file Specify the initialization file of ROM.
--trace-file -tf path to trace file Specify the trace file, default to empty.
--gen-trace -gt 0 or other values Set to 0 for trace comparison, otherwise use Fuxi core to generate trace file. Default to 0.

So you can test the core using a trace file generated by other processor or emulator:

> test:runMain core.CoreTest -if src/test/resources/fib.txt -tf src/test/resources/fib_trace.txt

For other details, please read the source file of CoreTest.scala.

All provided programs:

Name Description
fib.txt Generate the first 10 terms of the Fibonacci sequence.
mdu.txt Perform some multiplications and divisions.
mecall.txt Test machine mode environment call.
secall.txt Test supervisor mode environment call.

Running Other Test Benches

This part is under construction.

As we see in the top level module, the complete Fuxi processor consists of Core and CoreBus, the latter provides MMU, cache system and AXI4 interface for the Core part.

All of the unit test cases currently contained in this repository can only test modules in the Core part, we are still preparing the test bench the entire processor system. For now, you can build a tiny SoC by yourself based on some AXI4 IP cores to run other test benches you want.

Copyright and License

Copyright (C) 2010-2020 MaxXing. License GPLv3.

Special thanks to @Yukiteru Lee.

fuxi's People

Contributors

maxxsoft avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.