From 7ad8a8d9ab289484adb554fd6557f5e4ce57c7a6 Mon Sep 17 00:00:00 2001 From: higepi Date: Wed, 8 Mar 2023 14:44:31 +0100 Subject: [PATCH] fibonacci --- Rapport/Fibonnaci/plot.py | 61 +++++++++++++++ Rapport/Fibonnaci/time_exec_fibo.png | Bin 0 -> 37605 bytes fibonacci/main.bin | Bin 0 -> 4568 bytes fibonacci/main.c | 108 +++++++++++++++++++++++++++ fibonacci/main.c.o | Bin 0 -> 16676 bytes fibonacci/main.elf | Bin 0 -> 68764 bytes fibonacci/makefile | 4 + fibonacci/neorv32_exe.bin | Bin 0 -> 4580 bytes readme.md | 15 ++++ 9 files changed, 188 insertions(+) create mode 100644 Rapport/Fibonnaci/plot.py create mode 100644 Rapport/Fibonnaci/time_exec_fibo.png create mode 100644 fibonacci/main.bin create mode 100644 fibonacci/main.c create mode 100644 fibonacci/main.c.o create mode 100644 fibonacci/main.elf create mode 100644 fibonacci/makefile create mode 100644 fibonacci/neorv32_exe.bin diff --git a/Rapport/Fibonnaci/plot.py b/Rapport/Fibonnaci/plot.py new file mode 100644 index 000000000..9f1a93988 --- /dev/null +++ b/Rapport/Fibonnaci/plot.py @@ -0,0 +1,61 @@ +import matplotlib.pyplot as plt +from sklearn.linear_model import LinearRegression +import numpy as np + +Y = [1100, 2150, 3200, 4250, 5300, 6350, 7400, 8450, 9500] +Y2 = [1100, 2150, 3200, 4250, 5300, 6350, 7400, 8450, 9500] +Y_ARM = [912, 1736 , 2560 , 3352, 4216, 5304 , 5840, 6704, 7464] +Y_ARMO3 = [173, 329, 480, 633, 789, 945, 1098, 1308, 1406] +Y_gcc = [2296, 5119, 6715, 9078, 10830, 12541, 15041, 16780, 18883] +Y_O3 = [165, 287, 380, 559, 900, 901, 776, 1122, 1574] + +f_RISCV1 = 50e6 +f_RISCV2 = 100e6 +f_ARM = 800e6 +f_PC = 2400e6 +X = [] + +for i in range(9) : + Y[i] = (Y[i]*1e9)/f_RISCV1 + Y2[i] = (Y2[i]*1e9)/f_RISCV2 + Y_ARM[i] = (Y_ARM[i]*1e9)/f_ARM + Y_ARMO3[i] = (Y_ARMO3[i]*1e9)/f_ARM + Y_gcc[i] = (Y_gcc[i]*1e9)/f_PC + Y_O3[i] = (Y_O3[i]*1e9)/f_PC + X.append(50*(1+i)) + +plt.scatter(X, Y, color="b", marker="x", label="RISCV 50 MHz") +plt.scatter(X, Y2, color="g", marker="x", label="RISCV 100 MHz") +plt.scatter(X, Y_ARM, color="b", label="mesures ARM") +plt.scatter(X, Y_ARMO3, color="g", label="mesures ARM -O3") +plt.scatter(X, Y_gcc, color="b",marker="*", label="desktop -O0 2,4Ghz") +plt.scatter(X, Y_O3, color="g", marker="*",label="desktop -O3 2,4Ghz") + +x = np.array(X).reshape(-1, 1) +y = np.array(Y).reshape(-1, 1) +y2 = np.array(Y2).reshape(-1, 1) +reg = LinearRegression().fit(x, y) +reg2 = LinearRegression().fit(x, y2) +print("score obtenu : " + str(reg.score(x, y))) +print("score obtenu : " + str(reg.score(x, y2))) +print("attente à zéro : {}".format(reg.intercept_)) +print("attente à zéro : {}".format(reg2.intercept_)) + +x_lin = [0, max(X)] +y_lin = [reg.predict(np.array([0]).reshape(-1, 1)), reg.predict(np.array([x_lin[1]]).reshape(-1, 1))] +y_lin2 = [reg2.predict(np.array([0]).reshape(-1, 1)), reg2.predict(np.array([x_lin[1]]).reshape(-1, 1))] +y_lin = [y_lin[0][0][0], y_lin[1][0][0]] +y_lin2 = [y_lin2[0][0][0], y_lin2[1][0][0]] + +# plt.plot(x_lin, y_lin, color = "r", label="RegLin 50 score : {:.4f}".format(reg.score(x, y))) +# plt.plot(x_lin, y_lin2, color = "r") +plt.yscale("log") + +plt.xlim([0, 500]) +plt.ylim([0, 1000000]) +plt.legend() +plt.title("Temps d'exécution en fonction de n_max") +plt.ylabel("T (ns)") +plt.xlabel("N_max") +plt.show() +plt.savefig("M2_SETI/A2/fibonacci/linéaire.png") \ No newline at end of file diff --git a/Rapport/Fibonnaci/time_exec_fibo.png b/Rapport/Fibonnaci/time_exec_fibo.png new file mode 100644 index 0000000000000000000000000000000000000000..75333189b0eae99e3a0fb6c370edd9f4ab8d2626 GIT binary patch literal 37605 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 literal 0 HcmV?d00001 diff --git a/fibonacci/main.c b/fibonacci/main.c new file mode 100644 index 000000000..68558d0cf --- /dev/null +++ b/fibonacci/main.c @@ -0,0 +1,108 @@ +// ################################################################################################# +// # << NEORV32 - "Hello World" Demo Program >> # +// # ********************************************************************************************* # +// # BSD 3-Clause License # +// # # +// # Copyright (c) 2022, Stephan Nolting. All rights reserved. # +// # # +// # Redistribution and use in source and binary forms, with or without modification, are # +// # permitted provided that the following conditions are met: # +// # # +// # 1. Redistributions of source code must retain the above copyright notice, this list of # +// # conditions and the following disclaimer. # +// # # +// # 2. Redistributions in binary form must reproduce the above copyright notice, this list of # +// # conditions and the following disclaimer in the documentation and/or other materials # +// # provided with the distribution. # +// # # +// # 3. Neither the name of the copyright holder nor the names of its contributors may be used to # +// # endorse or promote products derived from this software without specific prior written # +// # permission. # +// # # +// # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS # +// # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # +// # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # +// # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # +// # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE # +// # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED # +// # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # +// # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED # +// # OF THE POSSIBILITY OF SUCH DAMAGE. # +// # ********************************************************************************************* # +// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting # +// ################################################################################################# + + +/**********************************************************************//** + * @file hello_world/main.c + * @author Stephan Nolting + * @brief Classic 'hello world' demo program. + **************************************************************************/ + +#include + + +/**********************************************************************//** + * @name User configuration + **************************************************************************/ +/**@{*/ +/** UART BAUD rate */ +#define BAUD_RATE 19200 +/**@}*/ + +void fibonnaci(uint32_t *n_max, uint32_t *f_n){ + uint32_t max = *n_max; + uint32_t fn_1 = 0; + uint32_t fn_copy = 1; + uint32_t fn_test = 1; + + for(uint32_t i=0; i show message if isa mismatch + + // say hello + neorv32_uart0_puts("Fibonnacci cycles measure :\n"); + neorv32_uart0_printf("NEORV32: Freq = %u\n",NEORV32_SYSINFO.CLK); + + for(uint8_t i=1; i<10; i++){ + n_max = 50; + Begin_Time = (long)neorv32_mtime_get_time(); + + for(uint32_t j=0; j<2*454546; j++){ + fibonnaci(&n_max, &f); + + } + End_Time = (long)neorv32_mtime_get_time(); + User_Time = End_Time - Begin_Time; + + neorv32_uart0_printf("NEORV32: mean cycles n_max = %u : %u\n",n_max, (uint32_t)User_Time); + } + neorv32_uart0_puts("end:\n"); + return 0; +} diff --git a/fibonacci/main.c.o b/fibonacci/main.c.o new file mode 100644 index 0000000000000000000000000000000000000000..5ce34da9f63bd8c7ed5d23b357a2de96c29dd8a6 GIT binary patch literal 16676 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 literal 0 HcmV?d00001 diff --git a/fibonacci/main.elf b/fibonacci/main.elf new file mode 100644 index 0000000000000000000000000000000000000000..51a032d1b6a9be9957e62fdc41ca003ee4b35581 GIT binary patch literal 68764 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�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 literal 0 HcmV?d00001 diff --git a/fibonacci/makefile b/fibonacci/makefile new file mode 100644 index 000000000..8f9e2fdc0 --- /dev/null +++ b/fibonacci/makefile @@ -0,0 +1,4 @@ +# Modify this variable to fit your NEORV32 setup (neorv32 home folder) +NEORV32_HOME ?= ../../.. + +include $(NEORV32_HOME)/sw/common/common.mk diff --git a/fibonacci/neorv32_exe.bin b/fibonacci/neorv32_exe.bin new file mode 100644 index 0000000000000000000000000000000000000000..12378d04f144999359efe736f064b3993496b2a3 GIT binary patch literal 4580 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 L@8vOCStI%nPRu)% literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 4e1a03338..874e7c461 100644 --- a/readme.md +++ b/readme.md @@ -58,7 +58,22 @@ Ext. bus endianness: little [ ] XIP [ ] ONEWIRE +### Clock +On peut augmenter la fréquence du processeur à l'aide de l'outil PLL Intel FPGA IP que l'on vient monter à 100 MHz. Monter à 200 Mhz indique un timing fail et une Fmax à 130 Mhz. +Il faut ensuite modifier l'input de clock vers le signal de pll. + +``` +library pll; + +pll_100: entity pll.pll(rtl) +port map( + refclk => clk_i, -- refclk.clk + --rst : in std_logic := '0'; -- reset.reset + outclk_0 => clk_100, -- outclk0.clk + locked => open -- locked.export +); +``` ### Software Print sur le série :