From be0d492e0be96486ae40f474847bab756bd8f1c8 Mon Sep 17 00:00:00 2001 From: lcbcFoo Date: Mon, 19 Mar 2018 16:52:15 -0300 Subject: [PATCH] Printed string --- designs/leon3-digilent-nexys4ddr/.config | 39 +++++----- designs/leon3-digilent-nexys4ddr/config.h | 39 +++++----- designs/leon3-digilent-nexys4ddr/config.vhd | 20 ++--- riscv/main.c | 2 + riscv/main.out | Bin 0 -> 11316 bytes riscv/posix.c | 81 +++++++++++++++++++- riscv/posix.o | Bin 0 -> 3888 bytes riscv/reonv_crt0.o | Bin 0 -> 1248 bytes riscv/teste_uart.c | 38 +++++++++ 9 files changed, 168 insertions(+), 51 deletions(-) create mode 100755 riscv/main.out create mode 100644 riscv/posix.o create mode 100644 riscv/reonv_crt0.o create mode 100644 riscv/teste_uart.c diff --git a/designs/leon3-digilent-nexys4ddr/.config b/designs/leon3-digilent-nexys4ddr/.config index ab686ad..2cbf73e 100755 --- a/designs/leon3-digilent-nexys4ddr/.config +++ b/designs/leon3-digilent-nexys4ddr/.config @@ -141,7 +141,6 @@ CONFIG_ICACHE_ALGORND=y # CONFIG_ICACHE_ALGOLRR is not set # CONFIG_ICACHE_ALGOLRU is not set # CONFIG_ICACHE_LOCK is not set -# CONFIG_ICACHE_LRAM is not set CONFIG_DCACHE_ENABLE=y # CONFIG_DCACHE_ASSO1 is not set # CONFIG_DCACHE_ASSO2 is not set @@ -165,12 +164,26 @@ CONFIG_DCACHE_ALGORND=y # CONFIG_DCACHE_LOCK is not set # CONFIG_DCACHE_SNOOP is not set CONFIG_CACHE_FIXED=0 -# CONFIG_DCACHE_LRAM is not set # # MMU # -# CONFIG_MMU_ENABLE is not set +CONFIG_MMU_ENABLE=y +CONFIG_MMU_COMBINED=y +# CONFIG_MMU_SPLIT is not set +# CONFIG_MMU_REPARRAY is not set +CONFIG_MMU_REPINCREMENT=y +# CONFIG_MMU_I2 is not set +# CONFIG_MMU_I4 is not set +CONFIG_MMU_I8=y +# CONFIG_MMU_I16 is not set +# CONFIG_MMU_I32 is not set +# CONFIG_MMU_I64 is not set +CONFIG_MMU_PAGE_4K=y +# CONFIG_MMU_PAGE_8K is not set +# CONFIG_MMU_PAGE_16K is not set +# CONFIG_MMU_PAGE_32K is not set +# CONFIG_MMU_PAGE_PROG is not set # # Debug Support Unit @@ -183,14 +196,7 @@ CONFIG_DSU_ITRACESZ1=y # CONFIG_DSU_ITRACESZ8 is not set # CONFIG_DSU_ITRACESZ16 is not set # CONFIG_DSU_ITRACE_2P is not set -CONFIG_DSU_ATRACE=y -CONFIG_DSU_ATRACESZ1=y -# CONFIG_DSU_ATRACESZ2 is not set -# CONFIG_DSU_ATRACESZ4 is not set -# CONFIG_DSU_ATRACESZ8 is not set -# CONFIG_DSU_ATRACESZ16 is not set -# CONFIG_DSU_AFILT is not set -# CONFIG_DSU_ASTAT is not set +# CONFIG_DSU_ATRACE is not set # CONFIG_STAT_ENABLE is not set # @@ -299,15 +305,8 @@ CONFIG_UA1_FIFO2=y # CONFIG_UA1_FIFO8 is not set # CONFIG_UA1_FIFO16 is not set # CONFIG_UA1_FIFO32 is not set -CONFIG_IRQ3_ENABLE=y -# CONFIG_IRQ3_SEC is not set -CONFIG_GPT_ENABLE=y -CONFIG_GPT_NTIM=2 -CONFIG_GPT_SW=8 -CONFIG_GPT_TW=32 -CONFIG_GPT_IRQ=8 -CONFIG_GPT_SEPIRQ=y -# CONFIG_GPT_WDOGEN is not set +# CONFIG_IRQ3_ENABLE is not set +# CONFIG_GPT_ENABLE is not set CONFIG_GRGPIO_ENABLE=y CONFIG_GRGPIO_WIDTH=8 CONFIG_GRGPIO_IMASK=0000 diff --git a/designs/leon3-digilent-nexys4ddr/config.h b/designs/leon3-digilent-nexys4ddr/config.h index 37cbd1b..a838c78 100644 --- a/designs/leon3-digilent-nexys4ddr/config.h +++ b/designs/leon3-digilent-nexys4ddr/config.h @@ -136,7 +136,6 @@ #undef CONFIG_ICACHE_ALGOLRR #undef CONFIG_ICACHE_ALGOLRU #undef CONFIG_ICACHE_LOCK -#undef CONFIG_ICACHE_LRAM #define CONFIG_DCACHE_ENABLE 1 #undef CONFIG_DCACHE_ASSO1 #undef CONFIG_DCACHE_ASSO2 @@ -160,11 +159,25 @@ #undef CONFIG_DCACHE_LOCK #undef CONFIG_DCACHE_SNOOP #define CONFIG_CACHE_FIXED 0 -#undef CONFIG_DCACHE_LRAM /* * MMU */ -#undef CONFIG_MMU_ENABLE +#define CONFIG_MMU_ENABLE 1 +#define CONFIG_MMU_COMBINED 1 +#undef CONFIG_MMU_SPLIT +#undef CONFIG_MMU_REPARRAY +#define CONFIG_MMU_REPINCREMENT 1 +#undef CONFIG_MMU_I2 +#undef CONFIG_MMU_I4 +#define CONFIG_MMU_I8 1 +#undef CONFIG_MMU_I16 +#undef CONFIG_MMU_I32 +#undef CONFIG_MMU_I64 +#define CONFIG_MMU_PAGE_4K 1 +#undef CONFIG_MMU_PAGE_8K +#undef CONFIG_MMU_PAGE_16K +#undef CONFIG_MMU_PAGE_32K +#undef CONFIG_MMU_PAGE_PROG /* * Debug Support Unit */ @@ -176,14 +189,7 @@ #undef CONFIG_DSU_ITRACESZ8 #undef CONFIG_DSU_ITRACESZ16 #undef CONFIG_DSU_ITRACE_2P -#define CONFIG_DSU_ATRACE 1 -#define CONFIG_DSU_ATRACESZ1 1 -#undef CONFIG_DSU_ATRACESZ2 -#undef CONFIG_DSU_ATRACESZ4 -#undef CONFIG_DSU_ATRACESZ8 -#undef CONFIG_DSU_ATRACESZ16 -#undef CONFIG_DSU_AFILT -#undef CONFIG_DSU_ASTAT +#undef CONFIG_DSU_ATRACE #undef CONFIG_STAT_ENABLE /* * Fault-tolerance @@ -281,15 +287,8 @@ #undef CONFIG_UA1_FIFO8 #undef CONFIG_UA1_FIFO16 #undef CONFIG_UA1_FIFO32 -#define CONFIG_IRQ3_ENABLE 1 -#undef CONFIG_IRQ3_SEC -#define CONFIG_GPT_ENABLE 1 -#define CONFIG_GPT_NTIM (2) -#define CONFIG_GPT_SW (8) -#define CONFIG_GPT_TW (32) -#define CONFIG_GPT_IRQ (8) -#define CONFIG_GPT_SEPIRQ 1 -#undef CONFIG_GPT_WDOGEN +#undef CONFIG_IRQ3_ENABLE +#undef CONFIG_GPT_ENABLE #define CONFIG_GRGPIO_ENABLE 1 #define CONFIG_GRGPIO_WIDTH (8) #define CONFIG_GRGPIO_IMASK 0000 diff --git a/designs/leon3-digilent-nexys4ddr/config.vhd b/designs/leon3-digilent-nexys4ddr/config.vhd index ce7208a..42523f1 100644 --- a/designs/leon3-digilent-nexys4ddr/config.vhd +++ b/designs/leon3-digilent-nexys4ddr/config.vhd @@ -57,15 +57,15 @@ package config is constant CFG_DLRAMEN : integer := 0; constant CFG_DLRAMADDR: integer := 16#8F#; constant CFG_DLRAMSZ : integer := 1; - constant CFG_MMUEN : integer := 0; - constant CFG_ITLBNUM : integer := 2; + constant CFG_MMUEN : integer := 1; + constant CFG_ITLBNUM : integer := 8; constant CFG_DTLBNUM : integer := 2; constant CFG_TLB_TYPE : integer := 1 + 0*2; constant CFG_TLB_REP : integer := 1; constant CFG_MMU_PAGE : integer := 0; constant CFG_DSU : integer := 1; constant CFG_ITBSZ : integer := 1 + 64*0; - constant CFG_ATBSZ : integer := 1; + constant CFG_ATBSZ : integer := 0; constant CFG_AHBPF : integer := 0; constant CFG_LEON3FT_EN : integer := 0; constant CFG_IUFT_EN : integer := 0; @@ -147,15 +147,15 @@ package config is constant CFG_UART1_ENABLE : integer := 1; constant CFG_UART1_FIFO : integer := 2; -- LEON3 interrupt controller - constant CFG_IRQ3_ENABLE : integer := 1; + constant CFG_IRQ3_ENABLE : integer := 0; constant CFG_IRQ3_NSEC : integer := 0; -- Modular timer - constant CFG_GPT_ENABLE : integer := 1; - constant CFG_GPT_NTIM : integer := (2); - constant CFG_GPT_SW : integer := (8); - constant CFG_GPT_TW : integer := (32); - constant CFG_GPT_IRQ : integer := (8); - constant CFG_GPT_SEPIRQ : integer := 1; + constant CFG_GPT_ENABLE : integer := 0; + constant CFG_GPT_NTIM : integer := 1; + constant CFG_GPT_SW : integer := 8; + constant CFG_GPT_TW : integer := 8; + constant CFG_GPT_IRQ : integer := 8; + constant CFG_GPT_SEPIRQ : integer := 0; constant CFG_GPT_WDOGEN : integer := 0; constant CFG_GPT_WDOG : integer := 16#0#; -- GPIO port diff --git a/riscv/main.c b/riscv/main.c index f0ebbd7..7c337c8 100644 --- a/riscv/main.c +++ b/riscv/main.c @@ -29,6 +29,8 @@ int main(){ // Writes the check into output memory section write(0, &correct, sizeof(int)); + + dbgleon_printf("CARAI PRINT"); } int fib(int i){ diff --git a/riscv/main.out b/riscv/main.out new file mode 100755 index 0000000000000000000000000000000000000000..f6e87f69fcb0759cb96883863c1f1f8a368a0e35 GIT binary patch literal 11316 zcmeHNeQXrh5ud%i^AbwHW{q(^RE*cyfbco-kvdHyb&2gbK!VzQRFV2|J+II9HTIo# zcQz13t-&@{Dx@Y^1QDeI6$&XKRaGN75~KxTN-8B1QiGCKQITSb)2b?mV(f^RbAR)8 z-+Aqrw0}kYH0FQv9>{wj?}5Ar@*c>0An$>^ z2l5`sdm!(Dya)0g$a~<+@_>zrbo{|@19TrSKv#hQI{s$20XqJ$w*fl-fVTm<1`N;_ z00Z0ix64d)J_)Zy>J08*fO1%+0a@r_ANk+v88I|vmvHA)bYsbl0=U0qiv0`if z-y7xQ*}kfgw;0>nA@Gi8hnJICr%|u2X@$n|u}w_(9c$Wb?ba4zo`ro?4Ox9~IT__w zvV9jcGRhno!Lw6aU{w0Eut|a5tj&CtGvnYPd$NhF{TitlA0AZ59-NGg-W;2f^Qcw+ ztZ`@za{o?80`V_Pq1Made$9f+OcGb)c{ zQ+Of6eBezGK>rl@D=H-8g)qeJlgt-IBiTJIcNu z$$p9U&B`U2Ct~k^-q*8uZ^JWdy-o}VH_Lsb9vkHK<<@JQnBQ+mXKwX?hNk-Zhsstr zZFy!*SzWL;cpne!TZ#Iz<7~M;aJE<9wPRl#txa;{^6^C3Lf0v=LVVV?#z zh}w3I%)&(G@-WAy?g27~>&Vo#K*k=_GS==fs#77Ws$>l7FR-_Fpgt6l-mlTM%;ibs73zpa z)=xF6TLpUp11I)nrvEV3d*%r5Lu1$V-oCQ4*x%Umc#+HY2%DtbF3mR#+k`Ci+XI2? ztb^xp^q7ZOo@Eo6gP#B+Mnyi@;WNr#7JJ9mdQlU(o?`Fss}eN_wjIS`%oiMH&72y6E*k<^^5l^>*0Dh8}+0lz*Q@MF|Y1FsM zpXGDuTIS#{R8fVP8QZAr|7?x|UgSV7A=IEk`cAe|Y%#aeMICabw;1lu^Mo zx!2FNEN2_+RF7dUx38~qMAU{p^jQl~11_98We*OYVtK*CX9CU{75qHs=%&e=w$^`3 zFEBm!9DHTC3UM5`@H%|>irgoNfe$hC^;K-})(7mVBAjc;iM221YC8K;)L_`)JfqH* zaLp{l8A>Yl5YDH`X|6Yz<1^bIaD6)F_8o*>0r+cN#1eBWm|MZzx!P$50?t{_=RN!k zy(>6BMXn>?kspL}^bNhg>5Y*8iiuo7F052Iuk@!YOmS~`vFQ!#t9wLlVh)0SQr9SM zu3i3<9XJDf{MeV~%243fu<`t~-Cs;&y&54Gr+7Y|hjrJj$9@FZgCi$&|Hz4uf83lk zUqAYB2eFpE=x08x`y9(S{C?OtZVJ03U+IfJwh8N=Wf$+AzGHseY3?GszrnTT^3Bip zt(el)415qE>&NGO_SQ+l*}2eqC9uHmDVWxKCTM8aRrq8W_5&&amBZ{aWwiDEtW{hf z_UTZ;In&--N&9f`8rt<8^!EgfdPkoz<|RFFyJr&1K581 z#*HQR-T@l=`z5mX1{B7L%;gDtZ&hv{dnaLS1vl+pAJ>;@oH1soV1h=sotpsfCmd(> zSW`wq4`2vn?Cm2rMRywQhlL;<%&^peu4VhV5yEh z7%I6+q4u}QIHKKUR9q^w3y`O!eC$O$9C*zl6$VJE=fq#%|yav4>AfD}s zWn}diP$+Po>nQ0ZB{aG>kY%3w4Nq>^SoWKClVc2dn6XG zY3`17v^c-KnCf_RE7nt;N=MqFwT@t@wz@n1Ts*NgULEadb(c%H+Lvv3s;o9x`*pZ# z{>I-Sps9`%NcvxOBlET!4;38T_?raAsvFabIhx~wb0kNLFBXVuBtI_IXp3?*UVeC* zO1OY{no4*X;%Vxf%B~V#j(D0%cuC@EDlK+bj3f%*I z+Cv+lPkQKT(6X`ogCL}T6nJDa=u-C#^+Degpc_2&4?)W_mdATQvp+cf6k0$7z|x-z zz6d!1n$Kk*L_?uBfeXQ33e5Z?z%m{R;xP(ZHn#7kB!HRz=N$U_9QxBav?}(6)5-FS zKy!RobHd|`l)3&W#kkiW9(7{=N{qkf<_CZAf_GTC^)kI_7VW3+f|l#!6(r`+JLk}^ zf)?M^04;@uM?oKO^PB14fgUd+^J91X6!YV*hF^$j^e*UEJ^X(K-GTT&hH;kvi22?8 zE%IsfZ_pnuCG(IwJ~3xp^%1?~(YFM&AM%`UMVPM~^nubD`SqZS-FWkS4}o5X@h(^Y z^3b4>$Dg+7Inpf6(mQvP|+dp!0Hf|mQU5c$RL zGatT-%nx0C`#~3$khvS{Wcv<+KH`yo9rSJwJq+5rp0_}kVm-yKz7o(2JpLE~eJ|Ft z&K-XT^dXPFzkq&0pYhj6pl9sWs1|mucH_hL{{!Q%L4LJs@28*-EGP2?S3f0DZF|C2 zGJPKofv!XE;dosL;+~N(q|&p* zI&pr$Vpa#l!@~YZI=W3f#yY#YlTjWL58;+bIs%=};u^O!U}>1aYfQ`R4je+sG`eQZ z%sgGm=;!)89a3&Ko9uN0BdM*)NEd<-f!dB#H2PeaL*V+gD-nys>lNq`Y+IADbd;r2+pr2~wPRH7>yC#lkPMOQkBVH~uUXK^H+W&ez0h-03L z3iY{6U>|oS6KpNc{8TJNVeS%4!dM}L(dJYt>?{^Jmx`u|!-jsr#7mLSEKVXG8}J8$P~6uzk!Y?$+Sr^Hw%_Yx*`iB%e5w zR?NSSXTirZtdDEuBJlCOTsEot`{-bO;w3OJ^A$-ZcZ|nd-Df#e2EH;$089J2@yz_P znc%CG1h5?2;d$oaR`BupAe-dl8^3(!vFE{OOD50Q&)sLajyub6hM-S2)**p&K(^nO r;cUYd7HLC40Q-fX`BuullkLnZqA8D{w26J?status & LEON_REG_UART_STATUS_THE) && (loops < UART_TIMEOUT)) + loops++; + + uart_regs->data = ch; + loops = 0; + while (!(uart_regs->status & LEON_REG_UART_STATUS_TSE) && (loops < UART_TIMEOUT)) + loops++; + } + } + } + //--------------------- +} + + + + // Exit application void _exit_c( int status ) { __asm("ebreak"); diff --git a/riscv/posix.o b/riscv/posix.o new file mode 100644 index 0000000000000000000000000000000000000000..26e918a18e9af2e529a07bb185b0f9f704fed9b4 GIT binary patch literal 3888 zcmchaK}=jl9LE2T-S$UqQSJkjFGAM!wn%spXxT1!o%l*?lh^}KI``ZI^3VXq^I%`XJC zS0$(`NKn5hLF2Ln``09B3VT7U(#!kd?}OU4Vy>a^9oxJ=hwNJMnlIAk%VgB|Bf;E? zQ0FfCk~rs=r=-0+*U(vvPVbeVcDb1Q$(NwUTvN(?;_nLT!^M<{hjEK}=IS5x=Pq_j ze!W`~7kmk!|Jt-C`RVoHJNH&L^gf}6aFO@@_i-8?I!>-(3iDgPAJi=u?_BWLqS&A4 zr?_9;4~MWnT_+}?J+BzV&ItCYEU2F^W+WoaA>*O1>|vRp?rJfpEnvSoi-{S(EQI@D z&Yf5Mb%{>}fGoAiwTDcurj)bebvW1GEj*SU!^Q--|=;mm9VO;9gi@#U5=Yj+?cbwVP`(pRPMY>-TiNIwm#u zgxWr?yY+J8BL;X9l z`?YIb&5L=ClX%T!e2d(4%2wi|aZ2M(Al^LFhC1fbsKQ5`0*}l=_sGRIi zXZzC06B&v1w4fe9ZAE%>V{t{T{PgZ{!ta-Bfr*V$<;oZkVR(}#)ZGE!(=bb!R{aJ98&6Cxi zck*QQFM)M@vidijJX!r)PM)m(l9MN^zYNy-kk#kkxvrP2{)Uq$tIzj<=E>?;f^~ed z`bV8SS^Z;9o~-_ilP9Zx-pP~I=X*!zLstK?lP9Zx-N}>HUjXa=lhx2f#tWQ>d$;p$| zUv~0j^;exdS^YI|wH=?VelMmHu^-s?z!l|YZj)#tme10E-1wL1?>2m$Z2!OE7Px{R zW|UP_y;g8mBTtoViI5|PhsYI%r@$3^4A0Py8ouoK*XdUpf6?)OAwO;W-vB$<~hUjMG>V)uxgC{d z7Vo~o4iUZrc|H6180)RZa!RFL2e6u17Ji%gd2w@YR5^|euW@tsvjq3S{0@SdYo>{E z7z5ZNP}1zvibt?jdXXE4!7*Pz<$Zaic!c$yK)Hzx`k7!0$711;b922ozps~i%#Y^& E0yniFg#Z8m literal 0 HcmV?d00001 diff --git a/riscv/reonv_crt0.o b/riscv/reonv_crt0.o new file mode 100644 index 0000000000000000000000000000000000000000..97541c762f882380cd81aecdd85b9adebf9f6fab GIT binary patch literal 1248 zcmZ{kziSjh6vy9sr->SW?2Vm*R-zz_V#HQKtrP@1n`Q4Z=#fh{>@Ip%rm(QEkrNaV zJj6oKLhuhtBWM|s*v8M>omt0)Jow)C`<;37V`t{w)0?+%MNuR^BKa-BGS6hk-c&1G4}Fvj_uo5C-ND49sB|m?apPBQP*WVPKBI z;A$i{Ocd?DW)D9$MLg%*TYvKH_aFtQ!PX8Qq&xN2gP-vG`toZx=#t)lUoUuf04}K~ zePKIo49Gu)o4XeE=h3eMe+B(9@Ym6A0)GenF7Wr!p922?{Uz|F(@Mv|wBt8B{&~m0 z?D)4G|DoeQcf1rfUw@R2it1u=PtvrpWt9~b?s1WA@H4KgH+DL1I|`ev`1X9mu6sS2 zt>p?2&6@J@Axo$4PBs-a&D_+uRP6XsWvq4E{(chU0c`HW92WQoeL?;4Em + +int main(){ + int n = 8; + + // Allocates memory for arrays + int* array = (int*)sbrk(n * sizeof(int)); + int* array2 = (int*)sbrk(n * sizeof(int)); + + // Calculates fib(i), 1 <= i <= n + for(int i = 1; i <= n; i++) + array[i-1] = fib(i); + + // Writes results on output memory section + write(0, array,n * sizeof(int)); + + // Sets pointer to beginning of output memory section + lseek(0, -n*sizeof(int), SEEK_CUR); + + // Reads the results into array2 + read(0, array2, n * sizeof(int)); + + // Checks if they were copied correctly + int correct = 0xAAAAAAAA; + for(int i = 0; i < n; i++) + if(array[i] != array2[i]) + correct = 0xBBBBBBBB; + + // Writes the check into output memory section + write(0, &correct, sizeof(int)); +} + +int fib(int i){ + if(i == 1 || i == 2) + return 1; + return fib(i-1) + fib(i-2); +}