From c395f31dfa3775ca84ff230431bc96766e588303 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 12:06:13 +0200 Subject: [PATCH 01/19] [figures] add OCD authentication module --- docs/figures/neorv32_processor.png | Bin 151361 -> 152327 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/figures/neorv32_processor.png b/docs/figures/neorv32_processor.png index 59e012418a7c7d1d0412c002a7d138e0f6651a56..058d30967da31f9e9aad1cb7f0bcc084d0744984 100644 GIT binary patch literal 152327 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 z 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 literal 151361 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

avTia=E!E^~YN) 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%0D>08m zG_FWEeC%DONa8>hROk=FXZ6p+(yd9A0~ql91Qy!HETz!#6<6yU??0rz8s;a8u>yp3 ze})7=jpXwUiSb7|LjAD4R#+oX*^80q7GDaz2Vr|7;ID}HC|k9_YsAOa1ofe26~nQx z#g??Z*yh237#F)09{7wqV|feB|8#P?tzfY*87H?TwlbK?PF>#QQp_$s;D?jM z=Qfy4G#qP$Hn*gHI(b)t2R)V+#W`1>T(i-J?H+!H{|yQZApi*_Qzs9ugvj6W;Gvzq z!vjB+J%;2;^hAS7LspEsN*njxAa#U%xVTp{D0CyCKj?RHnqYFfiM zEbUd_9P=5qBgwu@w>*xO_EE`Fkrtgd#pD+0@F+&G}|?3{oI+EU5^6FsMKzs zWt-y!QO{8(SF61Z3}fnOI+32g!x{wov8&qckG|olsgUfSMf}EWi|WH1br^Po-vM^4 zs>{ zftp~`lA=P7I&Xt)l*QS!=k{3sg@{>%*5EW#V|{KYRv@Ol6L^BV2@rFwv}yt=ywuSF z^TgY~+>W~srXG)}DugTx;-3)q+_w-U-_!Xuw#Q>l@cY!Iu~vn#?BFWiPni z5mj5*W^b(gEVq*X4|Qm%n=S?e#H=s@6<6j0aEVh23DuBlv42o7K(VGhN}lEaWxHY>C@7@!d~ z_KtttT_+HL!}be@s5OqfGBJR0OYz{~FdAg8&@uMS@#5a!fw%Q}(Q% zn0n4c)Q;0U*gHl!8A`BpF+wmG7sEq~_-Q zE=M5B29R-~%y~0q(}bPX)t4$}B`%a!t#`V@EwQFB+}gnkvwj?*!B2{|rMEVkdfa$A zL)0Z>u-oIa)FQq#9kzg6MmELi?n&31I#|{bb8RN~T#wfcRc%f}Rq4l%4`bT#jM@6P z4-PmYA1QEsIKjOOvP}4GZY}DnNn>tNLGf44i0fSM^*`l_x1?we*xiy zQ9v+6Y5)|twGCU0{KOjp`Vu;*ce;UiX4JYS8t-{}gWVgu5gRUpKF#!k2l@SqgnTF( zkB>cCNEa2CaIGmOOX#n-P`lCcOI)R#y^vA~9IlIPtV`KYZX1006nY^(a;-sY?lhz; zPp9h*|FLks^EEJg zfjLxkRye|Jl}Vq4nK8-;N#&~tVgB+iy!!z*IP|)f4l?ok z!k7zQi5<~ug00U}^T?r{?$u#ok(^7OpIvICELs^iwxix2SLFVLc(>tsxK-z%;B$=t zKcfNxNUq{b>Ch>FU3DU-_2jRT9){FFNo)}wwsM7|>2_%9E-3N*N8`%sea*`Jrlt#o z*b%N|Bz(8Q-2< zhd$X4Lf0Bt=EowSlG0ujL7lSAS^pXEaMOQ?eJLRCcek6+$(>% zR?yN)(YEu@!a|sw@@&ZAYnKh{&}SlrdeL}2MHCxC1q8<-2yl-DU3;vY4@e%kf_YPP zYfr|9Gp_`J355R=d$i2((OFlty`SH!wdVMRx*^U5JHloZ8YCDQxgdGnXQq^C!Hmsc z%5=>6P#mSuU6Rt-s+Jx$#VTLo_u-+-a#3ENKRU8koQh_IfhSH{o?0Jp=}!;4KsT4+ z>!g1sH_yzGyr`b$dv{stkb=x;n3wK~hS+;nJ#YWCnN`0E2fOVy-Wj&-y;VEZk3+B4 z$;x*_O!6e6+I;wVm!?IeHBcD>Ygg(CT0}tZ_f&^e?14o*U#o}CvLd$$UXJT3j;C^H zqZ2sgO?jPQCX_#t^i%V6dP@>z9?o0@+b`>2zj&^J+rHM|M^d^sAW3Jp~w_EWD zhgC>g{xmED$Hw-f*U^I8`G`WpcfZPdSsdO>yDknfG~0&n4jpi~7{SpUd) za`gToa#5qJWBJj9FyaA&OHH;e(ls?<0%~3B`Y{3gHAE*)@9nn;#TP2#p{%em_7ePU zX4TjM`%JG}1VIR*hqP15Iuu|-0H;SdF550g+j)gE^)%&U;7qxXFs_%>`pFljB4QEA z1qykCN*?l&g~DlpwBf;%5^pZi^^rt&Sv+Hc9m94<`7t(|Pq#`_9tR(BryWURIpjVy z_A}mRB!(Zaj{%Lt;>C9qe8#%1qt4V5MqKgGN4p2BI=ot4qxa>`mA8e|X@Iws=M{(= z#o#O1Nv1OY^@w3$VY+;t%xjBmeq3PvB>GhV-ccLbbw=jX6uz_3>R-F@YpWaX^_VBs zN4sQsZDcO>TWe8v*duRo8BoyoksR-D3eDbA`8lney}{lW;9ad+cI`Tw{g8$oh;x=8 zsK9e|yT`)2QYHCWE~BEqz`GQ4t%GJ=m_O6GNh5dBL}unW^lt>`q(-yF&KLbhKau_a%3=^;e97LY&jqquGp6$C7()7nhLHNtAft zQYls`Q13oLl~-SO@RFT$VRfCK7h1BFUjXW@@W^)DhUOGnl^BbHCr!@b5l*9h?=YH` z-NXGT?438yKSh$Vj-AE&5LThw=yxthHc+zp!fQ?2Nxo*4KeG;$Yq#YOzVx%L$8l-l zqRt8oF;OgqsvmU<4$Gc&3PdsEMM2UcJeRgIl7h*v?ZfA51bF_822)3=q&-<6#**3g z8$~HPHCIw#bjXV2Z&VjM;w_h>&m8y9M-r2G=lq&Pkc-541Je)5Qd^#?esGyB>JCwS?7DXS z+5wqVclGdkpo$!E%?~<8rejt8bXeqNb%^bjf^ex+ye zIc&wClV|z%60seGd=VbC(9OR3K`F&M%Z4(F!okk1?85zRbrT?G)g_D3=soylYP*C# z+B*VdBjl}~E~T{&w#@0Yo&I7>a_OE`T3%eQ_^no0OG5O5j5pG%WBAd zlo5R*{OJm#*HFC#(Y|ddgLOH&lx-2#o!H4CwJ!=xm#=eGfA^Vh4XVg9X-yp4j12S) z(r~cxvxyZJ7ay?qRok()%Au1dE5=l=&Pn3_cx|-yoI6--Up=QF`0E6bv?lvVP9Gv8 zvB^LBP;;ysht%>iSfn7)u*DJ2`??`^dJ|&39XO8v4un?}0)!jx&9dWWd%hkW%+%n= zNoO`|?nc*lS|I4fOu!)5Fd2w=9a%t^Gg}Uap)I)I)=qz{O&Yv4!1TrNeRgX}wSI*+4SQfwQ zVU1n=$QUStoTj6{pMIeCK80|r9mT#zhw^Vl$T#$Bbf?Y(Yi>%pRt?upywzpoan%O} zk+^EIqRDIl)mQxV^YoVPqRLhJE6L8!z?2q;LPjuI|LS|Z&t+tW@@t9^?cq?m-;#@u zA&K;RqOpt+4gF@^^vBV8;F~=>YfiOK^XJL6J4xprA=~$Qz`GRfNZJuANWFCzA&Rey zO>RNOGotp4F`>E%gq9$oXKf-JCK?3;()X3}fT9Bhu!K~`-jF)?K46nOPR)RaYD>Tn+!YS_Mj(i=(UjEn9_eN{=~ zEcv-%F~fbDli&9^ARyrH!Ji>jx~0_*iQO{;1sR%tvJ$HuqG0Nm+MmjI;4W`-(8z5u zNZyX6k@aP?GI(`_;{{}hHrEqZbd&XQ zX!UQa6>jD2&-ME*#eF_uN{{ni5-RvT^%cFGnH-ny<*(Y(@j1>LENeURHYg~}@qnJM z44S6sy35k>Zljhez1J9jDdqZv|JSGe%$v$>$cP|PQycPOYHF&npVp7W6#Xd#2>JLBh)uckL4K};h>b_+o6SF_8*k(v z{GP*;Ks6}4oL>r|nupPM`h*cZqj5GpffnRoJGbM4Vjoh< zA2g1WHv$?@DdR7PZR}galeVXzFl7LYAx z&Du#vv}#_!yNmMGYPvjbY(#p3aJO6P^Ci#gHv8MD z>u*PzdWoDA4x_j2WjRlw#*IMIcXj8J4IRknM#k=shGaS)1tJGkW&SPte2nwbzgR-& zV_S&1Nev;1fvK`Q%CpFi{>dNt9b*ShUXmqx(AU=HT77vC=et>Ut1Iu^baazy z(P!LYJ9D^YSk-nQ_$O(Ghq7x_H?>d{2}aeg^PVR-V)NDWy3XiImctpNs0(cOsWA zxcHA<69jW?WqibvyGGU#;i_kf-eobzBYrFD1SeyhmuQR1Yw0p;?~$7{ze;xlOYb|DJ5PmymP-I@NQPK? zw6=3E+(u2vIls$GU}$QbAwqUXBsvq#+f01(TmSQrvg@)el=^}|w+Rpf1{r_c$0=kN zKVF3C*|D8kNT9AHRs<>V9BqrA(9e(|I zhH);EfBo=ym;cgc^m%RMYhIf#3gq87Namk}Q=9~^KHhS6 zv+#D=xha&ijjJfi+4NVtlvu!6E3GHvvB}ydN#T~BcLj>Z)u)YvV>D+%Q?RI~Hj4d& z?qo@gM>{At^Wx=Gaf0C=R|x z-dKRG1r!fC2E4;hOV}A`j}oE+S9tsGsKWzMplB>%Oq`k-ToJqjpFV$a%%Md#%k4*p zU>jp)MTfv1ZiLjR5p;-4g&3-LdMuu(>1HQ>y#Y5@uX2iSIr=~ zMWOU~_+1M};%0jIq4B1=6xd>c(bp4v-)3rTd=*tbN^FY-27YH0Jas0FiWf%ya;{!1 zOzn73^cX)QN{4pI{N|H~ea{FzIA%i73DX{5n^5swY*tHmbiG`h_44*Nd5c$^rdp@plXTHHOW`vkjWf)3>PeW}C>86{!p49$1AB=$(&0wa`)G2US7`zVwi8i|_~RA}-W{duWE z#=<(I9w#DEf;g+6Rc1oVSG(AHoU-VplASr)RFus*5HBJSsuc)M`X}9ERY9aNOA%B7 zJjf*c9)UThPg3uKkc|&O{*+8Qj`IzhLA#OP6r%0kVS6Q%lW7<9C?u^Bi1`0|aZ6Dc z*hz2-m-IA1S3~J5X^e{$bquI$+WySULA{~GN)Pg855s2ST0LANM5N9%i;p2H|4NbWq z$VE&w`D9AU|K#}`icCUj0>embPGx%RnTIBgxBfYXe~ zBw1$_!utpEunaNuf8!VG5J}&8w>a?JUy{^CV)Y4*2Un75Q}$QmChRgEiLWKM?nz`w zcv<}JPSKntbUUy=Xzc13=mJkJYPljv@ms)VlM*>=pmC^(onI{tJjE^;?FcjywLCkd zEHg^;uiR4_?G-zC1tmhip)7Y*%|266+hc5eUq10pCkRn6d$c2fG26TG5l98g$%7z@ zc!8=vxd&p0Tv?`|gRHNLNTk>4>_(kTA(YaT%^y{T{*|d*uN2(b<*u(C2VlWeaFk`) zh8aHn0NIXTNuPqL2_%=BHpY6gCS96!RG<|Z~Lv8>7!H)BNqK&`fZ`%Ao}Y=9Rd zm$;z^xC0KV%#5Jf6GRDwEN$&@$ zGL5(xt_OT@RY%#`KU-_xCG!pmlq)VhsE(InNE?0|vPmv5s1|R6_&)ZDFE3sqw@AI_AOr%*v)GUTN|I5PS8mvTcqMj$OBKQn)%s4bH#4_ zvAse&UMFc7t!$C-mVoCaQ`_NURbr;gF4fJ=H1QTjpN^Zo5Dj@b{T&!+W55gz4INT- zVOFU%uR@P!Z3nl`*4t~7=Wxoa2Vjn0a-|LS@MzaW%PR|e|D?d54NdN_^$Y^)#q`2L z69Ri-ZedW?gA3Hqlx3BlW4s_e@$i47R#1Att@3f79|aYfa44gk-PsYTZ5OC3``|2g zP>7wIU-W=Evx(;&I}!=4;xx9Iw6Kvc8yS&&vyT(|stm!A6O=8i&*nCi;~{;{26BI~ z!7X$9g%M^O@l#~vQn>t2&=mK?xW{K8l-}^nwbG_K>~{P@E{n}AbzpZQvhYj#TpS#J zc%l{h)R2`iWzMTeaE7G3oMR^EU7b>>Hg)3eWTYmTcCc$lbIN^*k5p5YVcOy^3;m>O zwm<1aFefK8FAU-VyRdj=Ezi1KGlapyyYSihI)U}>h)C92Bcfc(;Ja$Up{pySymd#A z1luF=sG^tCe}W1HiL{XBS`yDn0@JxTplDU6FXT7=o}Z5me7E`~nreLtr#Vx@Rm{Sz z=eetZlb-6R{X=7X`!{N9*c4|$q|34XwV44v!FPI5!xCqg0-QEZrNt;{(_4#FnST@v zggt=T^Akvf1H%==`wi3)k;pZ`{{KI{Z6b)?=>Iq~{0+*vsrYvl>3)j$v|1V5FE$__Z_^^s5E?`|Yc&`XS)eiL|B-rvJ7 zl4?il#939^lgGxDz{&Xjs3O-6ycgNa=*3}n}6`U$HnTx_lMs+b9@B!J2&wb&p% z+r0_Dovj1_o?7a}{xZS6_HCF4;)W}dFCUE~68!RFvh?Xf@m?M|x=OH>IY-`?Ir7*6 zz94}zWcX@V;=F~NaaevAcj9{Tz^qpXp@zaw_V%9xGYgk-coaAx} z(Mjw-x@Ing0%K7&eoEy_0Br&9NGK((^~ZDER`KB@zk zD2t5@*l$&oU$$@a%wN!TClF}{a@w0V8M_d~${`-rKaAY~a5F~UY4o`M2g0El5W{EU zX&LeEvQ~g3Hw(%}g|$nQINoGX(aLKsiMg<(kaRu;Q;u0io1MwT&AL2W&mBJoE%(Ewa>uC3s_wk zY3PBmT~xlpcXx;a=DdFjJ1B`Q(*-_+%UM7sUjnW~EQArz9ps%_LH8~>oqYZnVi;^c zERNh!s|3E=IoO~8Uqj&GZuw9!A`w9Dh(a}0(3(2UnCZoRCoK%70^Y6JF`}d!K{#1z zzd?OM>jtPgw+BB$AlT(V$bsKt>3ZSbXE)^p!Ahv#5IG3TLfrwbNHH@VP$;>{3*Ic6 zKoYl5YH>EB-8h>nI76C4=d&ZlT_9nQUtiNDE@}z`az3KW%#)Qha8r|rU6(|Oe<_gZ z0zub9qq?5%Y6U}|^}`<;4J^MvIjm6|CLe~uMJsVDFmWv>IbGa>WC81pHu!<~{w+xD zHBJCV7>tmo0aJvXE6^LUgP2s;^4!X8>jLgidqflhB|bY^kVOZ$PSZP-eXqt!3|st5 z08OQfEBSpX+&r}-Um$Q1=&@`%U|G#d%{K+NS!6CyQaJ`I%gbfm7)YI>B2EPNz(v&5 z$gLgvc+AKC>tZkJK)F-<=eTw23ZLAB3&AbR`kjzsC%;i_t*D*bS zSOXidsUU#H9Il^kX2(R^ne7}^7JEZ1wOjIq)jKdfWX(p;pm^&PIZJfWLd}0lNG(>O>3<*^KBMvqS`v9y`hZn zI>0vTUfE$LYgM7_m44>!?KwLheaxHK>U!y9A+~xBzWv(_-qL#bpH|RW2=4YSLay^; zyI%5obTooNRVWN3O^TBxVt&h{g?_M9$PcH|vSBJ^GQgcZ<4$-T#MlCHRgBP4&RY4> z3vi@d;iNJ=8N74OVcCkNV`Zaf90+iH-m0q;>O!OyRHSE=x9KbxtRH8)Op79 z0{}!~Y7CCc(Pw(gs4P$Jrqb|ntL<#pWXCCaf*u(^j zT^pfI6JDM~M+QWVx%BiT&Bdr7U4P$|s+y6D3^80jQ-d~A$}QP_*@>2q;L{Vdg+jSo9rba)KGl-ipMnb2GR`H2XY$*WfkvLd#~O`ux`baRaRv5OX~OP zt?FJaKu27b4}wkBiXHCiQwt4BH?)0OF#%4a4EUO*g|3!~o01^~L;vtOfC!VFJCx@X zHOC&Y&p`lx;`{gp!hb2eJGF!3`&8lz2J!#U++e8FbnoFHG{;9UC$x~!B)3a_Tc?-_ zKZOx&r)xk+(%jOvrBN9$OHLY_84#va3%E$)0b{LyV%=(TOR>?`*ZxCfHZGgcwFT;# zU}+q+QGB-Qts0ZAFIsdXoDqjY)$C28O}6}ITGB>4!RKEf?}c{jR10oeec}Y`64;=a z^$!z6Itikr-7LpCHDa3`2VPE@Hib_)k=uD)H6C}Fi@H>)S+=i{6<79(P8=P{9?#jo zU&1^PyT2TA5G0ztJYA*L!UZ;}yU_Y+Ots^@J~H~lg@U$LAFs^DXcMBAD=&}H`l#N| zlp1WUJF)5{F7}g}gQu*IbXsxyX0ZF_1R!OQ#9WuD7em7Md1l=Q#g_L&EryDy-ZP|h7O^&-F;Tsgqbzwf4>|5@x75Z{*v&eAdTlPx zbd2&Kw;gLH+6(15EZ|4Cjsjlqea+8ESFd@>8rgVdblB~H)-x6Fh)L!0K+-e=zBHIO zL_E-X%_F($$;{L;`PitPP2z2|PTDsd`~grtq)_jD+)0B8BQ@y1<|fs*T1i>33W&P& z3fKd%ssW!U*u}#r<^?yFdj8#^B)+lf)E^fOT8N-P1@3&Z;=z{Y(KRYRmIr^Lke!wO zBIU``N&F~Vli~>(4LaB;nYQ(UxykC<-mZrw4 zR}`!7(@hw+X57}{Ni!^Vbp^#W+%shEDb0U`w! zRbX%}ug&35Sc(pdTc8YjsC$rA8@N}qt~;gu$OaOcwM1fdEK5MFM17y8kXigGQ+bbe zPMI!LHw)t?DmLwAp}fswqc1Z?nlQds93a+kPmFMsf(;a62xq8hn@18~U*@d@QBXDE zN(awGi3w?f4pH<`zl5IR^TT6PEj>0WpN&~IMbvL*Am6T^Ouq~z3#Wi9E(UXom;=&@ zwRTEEu8%zSC%d$7^(Q~X=-8(}X?9T&jc~6z9E3ZT&WDrKVbbiEWZW$7G~9$j=(;0& zf(WXFs;K{ER|QQ+qG`fOIH7`;2h?~~x=<^H2tjowf5 zdE@5Oyn1}^_=)Vs$BvU6Qq**mcEoxQHk8u)FLT!{gc1d$e69Uf&~^JfPk(OgJg=|! z!p&nt_{<~OmUjdP7SDSr?!9jP2Xd$C^4X1as(UIj$XKl?)`!%(?lW!W}w-e9Fh3lQe!kOX?s`Il7 zCHz`+%Xge&k* z{}j}CnGZ&Z-S{1N@&%S$k7fuxR4cb7qAmKg)`Odd6E8726wOicjokGkf2-~hq#5-! zh|v@h48|~#Mp_cBm9-15>#0bVd_ADq;i|E8Kf8XUQ`6wJ<8+I?2Y`Pp~0PbLZ?A2zMtgSdlNgB zqvppG7KaGHTb@~S%VHniUf>7Cw)FN}Wt-ju=0UR;-_8n;K^#Z$50=@|v~6lLw;Mms ze#(|K&HMPfxjf(Mf(QNq`s!09k%AwuCG@L|L|txFRrsEy9_N1s34Rs(Mq4{w_YB7V66|9Urm#!m&+DGh)C<`j6>$EehqSE z(G%WOQRIkb-nqfBPNrJM0f{d)GP_A-f|pG%#MsZ_nIjp#Z0E_|R}Qth{0{fVKi>R| zQV?=iw#GkrKegg){b5K54A^CU6r8p=oKs>9!)6*#_T?Kz27Qjq#*&r>W!FlyiEdiT zB-)|k0?b0#AHBZxH75%RAL0ajN5a3qUq2 zQDUtj22=93v-4StF~KI;+N~w-@ro2xl53H^P+pfHCk0WT=k3A=yfOou(*DcEi(4ZpSl#%Ctk_0PG(|8v+Tt3+ejpUrZeQy^n^z}0~S6kl~!Qc8J zj-r)!8Nac7An((yzg$&*DI&%10l1cDb<_1rn0DQXJmxD=e9;DDzd@j{j6TX?=1~)} zRF3P$IioU*0(H@NZ&C;fap&IAs;{Jyw%Db&$@aCf6!c!mBpuz(Y`dDE5ogtf-0Wz@ z9coEgWTfq*>ZvD$eR+6NaeFkamX`B@8Jm>FKg(szvFfJpF5ST=-h5+In?zbh5 zO;%ikBotGauQjK_Qi%o#>T~Jp4wI$zjQv1MeA_U#ztvMmWf#3UlSfp?D~|j z;;p0$SJ8_Kx^cMl8U;E?A(tss7(U_;g{D%!;vB%f2⪚&38*vC(Ev2AAjC!`%b6Z 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 XfJfm^oN@dq;ODmH-CITKRuTUPA(R|g From 1168de7fe191fc03aa78244ece6aeaaf43d5fe86 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 12:07:46 +0200 Subject: [PATCH 02/19] [readme] add OCD authentication --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fad3963df..51ab5150a 100644 --- a/README.md +++ b/README.md @@ -198,6 +198,7 @@ data integrity (CRC8/16/32) * compatible to the "Minimal RISC-V Debug Specification Version 1.0" * compatible with **OpenOCD**, **GDB** and **Segger Embedded Studio** * RISC-V [trigger module](https://stnolting.github.io/neorv32/#_trigger_module) for hardware-assisted breakpoints +* optional authentication module to implement custom security mechanisms ## 3. FPGA Implementation Results From 64102b15477317258e5d6f3f06eb7e4c55f2390d Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 12:31:35 +0200 Subject: [PATCH 03/19] [sysinfo] add OCD authentication flag --- docs/datasheet/soc_sysinfo.adoc | 5 +++-- rtl/core/neorv32_sysinfo.vhd | 3 ++- sw/lib/include/neorv32_sysinfo.h | 5 +++-- sw/lib/source/neorv32_rte.c | 14 ++++++++++++-- sw/svd/neorv32.svd | 3 ++- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/docs/datasheet/soc_sysinfo.adoc b/docs/datasheet/soc_sysinfo.adoc index 2c08687c1..5fe374fec 100644 --- a/docs/datasheet/soc_sysinfo.adoc +++ b/docs/datasheet/soc_sysinfo.adoc @@ -77,14 +77,15 @@ Bit fields in this register are set to all-zero if the according memory system i | `1` | `SYSINFO_SOC_XBUS` | set if external Wishbone bus interface is implemented (via top's `XBUS_EN` generic) | `2` | `SYSINFO_SOC_MEM_INT_IMEM` | set if processor-internal DMEM implemented (via top's `MEM_INT_DMEM_EN` generic) | `3` | `SYSINFO_SOC_MEM_INT_DMEM` | set if processor-internal IMEM is implemented (via top's `MEM_INT_IMEM_EN` generic) -| `4` | `SYSINFO_SOC_OCD` | set if on-chip debugger is implemented (via top's `ON_CHIP_DEBUGGER_EN` generic) +| `4` | `SYSINFO_SOC_OCD` | set if on-chip debugger is implemented (via top's `OCD_EN` generic) | `5` | `SYSINFO_SOC_ICACHE` | set if processor-internal instruction cache is implemented (via top's `ICACHE_EN` generic) | `6` | `SYSINFO_SOC_DCACHE` | set if processor-internal data cache is implemented (via top's `DCACHE_EN` generic) | `7` | `SYSINFO_SOC_CLOCK_GATING` | set if CPU clock gating is implemented (via top's `CLOCK_GATING_EN` generic) | `8` | `SYSINFO_SOC_XBUS_CACHE` | set if external bus interface cache is implemented (via top's `XBUS_CACHE_EN` generic) | `9` | `SYSINFO_SOC_XIP` | set if XIP module is implemented (via top's `XIP_EN` generic) | `10` | `SYSINFO_SOC_XIP_CACHE` | set if XIP cache is implemented (via top's `XIP_CACHE_EN` generic) -| `13:11` | - | _reserved_, read as zero +| `11` | `SYSINFO_SOC_OCD_AUTH` | set if on-chip debugger authentication is implemented (via top's `OCD_AUTHENTICATION` generic) +| `13:12` | - | _reserved_, read as zero | `14` | `SYSINFO_SOC_IO_DMA` | set if direct memory access controller is implemented (via top's `IO_DMA_EN` generic) | `15` | `SYSINFO_SOC_IO_GPIO` | set if GPIO is implemented (via top's `IO_GPIO_EN` generic) | `16` | `SYSINFO_SOC_IO_MTIME` | set if MTIME is implemented (via top's `IO_MTIME_EN` generic) diff --git a/rtl/core/neorv32_sysinfo.vhd b/rtl/core/neorv32_sysinfo.vhd index 5ceaea77e..951d31e69 100644 --- a/rtl/core/neorv32_sysinfo.vhd +++ b/rtl/core/neorv32_sysinfo.vhd @@ -39,6 +39,7 @@ entity neorv32_sysinfo is XIP_CACHE_NUM_BLOCKS : natural; -- number of blocks (min 1), has to be a power of 2 XIP_CACHE_BLOCK_SIZE : natural; -- block size in bytes (min 4), has to be a power of 2 ON_CHIP_DEBUGGER_EN : boolean; -- implement OCD? + OCD_AUTHENTICATION : boolean; -- implement OCD authenticator? IO_GPIO_EN : boolean; -- implement general purpose IO port (GPIO)? IO_MTIME_EN : boolean; -- implement machine system timer (MTIME)? IO_UART0_EN : boolean; -- implement primary universal asynchronous receiver/transmitter (UART0)? @@ -116,7 +117,7 @@ begin sysinfo(2)(8) <= '1' when xcache_en_c else '0'; -- external bus interface cache implemented? sysinfo(2)(9) <= '1' when XIP_EN else '0'; -- execute in-place module implemented? sysinfo(2)(10) <= '1' when xip_cache_en_c else '0'; -- execute in-place cache implemented? - sysinfo(2)(11) <= '0'; -- reserved + sysinfo(2)(11) <= '1' when OCD_AUTHENTICATION else '0'; -- on-chip debugger authentication implemented? sysinfo(2)(12) <= '0'; -- reserved sysinfo(2)(13) <= '0'; -- reserved sysinfo(2)(14) <= '1' when IO_DMA_EN else '0'; -- direct memory access controller (DMA) implemented? diff --git a/sw/lib/include/neorv32_sysinfo.h b/sw/lib/include/neorv32_sysinfo.h index 8742e8ab5..2ff1ccc97 100644 --- a/sw/lib/include/neorv32_sysinfo.h +++ b/sw/lib/include/neorv32_sysinfo.h @@ -46,13 +46,14 @@ enum NEORV32_SYSINFO_SOC_enum { SYSINFO_SOC_XBUS = 1, /**< SYSINFO_SOC (1) (r/-): External bus interface implemented when 1 (via XBUS_EN generic) */ SYSINFO_SOC_MEM_INT_IMEM = 2, /**< SYSINFO_SOC (2) (r/-): Processor-internal instruction memory implemented when 1 (via MEM_INT_IMEM_EN generic) */ SYSINFO_SOC_MEM_INT_DMEM = 3, /**< SYSINFO_SOC (3) (r/-): Processor-internal data memory implemented when 1 (via MEM_INT_DMEM_EN generic) */ - SYSINFO_SOC_OCD = 4, /**< SYSINFO_SOC (4) (r/-): On-chip debugger implemented when 1 (via ON_CHIP_DEBUGGER_EN generic) */ + SYSINFO_SOC_OCD = 4, /**< SYSINFO_SOC (4) (r/-): On-chip debugger implemented when 1 (via OCD_EN generic) */ SYSINFO_SOC_ICACHE = 5, /**< SYSINFO_SOC (5) (r/-): Processor-internal instruction cache implemented when 1 (via ICACHE_EN generic) */ SYSINFO_SOC_DCACHE = 6, /**< SYSINFO_SOC (6) (r/-): Processor-internal instruction cache implemented when 1 (via DCACHE_EN generic) */ SYSINFO_SOC_CLOCK_GATING = 7, /**< SYSINFO_SOC (7) (r/-): Clock gating implemented when 1 (via CLOCK_GATING_EN generic) */ SYSINFO_SOC_XBUS_CACHE = 8, /**< SYSINFO_SOC (8) (r/-): External bus cache implemented when 1 (via XBUS_CACHE_EN generic) */ SYSINFO_SOC_XIP = 9, /**< SYSINFO_SOC (9) (r/-): Execute in-place module implemented when 1 (via XIP_EN generic) */ - SYSINFO_SOC_XIP_CACHE = 10, /**< SYSINFO_S C (10) (r/-): Execute in-place cache implemented when 1 (via XIP_CACHE_EN generic) */ + SYSINFO_SOC_XIP_CACHE = 10, /**< SYSINFO_SOC (10) (r/-): Execute in-place cache implemented when 1 (via XIP_CACHE_EN generic) */ + SYSINFO_SOC_OCD_AUTH = 11, /**< SYSINFO_SOC (11) (r/-): On-chip debugger authentication implemented when 1 (via OCD_AUTHENTICATION generic) */ SYSINFO_SOC_IO_DMA = 14, /**< SYSINFO_SOC (14) (r/-): Direct memory access controller implemented when 1 (via IO_DMA_EN generic) */ SYSINFO_SOC_IO_GPIO = 15, /**< SYSINFO_SOC (15) (r/-): General purpose input/output port unit implemented when 1 (via IO_GPIO_EN generic) */ diff --git a/sw/lib/source/neorv32_rte.c b/sw/lib/source/neorv32_rte.c index fecf02056..cba206115 100644 --- a/sw/lib/source/neorv32_rte.c +++ b/sw/lib/source/neorv32_rte.c @@ -407,8 +407,18 @@ void neorv32_rte_print_hw_config(void) { else { neorv32_uart0_printf("disabled\n"); } neorv32_uart0_printf("On-chip debugger: "); - if (NEORV32_SYSINFO->SOC & (1 << SYSINFO_SOC_OCD)) { neorv32_uart0_printf("enabled\n"); } - else { neorv32_uart0_printf("disabled\n"); } + if (NEORV32_SYSINFO->SOC & (1 << SYSINFO_SOC_OCD)) { + neorv32_uart0_printf("enabled"); + } + else { + neorv32_uart0_printf("disabled"); + } + if (NEORV32_SYSINFO->SOC & (1 << SYSINFO_SOC_OCD_AUTH)) { + neorv32_uart0_printf(" + authentication\n"); + } + else { + neorv32_uart0_printf("\n"); + } // IDs neorv32_uart0_printf("Hart ID: 0x%x\n" diff --git a/sw/svd/neorv32.svd b/sw/svd/neorv32.svd index 76e11af61..52b90a2ce 100644 --- a/sw/svd/neorv32.svd +++ b/sw/svd/neorv32.svd @@ -1406,7 +1406,7 @@ WDT_CTRL_RCAUSE [6:5] read-only - Cause of last system reset: 0=external reset, 1=OCD reset, 2=WDT reset + Cause of last system reset: 0=external reset, 1=OCD reset, 2=WDT reset, 3=WDT access violation WDT_CTRL_TIMEOUT @@ -1619,6 +1619,7 @@ SYSINFO_SOC_XBUS_CACHE[8:8]External bus cache implemented SYSINFO_SOC_XIP[9:9]Execute in place module implemented SYSINFO_SOC_XIP_CACHE[10:10]Execute in place cache implemented + SYSINFO_SOC_OCD_AUTH[11:11]On-chip debugger authentication implemented SYSINFO_SOC_IO_DMA[14:14]Direct memory access controller implemented SYSINFO_SOC_IO_GPIO[15:15]General purpose input/output port unit implemented SYSINFO_SOC_IO_MTIME[16:16]Machine system timer implemented From b530b002ec887d391896fe7dc3d9c281bd19a2f9 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 12:35:43 +0200 Subject: [PATCH 04/19] [rtl] add OCD authenticator module --- docs/datasheet/overview.adoc | 3 +- rtl/core/neorv32_debug_auth.vhd | 75 +++++++++++++++++++++++++++++++++ rtl/file_list_soc.f | 1 + 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 rtl/core/neorv32_debug_auth.vhd diff --git a/docs/datasheet/overview.adoc b/docs/datasheet/overview.adoc index a56abcc4e..374b24348 100644 --- a/docs/datasheet/overview.adoc +++ b/docs/datasheet/overview.adoc @@ -94,7 +94,7 @@ include::rationale.adoc[] * optional execute in-place (XIP) module to execute code directly form an external SPI flash * optional DMA controller for CPU-independent data transfers * optional CRC module to check data integrity -* on-chip debugger compatible with OpenOCD and gdb including hardware trigger module +* on-chip debugger compatible with OpenOCD and GDB including hardware trigger module and optional authentication **Software framework** @@ -206,6 +206,7 @@ neorv32_top.vhd - NEORV32 PROCESSOR/SOC TOP ENTITY ├neorv32_clockgate.vhd - Generic clock gating switch ├neorv32_crc.vhd - Cyclic redundancy check unit ├neorv32_debug_dm.vhd - on-chip debugger: debug module +├neorv32_debug_auth.vhd - on-chip debugger: authentication module ├neorv32_debug_dtm.vhd - on-chip debugger: debug transfer module ├neorv32_dma.vhd - Direct memory access controller ├neorv32_dmem.vhd - Generic processor-internal data memory diff --git a/rtl/core/neorv32_debug_auth.vhd b/rtl/core/neorv32_debug_auth.vhd new file mode 100644 index 000000000..cc6d911b5 --- /dev/null +++ b/rtl/core/neorv32_debug_auth.vhd @@ -0,0 +1,75 @@ +-- ================================================================================ -- +-- NEORV32 SoC - RISC-V-Compatible Authentication Module for the On-Chip Debugger -- +-- -------------------------------------------------------------------------------- -- +-- Note that this module (in its default state) just provides a very simple and -- +-- UNSECUR authentication mechanism that is meant as an example to showcase the -- +-- interface. Users should replace this module to implement a custom authentication -- +-- (and SECURE) mechanism. -- +-- -------------------------------------------------------------------------------- -- +-- The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 -- +-- Copyright (c) NEORV32 contributors. -- +-- Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. -- +-- Licensed under the BSD-3-Clause license, see LICENSE for details. -- +-- SPDX-License-Identifier: BSD-3-Clause -- +-- ================================================================================ -- + +library ieee; +use ieee.std_logic_1164.all; + +library neorv32; +use neorv32.neorv32_package.all; + +entity neorv32_debug_auth is + port ( + -- global control -- + clk_i : in std_ulogic; -- global clock + rstn_i : in std_ulogic; -- global reset, low-active, asynchronous + -- register interface -- + we_i : in std_ulogic; -- write data when high + re_i : in std_ulogic; -- read data has been consumed by the debugger when high + wdata_i : in std_ulogic_vector(31 downto 0); -- write data (from debugger) + rdata_o : out std_ulogic_vector(31 downto 0); -- read data (to debugger) + -- status -- + enable_i : in std_ulogic; -- authenticator enabled when high; reset & clear authentication when low + busy_o : out std_ulogic; -- authenticator is busy when high; no further read/write accesses + unlocked_o : out std_ulogic -- high when authentication passed; unlocks the on-chip debugger + ); +end neorv32_debug_auth; + +architecture neorv32_debug_auth_rtl of neorv32_debug_auth is + + signal authenticated : std_ulogic; + +begin + + -- Warn about Default Authenticator ------------------------------------------------------- + -- ------------------------------------------------------------------------------------------- + assert false report "[NEORV32] OCD: using DEFAULT authenticator. Replace by custom module." severity warning; + + + -- Exemplary Authentication Mechanism ----------------------------------------------------- + -- ------------------------------------------------------------------------------------------- + dm_controller: process(rstn_i, clk_i) + begin + if (rstn_i = '0') then + authenticated <= '0'; + elsif rising_edge(clk_i) then + if (enable_i = '0') then + authenticated <= '0'; -- clear authentication when disabled + elsif (we_i = '1') then + authenticated <= wdata_i(0); -- just write a 1 to authenticate + end if; + end if; + end process dm_controller; + + -- authenticator busy -- + busy_o <= '0'; -- this simple authenticator is always ready + + -- authentication passed -- + unlocked_o <= authenticated; + + -- read data -- + rdata_o <= (others => '0'); -- there is nothing to read here + + +end neorv32_debug_auth_rtl; diff --git a/rtl/file_list_soc.f b/rtl/file_list_soc.f index 08b0bfd87..88cf13f91 100644 --- a/rtl/file_list_soc.f +++ b/rtl/file_list_soc.f @@ -42,6 +42,7 @@ NEORV32_RTL_PATH_PLACEHOLDER/core/neorv32_crc.vhd NEORV32_RTL_PATH_PLACEHOLDER/core/neorv32_sysinfo.vhd NEORV32_RTL_PATH_PLACEHOLDER/core/neorv32_debug_dtm.vhd +NEORV32_RTL_PATH_PLACEHOLDER/core/neorv32_debug_auth.vhd NEORV32_RTL_PATH_PLACEHOLDER/core/neorv32_debug_dm.vhd NEORV32_RTL_PATH_PLACEHOLDER/core/neorv32_top.vhd NEORV32_RTL_PATH_PLACEHOLDER/core/neorv32_application_image.vhd From b14ea49ea143a2504f0aee0c35c188520dff5d44 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 12:37:30 +0200 Subject: [PATCH 05/19] :warning: [top] rework OCD generics --- docs/datasheet/cpu.adoc | 4 +- docs/datasheet/soc.adoc | 5 +- rtl/core/neorv32_package.vhd | 9 ++-- rtl/core/neorv32_top.vhd | 88 +++++++++++++++++--------------- sim/neorv32_tb.vhd | 5 +- sim/simple/neorv32_tb.simple.vhd | 5 +- 6 files changed, 62 insertions(+), 54 deletions(-) diff --git a/docs/datasheet/cpu.adoc b/docs/datasheet/cpu.adoc index 5f094f2f8..7ddcfd43e 100644 --- a/docs/datasheet/cpu.adoc +++ b/docs/datasheet/cpu.adoc @@ -455,8 +455,8 @@ This chapter gives a brief overview of all available ISA extensions. | <<_zmmul_isa_extension,`Zmmul`>> | Integer multiplication-only instructions | <<_processor_top_entity_generics, `RISCV_ISA_Zmmul`>> | <<_zxcfu_isa_extension,`Zcfu`>> | Custom / user-defined instructions | <<_processor_top_entity_generics, `RISCV_ISA_Zxcfu`>> | <<_smpmp_isa_extension,`Smpmp`>> | Physical memory protection (PMP) extension | <<_processor_top_entity_generics, `RISCV_ISA_Smpmp`>> -| <<_sdext_isa_extension,`Sdext`>> | External debug support extension | <<_processor_top_entity_generics, `ON_CHIP_DEBUGGER_EN`>> -| <<_sdtrig_isa_extension,`Sdtrig`>> | Trigger module extension | <<_processor_top_entity_generics, `ON_CHIP_DEBUGGER_EN`>> +| <<_sdext_isa_extension,`Sdext`>> | External debug support extension | <<_processor_top_entity_generics, `OCD_EN`>> +| <<_sdtrig_isa_extension,`Sdtrig`>> | Trigger module extension | <<_processor_top_entity_generics, `OCD_EN`>> |======================= .RISC-V ISA Specification diff --git a/docs/datasheet/soc.adoc b/docs/datasheet/soc.adoc index 8a3f75fe9..d27798733 100644 --- a/docs/datasheet/soc.adoc +++ b/docs/datasheet/soc.adoc @@ -209,8 +209,9 @@ The generic type "`suv(x:y)`" is an abbreviation for "`std_ulogic_vector(x downt | `HART_ID` | suv(31:0) | 0x00000000 | The hart thread ID of the CPU (passed to <<_mhartid>> CSR). | `JEDEC_ID` | suv(10:0) | 0b00000000000 | JEDEC ID; continuation codes plus vendor ID (passed to <<_mvendorid>> CSR and to the <<_debug_transport_module_dtm>>). 4+^| **<<_on_chip_debugger_ocd>>** -| `ON_CHIP_DEBUGGER_EN` | boolean | false | Implement the on-chip debugger and the CPU debug mode. -| `DM_LEGACY_MODE` | boolean | false | Debug module spec. version: `false` = v1.0, `true` = v0.13 (legacy mode). +| `OCD_EN` | boolean | false | Implement the on-chip debugger and the CPU debug mode. +| `OCD_DM_LEGACY_MODE` | boolean | false | Debug module spec. version: `false` = v1.0, `true` = v0.13 (legacy mode). +| `OCD_AUTHENTICATION` | boolean | false | Implement on-chip debugger authentication <<_debug_authentication>> module. 4+^| **CPU <<_instruction_sets_and_extensions>>** | `RISCV_ISA_C` | boolean | false | Enable <<_c_isa_extension>> (compressed instructions). | `RISCV_ISA_E` | boolean | false | Enable <<_e_isa_extension>> (reduced register file size). diff --git a/rtl/core/neorv32_package.vhd b/rtl/core/neorv32_package.vhd index bbd4de943..b4f897477 100644 --- a/rtl/core/neorv32_package.vhd +++ b/rtl/core/neorv32_package.vhd @@ -29,7 +29,7 @@ package neorv32_package is -- Architecture Constants ----------------------------------------------------------------- -- ------------------------------------------------------------------------------------------- - constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01100504"; -- hardware version + constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01100505"; -- hardware version constant archid_c : natural := 19; -- official RISC-V architecture ID constant XLEN : natural := 32; -- native data path width @@ -674,8 +674,9 @@ package neorv32_package is JEDEC_ID : std_ulogic_vector(10 downto 0) := "00000000000"; INT_BOOTLOADER_EN : boolean := false; -- On-Chip Debugger (OCD) -- - ON_CHIP_DEBUGGER_EN : boolean := false; - DM_LEGACY_MODE : boolean := false; + OCD_EN : boolean := false; + OCD_DM_LEGACY_MODE : boolean := false; + OCD_AUTHENTICATION : boolean := false; -- RISC-V CPU Extensions -- RISCV_ISA_C : boolean := false; RISCV_ISA_E : boolean := false; @@ -777,7 +778,7 @@ package neorv32_package is -- Global control -- clk_i : in std_ulogic; rstn_i : in std_ulogic; - -- JTAG on-chip debugger interface -- + -- JTAG on-chip debugger interface (available if OCD_EN = true) -- jtag_tck_i : in std_ulogic := 'L'; jtag_tdi_i : in std_ulogic := 'L'; jtag_tdo_o : out std_ulogic; diff --git a/rtl/core/neorv32_top.vhd b/rtl/core/neorv32_top.vhd index 77aa14e64..1ed91cb4c 100644 --- a/rtl/core/neorv32_top.vhd +++ b/rtl/core/neorv32_top.vhd @@ -29,8 +29,9 @@ entity neorv32_top is INT_BOOTLOADER_EN : boolean := false; -- boot configuration: true = boot explicit bootloader; false = boot from int/ext (I)MEM -- On-Chip Debugger (OCD) -- - ON_CHIP_DEBUGGER_EN : boolean := false; -- implement on-chip debugger - DM_LEGACY_MODE : boolean := false; -- debug module spec version: false = v1.0, true = v0.13 + OCD_EN : boolean := false; -- implement on-chip debugger + OCD_DM_LEGACY_MODE : boolean := false; -- debug module spec version: false = v1.0, true = v0.13 + OCD_AUTHENTICATION : boolean := false; -- implement on-chip debugger authentication -- RISC-V CPU Extensions -- RISCV_ISA_C : boolean := false; -- implement compressed extension @@ -145,7 +146,7 @@ entity neorv32_top is clk_i : in std_ulogic; -- global clock, rising edge rstn_i : in std_ulogic; -- global reset, low-active, async - -- JTAG on-chip debugger interface (available if ON_CHIP_DEBUGGER_EN = true) -- + -- JTAG on-chip debugger interface (available if OCD_EN = true) -- jtag_tck_i : in std_ulogic := 'L'; -- serial clock jtag_tdi_i : in std_ulogic := 'L'; -- serial data input jtag_tdo_o : out std_ulogic; -- serial data output @@ -358,7 +359,8 @@ begin cond_sel_string_f(IO_SLINK_EN, "SLINK ", "") & cond_sel_string_f(IO_CRC_EN, "CRC ", "") & cond_sel_string_f(io_sysinfo_en_c, "SYSINFO ", "") & - cond_sel_string_f(ON_CHIP_DEBUGGER_EN, "OCD ", "") & + cond_sel_string_f(OCD_EN, "OCD ", "") & + cond_sel_string_f(OCD_AUTHENTICATION, "OCD-AUTH ", "") & "" severity note; @@ -479,8 +481,8 @@ begin RISCV_ISA_Zksh => RISCV_ISA_Zksh, RISCV_ISA_Zmmul => RISCV_ISA_Zmmul, RISCV_ISA_Zxcfu => RISCV_ISA_Zxcfu, - RISCV_ISA_Sdext => ON_CHIP_DEBUGGER_EN, - RISCV_ISA_Sdtrig => ON_CHIP_DEBUGGER_EN, + RISCV_ISA_Sdext => OCD_EN, + RISCV_ISA_Sdtrig => OCD_EN, RISCV_ISA_Smpmp => cpu_smpmp_c, -- Tuning Options -- FAST_MUL_EN => FAST_MUL_EN, @@ -975,38 +977,38 @@ begin neorv32_bus_io_switch_inst: entity neorv32.neorv32_bus_io_switch generic map ( DEV_SIZE => iodev_size_c, -- size of a single IO device - DEV_00_EN => ON_CHIP_DEBUGGER_EN, DEV_00_BASE => base_io_dm_c, - DEV_01_EN => io_sysinfo_en_c, DEV_01_BASE => base_io_sysinfo_c, - DEV_02_EN => IO_NEOLED_EN, DEV_02_BASE => base_io_neoled_c, - DEV_03_EN => io_gpio_en_c, DEV_03_BASE => base_io_gpio_c, - DEV_04_EN => IO_WDT_EN, DEV_04_BASE => base_io_wdt_c, - DEV_05_EN => IO_TRNG_EN, DEV_05_BASE => base_io_trng_c, - DEV_06_EN => IO_TWI_EN, DEV_06_BASE => base_io_twi_c, - DEV_07_EN => IO_SPI_EN, DEV_07_BASE => base_io_spi_c, - DEV_08_EN => IO_SDI_EN, DEV_08_BASE => base_io_sdi_c, - DEV_09_EN => IO_UART1_EN, DEV_09_BASE => base_io_uart1_c, - DEV_10_EN => IO_UART0_EN, DEV_10_BASE => base_io_uart0_c, - DEV_11_EN => IO_MTIME_EN, DEV_11_BASE => base_io_mtime_c, - DEV_12_EN => io_xirq_en_c, DEV_12_BASE => base_io_xirq_c, - DEV_13_EN => IO_ONEWIRE_EN, DEV_13_BASE => base_io_onewire_c, - DEV_14_EN => IO_GPTMR_EN, DEV_14_BASE => base_io_gptmr_c, - DEV_15_EN => io_pwm_en_c, DEV_15_BASE => base_io_pwm_c, - DEV_16_EN => XIP_EN, DEV_16_BASE => base_io_xip_c, - DEV_17_EN => IO_CRC_EN, DEV_17_BASE => base_io_crc_c, - DEV_18_EN => IO_DMA_EN, DEV_18_BASE => base_io_dma_c, - DEV_19_EN => IO_SLINK_EN, DEV_19_BASE => base_io_slink_c, - DEV_20_EN => IO_CFS_EN, DEV_20_BASE => base_io_cfs_c, - DEV_21_EN => false, DEV_31_BASE => (others => '0'), -- reserved - DEV_22_EN => false, DEV_30_BASE => (others => '0'), -- reserved - DEV_23_EN => false, DEV_29_BASE => (others => '0'), -- reserved - DEV_24_EN => false, DEV_28_BASE => (others => '0'), -- reserved - DEV_25_EN => false, DEV_27_BASE => (others => '0'), -- reserved - DEV_26_EN => false, DEV_26_BASE => (others => '0'), -- reserved - DEV_27_EN => false, DEV_25_BASE => (others => '0'), -- reserved - DEV_28_EN => false, DEV_24_BASE => (others => '0'), -- reserved - DEV_29_EN => false, DEV_23_BASE => (others => '0'), -- reserved - DEV_30_EN => false, DEV_22_BASE => (others => '0'), -- reserved - DEV_31_EN => false, DEV_21_BASE => (others => '0') -- reserved + DEV_00_EN => OCD_EN, DEV_00_BASE => base_io_dm_c, + DEV_01_EN => io_sysinfo_en_c, DEV_01_BASE => base_io_sysinfo_c, + DEV_02_EN => IO_NEOLED_EN, DEV_02_BASE => base_io_neoled_c, + DEV_03_EN => io_gpio_en_c, DEV_03_BASE => base_io_gpio_c, + DEV_04_EN => IO_WDT_EN, DEV_04_BASE => base_io_wdt_c, + DEV_05_EN => IO_TRNG_EN, DEV_05_BASE => base_io_trng_c, + DEV_06_EN => IO_TWI_EN, DEV_06_BASE => base_io_twi_c, + DEV_07_EN => IO_SPI_EN, DEV_07_BASE => base_io_spi_c, + DEV_08_EN => IO_SDI_EN, DEV_08_BASE => base_io_sdi_c, + DEV_09_EN => IO_UART1_EN, DEV_09_BASE => base_io_uart1_c, + DEV_10_EN => IO_UART0_EN, DEV_10_BASE => base_io_uart0_c, + DEV_11_EN => IO_MTIME_EN, DEV_11_BASE => base_io_mtime_c, + DEV_12_EN => io_xirq_en_c, DEV_12_BASE => base_io_xirq_c, + DEV_13_EN => IO_ONEWIRE_EN, DEV_13_BASE => base_io_onewire_c, + DEV_14_EN => IO_GPTMR_EN, DEV_14_BASE => base_io_gptmr_c, + DEV_15_EN => io_pwm_en_c, DEV_15_BASE => base_io_pwm_c, + DEV_16_EN => XIP_EN, DEV_16_BASE => base_io_xip_c, + DEV_17_EN => IO_CRC_EN, DEV_17_BASE => base_io_crc_c, + DEV_18_EN => IO_DMA_EN, DEV_18_BASE => base_io_dma_c, + DEV_19_EN => IO_SLINK_EN, DEV_19_BASE => base_io_slink_c, + DEV_20_EN => IO_CFS_EN, DEV_20_BASE => base_io_cfs_c, + DEV_21_EN => false, DEV_31_BASE => (others => '0'), -- reserved + DEV_22_EN => false, DEV_30_BASE => (others => '0'), -- reserved + DEV_23_EN => false, DEV_29_BASE => (others => '0'), -- reserved + DEV_24_EN => false, DEV_28_BASE => (others => '0'), -- reserved + DEV_25_EN => false, DEV_27_BASE => (others => '0'), -- reserved + DEV_26_EN => false, DEV_26_BASE => (others => '0'), -- reserved + DEV_27_EN => false, DEV_25_BASE => (others => '0'), -- reserved + DEV_28_EN => false, DEV_24_BASE => (others => '0'), -- reserved + DEV_29_EN => false, DEV_23_BASE => (others => '0'), -- reserved + DEV_30_EN => false, DEV_22_BASE => (others => '0'), -- reserved + DEV_31_EN => false, DEV_21_BASE => (others => '0') -- reserved ) port map ( clk_i => clk_i, @@ -1570,7 +1572,8 @@ begin XIP_CACHE_EN => XIP_CACHE_EN, XIP_CACHE_NUM_BLOCKS => XIP_CACHE_NUM_BLOCKS, XIP_CACHE_BLOCK_SIZE => XIP_CACHE_BLOCK_SIZE, - ON_CHIP_DEBUGGER_EN => ON_CHIP_DEBUGGER_EN, + ON_CHIP_DEBUGGER_EN => OCD_EN, + OCD_AUTHENTICATION => OCD_AUTHENTICATION, IO_GPIO_EN => io_gpio_en_c, IO_MTIME_EN => IO_MTIME_EN, IO_UART0_EN => IO_UART0_EN, @@ -1611,7 +1614,7 @@ begin -- On-Chip Debugger Complex -- ************************************************************************************************************************** neorv32_ocd_inst_true: - if ON_CHIP_DEBUGGER_EN generate + if OCD_EN generate -- On-Chip Debugger - Debug Transport Module (DTM) ---------------------------------------- -- ------------------------------------------------------------------------------------------- @@ -1637,7 +1640,8 @@ begin neorv32_debug_dm_inst: entity neorv32.neorv32_debug_dm generic map ( CPU_BASE_ADDR => base_io_dm_c, - LEGACY_MODE => DM_LEGACY_MODE + LEGACY_MODE => OCD_DM_LEGACY_MODE, + AUTHENTICATOR => OCD_AUTHENTICATION ) port map ( clk_i => clk_i, @@ -1654,7 +1658,7 @@ begin end generate; neorv32_debug_ocd_inst_false: - if not ON_CHIP_DEBUGGER_EN generate + if not OCD_EN generate iodev_rsp(IODEV_OCD) <= rsp_terminate_c; jtag_tdo_o <= jtag_tdi_i; -- JTAG pass-through dci_ndmrstn <= '1'; diff --git a/sim/neorv32_tb.vhd b/sim/neorv32_tb.vhd index 54aad0aa7..1df4e6e5b 100644 --- a/sim/neorv32_tb.vhd +++ b/sim/neorv32_tb.vhd @@ -198,7 +198,8 @@ begin JEDEC_ID => "00000000000", -- vendor's JEDEC ID INT_BOOTLOADER_EN => false, -- boot configuration: true = boot explicit bootloader; false = boot from int/ext (I)MEM -- On-Chip Debugger (OCD) -- - ON_CHIP_DEBUGGER_EN => true, -- implement on-chip debugger + OCD_EN => true, -- implement on-chip debugger + OCD_AUTHENTICATION => true, -- implement on-chip debugger authentication -- RISC-V CPU Extensions -- RISCV_ISA_C => true, -- implement compressed extension? RISCV_ISA_E => false, -- implement embedded RF extension? @@ -295,7 +296,7 @@ begin -- Global control -- clk_i => clk_gen, -- global clock, rising edge rstn_i => rst_gen, -- global reset, low-active, async - -- JTAG on-chip debugger interface (available if ON_CHIP_DEBUGGER_EN = true) -- + -- JTAG on-chip debugger interface (available if OCD_EN = true) -- jtag_tck_i => '0', -- serial clock jtag_tdi_i => '0', -- serial data input jtag_tdo_o => open, -- serial data output diff --git a/sim/simple/neorv32_tb.simple.vhd b/sim/simple/neorv32_tb.simple.vhd index c1c83e7f3..af687239f 100644 --- a/sim/simple/neorv32_tb.simple.vhd +++ b/sim/simple/neorv32_tb.simple.vhd @@ -170,7 +170,8 @@ begin JEDEC_ID => "00000000000", -- vendor's JEDEC ID INT_BOOTLOADER_EN => false, -- boot configuration: true = boot explicit bootloader; false = boot from int/ext (I)MEM -- On-Chip Debugger (OCD) -- - ON_CHIP_DEBUGGER_EN => true, -- implement on-chip debugger + OCD_EN => true, -- implement on-chip debugger + OCD_AUTHENTICATION => true, -- implement on-chip debugger authentication -- RISC-V CPU Extensions -- RISCV_ISA_C => false, -- implement compressed extension? RISCV_ISA_E => false, -- implement embedded RF extension? @@ -271,7 +272,7 @@ begin -- Global control -- clk_i => clk_gen, -- global clock, rising edge rstn_i => rst_gen, -- global reset, low-active, async - -- JTAG on-chip debugger interface (available if ON_CHIP_DEBUGGER_EN = true) -- + -- JTAG on-chip debugger interface (available if OCD_EN = true) -- jtag_tck_i => '0', -- serial clock jtag_tdi_i => '0', -- serial data input jtag_tdo_o => open, -- serial data output From 9f11fbe3af6885750f8a6e6a66b6a0a64fdb0571 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 12:37:56 +0200 Subject: [PATCH 06/19] [changelog] add v1.10.5.5 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e034e7b3..ff1cdc94a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ mimpid = 0x01040312 -> Version 01.04.03.12 -> v1.4.3.12 | Date | Version | Comment | Ticket | |:----:|:-------:|:--------|:------:| +| 11.10.2024 | 1.10.5.5 | :sparkles: :lock: add optional support for on-chip debugger authentication; :warning: rename OCD-related top generics | [#](https://github.com/stnolting/neorv32/pull/1053) | | 06.10.2024 | 1.10.5.4 | :warning: rework PWM module | [#1049](https://github.com/stnolting/neorv32/pull/1049) | | 05.10.2024 | 1.10.5.3 | upgrade neoTRNG to version 3.2 | [#1048](https://github.com/stnolting/neorv32/pull/1048) | | 03.10.2024 | 1.10.5.2 | :warning: remove `A` ISA extensions; replaced by new `Zalrsc` ISA extension | [#1047](https://github.com/stnolting/neorv32/pull/1047) | From db35d0da652239a0d0a48b23661519b3fab0848c Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 12:38:32 +0200 Subject: [PATCH 07/19] [rtl] update wrapper generics --- rtl/system_integration/neorv32_litex_core_complex.vhd | 2 +- rtl/test_setups/neorv32_test_setup_on_chip_debugger.vhd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rtl/system_integration/neorv32_litex_core_complex.vhd b/rtl/system_integration/neorv32_litex_core_complex.vhd index 1f978da26..a038addca 100644 --- a/rtl/system_integration/neorv32_litex_core_complex.vhd +++ b/rtl/system_integration/neorv32_litex_core_complex.vhd @@ -122,7 +122,7 @@ begin HART_ID => hart_id_c, -- hardware thread ID JEDEC_ID => jedec_id_c, -- vendor's JEDEC ID -- On-Chip Debugger (OCD) -- - ON_CHIP_DEBUGGER_EN => DEBUG, -- implement on-chip debugger + OCD_EN => DEBUG, -- implement on-chip debugger -- RISC-V CPU Extensions -- RISCV_ISA_C => configs_c.riscv_c(CONFIG), -- implement compressed extension? RISCV_ISA_M => configs_c.riscv_m(CONFIG), -- implement mul/div extension? diff --git a/rtl/test_setups/neorv32_test_setup_on_chip_debugger.vhd b/rtl/test_setups/neorv32_test_setup_on_chip_debugger.vhd index 96c62d8e4..8bf4c2999 100644 --- a/rtl/test_setups/neorv32_test_setup_on_chip_debugger.vhd +++ b/rtl/test_setups/neorv32_test_setup_on_chip_debugger.vhd @@ -53,7 +53,7 @@ begin CLOCK_FREQUENCY => CLOCK_FREQUENCY, -- clock frequency of clk_i in Hz INT_BOOTLOADER_EN => true, -- boot configuration: true = boot explicit bootloader; false = boot from int/ext (I)MEM -- On-Chip Debugger (OCD) -- - ON_CHIP_DEBUGGER_EN => true, -- implement on-chip debugger + OCD_EN => true, -- implement on-chip debugger -- RISC-V CPU Extensions -- RISCV_ISA_C => true, -- implement compressed extension? RISCV_ISA_M => true, -- implement mul/div extension? From e7492a6ca256ec419aac7986b55ee5bcb15270fc Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 13:08:27 +0200 Subject: [PATCH 08/19] [vivado_ip] update generics plus minor cleanups --- rtl/system_integration/neorv32_vivado_ip.tcl | 66 ++++++++++---------- rtl/system_integration/neorv32_vivado_ip.vhd | 12 ++-- 2 files changed, 40 insertions(+), 38 deletions(-) diff --git a/rtl/system_integration/neorv32_vivado_ip.tcl b/rtl/system_integration/neorv32_vivado_ip.tcl index 065cba873..ec7df9feb 100644 --- a/rtl/system_integration/neorv32_vivado_ip.tcl +++ b/rtl/system_integration/neorv32_vivado_ip.tcl @@ -70,24 +70,22 @@ set_property description "The NEORV32 RISC-V Processor" [ipx::current_core] # ************************************************************** # Set configuration dependencies: Interfaces # ************************************************************** -set_property enablement_dependency {$axi4_stream_en = true} [ipx::get_ports s0_axis_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$axi4_stream_en = true} [ipx::get_ports s1_axis_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$on_chip_debugger_en = true} [ipx::get_ports jtag_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$xip_en = true} [ipx::get_ports xip_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_gpio_en = true} [ipx::get_ports gpio_i -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_gpio_en = true} [ipx::get_ports gpio_o -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_uart0_en = true} [ipx::get_ports uart0_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_uart1_en = true} [ipx::get_ports uart1_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_spi_en = true} [ipx::get_ports spi_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_sdi_en = true} [ipx::get_ports sdi_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_twi_en = true} [ipx::get_ports twi_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_onewire_en = true} [ipx::get_ports onewire_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_pwm_en = true} [ipx::get_ports pwm_o -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_cfs_en = true} [ipx::get_ports cfs_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_neoled_en = true} [ipx::get_ports neoled_o -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_mtime_en = true} [ipx::get_ports mtime_time_o -of_objects [ipx::current_core]] -set_property enablement_dependency {$xirq_en = true} [ipx::get_ports xirq_i -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_mtime_en = false} [ipx::get_ports mtime_irq_i -of_objects [ipx::current_core]] +set_property enablement_dependency {$axi4_stream_en = true} [ipx::get_ports s0_axis_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$axi4_stream_en = true} [ipx::get_ports s1_axis_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$ocd_en = true} [ipx::get_ports jtag_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$xip_en = true} [ipx::get_ports xip_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_gpio_en = true} [ipx::get_ports gpio_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_uart0_en = true} [ipx::get_ports uart0_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_uart1_en = true} [ipx::get_ports uart1_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_spi_en = true} [ipx::get_ports spi_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_sdi_en = true} [ipx::get_ports sdi_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_twi_en = true} [ipx::get_ports twi_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_onewire_en = true} [ipx::get_ports onewire_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_pwm_en = true} [ipx::get_ports pwm_o -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_cfs_en = true} [ipx::get_ports cfs_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_neoled_en = true} [ipx::get_ports neoled_o -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_mtime_en = true} [ipx::get_ports mtime_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$xirq_en = true} [ipx::get_ports xirq_i -of_objects [ipx::current_core]] # ************************************************************** @@ -99,17 +97,18 @@ set_property display_name {HART ID} set_property tooltip {For mhartid CSR} [ipgui::get_guiparamspec -name "HART_ID" -component [ipx::current_core]] set_property display_name {JEDEC ID} [ipgui::get_guiparamspec -name "JEDEC_ID" -component [ipx::current_core]] set_property tooltip {For JTAG tap identification and mvendorid CSR} [ipgui::get_guiparamspec -name "JEDEC_ID" -component [ipx::current_core]] -set_property display_name {On-Chip Debugger} [ipgui::get_guiparamspec -name "ON_CHIP_DEBUGGER_EN" -component [ipx::current_core]] +set_property display_name {RISC-V on-chip debugger} [ipgui::get_guiparamspec -name "OCD_EN" -component [ipx::current_core]] +set_property display_name {RISC-V on-chip debugger authentication} [ipgui::get_guiparamspec -name "OCD_AUTHENTICATION" -component [ipx::current_core]] set_property display_name {AXI4-Lite (XBUS) timeout} [ipgui::get_guiparamspec -name "XBUS_TIMEOUT" -component [ipx::current_core]] set_property tooltip {Max number of clock cycles before AXI access times out} [ipgui::get_guiparamspec -name "XBUS_TIMEOUT" -component [ipx::current_core]] -set_property display_name {AXI4-Lite cache (XBUS)} [ipgui::get_guiparamspec -name "XBUS_CACHE_EN" -component [ipx::current_core]] -set_property display_name {AXI4-Lite cache (XBUS) number of blocks} [ipgui::get_guiparamspec -name "XBUS_CACHE_NUM_BLOCKS" -component [ipx::current_core]] -set_property display_name {AXI4-Lite cache (XBUS) block size} [ipgui::get_guiparamspec -name "XBUS_CACHE_BLOCK_SIZE" -component [ipx::current_core]] +set_property display_name {AXI4-Lite (XBUS) cache} [ipgui::get_guiparamspec -name "XBUS_CACHE_EN" -component [ipx::current_core]] +set_property display_name {AXI4-Lite (XBUS) cache number of blocks} [ipgui::get_guiparamspec -name "XBUS_CACHE_NUM_BLOCKS" -component [ipx::current_core]] +set_property display_name {AXI4-Lite (XBUS) cache block size} [ipgui::get_guiparamspec -name "XBUS_CACHE_BLOCK_SIZE" -component [ipx::current_core]] set_property tooltip {In bytes (use a power of two)} [ipgui::get_guiparamspec -name "XBUS_CACHE_BLOCK_SIZE" -component [ipx::current_core]] -set_property display_name {AXI4-Stream source and sink} [ipgui::get_guiparamspec -name "AXI4_STREAM_EN" -component [ipx::current_core]] -set_property display_name {AXI4-Stream input FIFO depth} [ipgui::get_guiparamspec -name "IO_SLINK_RX_FIFO" -component [ipx::current_core]] +set_property display_name {AXI4-Stream (SLINK) source and sink} [ipgui::get_guiparamspec -name "AXI4_STREAM_EN" -component [ipx::current_core]] +set_property display_name {AXI4-Stream (SLINK) input FIFO depth} [ipgui::get_guiparamspec -name "IO_SLINK_RX_FIFO" -component [ipx::current_core]] set_property tooltip {Number of entries (use a power of two)} [ipgui::get_guiparamspec -name "IO_SLINK_RX_FIFO" -component [ipx::current_core]] -set_property display_name {AXI4-Stream output FIFO depth} [ipgui::get_guiparamspec -name "IO_SLINK_TX_FIFO" -component [ipx::current_core]] +set_property display_name {AXI4-Stream (SLINK) output FIFO depth} [ipgui::get_guiparamspec -name "IO_SLINK_TX_FIFO" -component [ipx::current_core]] set_property tooltip {Number of entries (use a power of two)} [ipgui::get_guiparamspec -name "IO_SLINK_TX_FIFO" -component [ipx::current_core]] ipgui::add_group -name {General} -component [ipx::current_core] -parent [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core]] -display_name {General} @@ -117,14 +116,15 @@ ipgui::move_group -component [ipx::current_core] -order 0 [ipgui::get_groupspec ipgui::move_param -component [ipx::current_core] -order 0 [ipgui::get_guiparamspec -name "CLOCK_FREQUENCY" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] ipgui::move_param -component [ipx::current_core] -order 1 [ipgui::get_guiparamspec -name "HART_ID" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] ipgui::move_param -component [ipx::current_core] -order 2 [ipgui::get_guiparamspec -name "JEDEC_ID" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] -ipgui::move_param -component [ipx::current_core] -order 3 [ipgui::get_guiparamspec -name "ON_CHIP_DEBUGGER_EN" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] -ipgui::move_param -component [ipx::current_core] -order 4 [ipgui::get_guiparamspec -name "XBUS_TIMEOUT" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] -ipgui::move_param -component [ipx::current_core] -order 5 [ipgui::get_guiparamspec -name "XBUS_CACHE_EN" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] -ipgui::move_param -component [ipx::current_core] -order 6 [ipgui::get_guiparamspec -name "XBUS_CACHE_NUM_BLOCKS" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] -ipgui::move_param -component [ipx::current_core] -order 7 [ipgui::get_guiparamspec -name "XBUS_CACHE_BLOCK_SIZE" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] -ipgui::move_param -component [ipx::current_core] -order 8 [ipgui::get_guiparamspec -name "AXI4_STREAM_EN" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] -ipgui::move_param -component [ipx::current_core] -order 9 [ipgui::get_guiparamspec -name "IO_SLINK_RX_FIFO" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] -ipgui::move_param -component [ipx::current_core] -order 10 [ipgui::get_guiparamspec -name "IO_SLINK_TX_FIFO" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] +ipgui::move_param -component [ipx::current_core] -order 3 [ipgui::get_guiparamspec -name "OCD_EN" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] +ipgui::move_param -component [ipx::current_core] -order 4 [ipgui::get_guiparamspec -name "OCD_AUTHENTICATION" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] +ipgui::move_param -component [ipx::current_core] -order 5 [ipgui::get_guiparamspec -name "XBUS_TIMEOUT" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] +ipgui::move_param -component [ipx::current_core] -order 6 [ipgui::get_guiparamspec -name "XBUS_CACHE_EN" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] +ipgui::move_param -component [ipx::current_core] -order 7 [ipgui::get_guiparamspec -name "XBUS_CACHE_NUM_BLOCKS" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] +ipgui::move_param -component [ipx::current_core] -order 8 [ipgui::get_guiparamspec -name "XBUS_CACHE_BLOCK_SIZE" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] +ipgui::move_param -component [ipx::current_core] -order 9 [ipgui::get_guiparamspec -name "AXI4_STREAM_EN" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] +ipgui::move_param -component [ipx::current_core] -order 10 [ipgui::get_guiparamspec -name "IO_SLINK_RX_FIFO" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] +ipgui::move_param -component [ipx::current_core] -order 11 [ipgui::get_guiparamspec -name "IO_SLINK_TX_FIFO" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "General" -component [ipx::current_core]] # ************************************************************** diff --git a/rtl/system_integration/neorv32_vivado_ip.vhd b/rtl/system_integration/neorv32_vivado_ip.vhd index d0a94e9e3..39bfdfd04 100644 --- a/rtl/system_integration/neorv32_vivado_ip.vhd +++ b/rtl/system_integration/neorv32_vivado_ip.vhd @@ -33,7 +33,8 @@ entity neorv32_vivado_ip is JEDEC_ID : std_logic_vector(10 downto 0) := "00000000000"; INT_BOOTLOADER_EN : boolean := false; -- On-Chip Debugger (OCD) -- - ON_CHIP_DEBUGGER_EN : boolean := false; + OCD_EN : boolean := false; + OCD_AUTHENTICATION : boolean := false; -- RISC-V CPU Extensions -- RISCV_ISA_C : boolean := false; RISCV_ISA_E : boolean := false; @@ -185,7 +186,7 @@ entity neorv32_vivado_ip is s1_axis_tdata : in std_logic_vector(31 downto 0) := x"00000000"; s1_axis_tlast : in std_logic := '0'; -- ------------------------------------------------------------ - -- JTAG on-chip debugger interface (available if ON_CHIP_DEBUGGER_EN = true) + -- JTAG on-chip debugger interface (available if OCD_EN = true) -- ------------------------------------------------------------ jtag_tck_i : in std_logic := '0'; jtag_tdi_i : in std_logic := '0'; @@ -307,8 +308,9 @@ begin JEDEC_ID => std_ulogic_vector(JEDEC_ID), INT_BOOTLOADER_EN => INT_BOOTLOADER_EN, -- On-Chip Debugger -- - ON_CHIP_DEBUGGER_EN => ON_CHIP_DEBUGGER_EN, - DM_LEGACY_MODE => false, + OCD_EN => OCD_EN, + OCD_DM_LEGACY_MODE => false, + OCD_AUTHENTICATION => OCD_AUTHENTICATION, -- RISC-V CPU Extensions -- RISCV_ISA_C => RISCV_ISA_C, RISCV_ISA_E => RISCV_ISA_E, @@ -409,7 +411,7 @@ begin -- Global control -- clk_i => std_ulogic(clk), rstn_i => std_ulogic(resetn), - -- JTAG on-chip debugger interface (available if ON_CHIP_DEBUGGER_EN = true) -- + -- JTAG on-chip debugger interface (available if OCD_EN = true) -- jtag_tck_i => std_ulogic(jtag_tck_i), jtag_tdi_i => std_ulogic(jtag_tdi_i), jtag_tdo_o => jtag_tdo_aux, From 1789e3dcbf738d7c5f3cda90ae6d2204b4f5a378 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 14:05:08 +0200 Subject: [PATCH 09/19] [docs] clean up entire OCD chapter --- docs/datasheet/on_chip_debugger.adoc | 383 ++++++++++++++------------- 1 file changed, 197 insertions(+), 186 deletions(-) diff --git a/docs/datasheet/on_chip_debugger.adoc b/docs/datasheet/on_chip_debugger.adoc index d13f07233..ebffd03f6 100644 --- a/docs/datasheet/on_chip_debugger.adoc +++ b/docs/datasheet/on_chip_debugger.adoc @@ -3,69 +3,64 @@ == On-Chip Debugger (OCD) The NEORV32 Processor features an _on-chip debugger_ (OCD) implementing the **execution-based debugging** scheme -compatible to the **Minimal RISC-V Debug Specification**. A copy of the specification is -available in `docs/references`. +compatible to the **Minimal RISC-V Debug Specification**. A copy of the specification is available in `docs/references`. +The on-chip debugger is implemented via the <<_processor_top_entity_generics, `OCD_EN`>> processor top generic. **Key Features** -* standard JTAG access port +* standard 4-wire JTAG access port * full control of the CPU: halting, single-stepping and resuming -* indirect access to all core registers (via program buffer) -* indirect access to the whole processor address space (via program buffer) -* trigger module for hardware breakpoints +* indirect access to all core registers and the entire processor address space (via program buffer) * compatible with upstream OpenOCD and GDB +* optional trigger module for hardware breakpoints +* optional authentication for increased security -**Section Structure** +.Hands-On Tutorial +[TIP] +A simple example on how to use NEORV32 on-chip debugger in combination with OpenOCD and the GNU debugger is shown in +section https://stnolting.github.io/neorv32/ug/#_debugging_using_the_on_chip_debugger[Debugging using the On-Chip Debugger] +of the User Guide. -This chapter is separated into four sections: +**Section Structure** * <<_debug_transport_module_dtm>> * <<_debug_module_dm>> +* <<_debug_authentication>> * <<_cpu_debug_mode>> * <<_trigger_module>> -.GDB + SVD -[TIP] -Together with a third-party plugin the processor's SVD file can be imported right into GDB to allow comfortable -debugging of peripheral/IO devices (see https://github.com/stnolting/neorv32/discussions/656). - -.Hands-On Tutorial -[TIP] -A simple example on how to use NEORV32 on-chip debugger in combination with OpenOCD and the GNU debugger is shown in -section https://stnolting.github.io/neorv32/ug/#_debugging_using_the_on_chip_debugger[Debugging using the On-Chip Debugger] -of the User Guide. - -The NEORV32 on-chip debugger is based on four hardware modules: +The NEORV32 on-chip debugger is based on five hardware modules: .NEORV32 on-chip debugger complex image::neorv32_ocd_complex.png[align=center] [start=1] -. <<_debug_transport_module_dtm>> (`rtl/core/neorv32_debug_dtm.vhd`): JTAG access tap to allow an external -adapter to interface with the _debug module (DM)_ using the _debug module interface (dmi)_. -. <<_debug_module_dm>> (`rtl/core/neorv32_debug_tm.vhd`): RISC-V debug module that is configured by the DTM via the dmi. -From the CPU's "point of view" this module behaves as another memory-mapped peripheral that can be accessed via the -processor-internal bus. The memory-mapped registers provide an internal _data buffer_ for data transfer from/to the DM, a -_code ROM_ containing the "park loop" code, a _program buffer_ to allow the debugger to execute small programs defined by the -DM and a _status register_ that is used to communicate _exception_, _halt_, _resume_ and _execute_ requests/acknowledges from/to the DM. -. <<_cpu_debug_mode>> extension (part of `rtl/core/neorv32_cpu_control.vhd`): This extension provides the "debug execution mode" -as another operation mode, which is used to execute the park loop code from the DM. This mode also provides additional CSRs and instructions. -. CPU <<_trigger_module>> (also part of `rtl/core/neorv32_cpu_control.vhd`): This module provides a single _hardware_ breakpoint. +. <<_debug_transport_module_dtm>>: JTAG access tap to allow an external adapter to interface with the _debug module (DM)_. +. <<_debug_module_dm>>: RISC-V debug module that is configured by the DTM. From the CPU's perspective this module behaves as +another memory-mapped peripheral that can be accessed via the processor-internal bus. The memory-mapped registers provide an +internal _data buffer_ for data transfer from/to the DM, a _code ROM_ containing the "park loop" code, a _program buffer_ to +allow the debugger to execute small programs defined by the DM and a _status register_ that is used to communicate _exception_, +_halt_, _resume_ and _execute_ requests/acknowledges from/to the DM. +. <<_debug_authentication>>: Authenticator module to secure on-chip debugger access. This module implements a very simple +authentication mechanism as example. Users can modify/replace this default logic to implement arbitrary authentication mechanism. +. <<_cpu_debug_mode>> ISA extension: This ISA extension provides the "debug execution mode" as another operation mode that is +used to execute the park loop code from the DM. This mode also provides additional CSRs and instructions. +. CPU <<_trigger_module>>: This module provides a single _hardware_ breakpoint. **Theory of Operation** -When debugging the system using the OCD, the debugger issues a halt request to the CPU (via the CPU's -`db_halt_req_i` signal) to make the CPU enter _debug mode_. In this mode, the application-defined architectural -state of the system/CPU is "frozen" so the debugger can monitor if without interfering with the actual application. -However, the OCD can also modify the entire architectural state at any time. While in debug mode, the debugger has -full control over the entire CPU and processor operating at highest-privileged mode. +When debugging the system using the OCD, the debugger (like GDB) issues a halt request to the CPU to make the it enter +_debug mode_. In this mode the application-defined architectural state of the system/CPU is "frozen" so the debugger +can monitor it without interfering with the actual application. However, the OCD can also modify the entire architectural +state at any time. While in debug mode, the debugger has full control over the entire CPU and processor operating at +highest-privileged mode. While in debug mode, the CPU executes the "park loop" code from the code ROM of the debug module (DM). This park loop implements an endless loop, where the CPU polls a memory-mapped <<_status_register>> that is -controlled by the DM. The flags in this register are used to communicate requests from -the DM and to acknowledge them by the CPU: trigger execution of the program buffer or resume the halted -application. Furthermore, the CPU uses this register to signal that the CPU has halted after a halt request -and to signal that an exception has been triggered while being in debug mode. +controlled by the DM. The flags in this register are used to communicate requests from the DM and to acknowledge +them by the CPU: trigger execution of the program buffer or resume the halted application. Furthermore, the CPU +uses this register to signal that the CPU has halted after a halt request or to signal that an exception has been +raised while being in debug mode. <<< @@ -73,8 +68,8 @@ and to signal that an exception has been triggered while being in debug mode. :sectnums: === Debug Transport Module (DTM) -The debug transport module "DTM" (VHDL module: `rtl/core/neorv32_debug_dtm.vhd`) provides a JTAG test access port ("tap"). -External JTAG access is provided by the following top-level ports: +The debug transport module "DTM" (VHDL module: `rtl/core/neorv32_debug_dtm.vhd`) provides a standard 4-wire JTAG test +access port ("tap") via the following top-level ports: .JTAG top level signals [cols="^2,^2,^2,<8"] @@ -103,7 +98,7 @@ since JTAG-level resets can be triggered using with TMS signaling. If the on-chip debugger is disabled the JTAG serial input `jtag_tdi_i` is directly connected to the JTAG serial output `jtag_tdo_o` to maintain the JTAG chain. -JTAG accesses are based on a single _instruction register_ `IR`, which is 5 bit wide, and several _data registers_ `DR` +JTAG accesses are based on a single 5-bit _instruction register_ `IR` and several _data registers_ `DR` with different sizes. The individual data registers are accessed by writing the according address to the instruction register. The following table shows the available data registers and their addresses: @@ -113,8 +108,8 @@ register. The following table shows the available data registers and their addre |======================= | Address (via `IR`) | Name | Size (bits) | Description | `00001` | `IDCODE` | 32 | identifier, version and part ID fields are hardwired to zero, manufacturer ID is assigned via the `JEDEC_ID` top generic (<<_processor_top_entity_generics>>) -| `10000` | `DTMCS` | 32 | debug transport module control and status register -| `10001` | `DMI` | 41 | debug module interface (_dmi_); 7-bit address, 32-bit read/write data, 2-bit operation (`00` = NOP; `10` = write; `01` = read) +| `10000` | `DTMCS` | 32 | debug transport module control and status register (see below) +| `10001` | `DMI` | 41 | debug module interface: 7-bit address, 32-bit read/write data, 2-bit operation (`00` = NOP; `10` = write; `01` = read) | others | `BYPASS` | 1 | default JTAG bypass register |======================= @@ -130,7 +125,7 @@ register. The following table shows the available data registers and their addre | 14:12 | `idle` | r/- | recommended idle states (= 0, no idle states required) | 11:10 | `dmistat` | r/- | DMI status: `00` = no error, `01` = reserved, `10` = operation failed, `11` = failed operation during pending DMI operation | 9:4 | `abits` | r/- | number of address bits in `DMI` register (= 6) -| 3:0 | `version` | r/- | `0001` = DTM is compatible to spec. versions v0.13 and v1.0 +| 3:0 | `version` | r/- | `0001` = DTM is compatible to RISC-V debug spec. versions v0.13 and v1.0 |======================= @@ -145,38 +140,38 @@ It supports the following features: * Gives the debugger necessary information about the implementation. * Allows the hart to be halted/resumed/reset and provides the current status. -* Provides abstract read and write access to the halted hart's generap purpose registers. +* Provides abstract read and write access to the halted hart's general purpose registers. * Provides access to a reset signal that allows debugging from the very first instruction after reset. -* Provides a _Program Buffer_ to force the hart to execute arbitrary instructions. +* Provides a _program buffer_ to force the hart to execute arbitrary instructions. * Allows memory access from a hart's point of view. +* Optionally implements and authentication mechanism to secure on-chip debugger access. The NEORV32 DM follows the "Minimal RISC-V External Debug Specification" to provide full debugging capabilities while keeping resource/area requirements at a minimum. It implements the **execution based debugging scheme** for a -single hart and provides the following core features: +single hart and provides the following architectural core features: * program buffer with 2 entries and an implicit `ebreak` instruction * indirect bus access via the CPU using the program buffer * abstract commands: "access register" plus auto-execution * halt-on-reset capability +* optional authentication .DM Spec. Version [TIP] -By default, the OCD's debug module supports version 1.0 of the RISC-V debug spec. For backwards compatibility, the DM -can be "downgraded" back to version 0.13 via the `DM_LEGACY_MODE` generic (see <<_processor_top_entity_generics>>). +By default, the OCD's debug module supports version 1.0 of the RISC-V debug spec. However, for backwards compatibility the +DM can be downgraded back to version 0.13 via the `OCD_DM_LEGACY_MODE` generic (see <<_processor_top_entity_generics>>). -The DM provides two access "point of views": accesses from the DTM via the _debug module interface (dmi)_ and -accesses from the CPU via the processor-internal bus system. From the DTM's point of view, the DM implements a set of -<<_dm_registers>> that are used to control and monitor the debugging session. From the CPU's point of view, the -DM implements several memory-mapped registers (within the _normal_ address space) that are used for communicating -debugging control and status (<<_dm_cpu_access>>). +From the DTM's point of view, the DM implements a set of <<_dm_registers>> that are used to control and monitor the +debugging session. From the CPU's point of view, the DM implements several memory-mapped registers that are used for +communicating debugging control and status (<<_dm_cpu_access>>). :sectnums: ==== DM Registers -The DM is controlled via a set of registers that are accessed via the DTM's _debug module interface_ (dmi). -The following registers are implemented: +The DM is controlled via a set of registers that are accessed via the DTM. The following registers are implemented: +.Unimplemented Registers [NOTE] Write accesses to registers that are not implemented are simply ignored and read accesses to these registers will always return zero. @@ -186,18 +181,19 @@ to these registers will always return zero. [options="header",grid="rows"] |======================= | Address | Name | Description -| `0x04` | <<_data0>> | Abstract data 0, used for data transfer between debugger and processor -| `0x10` | <<_dmcontrol>> | Debug module control -| `0x11` | <<_dmstatus>> | Debug module status -| `0x12` | <<_hartinfo>> | Hart information -| `0x16` | <<_abstracts>> | Abstract control and status -| `0x17` | <<_command>> | Abstract command -| `0x18` | <<_abstractauto>> | Abstract command auto-execution -| `0x1d` | `nextdm` | Base address of next DM; reads as zero to indicate there is only one DM -| `0x20` | <<_progbuf, `progbuf0`>> | Program buffer 0 -| `0x21` | <<_progbuf, `progbuf1`>> | Program buffer 1 -| `0x38` | `sbcs` | System bus access control and status; reads as zero to indicate there is **no** direct system bus access -| `0x40` | <<_haltsum0>> | Halted harts +| 0x04 | <<_data0>> | Abstract data 0, used for data transfer between debugger and processor +| 0x10 | <<_dmcontrol>> | Debug module control +| 0x11 | <<_dmstatus>> | Debug module status +| 0x12 | <<_hartinfo>> | Hart information +| 0x16 | <<_abstracts>> | Abstract control and status +| 0x17 | <<_command>> | Abstract command +| 0x18 | <<_abstractauto>> | Abstract command auto-execution +| 0x1d | `nextdm` | Base address of next DM; reads as zero to indicate there is only one DM +| 0x20 | <<_progbuf, `progbuf0`>> | Program buffer 0 +| 0x21 | <<_progbuf, `progbuf1`>> | Program buffer 1 +| 0x30 | <<_authdata>> | Data to/from the authentication module +| 0x38 | `sbcs` | System bus access control and status; reads as zero to indicate there is **no** direct system bus access +| 0x40 | <<_haltsum0>> | Halted harts |======================= @@ -254,14 +250,14 @@ are configured as "zero" and are read-only. Writing '1' to these bits/fields wil [options="header",grid="rows"] |======================= | Bit | Name [RISC-V] | Description -| 31:23 | _reserved_ | reserved; always zero -| 22 | `impebreak` | always `1`; indicates an implicit `ebreak` instruction after the last program buffer entry -| 21:20 | _reserved_ | reserved; always zero +| 31:23 | _reserved_ | reserved; zero +| 22 | `impebreak` | `1`: indicates an implicit `ebreak` instruction after the last program buffer entry +| 21:20 | _reserved_ | reserved; zero | 19 | `allhavereset` .2+| `1` when the hart is in reset | 18 | `anyhavereset` | 17 | `allresumeack` .2+| `1` when the hart has acknowledged a resume request | 16 | `anyresumeack` -| 15 | `allnonexistent` .2+| always zero to indicate the hart is always existent +| 15 | `allnonexistent` .2+| zero to indicate the hart is always existent | 14 | `anynonexistent` | 13 | `allunavail` .2+| `1` when the DM is disabled to indicate the hart is unavailable | 12 | `anyunavail` @@ -269,18 +265,13 @@ are configured as "zero" and are read-only. Writing '1' to these bits/fields wil | 10 | `anyrunning` | 9 | `allhalted` .2+| `1` when the hart is halted | 8 | `anyhalted` -| 7 | `authenticated` | always `1`; there is no authentication -| 6 | `authbusy` | always `0`; there is no authentication -| 5 | `hasresethaltreq` | always `0`; halt-on-reset is not supported (directly) -| 4 | `confstrptrvalid` | always `0`; no configuration string available -| 3:0 | `version` | debug spec. version; `0011` (v1.0) or `0010` (v0.13); configured via the `DM_LEGACY_MODE` <<_processor_top_entity_generics>> +| 7 | `authenticated` | set if authentication passed; see <<_debug_authentication>> +| 6 | `authbusy` | set if authentication is busy, see <<_debug_authentication>> +| 5 | `hasresethaltreq` | `0`: halt-on-reset is not supported (directly) +| 4 | `confstrptrvalid` | `0`: no configuration string available +| 3:0 | `version` | debug spec. version; `0011` (v1.0) or `0010` (v0.13); configured via the `OCD_DM_LEGACY_MODE` <<_processor_top_entity_generics>> |======================= -.OCD Security -[WARNING] -JTAG access via the OCD is **always authenticated** (`dmstatus.authenticated = 1`). Hence, the entire system can always -be accessed via the on-chip debugger. - :sectnums!: ===== **`hartinfo`** @@ -298,11 +289,11 @@ be accessed via the on-chip debugger. [options="header",grid="rows"] |======================= | Bit | Name [RISC-V] | Description -| 31:24 | _reserved_ | reserved; always zero -| 23:20 | `nscratch` | `0001`, number of `dscratch*` CPU registers = 1 -| 19:17 | _reserved_ | reserved; always zero -| 16 | `dataccess` | `0`, the `data` registers are shadowed in the hart's address space -| 15:12 | `datasize` | `0001`, number of 32-bit words in the address space dedicated to shadowing the `data` registers (1 register) +| 31:24 | _reserved_ | reserved; zero +| 23:20 | `nscratch` | `0001`: number of `dscratch*` CPU registers = 1 +| 19:17 | _reserved_ | reserved; zero +| 16 | `dataccess` | `0`: the `data` registers are shadowed in the hart's address space +| 15:12 | `datasize` | `0001`: number of 32-bit words in the address space dedicated to shadowing the `data` registers (1 register) | 11:0 | `dataaddr` | = `dm_data_base_c(11:0)`, signed base address of `data` words (see address map in <<_dm_cpu_access>>) |======================= @@ -323,14 +314,14 @@ be accessed via the on-chip debugger. [options="header",grid="rows"] |======================= | Bit | Name [RISC-V] | R/W | Description -| 31:29 | _reserved_ | r/- | reserved; always zero -| 28:24 | `progbufsize` | r/- | always `0010`: size of the program buffer (`progbuf`) = 2 entries -| 23:11 | _reserved_ | r/- | reserved; always zero -| 12 | `busy` | r/- | `1` when a command is being executed -| 11 | `relaxedpriv` | r/- | always `1`: PMP rules are ignored when in debug mode +| 31:29 | _reserved_ | r/- | reserved; zero +| 28:24 | `progbufsize` | r/- | `0010`: size of the program buffer (`progbuf`) = 2 entries +| 23:11 | _reserved_ | r/- | reserved; zero +| 12 | `busy` | r/- | set when a command is being executed +| 11 | `relaxedpriv` | r/- | `1`: PMP rules are ignored when in debug mode | 10:8 | `cmderr` | r/w | error during command execution (see below); has to be cleared by writing `111` -| 7:4 | _reserved_ | r/- | reserved; always zero -| 3:0 | `datacount` | r/- | always `0001`: number of implemented `data` registers for abstract commands = 1 +| 7:4 | _reserved_ | r/- | reserved; zero +| 3:0 | `datacount` | r/- | `0001`: number of implemented `data` registers for abstract commands = 1 |======================= Error codes in `cmderr` (highest priority first): @@ -363,12 +354,12 @@ hart's GPRs x0 - x15/31 (abstract command register index `0x1000` - `0x101f`). [options="header",grid="rows"] |======================= | Bit | Name [RISC-V] | R/W | Description / required value -| 31:24 | `cmdtype` | -/w | `00000000` to indicate "access register" command +| 31:24 | `cmdtype` | -/w | `00000000`: indicates "access register" command | 23 | _reserved_ | -/w | reserved, has to be `0` when writing -| 22:20 | `aarsize` | -/w | `010` to indicate 32-bit accesses -| 21 | `aarpostincrement` | -/w | `0`, post-increment is not supported -| 18 | `postexec` | -/w | if set the program buffer is executed _after_ the command -| 17 | `transfer` | -/w | if set the operation in `write` is conducted +| 22:20 | `aarsize` | -/w | `010`: indicates 32-bit accesses +| 21 | `aarpostincrement` | -/w | `0`: post-increment is not supported +| 18 | `postexec` | -/w | set if the program buffer is executed _after_ the command +| 17 | `transfer` | -/w | set if the operation in `write` is conducted | 16 | `write` | -/w | `1`: copy `data0` to `[regno]`, `0`: copy `[regno]` to `data0` | 15:0 | `regno` | -/w | GPR-access only; has to be `0x1000` - `0x101f` |======================= @@ -409,6 +400,19 @@ hart's GPRs x0 - x15/31 (abstract command register index `0x1000` - `0x101f`). |====== +:sectnums!: +===== **`authdata`** + +[cols="4,27,>7"] +[frame="topbot",grid="none"] +|====== +| 0x30 | **Authentication data** | `authdata` +3+| Reset value: _user-defined_ +3+| This register serves as a 32-bit serial port to/from the authentication module. See <<_debug_authentication>>. +|====== + + + :sectnums!: ===== **`haltsum0`** @@ -432,40 +436,39 @@ hart's GPRs x0 - x15/31 (abstract command register index `0x1000` - `0x101f`). :sectnums: ==== DM CPU Access -From the CPU's perspective, the DM acts like another memory-mapped peripheral. It occupies 256 bytes of the CPU's address -space starting at address `base_io_dm_c` (see table below). This address space is divided into four sections of 64 bytes -each to provide access to the _park loop code ROM_, the _program buffer_, the _data buffer_ and the _status register_. -The program buffer, the data buffer and the status register do not fully occupy the 64-byte-wide sections and are -mirrored several times to fill the entire section. +From the CPU's perspective the DM acts like another memory-mapped peripheral. It occupies 256 bytes of the CPU's address +space starting at address `base_io_dm_c`. This address space is divided into four sections of 64 bytes each to provide +access to the _park loop code ROM_, the _program buffer_, the _data buffer_ and the _status register_. The program buffer, +the data buffer and the status register do not fully occupy the 64-byte-wide sections and are mirrored several times to fill +the entire section. .DM CPU Access - Address Map -[cols="^2,^2,<5"] +[cols="^2,^2,<4"] [options="header",grid="rows"] |======================= -| Base address | Actual size | Description -| `0xffffff00` | 64 bytes | ROM for the "park loop" code -| `0xffffff40` | 16 bytes | Program buffer (<<_progbuf>>) -| `0xffffff80` | 4 bytes | Data buffer (<<_data0>>) -| `0xffffffc0` | 4 bytes | Control and <<_status_register>> +| Base address | Physical size | Description +| `0xffffff00` | 64 bytes | ROM for the "park loop" code +| `0xffffff40` | 16 bytes | Program buffer (<<_progbuf>>) +| `0xffffff80` | 4 bytes | Data buffer (<<_data0>>) +| `0xffffffc0` | 4 bytes | Control and <<_status_register>> |======================= .DM Register Access [IMPORTANT] -All memory-mapped registers of the DM can only be accessed by the CPU if it is actually in debug mode. -Hence, the DM registers are not "visible" for normal CPU operations. -Any CPU access outside of debug mode will raise a bus access fault exception. +All memory-mapped registers of the DM can only be accessed by the CPU if it is in debug mode. Hence, the DM registers are not +visible nor accessible for normal CPU operations. Any CPU access outside of debug mode will raise a bus access fault exception. .Park Loop Code Sources ("OCD Firmware") [NOTE] -The assembly sources of the **park loop code** are available in `sw/ocd-firmware/park_loop.S`. +The assembly sources of the park loop code are available in `sw/ocd-firmware/park_loop.S`. :sectnums: ===== Code ROM Entry Points -The park loop code provides two entry points where the actual code execution can start. These are used to enter -the park loop either when an explicit debug-entry request has been issued (for example a halt request) or when an exception -has occurred while executing code _inside_ debug mode. +The park loop code provides two entry points where code execution can start. These are used to enter the park loop either when +an explicit debug-entry/halt request has been issued (for example a halt request) or when an exception has occurred while executing +code in debug mode. .Park Loop Entry Points [cols="^6,<4"] @@ -473,60 +476,67 @@ has occurred while executing code _inside_ debug mode. |======================= | Address | Description | `dm_exc_entry_c` (`base_io_dm_c` + 0) | Exception entry address -| `dm_park_entry_c` (`base_io_dm_c` + 8) | Normal entry address +| `dm_park_entry_c` (`base_io_dm_c` + 8) | Normal entry address (halt request) |======================= -When the CPU enters or re-enters debug mode (for example via an `ebreak` in the DM's program buffer), it jumps to -the _normal entry point_ that is configured via the `CPU_DEBUG_PARK_ADDR` generic -(<<_cpu_top_entity_generics>>). By default, this generic is set to `dm_park_entry_c`, which is defined in main -package file. If an exception is encountered during debug mode, the CPU jumps to the address of the _exception -entry point_ configured via the `CPU_DEBUG_EXC_ADDR` generic (<<_cpu_top_entity_generics>>). By default, this generic -is set to `dm_exc_entry_c`, which is also defined in main package file. +When the CPU enters (via an explicit halt request from the dubber) or re-enters debug mode (for example via an `ebreak` in the +DM's program buffer), it jumps to the _normal entry point_ that is configured via the `CPU_DEBUG_PARK_ADDR` generic +(<<_cpu_top_entity_generics>>). By default, this address is set to `dm_park_entry_c`, which is defined in the main +package file. If an exception is encountered during debug mode, the CPU jumps to the address of the _exception entry point_ +configured via the `CPU_DEBUG_EXC_ADDR` generic (<<_cpu_top_entity_generics>>). By default, this address +is set to `dm_exc_entry_c`, which is also defined in the main package file. :sectnums: ===== Status Register -The status register provides a direct communication channel between the CPU's debug mode executing the park loop -and the debugger-controlled debug module. This register is used to communicate _requests_, which are issued by the -DM and the according _acknowledges_, which are generated by the CPU. +The status register provides a direct communication channel between the CPU's debug-mode executing the park loop +and the debugger-controlled DM. This register is used to communicate requests, which are issued by the +DM, and the according acknowledges, which are generated by the CPU. -There are only 4 bits in this register that are used to implement the requests/acknowledges. Each bit is left-aligned -in one sub-byte of the entire 32-bit register. Thus, the CPU can access each bit individually using _store-byte_ and -_load-byte_ instructions. This eliminates the need to perform bit-masking in the park loop code leading to less code size -and faster execution. +There are only 4 bits in this register that are used to implement requests/acknowledges. Each bit is left-aligned +in one sub-byte of the entire 32-bit register. Thus, the CPU can access each bit individually using store-byte (`sb`) and +load-byte (`lb`) instructions. This eliminates the need to perform bit-masking in the park loop code resulting in less code +size and faster execution. .DM Status Register - CPU Access -[cols="^1,^3,^2,<8"] +[cols="^1,^3,^3,<8"] [options="header",grid="rows"] |======================= -| Bit | Name | CPU access <| Description -.2+| 0 | `sreg_halt_ack` | read <| - - | - | write <| Set by the CPU while it is halted (and executing the park loop). -.2+| 8 | `sreg_resume_req` | read <| Set by the DM to request the CPU to resume normal operation. - | `sreg_resume_ack` | write <| Set by the CPU before it starts resuming. -.2+| 16 | `sreg_execute_req` | read <| Set by the DM to request execution of the program buffer. - | `sreg_execute_ack` | write <| Set by the CPU before it starts executing the program buffer. -.2+| 24 | - | read <| - - | `sreg_execute_ack` | write <| Set by the CPU if an exception occurs while being in debug mode. +| Bit | Name | CPU/DM access <| Description +| 0 | `sreg_halt_ack` | CPU write, DM read <| Set by the CPU when halting. +.2+| 8 | `sreg_resume_req` | DM write, CPU read <| Set by the DM to request the CPU to resume normal operation. + | `sreg_resume_ack` | CPU write, DM read <| Set by the CPU before it starts resuming. +.2+| 16 | `sreg_execute_req` | DM write, CPU read <| Set by the DM to request execution of the program buffer. + | `sreg_execute_ack` | CPU write, DM read <| Set by the CPU before it starts executing the program buffer. +| 24 | `sreg_execute_ack` | CPU write, DM read <| Set by the CPU if an exception occurs while being in debug mode. |======================= +<<< +// #################################################################################################################### +:sectnums: +=== Debug Authentication + +TODO + + + <<< // #################################################################################################################### :sectnums: === CPU Debug Mode -The NEORV32 CPU Debug Mode is compatible to the **Minimal RISC-V Debug Specification 1.0** -`Sdext` (external debug) ISA extension. When enabled via the CPU's <<_sdext_isa_extension>> generic and/or -the processor's `ON_CHIP_DEBUGGER_EN` it adds a new CPU operation mode ("debug mode"), three additional -<<_cpu_debug_mode_csrs>> and one additional instruction (`dret`) to the core. +The NEORV32 CPU Debug Mode is compatible to the **Minimal RISC-V Debug Specification 1.0** `Sdext` (external debug) +ISA extension. When enabled via the CPU's <<_sdext_isa_extension>> generic and/or the processor's `OCD_EN` it adds +a new CPU operation mode ("debug mode"), three additional <<_cpu_debug_mode_csrs>> and one additional instruction +(`dret`) to the core. Debug-mode is entered on any of the following events: [start=1] . The CPU executes an `ebreak` instruction (when in machine-mode and `ebreakm` in <<_dcsr>> is set OR when in user-mode and `ebreaku` in <<_dcsr>> is set). -. A debug halt request is issued by the DM (via CPU signal `db_halt_req_i`, high-active). +. A debug halt request is issued by the DM (via CPU `db_halt_req_i` signal, high-active). . The CPU completes executing of a single instruction while being in single-step debugging mode (`step` in <<_dcsr>> is set). . A hardware trigger from the <<_trigger_module>> fires (`exe` and `action` in <<_tdata1>> / `mcontrol` are set). @@ -545,14 +555,16 @@ asynchronous interrupts) that are handled transparently by the control logic. * load the address configured via the CPU's `CPU_DEBUG_PARK_ADDR` (<<_cpu_top_entity_generics>>) generic to the program counter jumping to the "debugger park loop" code stored in the debug module (DM) -**When the CPU is in debug-mode the following things are important:** +**When the CPU is in debug-mode:** * while in debug mode, the CPU executes the parking loop and - if requested by the DM - the program buffer * effective CPU privilege level is `machine` mode; any active physical memory protection (PMP) configuration is bypassed * the `wfi` instruction acts as a `nop` (also during single-stepping) * if an exception occurs while being in debug mode: -** if the exception was caused by any debug-mode entry action the CPU jumps to the normal entry point (defined by `CPU_DEBUG_PARK_ADDR` generic of the <<_cpu_top_entity_generics>>) of the park loop again (for example when executing `ebreak` while in debug-mode) -** for all other exception sources the CPU jumps to the exception entry point (defined by `CPU_DEBUG_EXC_ADDR` generic of the <<_cpu_top_entity_generics>>) to signal an exception to the DM; the CPU restarts the park loop again afterwards +** if the exception was caused by any debug-mode entry action the CPU jumps to the normal entry point (defined by `CPU_DEBUG_PARK_ADDR` generic of +the <<_cpu_top_entity_generics>>) of the park loop again (for example when executing `ebreak` while in debug-mode) +** for all other exception sources the CPU jumps to the exception entry point (defined by `CPU_DEBUG_EXC_ADDR` generic of the <<_cpu_top_entity_generics>>) +to signal an exception to the DM; the CPU restarts the park loop again afterwards * interrupts are disabled; however, they will remain pending and will get executed after the CPU has left debug mode and is not being single-stepped * if the DM makes a resume request, the park loop exits and the CPU leaves debug mode (executing `dret`) * the standard counters <<_machine_counter_and_timer_csrs>> `[m]cycle[h]` and `[m]instret[h]` are stopped @@ -570,11 +582,10 @@ Executing `dret` outside of debug mode will raise an illegal instruction excepti :sectnums: ==== CPU Debug Mode CSRs -Two additional CSRs are required by the _Minimal RISC-V Debug Specification_: the debug mode control and status register +Two additional CSRs are required by the "Minimal RISC-V Debug Specification": the debug mode control and status register `dcsr` and the debug program counter `dpc`. An additional general purpose scratch register for debug-mode-only -(`dscratch0`) allows faster execution by having a fast-accessible backup register. -These CSRs are only accessible when the CPU is _in_ debug mode. If these CSRs are accessed outside of debug mode -an illegal instruction exception is raised. +(`dscratch0`) allows faster execution by having a fast-accessible backup register. These CSRs are only accessible if the CPU +is in debug mode. If these CSRs are accessed outside of debug mode an illegal instruction exception is raised. :sectnums!: @@ -595,19 +606,19 @@ an illegal instruction exception is raised. [options="header",grid="rows"] |======================= | Bit | Name [RISC-V] | R/W | Description -| 31:28 | `xdebugver` | r/- | `0100` - CPU debug mode is compatible to spec. version 1.0 -| 27:16 | - | r/- | `000000000000` - _reserved_ +| 31:28 | `xdebugver` | r/- | `0100`: CPU debug mode is compatible to spec. version 1.0 +| 27:16 | - | r/- | `000000000000`: _reserved_ | 15 | `ebereakm` | r/w | `ebreak` instructions in `machine` mode will _enter_ debug mode when set -| 14 | `ebereakh` | r/- | `0` - hypervisor mode not supported -| 13 | `ebereaks` | r/- | `0` - supervisor mode not supported +| 14 | `ebereakh` | r/- | `0`: hypervisor mode not supported +| 13 | `ebereaks` | r/- | `0`: supervisor mode not supported | 12 | `ebereaku` | r/w | `ebreak` instructions in `user` mode will _enter_ debug mode when set -| 11 | `stepie` | r/- | `0` - IRQs are disabled during single-stepping -| 10 | `stopcount` | r/- | `1` - standard counters and HPMs are stopped when in debug mode -| 9 | `stoptime` | r/- | `0` - timers increment as usual -| 8:6 | `cause` | r/- | cause identifier - why debug mode was entered (see below) -| 5 | - | r/- | `0` - _reserved_ -| 4 | `mprven` | r/- | `1` - `mprv` in <<_mstatus>> is also evaluated when in debug mode -| 3 | `nmip` | r/- | `0` - non-maskable interrupt is pending +| 11 | `stepie` | r/- | `0`: IRQs are disabled during single-stepping +| 10 | `stopcount` | r/- | `1`: standard counters and HPMs are stopped when in debug mode +| 9 | `stoptime` | r/- | `0`: timers increment as usual +| 8:6 | `cause` | r/- | cause identifier: why debug mode was entered (see below) +| 5 | - | r/- | `0`: _reserved_ +| 4 | `mprven` | r/- | `1`: `mprv` in <<_mstatus>> is also evaluated when in debug mode +| 3 | `nmip` | r/- | `0`: non-maskable interrupt is pending | 2 | `step` | r/w | enable single-stepping when set | 1:0 | `prv` | r/w | CPU privilege level before/after debug mode |======================= @@ -657,7 +668,7 @@ return to the address stored in `dpc` by automatically moving `dpc` to the progr :sectnums: === Trigger Module -"Normal" _software_ breakpoints (using GDB's `b`/`break` command) are implemented by temporarily replacing the according +"Normal" software breakpoints (using GDB's `b`/`break` command) are implemented by temporarily replacing the according instruction word by an `[c.]ebreak` instruction. However, this is not possible when debugging code that is executed from read-only memory (for example when debugging programs that are executed via the <<_execute_in_place_module_xip>>). To circumvent this limitation a hardware trigger logic allows to (re-)enter debug-mode when instruction execution @@ -716,7 +727,7 @@ if it uses the trigger module for implementing a "hardware breakpoint" | Address | `0x7a1` | Reset value | `0x60000048` | ISA | `Zicsr` & `Sdtrig` -| Description | This CSR is used to configure the address match trigger using the "type 6" format. +| Description | This CSR is used to configure the address match trigger using "type 6" format. |======================= .Match Control CSR (`tdata1`) Bits @@ -724,26 +735,26 @@ if it uses the trigger module for implementing a "hardware breakpoint" [options="header",grid="rows"] |======================= | Bit | Name [RISC-V] | R/W | Description -| 31:28 | `type` | r/- | `0100` - address match trigger type 6 +| 31:28 | `type` | r/- | `0100`: address match trigger type 6 | 27 | `dmode` | r/w | set to ignore write accesses to <<_tdata1>> and <<_tdata2>> from machine-mode; writable from debug-mode only -| 26 | `uncertain` | r/- | `0` - trigger satisfies the configured conditions -| 25 | `hit1` | r/- | `0` - hardwired to zero, only `hit0` is used -| 24 | `vs` | r/- | `0` - VS-mode not supported -| 23 | `vu` | r/- | `0` - VU-mode not supported +| 26 | `uncertain` | r/- | `0`: trigger satisfies the configured conditions +| 25 | `hit1` | r/- | `0`: hardwired to zero, only `hit0` is used +| 24 | `vs` | r/- | `0`: VS-mode not supported +| 23 | `vu` | r/- | `0`: VU-mode not supported | 22 | `hit0` | r/c | set when trigger has fired (**BEFORE** executing the triggering address); must be explicitly cleared by writing zero; writing 1 has no effect -| 21 | `select` | r/- | `0` - only address matching is supported -| 20:19 | reserved | r/- | `00` - hardwired to zero -| 18:16 | `size` | r/- | `000` - match accesses of any size +| 21 | `select` | r/- | `0`: only address matching is supported +| 20:19 | reserved | r/- | `00`: hardwired to zero +| 18:16 | `size` | r/- | `000`: match accesses of any size | 15:12 | `action` | r/w | `0000` = breakpoint exception on trigger match, `0001` = enter debug-mode on trigger match -| 11 | `chain` | r/- | `0` - chaining is not supported as there is only one trigger -| 10:6 | `match` | r/- | `0000` - equal-match only -| 6 | `m` | r/- | `1` - trigger enabled when in machine-mode -| 5 | `uncertainen` | r/- | `0` - feature not supported, hardwired to zero -| 4 | `s` | r/- | `0` - supervisor-mode not supported -| 3 | `u` | r/- | `0`/`1` - trigger enabled when in user-mode, set if `U` ISA extension is enabled +| 11 | `chain` | r/- | `0`: chaining is not supported as there is only one trigger +| 10:6 | `match` | r/- | `0000`: equal-match only +| 6 | `m` | r/- | `1`: trigger enabled when in machine-mode +| 5 | `uncertainen` | r/- | `0`: feature not supported, hardwired to zero +| 4 | `s` | r/- | `0`: supervisor-mode not supported +| 3 | `u` | r/- | `0`/`1`: trigger enabled when in user-mode, set if `U` ISA extension is enabled | 2 | `execute` | r/w | set to enable trigger matching on instruction address -| 1 | `store` | r/- | `0` - store address/data matching not supported -| 0 | `load` | r/- | `0` - load address/data matching not supported +| 1 | `store` | r/- | `0`: store address/data matching not supported +| 0 | `load` | r/- | `0`: load address/data matching not supported |======================= @@ -780,7 +791,7 @@ Note that the trigger module will fire **before** the instruction at the program [options="header",grid="rows"] |======================= | Bit | Name [RISC-V] | R/W | Description -| 31:24 | `version` | r/- | `0x01` - compatible to spec. version v1.0 -| 23:15 | reserved | r/- | `0x00` - hardwired to zero -| 15:0 | `info` | r/- | `0x0006` - only the "type 6 trigger" is supported +| 31:24 | `version` | r/- | `0x01`: compatible to spec. version v1.0 +| 23:15 | reserved | r/- | `0x00`: hardwired to zero +| 15:0 | `info` | r/- | `0x0006`: only "type 6 trigger" is supported |======================= From a520c6744762cf80df3fb27a41bb509bf70c1b92 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 14:05:29 +0200 Subject: [PATCH 10/19] [figures] OCD complex: add authentication block --- docs/figures/neorv32_ocd_complex.png | Bin 31378 -> 31569 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/figures/neorv32_ocd_complex.png b/docs/figures/neorv32_ocd_complex.png index 2d8a08ffe7f66f23ef77a0268149460770407514..7b5459a7567750fbd7f8c9c91aa6828fce7c5be4 100644 GIT binary patch literal 31569 zcmagFS2!Hr7cPuMZ$q?1Cwdp68=Zt`iIQkR1ks5;hNy#R(R)M}z4tCeo9INZql{k1 z49>{!|9v;-;#}aFdA40v+wXeU+Tq%os>B3O2rw`(h+n8F>0)3!V8Xz_WW&Qje?!L- zdV>Cg>87iyfKfh5w}bxh&|3bLJO)Np3?a%K8~qvIS?#SG1_nvb{SRipQ_%+u44_xEMHT7=GkW^g((pw?+6EJ|fPd%gvg9cg)g21t%>NkB?v^#VnVS^eVA zk^RhU5f7twRw?@tts2&)qYoZ`Waq2>Jbbx~n&5TzFBD%w06iF+mi>F`H89gT8KjxO zL8?r>LkIkpgJjh7Z&mftn8n1|*;$2+VbZ;bLSKbpSq%0&7J!V+Tawd;THbh?9e=v0 z!M$Tb&MAUp_p5YsC4y>HmtM&S?s0zyd|K@o)|J~)aEPpL={D_;T_)!(Sb-jamQxPKcVeZ>ZO^4q?L$#R~ zQl>98GUdyX&#h|p$dTlVjZ zrTtB~uU6G3k5Qq*Z18nt!!j6Y@IP5&vl_@vml^f@OM{me<|SmWql{{5qLE1nq|EHW zVuy7y%Z_swzd&}a$l3`_MNyO7f@nQE2FI0^Swa73&U?FSA<9^)l8+k!n@&JcyR7KcpzyJ`G;pNx#QfzWiqp7 zxx?CHHr;?ib>H59^;|j&+3s|_IKi;I!%;q}$-3WAUX7}!qO95X@y(|&8kno)f zS445h?Q7c%r>8nRo%17YqgyjgOJ+My*VSVTYxDN@NSo@PE8L$F1<|9H z79FF{0u>S+UC1IXm$c#T3Sh_f8;N;MSico?snUBZe`>DI zzo)h$qtN4E0kO4wyT9!C(ePeZ7FqI`hyn-y&>%AjZ#R!4+4)&|E&v0x34WYZxubD2 zm|lI}ab2)hl<5aVEhgQe4{31G^poWGWoD26j;~3`EuO;V`Q6F)wIX~M)?TOUQ)^eu z23oxSU{#t|%<%9#WKW-tCji9dM3G=AVSef!mR#_tY1{0k=oMy;V-f4x+!0c1b7s6b zy74Z-?sj7b{uhX_o$*no>9{=!`pA~>+Mt*5)D-9Z^Et<|G2K+l%p}*PM5x=e>4{A` z)V^)R$AKi3$V_A=QYQh z&KX(cHLCHIiR={Qd;}@HT`A7$_NR1DjNt}M3bbv7zuSqYQh*Z|ln!G*MAda%*ch3- ze;jUq9l2!NTg~d#A}r^vmYaTp$r)6vjM9=J>wGEqBAmvXsa zaDL$=xGBKKP1*Z}hju!+!|txJ?Y8-gKSj`+xkz`t=U+=B3_EuGEE=c2XBF$@kEQ(9 z=W}Y?Q@8&3(L>-OI?UNOyYgs`Yie3D&1y~be>|l zF6J^!dxi9__judi*XUx{jB!5BU+zx@A%Vd=_T7xDwyYxGaf=RW1{_t{3Di_o_19;_ zZtApUo|!!tVQ>D4jN$j)17XKM^Ym{A80;Qi%}&H%W6D40#w5X#?)G{p-<(YOlr8fz z?%Oo(scs1*P}=3!i@k&gUG2Pl?B6|u1TRsmaR?M3A&CYTp+#BMoJYVIt9tSdXGU9T zSL2tb>~YnFu$w=!P4!;?yI1u z^ep;p(uF-0x_$YyF>F*ZkKhb>Z^|fetX{sNA8>kebs~9~V|h+;ooUD}HuL%`>z6$FX#JUr8l*D_K0=!OCylqT)%TBj8u^Qn{d5rmYWH0(ZvvIT*ky3Vzjk3sE49u)ir>$GgXOv zPUnpNF-9?)PSO`)<;Ggv_h6T(Ct{j30aA^Mmv!S`sPdV~pRsq~lJjnyxEKzToU)4N z5-6rz&n=w#*^*+-$%8b`$(m@6Q~npv(YrUoekgl22vbc0Hbv2bSvx>NLxz?L?S!3c8ok z6mJG+^O2CB^zVKk+r?q~w}=8!R+YXSpf~rsxB-va<6IWVb?`;W@0lIJ(n;4?&5Z+V zyu={kfXZlP_IDyBouojLuV5}!y~k7$lY^9d1Z+GefBywE1)^y5JWMx_d{C+?z^m$} z;-A+O*PuAkJ0WJ7I>2|s^R(8icPbVpy_I-#dOiK4vJMrXx9>cyrZEyyd!Pug?B`;F z1d{QX2vRGH#8Pt}_sRSgyz@Z!!ubzA_ty`ekk~I%%ok-$rMjZDJP^X0;z*Z%2@Y+s z%+CjEVwlMy#)ubu*s@PcA|^|YH!ZGc2IY*~e$FpY4n~e|j^0(oaf|i-UWgVpMnDuR zAk;$&9o;gIZdiBn&YBeb+_H=JpeF7%Wy;w1OELGtANyiI#IeHOQRdFLxZZ1YTUHdH z_I->?!Vla+off}A`Tp!vilu~e9*;PdHz3op|~O}43r{-2kL z5svz?le%Ao0byoj28&ZIEWvwLZQBK)JVeP*&Wp5R#U1@yN$u!uAF@40S;o>AT*Z1t zny7yk8W|q0Eyq+BIE;(;qxhtgyiQNCN?W$lP{|5%2z~1JWFO}~rZO);!Lhv|c$45&C zat|{CwvSbcKGRf~u}>Z#R}Yg23eK*cAtc7dH@{d^;P*I}KnNZj$7>QGdhi{pO5cY@Z#|rxXwViPrYc8 zenxe3u2$kC;NP{$L9}3I#>oCD{aE2mBDEHy>y4R2`iBSifS^gSN-dFeEqt1S8pX=V zcAU*p{4=dLOQ9`4g2!XHAoLzBc(x8twEcOYe{OKPUh`t=6n7 zmn@W@UKDEJ7h`Rjmn+8cqm1?+HR^bk1n-xa1F6qa9%hX?nYUw?*PxIeX3W5U0tsde zE1QWKBaetGGme;6m!{hMCx?s=FH>BiB%avSM`uTl`ey0KK2ImtJq#rf!qxb`;CPVM z{o*?v>o?zivCY#Fp3}(u^G%jEpSBMQkoLDe*E@v`!x4pyQxdf{6z?G;cURd0u)sx3 zC&MHj3_V3pO}Q*}?WFT?WL3PIv*Dq=9j!gn)%4mcdG0@QHbhA?a&jGAA zYv;3^ieL-L&-e8PA67SfU<6vfYG-6NWpC*}^J(h1Ty3kdBr$p0`-k=<%%bZ?nd|SZ z!l~?oa|PoKr@;fUeiHS|@^@nc6C1MN;qgr31?mGtjrZTpoky4F$&7|Rq^jY#S>ocz zoyan2$L5=hd27Cux3dPrev9pFT7Osj)2(a#?TN2OGDscc5lzr?zhSz;{`idk8bEx6 z%qdaVns>)5C~~2)`2&fTAjGwB?2g_qwM^Fz!x?YV>xq@{-?rx#jHv`q|wQ zB2mkBF78D5JLC)<-l=I}QxsP0QG_RtS_akyRTrrAyx(%~Vl+Z0AHc-kUXA-cRAvBO z#VTHBH#p}*)zuo{vaV6W2*0O?lh#n*ae<_y8UL47OF5iwrEa?st$jW#v)TE&eKO%; ztw$QMj(UD(^KASA>ik~R0OEv;MM- zQ~mm@etW#K3HitA!&*RYFa>~_idj)#uDqVOt((a0eW|-NHM2D0$5_6+)~ckp6aITD zQYw?+yjeL_06Cy`&AEz-D$AKuEg_#^{1ip!=%U;e)LJfPkSM!yr%M=yF(a>o^KhwJ zSQX$y!@3+AqAK@8wq+BOW@+49g>N_D2ya2pd!=1FwBFZvBlASnXHj)G2svBQ-}K&_ zDXQdr?D1fabEhtEDPabQH%og7C_8={(@CP68p8>3>8|TA(}QBU|2gKR_Fj=FA%Gp(Po{lm9J0El*2Ub>!!?Ha z4J2|A_RGuUpv(R8_zV z2~L5$gm`bJmkr(GPSI(gR9 z^nnCXO=9CBDI(i#--SM=yf(_U?-!XAr#3W(tTwVKDMz>w33ZWTeF<}64h&@&-V04~ zrmAw=XyRQyqkDvF?)s&cMY=nP@Dm=W`1^>LuiSQ(eHn0`4$D-Ni~~#Lm`SOi*VT>m zqmGHqInb4lJo-Kf1hblwaeJm_}l_qE(OeAOqql@ma? z<6uZLF7G`EOQL{U45cPli>s3DmM9`Hq{9BhkRL3ENM7bJTBPY6ibOc{OY!w`vSKUY z2{AG$jUjhP%!6>^Lo-y!F&h+%UdlPY2$|qEe*f%n>Ne7@d{}8U8|8D$?OQ|m18b%G zOCi*y1XL%{5?#I4{W4>c&_xaVTt!P9mVUz*ZG1fxOHmQ%Tw6T1rXrX+0gIyVwpJ6AOghJJ7 zm}CmWxM+oD9JG3t=Td{@yn@VB8!e{NxB>OezszTLyj5b;xw&v&$vz7jMM*E*s^NSeLPpX5lW(k$=u*E z1-nRsw`}?mg4BfSPTQ*<5l2L%$KrU0-ubvP+(O_iNx7@Cyv74?7GJ%EU}NRb4Fvj< zUW|P9w98FHO9slZxiY5=xv+lHe=5N*bKwqV*gX8vq59y9XVhiwmXw3(kQ93`ji|~e z^6N7VR^RJBnVMu%qqvdTcEI|;w_h6dK7BlM?JXTChcPTY#-R<=R54nn1su|51r5~9 zL~oM%Q9_dh9e9MCN+K&6u-RnC{2bNyCB3M4eY;sj7mZdtth{BkNDdbzM7EPI+--zIx*;j98e(l9xz>)on7Kgyr*H?;-N`F>;rZ!;hhwC77@0`|+ z2E8Rmbbv^{7CNMT>6;kD$ZKwO>f$R~o-<&)4C0O=_xMFvw(25`VG$ z(XV9~3DCpu-yJ+Wz{#{c=kxv|R+{-iT=; zke$g@?0gQC?Z5(Hr4){{J5wBc-9k91Tj3xI3`qPLS*y`%r1aVqG%yTGNi**%Ly*Ow zIMW2rC`Onwn~=e+O`+T?p1h-{{feKH1KrVhdn&(dKK)NxsC$= z6bp>d)q9%`1|-AyL5`(Ud2%YUMBj#_%Gz71Ijlu+9eFiQlb1&vl?RL4UZsfHoF`G8uMnu^ zl@k4#o*x>SBeHq=WSn_4O#sG^|0;M< zQ@wsS9mx+a@o6kp-<>RO&hES!2+<-;UJ5HgZYxWA&wMnWJZO&jcz)V>l8d ziNRt(k+d6;l>A2uWn&|>W^Q;9RdJrG3;=*St<7j^u7T(~Ckrpn;Czm@S1vr=@v?0R zdaLx^@z5f*IAC}Fd0Z&RE2wn@tbZbmhCx;GEWu#v!SUKVt7p=@&RKg~b$p<-L(^Vq zl5gM>jN>_8U(IjBj8rz;!gk+4AP1W(LyP&~}|%Sem|*~AeWcuzO+5d7j$?5I7djntIkuKe>x zPUGEzYRt1x)}=T2TG;|xVp%ae>uL=rnN$`OkDIYK>T#D7{TznI5VuRdhna1snTNwk z{3dClPo4y_{YsuO_2p~1yG7Q(vV8f0vYVA*)z6|49_>Ja;R!l`(;M}jDZvYZ!%2tt ze6oyN579QG_^R1_bq7Cc8c;;9rR?=EI-^9q2)BGLX=%N-P=<7w?*`B=d?Sen`zHP= z-wf`N@5t~`aZy@aNWjW`qILTCb!bQ=^yy?Xqq0wM)Y0hH>R|WfYh3ppXaU2^lPuW$ zO}`H5Tj2WKsu=XWeW|fc}9;O-p^;&q9 z19B6|k>zDk9*if1Z$DqphrDP=f7zd72Tn6N%K}TCZN(t8(TE4l@9YYmF&kF2*O$%? zRVVToQ28o+1@h>Za$fw+cKeTA`g;3-<=@a?L%}?Bp!>KtT{h=FW0Gv*KBYHT*0A(0 zgYq9ylsotb767^)CH-iW?KIjUiP(rg)vMeh44w*O1UHI*f(1X)9JrXZj9DwnkUD70 zo#lZQ0;qZgXgx+e8+7t}O(QAOXScX+ zP>MvmeMq1~df9&&xs+_;(npE7Iswy7q!} zJxZ|^CfPU{%$_CR8r_Sgy9W?Hlm~&hC{Y1=Le9h!@Co}sh8)_m{4Mb6wW4A;(Km5; zq^nNBXSGyPJ%!`l=g{6925tKV?p~pnB+)sxWA7&S-x0V7myX=jn2D<5Leg^_4jRf6 z2NQ)otFI>uwWV*zJ@UQKOWBZ9#&L16SkT2{k;~Dc?*msIt|J&|Ns^=>#r|2>%kBn0-xt>f>)KE6UOW?ruplfrk;#=F_wZ~tP@lA2DLbh;6bk)Cn4vP0E@Mk>TmxZH}jArOeLni zNrhapB}s&uuleN}FyQpja50glNfk8lplx13zOiwdBF+wNOy;@FhBckoi`%2(>tEMC zaTNPAItB;46p(2<4+?E$<&?xb5H}#d4sq5qZ!wANmEe}8<0hx%7f>XM=O)y%ZARDP z%*OPH=il|x>D!~LSsMIjM_FSwBATBV2!y0RV7`E~t(S|-!ELq5=&h6p@w)w+m7Me> z-Kqle^wVl#%RBv806r!>q|1PAt!u2-$=;i{az2Ry+#e=|-1ij=nBKh)aMfmjoYU~h zE>f_f`VkyK!O}6|*uk`YQHDNDNT$>BXUUX25G2lWjGKuQ1FuuOl+2LiN2TVW z@6;dqhwn&fGcU&rrB4P}9d5Nh8*{Qp-G|uaup({2NrFhsh=;2K9EugvywgFGK3}Gu z2D%3bW<7Tydd&npe?xU(6Ud^RRU~FmYK*D$#d&WaPL(0m=}Yr>qTtA+j0D3%S?0{o z&I#FG3$84GU6endyHCud=nRyfw&NkuodL@{XqwwXchxAW+9jHTRA`s?FSDWEcffa0 zo?AqL{S?_{putV}eb%8_GAt(JR5yX1L94_~(@i#u|&+SlaqaB?7RCZMb43 z6UibsD97egfrkoMkCk_9OdxTv`3kf*0vBP!5;Mn zfr09GyUNcn)v`4XPm^h$R>MVJbLN)hXH_jrRSB!{%?`fpNh%{&9hpuNL>t{PhDbnv0UWOu+z^6S4k?4LTXC%O5@KHD zR)WuRL7k~+FOn*lrT*W7gpkw0(akv-pd>GHboxOJwMXgT$B!Zp)xUD6Kbe?Y`e`~E zJ$qOTww!>?`m+xYT=+x;pT_Xs-DF!#z*XEo4rhHpR$xS3O((q;uK! zpuTEi@Fv8hB{4dkfZwQs#mpi+Cu6bhaU#TAh+MIf!E0>={>$mc_#&uqIic-n zmz#^xqEvp@&mDGxZc}QLXu0*zNCM9M+s}{RfB2Y;vX`Zhxh-H>Uzh$tlo#S;b8awk z#Ew4ku?)H2lK<{EmZSKmKqaI&r=M+LY)4^brAzS0?ed_9n?{aZ-i z{W=4WVWIvHE&KIG(>7>B{*_E^1`_f;>cXvoW&6tlW%maTKib9IYNCPte^TkKq`3x^ zGCKMzRwY}7G5FZjBM(~C5dcf*?$pnkAW~U0fb}2!*Iq&OOwmBj)W<=&YKG!(a0-QX zLFQG)e+^9^LxK2hq8J(wd=+TZJ-k+m1}kx@L{po3F}Lg#q*v2AHZr%YM@vQ2)U2cP zkCF8*{QCnyR-XwG4D^r!jpwIUoA=6xMuB%I_{orfz$hdn&{yfk>2EC;5^fEv7sOf( z#}zZMQu(LI;Y@UGc6+n^YAw=E3gy}3yVBsem_}IEhWfW3G`z3k411sR{%q|YX*b}~ zIm;c~D;B+`n>7nX>?2Ka=9Z0b>VFp)eBnCABa-E-9kjtW!`8C#i)a8mH)UYPhh_u+ zZ4tBT>}*0SoBN_>BIeq$s=;~TriZoq-kvW>CAYt$9n}f}?r6Q)cXD#$B$e`j4^-TY z9-=ho>nM5jH%^J_9p;nD-qx@)e(Iz9(sIzu;|uj&iVs_*OCn$E)FN1Y5hU3Az}_V| zoB(hPf=Mm^hOtf_llIOLenr-FolStp(sF`?4*9j&aLl-l4%N26*emAck0@!SmfpwcbJ|kOGC4 zHK#<;Ao8jcS5`ai(omLeb>hnUf%|!UHtOjzOkkUX{=^1tAJRv?U2|Gy3pL_{&ll0z zv{A%OI5TM8wCcpmu2mist zs?g%^fL9N>n$N(zjnQe#9CGQh9bWRYe9*D&d>TbJ4Pg8h(mDKa$MI1bSsIy5PPG3T zJ24Y9?-f}3js(%X5=i*Yy9=71Y?^lXnuLN>E6kF5Vd&^u0-e&F@U2?- z)2kjtNp56H_X*2@^NE`X_Wl;r=M`D@6&l^{rXT@PzFK-i&xt z9#%bBZFrGggRo8#c=z=`Gn=#=<6*-4c@{A-6ixYK9tA)(>jewqm2%>bJz42r>4{{z z?k8Vy)__VYb!9Pl1zW^GL%f4eg)ya)9#H#U`+oWJis45-?ts=*U86MrZL4V!F6tX@ zeeij6_#n|{9=fn{)$>Won;L7}b2A9(x*9^gWgBk|6?mEX&n;+pBTX^oJ5~N%GWb%< z{&dEaJcr4^j4%D1@9wX1bmdtU*v=T@b3!oziO_iql?Fp)E*BOU%MB!0IF&eg6P6P> zaQnW)(~=1XVi@DY44;z{Ub*DlwIdIP8sunDWF%G?V#|WY#6^YTZ=%*y%o2F+oeNJ$ zoT?3LEkf1AxUoQN+4pG9Q(lzd7T)3?s;PX}-r;k;3nJ8+-Q<7_PdLMk+CQ zvHc~^Iy8r&gs0jcy(Mn1)+5_YtiJXvjW==MEX2&M?YvI5HR(rc>;D&LEiQO{u=5xJ z13P75oQ>BDI0?kO)Fii1G*SmKhOnN;d|z}JAhT71DG>&xNZHEtH*YZz{PX=TX6!tz zwUbJ`LjF<N1jQlj;*MnR#N=Vto-2UOipSnm&3 zl@g0Jj_XoHdCG3Aru>%kHT#;9-IlJ>or`Pzqc8;_CCHwY<0M4EM-s@!ZNAb|HeRhV zzApS@T;Yk!>>GNEtniD40XuXbV|tb?h3|R{VY1G9_qC?#J?*WqGQxbk zR-ztP7?z;SG2XA}%VAdg7PF*O_q$%|n`a3;ni{I#J#oh(0H?DR7zgG<-BV3e6F4XP zgO7WqACW4K{=g1Ds$!sv4(GXc$9u$qkjkS?K8W&;Jnlb*KeI06g=QUkIgF=d+3xwy zzP-=3(7l71zpl^s8s@b(Ax& zQ%CA-B);2Esy4KGOB_F_ z*9*Zy%Z$&_P37=Vr&gdZJoQE#geFK@tv`L*HA3{^cegt{>pQqWCukeX;`e4t#MmtF zKfX|>f4#XF+4dV_wd!TSncd>U;WM8M>lKBvM|6l<-4ll~}Al{XqJXPqsUn?I{j z*G*?2`sR@Ip}G{OLH*5{7em``@*hp8@zLqs4vk9nt{$%%^%<%U6_yROj1(u## z_(y@I_-o5C*c_y>pDX|*@q3CYQXd~y(!KgoxflP(WtjRXd;+gbR)dq9>dNKL@TIXi z^JulXvPCyd&RCR|47we6;b#k_>Kr;PtWtk{k643KthMECtDDlTmc7@$TR5%G$`B!Z z&;(Uv+gPwSjte+ci_`jwgo?yxG<9z!g5Y)?D764gqCmOvT~o*RsSC8df!6_HJzHV( z%dwmjBWDgd1Dlih-E@>=AC?tx}Ez6Z&AiHs90{)7t)B&lx}5wS~!M_-)K0XH5X6 z-VWXucc9I$@O*ln$Y%-~R8EFB3Lay=j%M0@?GblP=ilL4hki~j3D6tyzrm-lw6ORP zG&)9e5F*EQ;$l?u@bdncf%>*uXPMKVNgYWyLGcFz`ur1|03q+vxtkEU6XWGboVKi~ zub-_4EZ2!I+SM`R&8Fi0-IJ?c9*_b!5vxZ?B2kPhK>yQ8W5c(cORX~(@R_B{nK`a7 znFPX5MA(lkjNdkYkZkbDa9**T1A-2dYZNbUY+bAx7p_;1=d`jM9%E$*dbUxLp6FwQb)lv$4R1dFczZ_lTge|{n zKDoDh$XI@UK<6*?TaEcGv*$6|3Kt`?H&djq7Dx#~42dc`dtP0(aUi=dVMkvyUC*k8wkWiiirAuIdAKdP_Lk~NfjNg0bKZ9&DN z!-Z)`9x3~>m=^ordvje#`ymqlp4W5cXlA<2{QPvT#HwO5-Z2FINaeon=nkufrzT$x z)XO$_UTjY|4YuEPkW{)25i;_Xr)6ceqat|9y~@P1Xf!aJ#-DdgN$*B#r3+ugME+}x zX$F1>V3Aw5RJD`mf-ENvKz{N z!`#htWOx{rh(B{Vcl#qpi)VmGU$y_`za%YG(To6+LWh2|(NHpGgUa7;hc4vbujh%t zX8x5RyA^125Qbh+NU52mi#$G(i_v<1>$BS#&D|E7P%>MGh0w^CKWnIIGQyvZ`5Ey~ z9z>X2Op)juryij?lAF<^!HM*$66iJ5b>kl(e&X{lPp3wYh<$$pL8naYU;ORL2MKf$ zz<((gFP*L&)nm44QdNC`(1rbM<(J=A*^UhENBtf*OaCRIiV6e+YwH?r#pgY7lu8;{ zw8Q!OfVaSVgCvtD7-0Efh}eD9Xa3kwzS)G@VuP!cX+|XGo&C4-d+(zm&I{n>AKU`x zp_)sXEU@0^^E3p$ziG_5Cm7L5B`fxaIBi4V{ebt_h$#y*NY&G-z=7*~Wqk!)ldZCJ zp*xw?mSg#NvwmfI&cWuQj7 z?_avZ-Ng$HzplRl+0OD17gfd{WjXVkl?qr}sF^a@GUzs1Ryak@?YjfGZ$ThkD$PxS z2roFJB4xhPvOikD%zHDDlhcCgyVvYi&=$XtXPQKG2n~fmI&DOp!=8tMF&)<{)zd;+PEjSVg!siW4SFCrc8Jue01x$fR2w%hO*^o*C# zr%gCv#vz7I_M;iIgDRLq$-l{{V)3n$?v)qIY#BAY+(7L1_+owb!0JBBwYHls{jFbN znwi>}!uR$E_~96%l;^>)so(jOJ@R6I?io}%o)Nd*7HjnFJ(==DoJywh5YBwzc&j?! zcO6#)LY&wy`(2J)pc7jA&A~);BDf1ByD>jBzjbU!oea&PGrwxc-nq&cw#S&gk!Dxwbpdr!zRgrFKFZ>e6QsXt)o&cgx`h?u$Fa`Ey(~`LVr+(QW zi4?pN9_0kGtpB{DtBEgUt*rz;3S#_#&bB_du)~blwLARL7h2z%;Tvs3*(*(Ou;tRo z&E+ys>ZtRl zZeZQ7581Ei#h*Pp#h#Z5T}LDQXTEzz%V|y_DWqBGG8DXJ`Nk1$-Zt7!_*oZ10GBbb zI6uGpdr;x>H8JQiK@+PqQGw{m5)@tc5=S1#_#0>ZF4%u7wVc&=_l}NGh{^^Y3SfnZ z3U`>N8zVYTj_VuRUJZt&7%ZI?h*_!9yT5TsaI3->J>T_+4-|c_tco2;(&5a^XhEJ%eY#sPDNAM%V5N^X0 zgVcfIsG}ZHF?C)VPR7rg*!-OJ3SY7R&3NVgR&zUw%0mAAfEmp}19W(JSSs>H-ZiJ` z5qSfENVu#abv~P3zn}-dD)x_T@MxfCx^AgUvxWU1xhdtZex)M#eh;gVCwlW4-M8T! zSt$bRT)hh2FQv@C?cJF#he0Wj54y5k+NC(LQ2xPe-5vI}rFHwQ=CdBe`Eo(oePiE-c*}e2Cq@R(;r8uzImV15S|Uv|3$Pa*YRM$Its2I36zC8sbn*TL z=3{wyyR>6^&>V0x;q{3>9$ra^y}mn zYJVyPX9OK}A^wOmQ+>PVys~@`j;*}S#5_ydRPTZw2#Lc@RMo7vKLUGnE=BuQKi4Z7 zl3fW{^pA5y`wr(2eYPwMLAX{eC;rd?&Fo;546;Vx&8Sgtt}8|Qw>aPiqTz&)Pwnt_ zq?HDu?Q$u7(Yc2>@t`2xaWFZnvau180U?-l^@pF$T+`}Auku78JZ zfg$FdM?a5P-!UlM`1yn7whvU}Xi{Psw(~)9W!`cHAV9LGoF@lm$T8XN{D?s^`3WerrSE#j-e zkE(xG9LUT(wz8Zkc-1$?e_teq|Dtu`jb=}0yxCUOS#AE+PMS=G^wT+880)#fcU$rr zi}%QuXqOO4;UiQ#(&~Zz$%TnU)Ak6-crFP#R#(z1l18W`H7=Na812F5z2$liKMm5( z01y&qip@7PY%KnjS@{8k`(5U|Bx6({m_+W6EW$swkY2t^(Km8Dit?#%N+B#5LF%sDnf7F2I9he%L}fXE;o0w{4^LxPB#yJ}OPDQY4Fr zOO5t(`Fi%=0i>tr2gIxY#a>4KW|VEP+e~_-OH+J3Q*aS6K}b{aHe5t8fo@CVs?KYv zY9evfb=E0sx0m0^_ImIp|78IW_R^OLVoA^f>8kcS0by0dLeoi*tBBJ*@%fd`P@KPU zC2*lC8^t7GK*8UEI%yA6PJH{Eg_BGCPlv%rtsD>&DwpX`k4n&sp7iHg#Vm3`G`PW(#Oq9VX3mzrtOMNwj45$D9HBojsa@Sdt(yiVWF9{{}r zG*vN5{b~E-s}E$5>dH2{9&Y+IffiHGS++yr+X?YOsv`6o(C_isd-98;RHoc0VdJ{o z_zfBQG5!ewbR`zBb zQJOdF@byLHIHQTvx}`YbFsuM_|DF6~eS$MIhoWXXYs&wQY3QWOo#MOXAE7UIBGIO& zoxyT{#Kb~)G)D+12;2-wKY7-sn6U>arn+NovXbO{>a)Aufgf9<-n^CPmbc{^9O-62 zzv$VLzLEIXZL0sBPRVCv4`VAq+^VM%P_ia*^TturtLH6@`u2g{aBp{z9JG37%(V(I zS!I!T*a-0J)XoR>N#}l&?GuFf^H}o_$Ru^BF3!2s`sAr^Pk*7r)A)kO%XRJx--J4E`J?mhkVp*vfk2r8J^YF znpq;Q%9<_)0hbe;MppMUqXc1hY=)q-=y5}>Nq;#ntu;Z8+syT8xh2*m+|oxo+MH(M zSYA+FY>c03Z|G3jvSj1OB%x>ivc{*E4Kpoj;@wg=!SrH{jMt6@&XbjDzLD2NO5$8L0~nFY%Bk_-h_Dp8)rWQn6_W#m{iryJki~pa#-n+403$Trxr*n4@qeM*cPSLu`)rj@HQ5c&px4A=EcdU)^O( zE~X%k_W55$oJ>L*CMhVeSCtlBVy5i-8H7rKZSSFofS_XUJJJQ?Sgh&+E`|ZqCl!W< z?*v*YVqHJx1^|FN;*)$oKjpXOXPlZEaxqEx-Qh2`^KjybjPfT=y!X!StJx=h^72K( zLN2;CoSO027ehj|-5B#rYggTwtd@Dp3axOdyJi z6jtea)n5WTwJ=}%Q~u=^-vsUStf6g3M2~(08Fb|&<(uSwI~&J2mr%r3n;YV>;7J}Z z$`j@cOeA4_n`pqox}ck|8G|Ih$P=+Z^{i{Vl`)6mB)$@NlBOTEd=XB72ZOM3GkI5J zum)rGhbE?4}Y_RjJzsxMmOf;33CG)T8f4qYM*3P^{DNHfF? zF?2|SNOvnrOE*Jz2q>LH$B;wbuw)vzcO9dwi;Uhj4w;lXOXm!zjsM|Nbt^H)tW376DpndX&cME66gxzNy`8!uk zBs^$s5L+HrWZ`59xB>jh)S~3jM0m?MAA+}xve@f#!maC}?BU?6XC`MugQgpCSBu<_ zsoX|0O9n*e%;`4Xkdu~wX>VAgI8n48=t#rC$N6fLF&8CLsVdxBS*t249T97j=NF_! zL5Xci^!y>qTu&%@PHM#buM=YtH}4N#CJM^<=}0u!esX{*2{^XR^3ZpkR{cBAga2w2 z`0JP0){>|t;Ge2_NK$u(tHbAo0X`0VHRap+^I!c}^_Gdt)`QRR`z@-xo}w{ywv4K2 zaNtlT65L@7q?W%73 zRhh1Il>L#9lYRht>Uoj};_X3udm z;a0GkWL3^&oUU;Ep;nttIa1clXRa7!9ig8@Rz^n|qt80aN(VDW79Z3kGH!JWw+}CF zQzvwbgOf02Le7y;8eA2WaTz{g;^*{`HdsoUeP@_Oks*UGz0HvP0kdJ-pzOh0a`?8@ z<(Hc=@S~p;oV!-5RCmNb%o>n7AMUnAFz~;JS$=&&KSBJ1?nx(i=hBpt3`Ud}m+2hZ z!>Kq1{+b}KzrgwiI07|8%*(7C_xY{tuw_#u_&J12##w-4{ak`GM7j5G)(3tgmT|$) zQOXS^SRYTOb!CScQOMf_eq&^+kv78~rIrl2ov>}_SKG|_Z)DBNttZVNk(%P7UyF>V z$xyM~J*7uC!*9!pObZX}AZi+7!$Brd{#P4xum&o^Oa6Kn3TVu1t~9Sf9!HtYLm%o){Do))0;0{du=Z+x{h4EILCt%x9E6xy#^&>hxy6Z|=kCx@HvXit z2{MuFsQ87YgQA&y#tI zhibIFwGI|6x3tk;mAr7MdKO2r8+BUl`{*V!s@(A$Z-S08R91KMN}LG~{maxJeJ;k1 zaeSh1D;=yZ)#&z5SHDmC7?-Ewh@-xWA<&yzQ-VVXajJA8OTs2$ngqPcF{ zd>By4^v_bi*dxBTibK2MdCu_Z6+p(1Tf-{@anm1Im1-W8bG`Es&w!A|UQ%wyCN&C<`mJ$r4| z^OsoQ+I{cldW*^7!l2@kZ|NJh@&o$QA=sz9$Q6zes(+(Wz%|>?wHS|jw|SLjxcKbl z31ap8Rs<7g&y|kg;EIavVaYDGeSQ|;nDVpQ>$nTZXw7(8BvrM*`jNiuD1Ob)v_PsZ zS-CXb{N+c8`FcH*kwfnHbvYa%3H4oK-j5ktma`uT{61ID2-}ii7)a(2rmVIQmFF-dIrq3&jLp4r}Bdl;|f`m{WUwRrWee`pgX2_qLoCWgursLBnN ztWUdN8aTYbR*a^vp$W1!d0&%i8wB38&|NJXevR!2HgS*{ zMY#Bgz|!_Q<0!wCCD(wbNz|IqWInv7CPOSVx&7>!J+Z6>bK>~nZohQ7X&Gzh91=j7 z;`XeOoaiUsKK~Jo2v{}ZL z8%OkuYivmDs_mwVP38dMVk9P=?&jmXwhW{YN@W@i?m6#nv-lL1F? zy&O{biUil4=*(wfyMSlpJ|A>mM}84?K^#E&;04A~5dQ&9v`%Tw_e5x>(TpA0Uq~ zWW)XtS17cEJX_*ZGA!?V_~fE)*ygEo>^p2S55n(T`z-HW+i+ZgyH=o{$wLvbN4kqP zciHrsBC^G|M|zc$NM6)3ps6T(f#?Kc76@X2=&6J#bq->FVx5Va{i;_S&>&B>7gjr2 z^!eRl6qNnah#ILN7MEdvJJiE0y>^VOCI8IQULFunX`|7t&#fMxlvaJcKz(c*X6_j+H|B_VsiX%F`;|5tNBL-U{IQT<^l^Ns7ZXy&i=Y+& zHrq4FzR@w_Kj>Ri$uZ#r%X;&#NoaJ~mC)qk9n4t@aLf2lzDU(a*ILdZk@Fq~j|N>V zX*#C{d@%Uvu>{8ie>+2ddLW7?F zHmCutwj_K2M7;*cp0UdXETu7`pV=cBX1!)w;Js%?C{Cuv!k1e1=~3ZxTFxr8xyGPu+~KxHoO|@%r_&q`vwc`7D1~W0tTm9F$x} zjsDB}_oN-N;q?b^LBd|vc~i*K z0TCy?7*6$+!+!>!;|?pM0c8T?ivwr>W--$IF92a+BXd(Dlfh@&R4b;ZA%P7Lz*~Qn z3pypQ`UfbGCml`A-zC?#JTtDcQiAbP3V_Ir>l_CD zv4-ocv0^Ne8}SOrJEtTKd0X4XCXev*ya@G4Hg_ru*!*CUnh&KD3rAkmNxl^hWzCI@ zQ#qqj2nn+xt}?wc$Fvc^E4AKfZ9$xiAkoyoZ);Z)v3;=G+S&;6lpp)u%bo_KAl46R zyg4k+tOtrH`>jA_`@quJ3Tdf14pc63jw;MrCF+CD@?WF5;wgpT&Jj5OAa!AvL)*~? z(Qz?Zk#7s((kq1!J`O{_)Kz4+BW)s&6Ow&EBk2wjr?DBtE1Z5NHtp@#6wNKV9Dc4b*UJOKcqE^0H$=V9oh3gx3)Pg zzN%y+RC7W`7=<6cHd_B&7`}{03UvY5LxoOhf-?r;g~;C}gPEnDaRYm@TgTPTUPpPZ z?HZiCqrnJeL8?Ykq1lp>lNf-AEewk^Bg3hE_QjP+@F-X*5Xw zWJSh4Lq`$$1wZ0n+OMVS{g$zF>&qNoafj5(IAa`2;h#DM+KRpMoRz+@8fKx?Y&|}^ zk^N#n0x&ne5I*K&0CN~gQ~DnM{O@SDK65Y+uj)ZogVb>xN?q$Jd=L(IVFN5&; z`}tdryKd<$sXfCU$TYWWoh~DvPyWnooofW!^2?%)CC(~|df#CyZXE5ry2pkui#BW~ z8~@EtJ4=h|TYQz%49hlkdAO%TKQg~2EFQMK|Gvh5dW44qKN{d1KagR{mku2tjc2=e zBww|$nxlHqwagA_-+psFvL)^8FBz+}HAmgrns`FLaX2bv0W1IIB#AR%4=x;`!ZNa+nDym>sIu>L1 zK|oTcOLWm)@8Vxp_BRtNFYBx3arGnVu5B9I%!DjJ2!s;%zIFzXVw3oPAg58E^w{Ih zps>u|^ed8xW3|i|TZNmJfchdx)>}ur5rAr|Pe&yMmN{T+5&)TZ>T>pqG_3Ymyoki90>&k9n`)H}?qBWjPs-4=ZlK}p&rh9kiRIz|0-FQHth6%G4gnXyXIp&$8M~fk_|ju z7kPNfM?=vt3!Ge&xnp?>^y%>?dJmiP7oLXB-Mf6N_Qz2fagSxp4uAc9V*{eZ{?aqV z9(g(+6qjD+jXS>8+pJdCf z(9Xqf-0E@cqs~SZ256z!)Eg7A@TfjQd6892M1q}(vRa(2@n_`T z0vt~&@P$2c4aU3CU4?I1FQ$E*Id;aIad6oAf7BekezaQ9URwGHwJtI00~J@H3*m6Y zmZ582`w|pDghQPza|=+poXkX`OAu=wsrudqOq}+m;HaLU_3sRp0<4i_=Ssc~rdO_V zBdfmevT$|6+SRme-bNhXBFh`W%ugX(w=I`fr?IGJ>U9AhcGEztY-|4+sEkXt897o9 zq6H#qNc{jB^TAG9K3#)}_est^S!2>_K@{SKd>$OSzd6cr9&r9)D?|ejA(qXJevTrsfRqt7mSl%9do%}kgtutI_{ri zmdk_(jx#QY;vlRUCXWwWesD?^s*0_7?s6Z%k0Pbvn$(l7)3}0-skt%vCx)k`nBA#= z!|IviGps*yE9BC_cB!6d!?AKuz zZ=M(!;+RyHxN-=HVZcgBwXp*6RdpI%8z^%5Pyk!6# z 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 From 5ad263536c353183c269adb219c865b6f72ac0c3 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 15:34:22 +0200 Subject: [PATCH 11/19] [vivado_ip] fix mtime configuration issue --- rtl/system_integration/neorv32_vivado_ip.tcl | 34 ++++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/rtl/system_integration/neorv32_vivado_ip.tcl b/rtl/system_integration/neorv32_vivado_ip.tcl index ec7df9feb..7ba27e0ab 100644 --- a/rtl/system_integration/neorv32_vivado_ip.tcl +++ b/rtl/system_integration/neorv32_vivado_ip.tcl @@ -70,23 +70,23 @@ set_property description "The NEORV32 RISC-V Processor" [ipx::current_core] # ************************************************************** # Set configuration dependencies: Interfaces # ************************************************************** -set_property enablement_dependency {$axi4_stream_en = true} [ipx::get_ports s0_axis_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$axi4_stream_en = true} [ipx::get_ports s1_axis_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$ocd_en = true} [ipx::get_ports jtag_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$xip_en = true} [ipx::get_ports xip_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_gpio_en = true} [ipx::get_ports gpio_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_uart0_en = true} [ipx::get_ports uart0_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_uart1_en = true} [ipx::get_ports uart1_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_spi_en = true} [ipx::get_ports spi_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_sdi_en = true} [ipx::get_ports sdi_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_twi_en = true} [ipx::get_ports twi_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_onewire_en = true} [ipx::get_ports onewire_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_pwm_en = true} [ipx::get_ports pwm_o -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_cfs_en = true} [ipx::get_ports cfs_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_neoled_en = true} [ipx::get_ports neoled_o -of_objects [ipx::current_core]] -set_property enablement_dependency {$io_mtime_en = true} [ipx::get_ports mtime_* -of_objects [ipx::current_core]] -set_property enablement_dependency {$xirq_en = true} [ipx::get_ports xirq_i -of_objects [ipx::current_core]] - +set_property enablement_dependency {$axi4_stream_en = true} [ipx::get_ports s0_axis_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$axi4_stream_en = true} [ipx::get_ports s1_axis_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$ocd_en = true} [ipx::get_ports jtag_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$xip_en = true} [ipx::get_ports xip_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_gpio_en = true} [ipx::get_ports gpio_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_uart0_en = true} [ipx::get_ports uart0_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_uart1_en = true} [ipx::get_ports uart1_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_spi_en = true} [ipx::get_ports spi_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_sdi_en = true} [ipx::get_ports sdi_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_twi_en = true} [ipx::get_ports twi_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_onewire_en = true} [ipx::get_ports onewire_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_pwm_en = true} [ipx::get_ports pwm_o -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_cfs_en = true} [ipx::get_ports cfs_* -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_neoled_en = true} [ipx::get_ports neoled_o -of_objects [ipx::current_core]] +set_property enablement_dependency {$xirq_en = true} [ipx::get_ports xirq_i -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_mtime_en = true} [ipx::get_ports mtime_time_o -of_objects [ipx::current_core]] +set_property enablement_dependency {$io_mtime_en = false} [ipx::get_ports mtime_irq_i -of_objects [ipx::current_core]] # ************************************************************** # Configuration GUI: General From d8483a5aaed6ed747ef15b058707b6e22a7197f2 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 15:34:31 +0200 Subject: [PATCH 12/19] [docs] minor edits --- docs/datasheet/soc.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/datasheet/soc.adoc b/docs/datasheet/soc.adoc index d27798733..8a5010a61 100644 --- a/docs/datasheet/soc.adoc +++ b/docs/datasheet/soc.adoc @@ -211,7 +211,7 @@ The generic type "`suv(x:y)`" is an abbreviation for "`std_ulogic_vector(x downt 4+^| **<<_on_chip_debugger_ocd>>** | `OCD_EN` | boolean | false | Implement the on-chip debugger and the CPU debug mode. | `OCD_DM_LEGACY_MODE` | boolean | false | Debug module spec. version: `false` = v1.0, `true` = v0.13 (legacy mode). -| `OCD_AUTHENTICATION` | boolean | false | Implement on-chip debugger authentication <<_debug_authentication>> module. +| `OCD_AUTHENTICATION` | boolean | false | Implement <<_debug_authentication>> module. 4+^| **CPU <<_instruction_sets_and_extensions>>** | `RISCV_ISA_C` | boolean | false | Enable <<_c_isa_extension>> (compressed instructions). | `RISCV_ISA_E` | boolean | false | Enable <<_e_isa_extension>> (reduced register file size). From d3f7125cfc1013a66e661260acbb7ba7edb4b43f Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 15:34:49 +0200 Subject: [PATCH 13/19] [docs] add debug authentication section --- docs/datasheet/on_chip_debugger.adoc | 70 +++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/docs/datasheet/on_chip_debugger.adoc b/docs/datasheet/on_chip_debugger.adoc index ebffd03f6..567fd3c5d 100644 --- a/docs/datasheet/on_chip_debugger.adoc +++ b/docs/datasheet/on_chip_debugger.adoc @@ -107,7 +107,7 @@ register. The following table shows the available data registers and their addre [options="header",grid="rows"] |======================= | Address (via `IR`) | Name | Size (bits) | Description -| `00001` | `IDCODE` | 32 | identifier, version and part ID fields are hardwired to zero, manufacturer ID is assigned via the `JEDEC_ID` top generic (<<_processor_top_entity_generics>>) +| `00001` | `IDCODE` | 32 | identifier, version and part ID fields are hardwired to zero, manufacturer ID is assigned via the <<_processor_top_entity_generics, `JEDEC_ID`>> generic | `10000` | `DTMCS` | 32 | debug transport module control and status register (see below) | `10001` | `DMI` | 41 | debug module interface: 7-bit address, 32-bit read/write data, 2-bit operation (`00` = NOP; `10` = write; `01` = read) | others | `BYPASS` | 1 | default JTAG bypass register @@ -144,7 +144,7 @@ It supports the following features: * Provides access to a reset signal that allows debugging from the very first instruction after reset. * Provides a _program buffer_ to force the hart to execute arbitrary instructions. * Allows memory access from a hart's point of view. -* Optionally implements and authentication mechanism to secure on-chip debugger access. +* Optionally implements an authentication mechanism to secure on-chip debugger access. The NEORV32 DM follows the "Minimal RISC-V External Debug Specification" to provide full debugging capabilities while keeping resource/area requirements at a minimum. It implements the **execution based debugging scheme** for a @@ -159,7 +159,7 @@ single hart and provides the following architectural core features: .DM Spec. Version [TIP] By default, the OCD's debug module supports version 1.0 of the RISC-V debug spec. However, for backwards compatibility the -DM can be downgraded back to version 0.13 via the `OCD_DM_LEGACY_MODE` generic (see <<_processor_top_entity_generics>>). +DM can be downgraded back to version 0.13 via the see <<_processor_top_entity_generics, `OCD_DM_LEGACY_MODE`>> top generic. From the DTM's point of view, the DM implements a set of <<_dm_registers>> that are used to control and monitor the debugging session. From the CPU's point of view, the DM implements several memory-mapped registers that are used for @@ -269,7 +269,7 @@ are configured as "zero" and are read-only. Writing '1' to these bits/fields wil | 6 | `authbusy` | set if authentication is busy, see <<_debug_authentication>> | 5 | `hasresethaltreq` | `0`: halt-on-reset is not supported (directly) | 4 | `confstrptrvalid` | `0`: no configuration string available -| 3:0 | `version` | debug spec. version; `0011` (v1.0) or `0010` (v0.13); configured via the `OCD_DM_LEGACY_MODE` <<_processor_top_entity_generics>> +| 3:0 | `version` | debug spec. version; `0011` (v1.0) or `0010` (v0.13); configured via the <<_processor_top_entity_generics, `OCD_DM_LEGACY_MODE`>> top generic |======================= @@ -480,10 +480,10 @@ code in debug mode. |======================= When the CPU enters (via an explicit halt request from the dubber) or re-enters debug mode (for example via an `ebreak` in the -DM's program buffer), it jumps to the _normal entry point_ that is configured via the `CPU_DEBUG_PARK_ADDR` generic -(<<_cpu_top_entity_generics>>). By default, this address is set to `dm_park_entry_c`, which is defined in the main +DM's program buffer), it jumps to the _normal entry point_ that is configured via the <<_cpu_top_entity_generics, `CPU_DEBUG_PARK_ADDR`>> +CPU generic. By default, this address is set to `dm_park_entry_c`, which is defined in the main package file. If an exception is encountered during debug mode, the CPU jumps to the address of the _exception entry point_ -configured via the `CPU_DEBUG_EXC_ADDR` generic (<<_cpu_top_entity_generics>>). By default, this address +configured via the <<_cpu_top_entity_generics, `CPU_DEBUG_EXC_ADDR`>> CPU generic. By default, this address is set to `dm_exc_entry_c`, which is also defined in the main package file. @@ -518,8 +518,54 @@ size and faster execution. :sectnums: === Debug Authentication -TODO +Optionally, the on-chip debugger's DM can be equipped with an _authenticator module_ to secure debugger access. This authentication +is enabled by the <<_processor_top_entity_generics, `OCD_AUTHENTICATION`>> top generic. When disabled, the debugger is always +authorized and has unlimited access. When enabled, the debugger is required to authenticate in order to gain access. +The authenticator module is implemented as individual RTL module (`rtl/core/neorv32_debug_auth.vhd`). By default, it implements +a very simple authentication mechanism. Note that this default mechanism is not secure in any way - it is intended as example +logic to illustrate the interface and authentication process. Users can modify the default logic or replace the entire module +to implement a more sophisticated custom authentication mechanism. + +The authentication interface is compliant to the RISC-V debug spec and is based on a single CSR and two additional status bits: + +* <<_authdata>> CSR: this 32-bit register is used to read/write data from/to the authentication module. It is hardwired to +all-zero if authentication is not implemented. +* <<_dmstatus>> CSR: +** The `authenticated` bit (read-only) is set if authentication was successful. The debugger can access the processor only +if this bit is set. It is automatically hardwired to `1` (always authenticated) if the authentication module is not implemented. +** The `authbusy` bit (read-only) indicates if the authentication module is busy. When set, no data should be written/read to/from +<<_authdata>>. This bit is automatically hardwired to `0` (never busy) if the authentication module is not implemented. + +openOCD provides dedicated commands to exchange data with the authenticator module: + +.openOCD RISC-V Authentication Commands +[source,tcl] +---- +riscv authdata_read // read 32-bit from authdata CSR +riscv authdata_write value // write 32-bit value to authdata CSR +---- + +Based on these two primitives arbitrary complex authentication mechanism can be implemented. + + +:sectnums: +==== Default Authentication Mechanism + +[IMPORTANT] +The default authentication mechanism is not secure at all. Replace it by a custom design. + +The default authenticator hardware implements a very simple authentication mechanism: a single read/write bit is implemented +that directly corresponds to the `authenticated` bit in <<_dmstatus>>. This bit can be read/written as bit zero (LSB) of the +<<_authdata>> CSR. Writing 1 to this register will result in a successful authentication. The default openOCD configuration +script for the NEORV32 implements this basic authentication mechanism: + +.Default authentication process (`openocd_neorv32.cfg`) +[source,tcl] +---- +set challenge [riscv authdata_read] # read authdata; not required, just an example +riscv authdata_write [expr {$challenge | 1}] # set LSB to authenticate +---- <<< @@ -552,7 +598,7 @@ asynchronous interrupts) that are handled transparently by the control logic. * copy the hart's current privilege level to the `prv` flags in <<_dcsr>> * set `cause` in <<_dcsr>> according to the cause why debug mode is entered * **no update** of `mtval`, `mcause`, `mtval` and `mstatus` CSRs -* load the address configured via the CPU's `CPU_DEBUG_PARK_ADDR` (<<_cpu_top_entity_generics>>) generic to the program counter jumping to the +* load the address configured via the CPU's (<<_cpu_top_entity_generics, `CPU_DEBUG_PARK_ADDR`>>) generic to the program counter jumping to the "debugger park loop" code stored in the debug module (DM) **When the CPU is in debug-mode:** @@ -561,9 +607,9 @@ asynchronous interrupts) that are handled transparently by the control logic. * effective CPU privilege level is `machine` mode; any active physical memory protection (PMP) configuration is bypassed * the `wfi` instruction acts as a `nop` (also during single-stepping) * if an exception occurs while being in debug mode: -** if the exception was caused by any debug-mode entry action the CPU jumps to the normal entry point (defined by `CPU_DEBUG_PARK_ADDR` generic of -the <<_cpu_top_entity_generics>>) of the park loop again (for example when executing `ebreak` while in debug-mode) -** for all other exception sources the CPU jumps to the exception entry point (defined by `CPU_DEBUG_EXC_ADDR` generic of the <<_cpu_top_entity_generics>>) +** if the exception was caused by any debug-mode entry action the CPU jumps to the normal entry point (defined by the +<<_cpu_top_entity_generics, `CPU_DEBUG_PARK_ADDR`>> generic) of the park loop again (for example when executing `ebreak` while in debug-mode) +** for all other exception sources the CPU jumps to the exception entry point (defined by the <<_cpu_top_entity_generics, `CPU_DEBUG_EXC_ADDR`>> generic) to signal an exception to the DM; the CPU restarts the park loop again afterwards * interrupts are disabled; however, they will remain pending and will get executed after the CPU has left debug mode and is not being single-stepped * if the DM makes a resume request, the park loop exits and the CPU leaves debug mode (executing `dret`) From dffdc3d60c700d0e43a020a80628fb340e454a55 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 15:35:13 +0200 Subject: [PATCH 14/19] [rtl] adjust OCD authentication configuration --- rtl/core/neorv32_top.vhd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rtl/core/neorv32_top.vhd b/rtl/core/neorv32_top.vhd index 1ed91cb4c..9db4d1b30 100644 --- a/rtl/core/neorv32_top.vhd +++ b/rtl/core/neorv32_top.vhd @@ -253,6 +253,7 @@ architecture neorv32_top_rtl of neorv32_top is constant io_pwm_en_c : boolean := boolean(IO_PWM_NUM_CH > 0); constant cpu_smpmp_c : boolean := boolean(PMP_NUM_REGIONS > 0); constant io_sysinfo_en_c : boolean := not IO_DISABLE_SYSINFO; + constant ocd_auth_en_c : boolean := OCD_EN and OCD_AUTHENTICATION; -- convert JEDEC ID to mvendorid CSR -- constant vendorid_c : std_ulogic_vector(31 downto 0) := x"00000" & "0" & JEDEC_ID; @@ -360,7 +361,7 @@ begin cond_sel_string_f(IO_CRC_EN, "CRC ", "") & cond_sel_string_f(io_sysinfo_en_c, "SYSINFO ", "") & cond_sel_string_f(OCD_EN, "OCD ", "") & - cond_sel_string_f(OCD_AUTHENTICATION, "OCD-AUTH ", "") & + cond_sel_string_f(ocd_auth_en_c, "OCD-AUTH ", "") & "" severity note; @@ -1573,7 +1574,7 @@ begin XIP_CACHE_NUM_BLOCKS => XIP_CACHE_NUM_BLOCKS, XIP_CACHE_BLOCK_SIZE => XIP_CACHE_BLOCK_SIZE, ON_CHIP_DEBUGGER_EN => OCD_EN, - OCD_AUTHENTICATION => OCD_AUTHENTICATION, + OCD_AUTHENTICATION => ocd_auth_en_c, IO_GPIO_EN => io_gpio_en_c, IO_MTIME_EN => IO_MTIME_EN, IO_UART0_EN => IO_UART0_EN, From d5139ea124eeabccc25213a2f7fc1a468c844d14 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 15:35:29 +0200 Subject: [PATCH 15/19] [sw/openocd] add authentication --- sw/openocd/openocd_neorv32.cfg | 46 ++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/sw/openocd/openocd_neorv32.cfg b/sw/openocd/openocd_neorv32.cfg index f580249f0..cc805eae8 100644 --- a/sw/openocd/openocd_neorv32.cfg +++ b/sw/openocd/openocd_neorv32.cfg @@ -1,19 +1,19 @@ -# NEORV32 on-chip debugger OpenOCD configuration file +# The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 +# OpenOCD on-chip debugger configuration file -# ---------------------------------------------- -# Physical interface configuration -# ---------------------------------------------- +# ------------------------------------------------------------------- +# Physical interface configuration; ADJUST THIS FOR YOUR ADAPTER +# ------------------------------------------------------------------- adapter driver ftdi ftdi vid_pid 0x0403 0x6010 ftdi channel 0 ftdi layout_init 0x0038 0x003b - adapter speed 4000 transport select jtag -# ---------------------------------------------- +# ------------------------------------------------------------------- # Target configuration -# ---------------------------------------------- +# ------------------------------------------------------------------- set _CHIPNAME neorv32 jtag newtap $_CHIPNAME cpu -irlen 5 set _TARGETNAME $_CHIPNAME.cpu @@ -26,15 +26,35 @@ riscv expose_csrs 2050=cfureg2 riscv expose_csrs 2051=cfureg3 riscv expose_csrs 4032=mxisa -# ---------------------------------------------- +# ------------------------------------------------------------------- # Server configuration -# ---------------------------------------------- +# ------------------------------------------------------------------- gdb report_data_abort enable -# ---------------------------------------------- -# Start session and halt -# ---------------------------------------------- +# ------------------------------------------------------------------- +# Initialize target +# ------------------------------------------------------------------- init -halt +# ------------------------------------------------------------------- +# Authenticate; ADJUST THIS FOR YOUR AUTHENTICATOR +# ------------------------------------------------------------------- +set challenge [riscv authdata_read] +riscv authdata_write [expr {$challenge | 1}] + +# ------------------------------------------------------------------- +# Check if device is authenticated (bit 7 in dmstatus) +# ------------------------------------------------------------------- +set dmstatus [riscv dmi_read 0x11] +if { [expr {$dmstatus & (1<<7)}] } { + echo "Authentication passed." +} else { + echo "AUTHENTICATION FAILED!" + exit +} + +# ------------------------------------------------------------------- +# Target should be halted and ready now +# ------------------------------------------------------------------- +halt echo "Target HALTED. Ready for remote connections." From e89fb51e5d9df7bafafd881f75aea9d8e978ae05 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 15:36:05 +0200 Subject: [PATCH 16/19] [docs] minor edits --- docs/datasheet/on_chip_debugger.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/datasheet/on_chip_debugger.adoc b/docs/datasheet/on_chip_debugger.adoc index 567fd3c5d..b6c719cf8 100644 --- a/docs/datasheet/on_chip_debugger.adoc +++ b/docs/datasheet/on_chip_debugger.adoc @@ -560,7 +560,7 @@ that directly corresponds to the `authenticated` bit in <<_dmstatus>>. This bit <<_authdata>> CSR. Writing 1 to this register will result in a successful authentication. The default openOCD configuration script for the NEORV32 implements this basic authentication mechanism: -.Default authentication process (`openocd_neorv32.cfg`) +.Default authentication process (`sw/openocd/openocd_neorv32.cfg`) [source,tcl] ---- set challenge [riscv authdata_read] # read authdata; not required, just an example From 59d3a23f794ad685f56d35397322f5664daaf59e Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 15:36:26 +0200 Subject: [PATCH 17/19] [rtl] DM: add authentication logic --- rtl/core/neorv32_debug_dm.vhd | 318 ++++++++++++++++++++++------------ 1 file changed, 205 insertions(+), 113 deletions(-) diff --git a/rtl/core/neorv32_debug_dm.vhd b/rtl/core/neorv32_debug_dm.vhd index 1a66de2a6..85ada10d2 100644 --- a/rtl/core/neorv32_debug_dm.vhd +++ b/rtl/core/neorv32_debug_dm.vhd @@ -19,8 +19,9 @@ use neorv32.neorv32_package.all; entity neorv32_debug_dm is generic ( - CPU_BASE_ADDR : std_ulogic_vector(31 downto 0); - LEGACY_MODE : boolean -- false = spec. v1.0, true = spec. v0.13 + CPU_BASE_ADDR : std_ulogic_vector(31 downto 0); -- base address for the memory-mapped CPU interface registers + LEGACY_MODE : boolean; -- false = spec. v1.0, true = spec. v0.13 + AUTHENTICATOR : boolean -- implement authentication module when true ); port ( -- global control -- @@ -41,17 +42,15 @@ end neorv32_debug_dm; architecture neorv32_debug_dm_rtl of neorv32_debug_dm is - -- ********************************************************** - -- DM Memory Layout - -- ********************************************************** - constant dm_code_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"00"); -- base address of code ROM (park loop) - constant dm_pbuf_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"40"); -- base address of program buffer (PBUF) - constant dm_data_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"80"); -- base address of abstract data buffer (DATA) - constant dm_sreg_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"C0"); -- base address of status register (SREG) + -- memory map -- + constant dm_code_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"00"); -- code ROM (park loop) + constant dm_pbuf_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"40"); -- program buffer (PBUF) + constant dm_data_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"80"); -- abstract data buffer (DATA) + constant dm_sreg_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"C0"); -- status register (SREG) - -- ********************************************************** + -- ---------------------------------------------------------- -- DMI Access - -- ********************************************************** + -- ---------------------------------------------------------- -- available DMI registers -- constant addr_data0_c : std_ulogic_vector(6 downto 0) := "0000100"; @@ -64,6 +63,7 @@ architecture neorv32_debug_dm_rtl of neorv32_debug_dm is constant addr_nextdm_c : std_ulogic_vector(6 downto 0) := "0011101"; constant addr_progbuf0_c : std_ulogic_vector(6 downto 0) := "0100000"; constant addr_progbuf1_c : std_ulogic_vector(6 downto 0) := "0100001"; + constant addr_authdata_c : std_ulogic_vector(6 downto 0) := "0110000"; constant addr_sbcs_c : std_ulogic_vector(6 downto 0) := "0111000"; constant addr_haltsum0_c : std_ulogic_vector(6 downto 0) := "1000000"; @@ -74,8 +74,8 @@ architecture neorv32_debug_dm_rtl of neorv32_debug_dm is constant instr_ebreak_c : std_ulogic_vector(31 downto 0) := x"00100073"; -- ebreak -- DMI access -- - signal dmi_wren : std_ulogic; - signal dmi_rden : std_ulogic; + signal dmi_wren, dmi_wren_auth : std_ulogic; + signal dmi_rden, dmi_rden_auth : std_ulogic; -- debug module DMI registers / access -- type progbuf_t is array (0 to 1) of std_ulogic_vector(31 downto 0); @@ -102,9 +102,9 @@ architecture neorv32_debug_dm_rtl of neorv32_debug_dm is type cpu_progbuf_t is array (0 to 3) of std_ulogic_vector(31 downto 0); signal cpu_progbuf : cpu_progbuf_t; - -- ********************************************************** + -- ---------------------------------------------------------- -- DM Control - -- ********************************************************** + -- ---------------------------------------------------------- -- DM configuration -- constant nscratch_c : std_ulogic_vector(3 downto 0) := "0001"; -- number of dscratch registers in CPU (=1) @@ -133,9 +133,20 @@ architecture neorv32_debug_dm_rtl of neorv32_debug_dm is end record; signal dm_ctrl : dm_ctrl_t; - -- ********************************************************** + -- authentication -- + type auth_t is record + busy : std_ulogic; -- authenticator is busy when set + valid : std_ulogic; -- authentication successful + enable : std_ulogic; -- authenticator enabled; reset authentication when disabled + reset : std_ulogic; -- reset authentication (sync, high-active) + re, we : std_ulogic; -- data interface read/write enable + rdata, wdata : std_ulogic_vector(31 downto 0); -- read/write data + end record; + signal auth : auth_t; + + -- ---------------------------------------------------------- -- CPU Bus and Debug Interfaces - -- ********************************************************** + -- ---------------------------------------------------------- -- status and control register - bits -- -- for write access we only care about the actual BYTE WRITE ACCESSES! -- @@ -186,16 +197,21 @@ architecture neorv32_debug_dm_rtl of neorv32_debug_dm is begin - -- Info ----------------------------------------------------------------------------------- + -- Configuration Info --------------------------------------------------------------------- -- ------------------------------------------------------------------------------------------- - assert not (LEGACY_MODE = true) report "[NEORV32] OCD DM compatible to debug spec. version 0.13" severity note; - assert not (LEGACY_MODE = false) report "[NEORV32] OCD DM compatible to debug spec. version 1.0" severity note; + assert not (LEGACY_MODE = true) report "[NEORV32] OCD: DM compatible to debug spec. version 0.13" severity note; + assert not (LEGACY_MODE = false) report "[NEORV32] OCD: DM compatible to debug spec. version 1.0" severity note; + assert not (AUTHENTICATOR = false) report "[NEORV32] OCD: authentication enabled." severity note; -- DMI Access ----------------------------------------------------------------------------- -- ------------------------------------------------------------------------------------------- + -- any access -- dmi_wren <= '1' when (dmi_req_i.op = dmi_req_wr_c) else '0'; dmi_rden <= '1' when (dmi_req_i.op = dmi_req_rd_c) else '0'; + -- authenticated access -- + dmi_wren_auth <= dmi_wren when (not AUTHENTICATOR) or (auth.valid = '1') else '0'; + dmi_rden_auth <= dmi_rden when (not AUTHENTICATOR) or (auth.valid = '1') else '0'; -- Debug Module Command Controller -------------------------------------------------------- @@ -232,7 +248,7 @@ begin when CMD_IDLE => -- wait for new abstract command -- ------------------------------------------------------------ - if (dmi_wren = '1') then -- valid DM write access + if (dmi_wren_auth = '1') then -- valid and authenticated DM write access if (dmi_req_i.addr = addr_command_c) then if (dm_ctrl.cmderr = "000") then -- only execute if no error dm_ctrl.state <= CMD_CHECK; @@ -404,50 +420,60 @@ begin dm_reg.clr_acc_err <= '0'; dm_reg.autoexec_wr <= '0'; - -- DMI access -- - if (dmi_wren = '1') then -- valid DMI write request - - -- debug module control -- - if (dmi_req_i.addr = addr_dmcontrol_c) then + -- debug module control -- + if (dmi_req_i.addr = addr_dmcontrol_c) then + if (dmi_wren_auth = '1') then -- valid and authenticated DM write access dm_reg.halt_req <= dmi_req_i.data(31); -- haltreq (-/w): write 1 to request halt; has to be cleared again by debugger dm_reg.resume_req <= dmi_req_i.data(30); -- resumereq (-/w1): write 1 to request resume; auto-clears dm_reg.reset_ack <= dmi_req_i.data(28); -- ackhavereset (-/w1): write 1 to ACK reset; auto-clears dm_reg.dmcontrol_ndmreset <= dmi_req_i.data(1); -- ndmreset (r/w): SoC reset when high + end if; + if (dmi_wren = '1') then -- valid DM write access dm_reg.dmcontrol_dmactive <= dmi_req_i.data(0); -- dmactive (r/w): DM reset when low end if; + end if; - -- write abstract command -- - if (dmi_req_i.addr = addr_command_c) then + -- write abstract command -- + if (dmi_req_i.addr = addr_command_c) then + if (dmi_wren_auth = '1') then -- valid and authenticated DM write access if (dm_ctrl.busy = '0') and (dm_ctrl.cmderr = "000") then -- idle and no errors yet dm_reg.command <= dmi_req_i.data; end if; end if; + end if; - -- write abstract command autoexec -- - if (dmi_req_i.addr = addr_abstractauto_c) then + -- write abstract command autoexec -- + if (dmi_req_i.addr = addr_abstractauto_c) then + if (dmi_wren_auth = '1') then -- valid and authenticated DM write access if (dm_ctrl.busy = '0') then -- idle and no errors yet dm_reg.abstractauto_autoexecdata <= dmi_req_i.data(0); dm_reg.abstractauto_autoexecprogbuf(0) <= dmi_req_i.data(16); dm_reg.abstractauto_autoexecprogbuf(1) <= dmi_req_i.data(17); end if; end if; + end if; - -- auto execution trigger -- - if ((dmi_req_i.addr = addr_data0_c) and (dm_reg.abstractauto_autoexecdata = '1')) or - ((dmi_req_i.addr = addr_progbuf0_c) and (dm_reg.abstractauto_autoexecprogbuf(0) = '1')) or - ((dmi_req_i.addr = addr_progbuf1_c) and (dm_reg.abstractauto_autoexecprogbuf(1) = '1')) then + -- auto execution trigger -- + if ((dmi_req_i.addr = addr_data0_c) and (dm_reg.abstractauto_autoexecdata = '1')) or + ((dmi_req_i.addr = addr_progbuf0_c) and (dm_reg.abstractauto_autoexecprogbuf(0) = '1')) or + ((dmi_req_i.addr = addr_progbuf1_c) and (dm_reg.abstractauto_autoexecprogbuf(1) = '1')) then + if (dmi_wren_auth = '1') then -- valid and authenticated DM write access dm_reg.autoexec_wr <= '1'; end if; + end if; - -- acknowledge command error -- - if (dmi_req_i.addr = addr_abstractcs_c) then + -- acknowledge command error -- + if (dmi_req_i.addr = addr_abstractcs_c) then + if (dmi_wren_auth = '1') then -- valid and authenticated DM write access if (dmi_req_i.data(10 downto 8) = "111") then dm_reg.clr_acc_err <= '1'; end if; end if; + end if; - -- write program buffer -- - if (dmi_req_i.addr(dmi_req_i.addr'left downto 1) = addr_progbuf0_c(dmi_req_i.addr'left downto 1)) then + -- write program buffer -- + if (dmi_req_i.addr(dmi_req_i.addr'left downto 1) = addr_progbuf0_c(dmi_req_i.addr'left downto 1)) then + if (dmi_wren_auth = '1') then -- valid and authenticated DM write access if (dm_ctrl.busy = '0') then -- idle if (dmi_req_i.addr(0) = addr_progbuf0_c(0)) then dm_reg.progbuf(0) <= dmi_req_i.data; @@ -456,20 +482,20 @@ begin end if; end if; end if; + end if; - -- invalid access while command is executing -- - if (dm_ctrl.busy = '1') then -- busy - if (dmi_req_i.addr = addr_abstractcs_c) or - (dmi_req_i.addr = addr_command_c) or - (dmi_req_i.addr = addr_abstractauto_c) or - (dmi_req_i.addr = addr_data0_c) or - (dmi_req_i.addr = addr_progbuf0_c) or - (dmi_req_i.addr = addr_progbuf1_c) then + -- invalid access while command is executing -- + if (dmi_req_i.addr = addr_abstractcs_c) or (dmi_req_i.addr = addr_command_c) or + (dmi_req_i.addr = addr_abstractauto_c) or (dmi_req_i.addr = addr_data0_c) or + (dmi_req_i.addr = addr_progbuf0_c) or (dmi_req_i.addr = addr_progbuf1_c) then + if (dmi_wren_auth = '1') then -- valid and authenticated DM write access + if (dm_ctrl.busy = '1') then -- busy dm_reg.wr_acc_err <= '1'; end if; end if; - end if; + + end if; end process dmi_write_access; @@ -477,14 +503,14 @@ begin -- Direct Control ------------------------------------------------------------------------- -- ------------------------------------------------------------------------------------------- -- write to abstract data register -- - dci.data_we <= '1' when (dmi_wren = '1') and (dmi_req_i.addr = addr_data0_c) and (dm_ctrl.busy = '0') else '0'; + dci.data_we <= '1' when (dmi_wren_auth = '1') and (dmi_req_i.addr = addr_data0_c) and (dm_ctrl.busy = '0') else '0'; -- CPU halt/resume request -- - cpu_halt_req_o <= dm_reg.halt_req and dm_reg.dmcontrol_dmactive; + cpu_halt_req_o <= dm_reg.halt_req and dm_reg.dmcontrol_dmactive when ((not AUTHENTICATOR) or (auth.valid = '1')) else '0'; dci.resume_req <= dm_ctrl.hart_resume_req; -- active until explicitly cleared -- SoC reset -- - cpu_ndmrstn_o <= '0' when (dm_reg.dmcontrol_ndmreset = '1') and (dm_reg.dmcontrol_dmactive = '1') else '1'; -- to processor's reset generator + cpu_ndmrstn_o <= '0' when (dm_reg.dmcontrol_ndmreset = '1') and (dm_reg.dmcontrol_dmactive = '1') and ((not AUTHENTICATOR) or (auth.valid = '1')) else '1'; -- construct program buffer array for CPU access -- cpu_progbuf(0) <= dm_ctrl.ldsw_progbuf; -- pseudo program buffer for GPR access @@ -512,93 +538,122 @@ begin -- debug module status register -- when addr_dmstatus_c => - dmi_rsp_o.data(31 downto 23) <= (others => '0'); -- reserved (r/-) - dmi_rsp_o.data(22) <= '1'; -- impebreak (r/-): there is an implicit ebreak instruction after the visible program buffer - dmi_rsp_o.data(21 downto 20) <= (others => '0'); -- reserved (r/-) - dmi_rsp_o.data(19) <= dm_ctrl.hart_reset; -- allhavereset (r/-): there is only one hart that can be reset - dmi_rsp_o.data(18) <= dm_ctrl.hart_reset; -- anyhavereset (r/-): there is only one hart that can be reset - dmi_rsp_o.data(17) <= dm_ctrl.hart_resume_ack; -- allresumeack (r/-): there is only one hart that can acknowledge resume request - dmi_rsp_o.data(16) <= dm_ctrl.hart_resume_ack; -- anyresumeack (r/-): there is only one hart that can acknowledge resume request - dmi_rsp_o.data(15) <= '0'; -- allnonexistent (r/-): there is only one hart that is always existent - dmi_rsp_o.data(14) <= '0'; -- anynonexistent (r/-): there is only one hart that is always existent - dmi_rsp_o.data(13) <= dm_reg.dmcontrol_ndmreset; -- allunavail (r/-): there is only one hart that is unavailable during reset - dmi_rsp_o.data(12) <= dm_reg.dmcontrol_ndmreset; -- anyunavail (r/-): there is only one hart that is unavailable during reset - dmi_rsp_o.data(11) <= not dm_ctrl.hart_halted; -- allrunning (r/-): there is only one hart that can be RUNNING or HALTED - dmi_rsp_o.data(10) <= not dm_ctrl.hart_halted; -- anyrunning (r/-): there is only one hart that can be RUNNING or HALTED - dmi_rsp_o.data(9) <= dm_ctrl.hart_halted; -- allhalted (r/-): there is only one hart that can be RUNNING or HALTED - dmi_rsp_o.data(8) <= dm_ctrl.hart_halted; -- anyhalted (r/-): there is only one hart that can be RUNNING or HALTED - dmi_rsp_o.data(7) <= '1'; -- authenticated (r/-): authentication passed since there is no authentication - dmi_rsp_o.data(6) <= '0'; -- authbusy (r/-): always ready since there is no authentication - dmi_rsp_o.data(5) <= '0'; -- hasresethaltreq (r/-): halt-on-reset not implemented - dmi_rsp_o.data(4) <= '0'; -- confstrptrvalid (r/-): no configuration string available - dmi_rsp_o.data(3 downto 0) <= dm_version_c; -- version (r/-): DM spec. version + if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? + dmi_rsp_o.data(31 downto 23) <= (others => '0'); -- reserved (r/-) + dmi_rsp_o.data(22) <= '1'; -- impebreak (r/-): there is an implicit ebreak instruction after the visible program buffer + dmi_rsp_o.data(21 downto 20) <= (others => '0'); -- reserved (r/-) + dmi_rsp_o.data(19) <= dm_ctrl.hart_reset; -- allhavereset (r/-): there is only one hart that can be reset + dmi_rsp_o.data(18) <= dm_ctrl.hart_reset; -- anyhavereset (r/-): there is only one hart that can be reset + dmi_rsp_o.data(17) <= dm_ctrl.hart_resume_ack; -- allresumeack (r/-): there is only one hart that can acknowledge resume request + dmi_rsp_o.data(16) <= dm_ctrl.hart_resume_ack; -- anyresumeack (r/-): there is only one hart that can acknowledge resume request + dmi_rsp_o.data(15) <= '0'; -- allnonexistent (r/-): there is only one hart that is always existent + dmi_rsp_o.data(14) <= '0'; -- anynonexistent (r/-): there is only one hart that is always existent + dmi_rsp_o.data(13) <= dm_reg.dmcontrol_ndmreset; -- allunavail (r/-): there is only one hart that is unavailable during reset + dmi_rsp_o.data(12) <= dm_reg.dmcontrol_ndmreset; -- anyunavail (r/-): there is only one hart that is unavailable during reset + dmi_rsp_o.data(11) <= not dm_ctrl.hart_halted; -- allrunning (r/-): there is only one hart that can be RUNNING or HALTED + dmi_rsp_o.data(10) <= not dm_ctrl.hart_halted; -- anyrunning (r/-): there is only one hart that can be RUNNING or HALTED + dmi_rsp_o.data(9) <= dm_ctrl.hart_halted; -- allhalted (r/-): there is only one hart that can be RUNNING or HALTED + dmi_rsp_o.data(8) <= dm_ctrl.hart_halted; -- anyhalted (r/-): there is only one hart that can be RUNNING or HALTED + dmi_rsp_o.data(5) <= '0'; -- hasresethaltreq (r/-): halt-on-reset not implemented + dmi_rsp_o.data(4) <= '0'; -- confstrptrvalid (r/-): no configuration string available + end if; + dmi_rsp_o.data(7) <= auth.valid; -- authenticated (r/-): authentication successful when set + dmi_rsp_o.data(6) <= auth.busy; -- authbusy (r/-): wait for authenticator operation when set + dmi_rsp_o.data(3 downto 0) <= dm_version_c; -- version (r/-): DM spec. version -- debug module control -- when addr_dmcontrol_c => - dmi_rsp_o.data(31) <= '0'; -- haltreq (-/w): write-only - dmi_rsp_o.data(30) <= '0'; -- resumereq (-/w1): write-only - dmi_rsp_o.data(29) <= '0'; -- hartreset (r/w): not supported - dmi_rsp_o.data(28) <= '0'; -- ackhavereset (-/w1): write-only - dmi_rsp_o.data(27) <= '0'; -- reserved (r/-) - dmi_rsp_o.data(26) <= '0'; -- hasel (r/-) - only a single hart can be selected at once - dmi_rsp_o.data(25 downto 16) <= (others => '0'); -- hartsello (r/-) - there is only one hart - dmi_rsp_o.data(15 downto 6) <= (others => '0'); -- hartselhi (r/-) - there is only one hart - dmi_rsp_o.data(5 downto 4) <= (others => '0'); -- reserved (r/-) - dmi_rsp_o.data(3) <= '0'; -- setresethaltreq (-/w1): halt-on-reset request - halt-on-reset not implemented - dmi_rsp_o.data(2) <= '0'; -- clrresethaltreq (-/w1): halt-on-reset ack - halt-on-reset not implemented - dmi_rsp_o.data(1) <= dm_reg.dmcontrol_ndmreset; -- ndmreset (r/w): soc reset - dmi_rsp_o.data(0) <= dm_reg.dmcontrol_dmactive; -- dmactive (r/w): DM reset + if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? + dmi_rsp_o.data(31) <= '0'; -- haltreq (-/w): write-only + dmi_rsp_o.data(30) <= '0'; -- resumereq (-/w1): write-only + dmi_rsp_o.data(29) <= '0'; -- hartreset (r/w): not supported + dmi_rsp_o.data(28) <= '0'; -- ackhavereset (-/w1): write-only + dmi_rsp_o.data(27) <= '0'; -- reserved (r/-) + dmi_rsp_o.data(26) <= '0'; -- hasel (r/-) - only a single hart can be selected at once + dmi_rsp_o.data(25 downto 16) <= (others => '0'); -- hartsello (r/-) - there is only one hart + dmi_rsp_o.data(15 downto 6) <= (others => '0'); -- hartselhi (r/-) - there is only one hart + dmi_rsp_o.data(5 downto 4) <= (others => '0'); -- reserved (r/-) + dmi_rsp_o.data(3) <= '0'; -- setresethaltreq (-/w1): halt-on-reset request - halt-on-reset not implemented + dmi_rsp_o.data(2) <= '0'; -- clrresethaltreq (-/w1): halt-on-reset ack - halt-on-reset not implemented + dmi_rsp_o.data(1) <= dm_reg.dmcontrol_ndmreset; -- ndmreset (r/w): soc reset + end if; + dmi_rsp_o.data(0) <= dm_reg.dmcontrol_dmactive; -- dmactive (r/w): DM reset -- hart info -- when addr_hartinfo_c => - dmi_rsp_o.data(31 downto 24) <= (others => '0'); -- reserved (r/-) - dmi_rsp_o.data(23 downto 20) <= nscratch_c; -- nscratch (r/-): number of dscratch CSRs - dmi_rsp_o.data(19 downto 17) <= (others => '0'); -- reserved (r/-) - dmi_rsp_o.data(16) <= dataaccess_c; -- dataaccess (r/-): 1: data registers are memory-mapped, 0: data registers are CSR-mapped - dmi_rsp_o.data(15 downto 12) <= datasize_c; -- datasize (r/-): number data registers in memory/CSR space - dmi_rsp_o.data(11 downto 0) <= dataaddr_c(11 downto 0); -- dataaddr (r/-): data registers base address (memory/CSR) + if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? + dmi_rsp_o.data(31 downto 24) <= (others => '0'); -- reserved (r/-) + dmi_rsp_o.data(23 downto 20) <= nscratch_c; -- nscratch (r/-): number of dscratch CSRs + dmi_rsp_o.data(19 downto 17) <= (others => '0'); -- reserved (r/-) + dmi_rsp_o.data(16) <= dataaccess_c; -- dataaccess (r/-): 1: data registers are memory-mapped, 0: data registers are CSR-mapped + dmi_rsp_o.data(15 downto 12) <= datasize_c; -- datasize (r/-): number data registers in memory/CSR space + dmi_rsp_o.data(11 downto 0) <= dataaddr_c(11 downto 0); -- dataaddr (r/-): data registers base address (memory/CSR) + end if; -- abstract control and status -- when addr_abstractcs_c => - dmi_rsp_o.data(31 downto 24) <= (others => '0'); -- reserved (r/-) - dmi_rsp_o.data(28 downto 24) <= "00010"; -- progbufsize (r/-): number of words in program buffer = 2 - dmi_rsp_o.data(12) <= dm_ctrl.busy; -- busy (r/-): abstract command in progress (1) / idle (0) - dmi_rsp_o.data(11) <= '1'; -- relaxedpriv (r/-): PMP rules are ignored when in debug-mode - dmi_rsp_o.data(10 downto 8) <= dm_ctrl.cmderr; -- cmderr (r/w1c): any error during execution? - dmi_rsp_o.data(7 downto 4) <= (others => '0'); -- reserved (r/-) - dmi_rsp_o.data(3 downto 0) <= "0001"; -- datacount (r/-): number of implemented data registers = 1 + if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? + dmi_rsp_o.data(31 downto 24) <= (others => '0'); -- reserved (r/-) + dmi_rsp_o.data(28 downto 24) <= "00010"; -- progbufsize (r/-): number of words in program buffer = 2 + dmi_rsp_o.data(12) <= dm_ctrl.busy; -- busy (r/-): abstract command in progress (1) / idle (0) + dmi_rsp_o.data(11) <= '1'; -- relaxedpriv (r/-): PMP rules are ignored when in debug-mode + dmi_rsp_o.data(10 downto 8) <= dm_ctrl.cmderr; -- cmderr (r/w1c): any error during execution? + dmi_rsp_o.data(7 downto 4) <= (others => '0'); -- reserved (r/-) + dmi_rsp_o.data(3 downto 0) <= "0001"; -- datacount (r/-): number of implemented data registers = 1 + end if; -- -- abstract command (-/w) -- --- when addr_command_c => --- dmi_rsp_o.data <= (others => '0'); -- register is write-only +-- when addr_command_c => dmi_rsp_o.data <= (others => '0'); -- register is write-only -- abstract command autoexec (r/w) -- when addr_abstractauto_c => - dmi_rsp_o.data(0) <= dm_reg.abstractauto_autoexecdata; -- autoexecdata(0): read/write access to data0 triggers execution of program buffer - dmi_rsp_o.data(16) <= dm_reg.abstractauto_autoexecprogbuf(0); -- autoexecprogbuf(0): read/write access to progbuf0 triggers execution of program buffer - dmi_rsp_o.data(17) <= dm_reg.abstractauto_autoexecprogbuf(1); -- autoexecprogbuf(1): read/write access to progbuf1 triggers execution of program buffer + if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? + dmi_rsp_o.data(0) <= dm_reg.abstractauto_autoexecdata; -- autoexecdata(0): read/write access to data0 triggers execution of program buffer + dmi_rsp_o.data(16) <= dm_reg.abstractauto_autoexecprogbuf(0); -- autoexecprogbuf(0): read/write access to progbuf0 triggers execution of program buffer + dmi_rsp_o.data(17) <= dm_reg.abstractauto_autoexecprogbuf(1); -- autoexecprogbuf(1): read/write access to progbuf1 triggers execution of program buffer + end if; -- -- next debug module (r/-) -- --- when addr_nextdm_c => --- dmi_rsp_o.data <= (others => '0'); -- this is the only DM +-- when addr_nextdm_c => dmi_rsp_o.data <= (others => '0'); -- this is the only DM -- abstract data 0 (r/w) -- when addr_data0_c => - dmi_rsp_o.data <= dci.data_reg; + if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? + dmi_rsp_o.data <= dci.data_reg; + end if; - -- program buffer (r/w) -- + -- program buffer 0 (r/w) -- when addr_progbuf0_c => - if (LEGACY_MODE = true) then dmi_rsp_o.data <= dm_reg.progbuf(0); else dmi_rsp_o.data <= (others => '0'); end if; -- program buffer 0 + if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? + if LEGACY_MODE then + dmi_rsp_o.data <= dm_reg.progbuf(0); + else + dmi_rsp_o.data <= (others => '0'); + end if; + end if; + + -- program buffer 0 (r/w) -- when addr_progbuf1_c => - if (LEGACY_MODE = true) then dmi_rsp_o.data <= dm_reg.progbuf(1); else dmi_rsp_o.data <= (others => '0'); end if; -- program buffer 1 + if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? + if LEGACY_MODE then + dmi_rsp_o.data <= dm_reg.progbuf(1); + else + dmi_rsp_o.data <= (others => '0'); + end if; + end if; + + -- authentication (r/w) -- + when addr_authdata_c => + dmi_rsp_o.data <= auth.rdata; -- -- system bus access control and status (r/-) -- --- when addr_sbcs_c => --- dmi_rsp_o.data <= (others => '0'); -- system bus access not implemented +-- when addr_sbcs_c => dmi_rsp_o.data <= (others => '0'); -- system bus access not implemented -- halt summary 0 (r/-) -- when addr_haltsum0_c => - dmi_rsp_o.data(0) <= dm_ctrl.hart_halted; -- hart 0 is halted + if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? + dmi_rsp_o.data(0) <= dm_ctrl.hart_halted; -- hart 0 is halted + end if; -- not implemented (r/-) -- when others => @@ -608,7 +663,7 @@ begin -- invalid read access while command is executing -- -- ------------------------------------------------------------ - if (dmi_rden = '1') then -- valid DMI read request + if (dmi_rden_auth = '1') then -- valid and authenticated DMI read request and authenticated if (dm_ctrl.busy = '1') then -- busy if (dmi_req_i.addr = addr_data0_c) or (dmi_req_i.addr = addr_progbuf0_c) or @@ -620,7 +675,7 @@ begin -- auto execution trigger -- -- ------------------------------------------------------------ - if (dmi_rden = '1') then -- valid DMI read request + if (dmi_rden_auth = '1') then -- valid and authenticated DMI read request and authenticated if ((dmi_req_i.addr = addr_data0_c) and (dm_reg.abstractauto_autoexecdata = '1')) or ((dmi_req_i.addr = addr_progbuf0_c) and (dm_reg.abstractauto_autoexecprogbuf(0) = '1')) or ((dmi_req_i.addr = addr_progbuf1_c) and (dm_reg.abstractauto_autoexecprogbuf(1) = '1')) then @@ -632,7 +687,7 @@ begin end process dmi_read_access; - -- Bus Access ---------------------------------------------------------------------------- + -- Bus Access (from CPU) ------------------------------------------------------------------ -- ------------------------------------------------------------------------------------------- bus_access: process(rstn_i, clk_i) begin @@ -691,4 +746,41 @@ begin wren <= accen and ( bus_req_i.rw); + -- Authentication ------------------------------------------------------------------------- + -- ------------------------------------------------------------------------------------------- + authenticator_enabled: + if AUTHENTICATOR generate + neorv32_debug_auth_inst: entity neorv32.neorv32_debug_auth + port map ( + -- global control -- + clk_i => clk_i, + rstn_i => rstn_i, + -- register interface -- + we_i => auth.we, + re_i => auth.re, + wdata_i => auth.wdata, + rdata_o => auth.rdata, + -- status -- + enable_i => auth.enable, + busy_o => auth.busy, + unlocked_o => auth.valid + ); + auth.re <= '1' when (dmi_rden = '1') and (dmi_req_i.addr = addr_authdata_c) else '0'; + auth.we <= '1' when (dmi_wren = '1') and (dmi_req_i.addr = addr_authdata_c) else '0'; + auth.wdata <= dmi_req_i.data; + auth.enable <= dm_reg.dmcontrol_dmactive; -- disable and reset authentication when DM gets disabled + end generate; + + authenticator_disabled: + if not AUTHENTICATOR generate + auth.busy <= '0'; + auth.valid <= '1'; -- always authenticated + auth.enable <= '0'; + auth.re <= '0'; + auth.we <= '0'; + auth.rdata <= (others => '0'); + auth.wdata <= (others => '0'); + end generate; + + end neorv32_debug_dm_rtl; From 562a9289f5f85a25f965ad454c3ca7a6e89ad002 Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 18:22:03 +0200 Subject: [PATCH 18/19] [rtl] code cleanup --- rtl/core/neorv32_debug_auth.vhd | 20 ++-- rtl/core/neorv32_debug_dm.vhd | 206 +++++++++++++------------------- rtl/core/neorv32_package.vhd | 4 +- 3 files changed, 93 insertions(+), 137 deletions(-) diff --git a/rtl/core/neorv32_debug_auth.vhd b/rtl/core/neorv32_debug_auth.vhd index cc6d911b5..1e3e21b25 100644 --- a/rtl/core/neorv32_debug_auth.vhd +++ b/rtl/core/neorv32_debug_auth.vhd @@ -22,17 +22,17 @@ use neorv32.neorv32_package.all; entity neorv32_debug_auth is port ( -- global control -- - clk_i : in std_ulogic; -- global clock - rstn_i : in std_ulogic; -- global reset, low-active, asynchronous + clk_i : in std_ulogic; -- global clock + rstn_i : in std_ulogic; -- global reset, low-active, asynchronous -- register interface -- - we_i : in std_ulogic; -- write data when high - re_i : in std_ulogic; -- read data has been consumed by the debugger when high - wdata_i : in std_ulogic_vector(31 downto 0); -- write data (from debugger) - rdata_o : out std_ulogic_vector(31 downto 0); -- read data (to debugger) + we_i : in std_ulogic; -- write data when high + re_i : in std_ulogic; -- read data has been consumed by the debugger when high + wdata_i : in std_ulogic_vector(31 downto 0); -- write data (from debugger) + rdata_o : out std_ulogic_vector(31 downto 0); -- read data (to debugger) -- status -- - enable_i : in std_ulogic; -- authenticator enabled when high; reset & clear authentication when low - busy_o : out std_ulogic; -- authenticator is busy when high; no further read/write accesses - unlocked_o : out std_ulogic -- high when authentication passed; unlocks the on-chip debugger + enable_i : in std_ulogic; -- authenticator enabled when high; reset & clear authentication when low + busy_o : out std_ulogic; -- authenticator is busy when high; no further read/write accesses + valid_o : out std_ulogic -- high when authentication passed; unlocks the on-chip debugger ); end neorv32_debug_auth; @@ -66,7 +66,7 @@ begin busy_o <= '0'; -- this simple authenticator is always ready -- authentication passed -- - unlocked_o <= authenticated; + valid_o <= authenticated; -- read data -- rdata_o <= (others => '0'); -- there is nothing to read here diff --git a/rtl/core/neorv32_debug_dm.vhd b/rtl/core/neorv32_debug_dm.vhd index 85ada10d2..d2fd3ad73 100644 --- a/rtl/core/neorv32_debug_dm.vhd +++ b/rtl/core/neorv32_debug_dm.vhd @@ -1,7 +1,7 @@ -- ================================================================================ -- -- NEORV32 SoC - RISC-V-Compatible Debug Module (DM) -- -- -------------------------------------------------------------------------------- -- --- Execution-based debugging for a single hart only. -- +-- Execution-based debugger compatible to the "Minimal RISC-V Debug Specification". -- -- -------------------------------------------------------------------------------- -- -- The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 -- -- Copyright (c) NEORV32 contributors. -- @@ -48,6 +48,12 @@ architecture neorv32_debug_dm_rtl of neorv32_debug_dm is constant dm_data_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"80"); -- abstract data buffer (DATA) constant dm_sreg_base_c : std_ulogic_vector(31 downto 0) := std_ulogic_vector(unsigned(CPU_BASE_ADDR) + x"C0"); -- status register (SREG) + -- rv32i instruction prototypes -- + constant instr_nop_c : std_ulogic_vector(31 downto 0) := x"00000013"; -- nop + constant instr_lw_c : std_ulogic_vector(31 downto 0) := x"00002003"; -- lw zero, 0(zero) + constant instr_sw_c : std_ulogic_vector(31 downto 0) := x"00002023"; -- sw zero, 0(zero) + constant instr_ebreak_c : std_ulogic_vector(31 downto 0) := x"00100073"; -- ebreak + -- ---------------------------------------------------------- -- DMI Access -- ---------------------------------------------------------- @@ -67,15 +73,8 @@ architecture neorv32_debug_dm_rtl of neorv32_debug_dm is constant addr_sbcs_c : std_ulogic_vector(6 downto 0) := "0111000"; constant addr_haltsum0_c : std_ulogic_vector(6 downto 0) := "1000000"; - -- RISC-V 32-bit instruction prototypes -- - constant instr_nop_c : std_ulogic_vector(31 downto 0) := x"00000013"; -- nop - constant instr_lw_c : std_ulogic_vector(31 downto 0) := x"00002003"; -- lw zero, 0(zero) - constant instr_sw_c : std_ulogic_vector(31 downto 0) := x"00002023"; -- sw zero, 0(zero) - constant instr_ebreak_c : std_ulogic_vector(31 downto 0) := x"00100073"; -- ebreak - -- DMI access -- - signal dmi_wren, dmi_wren_auth : std_ulogic; - signal dmi_rden, dmi_rden_auth : std_ulogic; + signal dmi_wren, dmi_wren_auth, dmi_rden, dmi_rden_auth : std_ulogic; -- debug module DMI registers / access -- type progbuf_t is array (0 to 1) of std_ulogic_vector(31 downto 0); @@ -107,10 +106,7 @@ architecture neorv32_debug_dm_rtl of neorv32_debug_dm is -- ---------------------------------------------------------- -- DM configuration -- - constant nscratch_c : std_ulogic_vector(3 downto 0) := "0001"; -- number of dscratch registers in CPU (=1) - constant datasize_c : std_ulogic_vector(3 downto 0) := "0001"; -- number of data registers in memory/CSR space (=1) constant dataaddr_c : std_ulogic_vector(11 downto 0) := dm_data_base_c(11 downto 0); -- signed base address of data registers in memory/CSR space - constant dataaccess_c : std_ulogic := '1'; -- 1: abstract data is memory-mapped, 0: abstract data is CSR-mapped constant dm_version_c : std_ulogic_vector(3 downto 0) := cond_sel_suv_f(LEGACY_MODE, "0010", "0011"); -- version: v0.13 / v1.0 -- debug module controller -- @@ -135,12 +131,11 @@ architecture neorv32_debug_dm_rtl of neorv32_debug_dm is -- authentication -- type auth_t is record - busy : std_ulogic; -- authenticator is busy when set - valid : std_ulogic; -- authentication successful - enable : std_ulogic; -- authenticator enabled; reset authentication when disabled - reset : std_ulogic; -- reset authentication (sync, high-active) - re, we : std_ulogic; -- data interface read/write enable - rdata, wdata : std_ulogic_vector(31 downto 0); -- read/write data + busy : std_ulogic; -- authenticator is busy when set + valid : std_ulogic; -- authentication successful + reset : std_ulogic; -- reset authentication (sync, high-active) + re, we : std_ulogic; -- data interface read/write enable + rdata : std_ulogic_vector(31 downto 0); -- read data end record; signal auth : auth_t; @@ -428,29 +423,21 @@ begin dm_reg.reset_ack <= dmi_req_i.data(28); -- ackhavereset (-/w1): write 1 to ACK reset; auto-clears dm_reg.dmcontrol_ndmreset <= dmi_req_i.data(1); -- ndmreset (r/w): SoC reset when high end if; - if (dmi_wren = '1') then -- valid DM write access + if (dmi_wren = '1') then -- valid DM write access (may be unauthenticated) dm_reg.dmcontrol_dmactive <= dmi_req_i.data(0); -- dmactive (r/w): DM reset when low end if; end if; - -- write abstract command -- - if (dmi_req_i.addr = addr_command_c) then - if (dmi_wren_auth = '1') then -- valid and authenticated DM write access - if (dm_ctrl.busy = '0') and (dm_ctrl.cmderr = "000") then -- idle and no errors yet - dm_reg.command <= dmi_req_i.data; - end if; - end if; + -- write abstract command (only when idle and no error yet) -- + if (dmi_req_i.addr = addr_command_c) and (dmi_wren_auth = '1') and (dm_ctrl.busy = '0') and (dm_ctrl.cmderr = "000") then + dm_reg.command <= dmi_req_i.data; end if; - -- write abstract command autoexec -- - if (dmi_req_i.addr = addr_abstractauto_c) then - if (dmi_wren_auth = '1') then -- valid and authenticated DM write access - if (dm_ctrl.busy = '0') then -- idle and no errors yet - dm_reg.abstractauto_autoexecdata <= dmi_req_i.data(0); - dm_reg.abstractauto_autoexecprogbuf(0) <= dmi_req_i.data(16); - dm_reg.abstractauto_autoexecprogbuf(1) <= dmi_req_i.data(17); - end if; - end if; + -- write abstract command autoexec (only when idle) -- + if (dmi_req_i.addr = addr_abstractauto_c) and (dmi_wren_auth = '1') and (dm_ctrl.busy = '0') then + dm_reg.abstractauto_autoexecdata <= dmi_req_i.data(0); + dm_reg.abstractauto_autoexecprogbuf(0) <= dmi_req_i.data(16); + dm_reg.abstractauto_autoexecprogbuf(1) <= dmi_req_i.data(17); end if; -- auto execution trigger -- @@ -463,38 +450,27 @@ begin end if; -- acknowledge command error -- - if (dmi_req_i.addr = addr_abstractcs_c) then - if (dmi_wren_auth = '1') then -- valid and authenticated DM write access - if (dmi_req_i.data(10 downto 8) = "111") then - dm_reg.clr_acc_err <= '1'; - end if; - end if; + if (dmi_req_i.addr = addr_abstractcs_c) and (dmi_wren_auth = '1') and (dmi_req_i.data(10 downto 8) = "111") then + dm_reg.clr_acc_err <= '1'; end if; - -- write program buffer -- - if (dmi_req_i.addr(dmi_req_i.addr'left downto 1) = addr_progbuf0_c(dmi_req_i.addr'left downto 1)) then - if (dmi_wren_auth = '1') then -- valid and authenticated DM write access - if (dm_ctrl.busy = '0') then -- idle - if (dmi_req_i.addr(0) = addr_progbuf0_c(0)) then - dm_reg.progbuf(0) <= dmi_req_i.data; - else - dm_reg.progbuf(1) <= dmi_req_i.data; - end if; - end if; - end if; + -- write program buffer 0 (only when idle) -- + if (dmi_req_i.addr = addr_progbuf0_c) and (dmi_wren_auth = '1') and (dm_ctrl.busy = '0') then + dm_reg.progbuf(0) <= dmi_req_i.data; end if; - -- invalid access while command is executing -- - if (dmi_req_i.addr = addr_abstractcs_c) or (dmi_req_i.addr = addr_command_c) or - (dmi_req_i.addr = addr_abstractauto_c) or (dmi_req_i.addr = addr_data0_c) or - (dmi_req_i.addr = addr_progbuf0_c) or (dmi_req_i.addr = addr_progbuf1_c) then - if (dmi_wren_auth = '1') then -- valid and authenticated DM write access - if (dm_ctrl.busy = '1') then -- busy - dm_reg.wr_acc_err <= '1'; - end if; - end if; + -- write program buffer 1 (only when idle) -- + if (dmi_req_i.addr = addr_progbuf1_c) and (dmi_wren_auth = '1') and (dm_ctrl.busy = '0') then + dm_reg.progbuf(1) <= dmi_req_i.data; end if; + -- invalid access while command is executing -- + if (dmi_wren_auth = '1') and (dm_ctrl.busy = '1') and -- write access while busy + ((dmi_req_i.addr = addr_abstractcs_c) or (dmi_req_i.addr = addr_command_c) or + (dmi_req_i.addr = addr_abstractauto_c) or (dmi_req_i.addr = addr_data0_c) or + (dmi_req_i.addr = addr_progbuf0_c) or (dmi_req_i.addr = addr_progbuf1_c)) then + dm_reg.wr_acc_err <= '1'; + end if; end if; end process dmi_write_access; @@ -529,11 +505,8 @@ begin dm_reg.rd_acc_err <= '0'; dm_reg.autoexec_rd <= '0'; elsif rising_edge(clk_i) then - dmi_rsp_o.ack <= dmi_wren or dmi_rden; -- always ACK any request - dmi_rsp_o.data <= (others => '0'); -- default - dm_reg.rd_acc_err <= '0'; - dm_reg.autoexec_rd <= '0'; - + dmi_rsp_o.ack <= dmi_wren or dmi_rden; -- always ACK any request + dmi_rsp_o.data <= (others => '0'); -- default case dmi_req_i.addr is -- debug module status register -- @@ -583,10 +556,10 @@ begin when addr_hartinfo_c => if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? dmi_rsp_o.data(31 downto 24) <= (others => '0'); -- reserved (r/-) - dmi_rsp_o.data(23 downto 20) <= nscratch_c; -- nscratch (r/-): number of dscratch CSRs + dmi_rsp_o.data(23 downto 20) <= "0001"; -- nscratch (r/-): number of dscratch CSRs = 1 dmi_rsp_o.data(19 downto 17) <= (others => '0'); -- reserved (r/-) - dmi_rsp_o.data(16) <= dataaccess_c; -- dataaccess (r/-): 1: data registers are memory-mapped, 0: data registers are CSR-mapped - dmi_rsp_o.data(15 downto 12) <= datasize_c; -- datasize (r/-): number data registers in memory/CSR space + dmi_rsp_o.data(16) <= '1'; -- dataaccess (r/-): data registers are memory-mapped + dmi_rsp_o.data(15 downto 12) <= "0001"; -- datasize (r/-): number data registers in memory/CSR space = 1 dmi_rsp_o.data(11 downto 0) <= dataaddr_c(11 downto 0); -- dataaddr (r/-): data registers base address (memory/CSR) end if; @@ -602,10 +575,7 @@ begin dmi_rsp_o.data(3 downto 0) <= "0001"; -- datacount (r/-): number of implemented data registers = 1 end if; --- -- abstract command (-/w) -- --- when addr_command_c => dmi_rsp_o.data <= (others => '0'); -- register is write-only - - -- abstract command autoexec (r/w) -- + -- abstract command autoexec -- when addr_abstractauto_c => if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? dmi_rsp_o.data(0) <= dm_reg.abstractauto_autoexecdata; -- autoexecdata(0): read/write access to data0 triggers execution of program buffer @@ -613,74 +583,62 @@ begin dmi_rsp_o.data(17) <= dm_reg.abstractauto_autoexecprogbuf(1); -- autoexecprogbuf(1): read/write access to progbuf1 triggers execution of program buffer end if; --- -- next debug module (r/-) -- --- when addr_nextdm_c => dmi_rsp_o.data <= (others => '0'); -- this is the only DM - - -- abstract data 0 (r/w) -- + -- abstract data 0 -- when addr_data0_c => if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? dmi_rsp_o.data <= dci.data_reg; end if; - -- program buffer 0 (r/w) -- + -- program buffer 0 -- when addr_progbuf0_c => if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? if LEGACY_MODE then dmi_rsp_o.data <= dm_reg.progbuf(0); - else - dmi_rsp_o.data <= (others => '0'); end if; end if; - -- program buffer 0 (r/w) -- + -- program buffer 1 -- when addr_progbuf1_c => if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? if LEGACY_MODE then dmi_rsp_o.data <= dm_reg.progbuf(1); - else - dmi_rsp_o.data <= (others => '0'); end if; end if; - -- authentication (r/w) -- + -- authentication -- when addr_authdata_c => dmi_rsp_o.data <= auth.rdata; --- -- system bus access control and status (r/-) -- --- when addr_sbcs_c => dmi_rsp_o.data <= (others => '0'); -- system bus access not implemented - - -- halt summary 0 (r/-) -- + -- halt summary 0 -- when addr_haltsum0_c => if (not AUTHENTICATOR) or (auth.valid = '1') then -- authenticated? dmi_rsp_o.data(0) <= dm_ctrl.hart_halted; -- hart 0 is halted end if; - -- not implemented (r/-) -- - when others => + -- not implemented or read-only-zero -- + when others => -- addr_sbcs_c, addr_nextdm_c, addr_command_c dmi_rsp_o.data <= (others => '0'); end case; -- invalid read access while command is executing -- -- ------------------------------------------------------------ - if (dmi_rden_auth = '1') then -- valid and authenticated DMI read request and authenticated - if (dm_ctrl.busy = '1') then -- busy - if (dmi_req_i.addr = addr_data0_c) or - (dmi_req_i.addr = addr_progbuf0_c) or - (dmi_req_i.addr = addr_progbuf1_c) then - dm_reg.rd_acc_err <= '1'; - end if; - end if; + if (dmi_rden_auth = '1') and (dm_ctrl.busy = '1') and -- write while busy + ((dmi_req_i.addr = addr_data0_c) or (dmi_req_i.addr = addr_progbuf0_c) or (dmi_req_i.addr = addr_progbuf1_c)) then + dm_reg.rd_acc_err <= '1'; + else + dm_reg.rd_acc_err <= '0'; end if; -- auto execution trigger -- -- ------------------------------------------------------------ - if (dmi_rden_auth = '1') then -- valid and authenticated DMI read request and authenticated - if ((dmi_req_i.addr = addr_data0_c) and (dm_reg.abstractauto_autoexecdata = '1')) or - ((dmi_req_i.addr = addr_progbuf0_c) and (dm_reg.abstractauto_autoexecprogbuf(0) = '1')) or - ((dmi_req_i.addr = addr_progbuf1_c) and (dm_reg.abstractauto_autoexecprogbuf(1) = '1')) then - dm_reg.autoexec_rd <= '1'; - end if; + if (dmi_rden_auth = '1') and + (((dmi_req_i.addr = addr_data0_c) and (dm_reg.abstractauto_autoexecdata = '1')) or + ((dmi_req_i.addr = addr_progbuf0_c) and (dm_reg.abstractauto_autoexecprogbuf(0) = '1')) or + ((dmi_req_i.addr = addr_progbuf1_c) and (dm_reg.abstractauto_autoexecprogbuf(1) = '1'))) then + dm_reg.autoexec_rd <= '1'; + else + dm_reg.autoexec_rd <= '0'; end if; end if; @@ -717,7 +675,7 @@ begin dci.execute_ack <= '0'; dci.exception_ack <= '0'; if (bus_req_i.addr(7 downto 6) = dm_sreg_base_c(7 downto 6)) and (wren = '1') then - dci.halt_ack <= bus_req_i.ben(sreg_halt_ack_c/8); -- [NOTE] use the individual BYTE ENABLES and not the actual write data + dci.halt_ack <= bus_req_i.ben(sreg_halt_ack_c/8); -- [NOTE] use individual BYTE ENABLES and not the actual write data dci.resume_ack <= bus_req_i.ben(sreg_resume_ack_c/8); dci.execute_ack <= bus_req_i.ben(sreg_execute_ack_c/8); dci.exception_ack <= bus_req_i.ben(sreg_exception_ack_c/8); @@ -746,40 +704,36 @@ begin wren <= accen and ( bus_req_i.rw); - -- Authentication ------------------------------------------------------------------------- + -- Authentication Module ------------------------------------------------------------------ -- ------------------------------------------------------------------------------------------- authenticator_enabled: if AUTHENTICATOR generate neorv32_debug_auth_inst: entity neorv32.neorv32_debug_auth port map ( -- global control -- - clk_i => clk_i, - rstn_i => rstn_i, + clk_i => clk_i, + rstn_i => rstn_i, -- register interface -- - we_i => auth.we, - re_i => auth.re, - wdata_i => auth.wdata, - rdata_o => auth.rdata, + we_i => auth.we, + re_i => auth.re, + wdata_i => dmi_req_i.data, + rdata_o => auth.rdata, -- status -- - enable_i => auth.enable, - busy_o => auth.busy, - unlocked_o => auth.valid + enable_i => dm_reg.dmcontrol_dmactive, -- disable and reset authentication when DM gets disabled + busy_o => auth.busy, + valid_o => auth.valid ); - auth.re <= '1' when (dmi_rden = '1') and (dmi_req_i.addr = addr_authdata_c) else '0'; - auth.we <= '1' when (dmi_wren = '1') and (dmi_req_i.addr = addr_authdata_c) else '0'; - auth.wdata <= dmi_req_i.data; - auth.enable <= dm_reg.dmcontrol_dmactive; -- disable and reset authentication when DM gets disabled + auth.re <= '1' when (dmi_rden = '1') and (dmi_req_i.addr = addr_authdata_c) else '0'; + auth.we <= '1' when (dmi_wren = '1') and (dmi_req_i.addr = addr_authdata_c) else '0'; end generate; authenticator_disabled: if not AUTHENTICATOR generate - auth.busy <= '0'; - auth.valid <= '1'; -- always authenticated - auth.enable <= '0'; - auth.re <= '0'; - auth.we <= '0'; - auth.rdata <= (others => '0'); - auth.wdata <= (others => '0'); + auth.busy <= '0'; + auth.valid <= '1'; -- always authenticated + auth.re <= '0'; + auth.we <= '0'; + auth.rdata <= (others => '0'); end generate; diff --git a/rtl/core/neorv32_package.vhd b/rtl/core/neorv32_package.vhd index b4f897477..9e40860ed 100644 --- a/rtl/core/neorv32_package.vhd +++ b/rtl/core/neorv32_package.vhd @@ -123,6 +123,7 @@ package neorv32_package is -- ------------------------------------------------------------------------------------------- -- bus request -- type bus_req_t is record + -- in-band signals -- addr : std_ulogic_vector(31 downto 0); -- access address data : std_ulogic_vector(31 downto 0); -- write data ben : std_ulogic_vector(3 downto 0); -- byte enable @@ -131,7 +132,8 @@ package neorv32_package is src : std_ulogic; -- access source (1=instruction fetch, 0=data access) priv : std_ulogic; -- set if privileged (machine-mode) access rvso : std_ulogic; -- set if reservation set operation (atomic LR/SC) - fence : std_ulogic; -- set if fence(.i) operation, single-shot, independent of STB + -- out-of-band signals -- + fence : std_ulogic; -- set if fence(.i) operation, single-shot end record; -- bus response -- From 1e9fb334a0b95de7651ded66524604b0c21f199b Mon Sep 17 00:00:00 2001 From: stnolting Date: Fri, 11 Oct 2024 18:29:06 +0200 Subject: [PATCH 19/19] [sw/common] ELF file is required for gdb target --- sw/common/common.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sw/common/common.mk b/sw/common/common.mk index 18915fd53..0e0d89ea4 100644 --- a/sw/common/common.mk +++ b/sw/common/common.mk @@ -313,7 +313,7 @@ elf_sections: $(APP_ELF) # ----------------------------------------------------------------------------- # Run GDB # ----------------------------------------------------------------------------- -gdb: +gdb: $(APP_ELF) @$(GDB) $(APP_ELF) $(GDB_ARGS) # -----------------------------------------------------------------------------