contrubuted by < oucs638 >
ββββ# Install gtkwave using apt-get on ubuntu 20.04
ββββsudo apt-get update
ββββsudo apt-get -y install gtkwave
srv32/sw
and create my c code and Makefile
(copy from the Makefile
in other directory in srv32/sw
).
ββββ# In srv32/sw/
ββββmkdir tribonacci
ββββcd tribonacci
ββββ# Put my code in assignment1
ββββvim tribonacci.c
ββββ# Copy Makefile and modify "SRC" and "TARGET"
ββββcp ../hello/Makefile ./
ββββ#include <stdio.h>
ββββint tribonacci(volatile int n)
ββββ{
ββββ int t0 = 0, t1 = 1, t2 = 1, t3 = 0;
ββββ if (n == 0)
ββββ return 0;
ββββ else if (n == 1 || n == 2)
ββββ return 1;
ββββ for (int i = 2; i < n; i++) {
ββββ t3 = t0 + t1 + t2;
ββββ t0 = t1;
ββββ t1 = t2;
ββββ t2 = t3;
ββββ }
ββββ return t3;
ββββ}
ββββint main(void)
ββββ{
ββββ volatile int num = 10;
ββββ volatile int ans = tribonacci(num);
ββββ printf("The result is %d.\n", ans);
ββββ return 0;
ββββ}
srv32
and run tribonacci
.
ββββ# In srv32
ββββmake all
ββββmake tribonacci
ββββmake[1]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw'
ββββmake -C common
ββββmake[2]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw/common'
ββββmake[2]: Nothing to be done for 'all'.
ββββmake[2]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw/common'
ββββmake[2]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw/tribonacci'
ββββriscv-none-embed-gcc -O3 -Wall -march=rv32im -mabi=ilp32 -nostartfiles -nostdlib -L../common -o tribonacci.elf tribonacci.c -lc -lm -lgcc -lsys -T ../common/default.ld
ββββriscv-none-embed-objcopy -j .text -O binary tribonacci.elf imem.bin
ββββriscv-none-embed-objcopy -j .data -O binary tribonacci.elf dmem.bin
ββββriscv-none-embed-objcopy -O binary tribonacci.elf memory.bin
ββββriscv-none-embed-objdump -d tribonacci.elf > tribonacci.dis
ββββriscv-none-embed-readelf -a tribonacci.elf > tribonacci.symbol
ββββmake[2]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw/tribonacci'
ββββmake[1]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw'
ββββmake[1]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sim'
ββββThe result of tribonacci(10) is 149.
ββββExcuting 2847 instructions, 3689 cycles, 1.295 CPI
ββββProgram terminate
ββββ- ../rtl/../testbench/testbench.v:418: Verilog $finish
ββββSimulation statistics
ββββ=====================
ββββSimulation time : 0.094 s
ββββSimulation cycles: 3700
ββββSimulation speed : 0.0393617 MHz
ββββmake[1]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sim'
ββββmake[1]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/tools'
ββββ./rvsim --memsize 128 -l trace.log ../sw/tribonacci/tribonacci.elf
ββββThe result of tribonacci(10) is 149.
ββββExcuting 2847 instructions, 3689 cycles, 1.296 CPI
ββββProgram terminate
ββββSimulation statistics
ββββ=====================
ββββSimulation time : 0.003 s
ββββSimulation cycles: 3689
ββββSimulation speed : 1.240 MHz
ββββmake[1]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/tools'
ββββCompare the trace between RTL and ISS simulator
ββββ=== Simulation passed ===
volatile
to optimize.srv32/sw
named tribonacci_opt
.tribonacci_opt
and back to srv32/
, then run make tribonacci_opt
.
ββββ#include <stdio.h>
ββββint main(void)
ββββ{
ββββ int num = 10, ans = 0;
ββββ if (num == 1 || num == 2)
ββββ ans = 1;
ββββ else {
ββββ int t0 = 0, t1 = 1, t2 = 1;
ββββ for (int i = 2; i < num; i++) {
ββββ ans = t0 + t1 + t2;
ββββ t0 = t1;
ββββ t1 = t2;
ββββ t2 = ans;
ββββ }
ββββ }
ββββ printf("The result of tribonacci(%d) is %d.\n", num, ans);
ββββ return 0;
ββββ}
ββββmake[1]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw'
ββββmake -C common
ββββmake[2]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw/common'
ββββmake[2]: Nothing to be done for 'all'.
ββββmake[2]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw/common'
ββββmake[2]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw/tribonacci_opt'
ββββriscv-none-embed-gcc -O3 -Wall -march=rv32im -mabi=ilp32 -nostartfiles -nostdlib -L../common -o tribonacci_opt.elf tribonacci_opt.c -lc -lm -lgcc -lsys -T ../common/default.ld
ββββriscv-none-embed-objcopy -j .text -O binary tribonacci_opt.elf imem.bin
ββββriscv-none-embed-objcopy -j .data -O binary tribonacci_opt.elf dmem.bin
ββββriscv-none-embed-objcopy -O binary tribonacci_opt.elf memory.bin
ββββriscv-none-embed-objdump -d tribonacci_opt.elf > tribonacci_opt.dis
ββββriscv-none-embed-readelf -a tribonacci_opt.elf > tribonacci_opt.symbol
ββββmake[2]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw/tribonacci_opt'
ββββmake[1]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sw'
ββββmake[1]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sim'
ββββThe result of tribonacci(10) is 149.
ββββExcuting 2776 instructions, 3604 cycles, 1.298 CPI
ββββProgram terminate
ββββ- ../rtl/../testbench/testbench.v:418: Verilog $finish
ββββSimulation statistics
ββββ=====================
ββββSimulation time : 0.068 s
ββββSimulation cycles: 3615
ββββSimulation speed : 0.0531618 MHz
ββββmake[1]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/sim'
ββββmake[1]: Entering directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/tools'
ββββ./rvsim --memsize 128 -l trace.log ../sw/tribonacci_opt/tribonacci_opt.elf
ββββThe result of tribonacci(10) is 149.
ββββExcuting 2776 instructions, 3604 cycles, 1.298 CPI
ββββProgram terminate
ββββSimulation statistics
ββββ=====================
ββββSimulation time : 0.005 s
ββββSimulation cycles: 3604
ββββSimulation speed : 0.729 MHz
ββββmake[1]: Leaving directory '/home/oucs638/GitHub/CA_2021_FALL/Assignment3/srv32/tools'
ββββCompare the trace between RTL and ISS simulator
ββββ=== Simulation passed ===
ββββ> Before optimization:
ββββ
ββββExcuting 2847 instructions, 3689 cycles, 1.296 CPI
ββββProgram terminate
ββββSimulation statistics
ββββ=====================
ββββSimulation time : 0.003 s
ββββSimulation cycles: 3689
ββββSimulation speed : 1.240 MHz
ββββ
ββββ> After optimization:
ββββ
ββββExcuting 2776 instructions, 3604 cycles, 1.298 CPI
ββββProgram terminate
ββββSimulation statistics
ββββ=====================
ββββSimulation time : 0.005 s
ββββSimulation cycles: 3604
ββββSimulation speed : 0.729 MHz
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up