Skip to content

philiprbrenan/RiscV

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Risc V

Emulate the RiscV 32I instruction set using Java.

For instance, to produce the Fibonacci numbers:

RiscV    r = new RiscV();                // New Risc V machine and program
Register z = r.x0;                       // Zero
Register N = r.x1;                       // Number of Fibonacci numbers to produce
Register a = r.x2;                       // A
Register b = r.x3;                       // B
Register c = r.x4;                       // C = A + B
Register i = r.x5;                       // Loop counter

Variable p = r.new Variable("p", 2, 10); // Variable declarations
Variable o = r.new Variable("a", 4, 10); // Block of 40 bytes starting at byte address 20
r.addi(N, z, 10);                        // N = 10
r.addi(i, z, 0);                         // i =  0
r.addi(a, z, 0);                         // a =  0
r.addi(b, z, 1);                         // b =  1
Label start = r.new Label("start");      // Start of for loop
r.sb (i, a, o.at());                     // Save latest result in memory
r.add (c, a, b);                         // Latest Fibonacci number
r.add (a, b, z);                         // Move b to a
r.add (b, c, z);                         // Move c to b
r.addi(i, i, 1);                         // Increment loop count
r.blt (i, N, start);                     // Loop
r.emulate();                             // Run the program

//stop(r);
r.ok("""
RiscV      : fibonacci
Step       : 65
Instruction: 10
Registers  :  x1=10 x2=55 x3=89 x4=89 x5=10
Memory     :  21=1 22=1 23=2 24=3 25=5 26=8 27=13 28=21 29=34
""");

//stop(r.printCode());
ok(r.printCode(), """
RiscV Hex Code: fibonacci
Line      Name    Op   D S1 S2   T  F3 F5 F7  A R  Immediate    Value
0000      addi    13   1  0  a   0   0  0  0  0 0          a   a00093
0001      addi    13   5  0  0   0   0  0  0  0 0          0      293
0002      addi    13   2  0  0   0   0  0  0  0 0          0      113
0003      addi    13   3  0  1   0   0  0  0  0 0          1   100193
0004        sb    23  14  5  2   0   0  0  0  0 0         14   228a23
0005       add    33   4  2  3   0   0  0  0  0 0          0   310233
0006       add    33   2  3  0   0   0  0  0  0 0          0    18133
0007       add    33   3  4  0   0   0  0  0  0 0          0    201b3
0008      addi    13   5  5  1   0   0  0  0  0 0          1   128293
0009       blt    63  17  5  1   4   4 1f 7f  0 0   fffffff6 fe12cbe3
""");

About

Implementation of RiscV 32I

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published