RISC_V_LAB hinzugefügt
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
// *********************************************************************************************
|
||||
// Description : C Program to calculate the Fibonacci numbers until a given number of terms
|
||||
// File : v1.0
|
||||
// Project Version : [BCDC] Microtec Academy Course: Building a RISC-V CPU with SystemVerilog
|
||||
// Project : RISCV_IN3DAYS
|
||||
// -----
|
||||
// Copyright (c) : 2025 Fraunhofer IIS, Department IDS
|
||||
// Created : 13.Oct.2025, 11:00:00 by Fuad Mammadzada (fuad.mammadzada@fau.de)
|
||||
// -----
|
||||
// HISTORY : Date By Comments
|
||||
// ----------- --------- -------------------------------------------------
|
||||
// *********************************************************************************************
|
||||
|
||||
|
||||
asm(".global _start, halt; _start: lui sp 2; addi sp sp -4; jal x0 main");
|
||||
|
||||
int main() {
|
||||
int n = 10; // count of Fibonacci numbers to be evaluated
|
||||
|
||||
int fib_number[20];
|
||||
fib_number[0] = 0;
|
||||
fib_number[1] = 1;
|
||||
|
||||
for (int i = 2; i < n; i++) {
|
||||
fib_number[i] = fib_number[i-1] + fib_number[i-2];
|
||||
}
|
||||
|
||||
asm("j halt");
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
00002137
|
||||
FFC10113
|
||||
0080006F
|
||||
0000006F
|
||||
FB010113
|
||||
00100513
|
||||
00810593
|
||||
00012023
|
||||
00A12223
|
||||
02810613
|
||||
FF85A683
|
||||
00A68533
|
||||
00A5A023
|
||||
00458593
|
||||
FEC598E3
|
||||
FD1FF06F
|
||||
@@ -0,0 +1,38 @@
|
||||
// *********************************************************************************************
|
||||
// Description : Assembly instructions for fibonacci program
|
||||
// Project Version : v1.0
|
||||
// Project : [BCDC] Microtec Academy Course: Building a RISC-V CPU with SystemVerilog
|
||||
// -----
|
||||
// Copyright (c) : 2025 Fraunhofer IIS, Department IDS
|
||||
// Created : 15.Oct.2025 by Fuad Mammadzada
|
||||
// Last Modified : 21.Oct.2025 by Fuad Mammadzada
|
||||
// -----
|
||||
// HISTORY : Date By Comments
|
||||
// ----------- --------- -------------------------------------------------
|
||||
// *********************************************************************************************
|
||||
|
||||
|
||||
|
||||
# Instruction # Hex code # MemAddr(PC) # Corresponding C code & explanation
|
||||
_start:
|
||||
lui sp, 2 # 0x00002137 # 0x00000000 # Initialize stack pointer value to size of memory (0x00002000)
|
||||
addi sp, sp -4 # 0xFFC10113 # 0x00000004 # Subtract stack pointer value by 4 to point to the last memory address (0x00001FFC)
|
||||
jal x0, main # 0x0080006F # 0x00000008 # Jump to main without saving the return address
|
||||
halt:
|
||||
jal x0, halt # 0x0000006F # 0x0000000C # Halt the program (infinite loop)
|
||||
|
||||
main: # -------- # fibonacci.c:17: int main() {
|
||||
addi sp, sp, -80 # 0xFB010113 # 0x00000010 # fibonacci.c:20: int fib_number[20]; (allocate 20*4B from the stack)
|
||||
addi a0, x0, 1 # 0x00100513 # 0x00000014 # a0 = 0 + 1 (this is later used in fibonacci.c:22)
|
||||
addi a1, sp, 8 # 0x00810593 # 0x00000018 # calculate and save the address of fib_number[2]
|
||||
sw x0, 0(sp) # 0x00012023 # 0x0000001C # fibonacci.c:21: fib_number[0] = x0 = 0
|
||||
sw a0, 4(sp) # 0x00A12223 # 0x00000020 # fibonacci.c:22: fib_number[1] = a0 = 1
|
||||
addi a2, sp, 40 # 0x02810613 # 0x00000024 # fibonacci.c:24: calculate the last array index for the loop condition (since n=10, n*4B)
|
||||
|
||||
.for_loop:
|
||||
lw a3, -8(a1) # 0xFF85A683 # 0x00000028 # fibonacci.c:25: a3 = fib_number[i-2]
|
||||
add a0, a3, a0 # 0x00A68533 # 0x0000002C # fibonacci.c:25: a0 = fib_number[i-1] + fib_number[i-2]
|
||||
sw a0, 0(a1) # 0x00A5A023 # 0x00000030 # fibonacci.c:25: fib_number[i] = a0
|
||||
addi a1, a1, 4 # 0x00458593 # 0x00000034 # fibonacci.c:24: i++
|
||||
bne a1, a2, .for_loop # 0xFEC598E3 # 0x00000038 # fibonacci.c:24: loop back if i != n
|
||||
jal x0, halt # 0xFD1FF06F # 0x0000003C # fibonacci.c:28: asm("j halt");
|
||||
Reference in New Issue
Block a user