From 3f7aaf24fb91a10f65ec99e5db2dde8a84c88f7d Mon Sep 17 00:00:00 2001 From: pwpiwi Date: Tue, 11 Jul 2017 08:50:27 +0200 Subject: [PATCH] revert removal of quarter frequency support for hi_read_rx_xcorr.v --- armsrc/fpgaloader.h | 1 + fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/fpga_hf.v | 4 +++- fpga/hi_read_rx_xcorr.v | 31 ++++++++++++++++--------------- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/armsrc/fpgaloader.h b/armsrc/fpgaloader.h index 59c07ed8..7dfc5c12 100644 --- a/armsrc/fpgaloader.h +++ b/armsrc/fpgaloader.h @@ -58,6 +58,7 @@ void SetAdcMuxFor(uint32_t whichGpio); // Options for the HF reader, correlating against rx from tag #define FPGA_HF_READER_RX_XCORR_848_KHZ (1<<0) #define FPGA_HF_READER_RX_XCORR_SNOOP (1<<1) +#define FPGA_HF_READER_RX_XCORR_QUARTER_FREQ (1<<2) // Options for the HF simulated tag, how to modulate #define FPGA_HF_SIMULATOR_NO_MODULATION (0<<0) #define FPGA_HF_SIMULATOR_MODULATE_BPSK (1<<0) diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit index 864b52394dcb821b24bb42ac9b8d6d01a34832f8..b9f2e6292e42801a73b57aa3e43dff00191ec8b9 100644 GIT binary patch literal 42175 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�{n79a~&>|uqF{t z&~Dh5uveMXg!{y}x2AFAzkV^SX_rofr4T;q5W0}#F5@{*zpSgZT<{ogWmBoe(GA7| zAHTSM;}29<4mj8;VGq}%0sP`8Gsa|re|h*7?)ApQ+XncB5ticD1Awh-Cc}9#&%#IY zs@{RXhxGYZYVH_ZVwlRm^K7Ps&7ANQty3KH)?%c77*G$C$qquzsYAluJclZD1|)1u;P zAm<#kw13!)Y#flWtbXGnb*RYG#+&kd?|vt8*htD(mB!`L`V9`@4jU%{TU};!IDC>` z_tv5Wzkue$9Nz$Jtzgx2FhBl#9M&B#ekd~GdxSGIY&t#RIxNAUqsQa(FP;AqPBz?8 z9f5JksBpYGQSHajO5%t6)q}frE@^YRF%#av`UU(dj~}A`P(_pAl~3787yA$m;8!{S z0xm05Yn)$m(f+WD#s#jcklc0k_>Umgjr6ZF;%e7#rzlbhd`;)NJ-oiTD*#0Mq`WZ*>I9Phg^Ti z5k;#PX~9ivbpGQ1WTq)K7H}7@{t)rQ2=6h}Z#aoz<1IMFT%TIRuT$bI^RJ!8&jkXB zy|?T%et|fE9&>?zRRG#Dc=9ddVLF;a8s(UA9f+9j6T}ZsW)8|$3Xh3KIqb%E_IyV) zxqcyHvHp<0Zv$a(6GPN5J^hLVWA5WIBYue7pGInit(YW`P;<+08GaS(H}(ijcy9tk zjE)ZI@sz|5HMH5r7$|Uu+yVR&XJOEwL?!V~ zThnO7luj9M&9s*BueIP-&NOEJMc!k%YW8~vmEL1P{BS<9$&E(<6aPY+oyN)PKJ@YN zE8t&U^iRyT))_B~r~0$G*~^V91>@I;i~Q^Ay+WrF((LNjYU6pXVCPHt7l#df*!r6( zn89=8XxDBfg=vdx9>Soria1=e#=v@4{t$FYvF^bWU;=qos-7+(2qj8Pk>+N z>1}G)DRl+d8i#FJPA`p=*Kd549+ldvzkzf)!fRRNzYLC0mGLk1ITC(QoQ6GYJ&cdy z6!!ZR^eX}$4h9{EToCYZI9ZM2N%;J*8v*~?2)hAmj9O5bWj)k58rnXW@Gq3H5#mu? z-msW`znMaut$<&lb9BPp-@N!N^DkP$#Q6eEP&*fnCJX#)+)-vMgs{ecwI6$BQO=7W zV$5ar8|r>1-h*8K1Z7chj(s>rikjWh`i<>CYS;}W_R{i(YPUK&@EZ1N^BDRR@?W*n zz~wfznB{sG@v+&Qubfa1yOB(>e&ZmZ_DL0e#W-)HF6F5z50|fZ7njv<{0jLmjnq)w{cBo&S|XID9aV#*De|YY*|dZ z9+{)dqE0}Ynp_n67V(R1LhhqIfZB&$)E|CXyiNVqgUlHN{F(s#Wya!JFAvN3h1%w! z*!t>{`i)^a9%{=h-sAJHnvC(TdQk#cOY1jmgbgV=HkhHjgZRdfk&9iL|2jplhDPP= zZ-J-0n`ukUM$H@WtBrxI7(ZMC{?!NGw1*DmoIWcX)A=ucQp7Lu^(~EeR8Lki2U)bP z`d;xgbSK7aE69IU&?edVhwR#LB9^xNSX{KX?6;3&y0GMW@p$? z1JM$t_!U8TEd|yOkdp9?(*Q(xAgpKsex2!lRiexfGzY4;QnqMZR&5ebDn0$;`uPFn zWRQY%KwS}UQDR(h93bvi7wb3FrcjfNzdYb`Mw`J`>e>tu^6~3Ch#NOaYm)gFAiFv} zFb3{fR=-h;S#{fbBX+nMoRP(?e>>=Z)0`U!sx<*jHQAJyogR+hAG(F)iRE@`LEFCYDm#{-wApcSYY)b@ib^HbdeE@d+*`;jc59oWD*;; z&8Od}m8scZHjdM?YKa3Pwn(s=qJDn6z)dHZ!jy)F#x+wBxtk=I_y-NAl8$8rp_`K-i_#uKA#(Eq1<&ylDSAPi4VX25%h&3tL zI*xB(A0|uVhli}zF^B_xDnL}T;y;jIzY*lWv`^7Vt?IQk3#9_DPm7PjNb|Te9I6h24waDn0*oXkF`c_^jxlZH=wR!dVdK zeJRa_OZk^dj6;e@YEUNZ@Y1>#+GlAWDd1lprtkN+1W$t2NFT=jFu^8jQ>EK)6xLzgUVVAs2it+K~m1L)?bt z3h?UzoKIQ7xG`szj`}IqnRee4?|tU(4FP<4D&Ciw0`3}hRXa4ThzlZF(dhj5#+yM zSA};R$}MYi?p&hxmqt`Y0ZAkpJ34Kah*p-8@;n6qArRVx_B_oo(u}`VEvF z!dx`-gr^d=VWLiER07D#`Bw^I!!fokJ+l~dwZSjpUs*aY;TyY6eD0>xo~;JCenaO6 z1OBzpdUUvz(Te%kV$^R`Ur#@_HGT#8ua7Ie$4DH3ySve?UM{-TfYf#);9r0V?B|>N zn15j(TIi z!cR*0*Ndt>gKCX)G@-g+2E%+1OxwdC|Fw%Yg&Jj;`8x+T!>P)o+U(r!Vs(5@MD#fA zuu#8|5)*Vcwe*IiXs~v0RaHs;Yn+tpq_Bc6V5=3*J(BGGmXUn4X=skI;nzT7zi z{YnTVh_${4{7b+T-0i_uH^SF@jMo(eU}$c)jbiM>iU zDI}URZaM$*vt8QYtB6|NERLGx{OcHaN*CSY#Rjq2_#oJCJbPH+UlniBOR;u0F^+WS zd#Wp?`IqL)`6B;%gMQNAltb7Mh4j>#0sqn!^||nw0mri~!xg7!(9Vn@emDVJ2aF41 zxyyq3!`lC9ecOz=!^4{9X#8Tn1H4EE{Hy*HqO$F7WIL-&y7QGp7QTcg#aZws?Pumf zkJ}fmF8427?NRU2lJV_3@#{xzeMB*M&!p+FjT*10fnGG_;W?Z( z|41cxQT*}bMSx$Q0Hb&ERV-KkF!}^?CA$OsnlJaO%&DqB6BleQn-6>ZiyOj^&!c|c zLHuy6rNWp%*iggP`_ymP7aO|9W*=Uy!@QHFa+ToM^G@6GjaE}L>)<%Hs4v(4lKhvw z*=`(%e>hhwK2+v}*GO&+@?THTplY15#s~g{@#`dp%A8S;IZ1kcdgi`xANZGR(Euia z=O>UoE9$&;pRPZI_y*Y4bodL-IR)6t7}IPexUs_1FV24f0@z$2m(;5p97rt3ubnYE#MTSzS;9tmpnK2vQDe_kqey-RQ&o3um|WM0v6o>*t>ajJC+q>{L3~U4mtKXZ(}%S$_n=LUl#e-m6TUYQVIY3S7x@~$VJZ=`Bw%@`GnLe zql@1H-FbL0z^~(gza<4T2q5zgf-#U8RLFm&>F!46gBZ^bYOhrQR$ssFEb_0c+=+0o zKU4(saS$w|V~oin|8ku)IjiEH$j#ZJej$kJ>DNeoKTV>#II1IKZ#B=tQVJ1+?m5{-tK;jUbm)$bZp)Yyd0i4QIi>e&Ax6 z0()4(zns)A6NgG^hFU!!ZXX_Y?r^GiiHtYT;}sL2W|_1F{)I~$;IuCkZVFN;%N8-E?V)%6E2coZ zaQ;i;J^Q*{Yq%k%s&|U4hfRd@UvFX0NAgXOOQI%O8NVDDKOB>Z2Mh}EtNDV2h0M-5 z&!+P8uytRB60MYrKUB)U&QVfDl1&Nu?OtpEWh|t;9CahgJ8S4(dPN;(-ok=NoT01W1z;#vN$A60JP&E=IO@|^P&0lurv(8-8=i?S-xh`htE?W{^T)pgj>_~G+ks0bREjrT>-eq&aO`*8m2O~{pa6!UXPEps9VjYSG^W0}Yp)gJDQqkaST18ldh zt(#|}Y(qAHJUU2($(oe#>m?NZ9sNKx@ogL6Ut6xpVDOy(!rm`ya+48sD=Y=dWua!?OFdAP0ke$jL8tIT2{K-nKJG&~T5H245LIhY) zb+!`9m<8CKr6kK$z%OF7ijmbXa`b?Pty?qp!Aisr1N`bi9SB!w`}R=77UNe&#%)pO z#}8}4zo<#}Oo}tLKZpa?cg6NZ4v82e+5*p)(C5EIo7~Rxe5fCgyz zuk4V2kzPGTuWr&|L$0Xr7>}mI$Gtrkw@2X{b8Kf$zTrHmJM`epP#%I#WB(dJ<){ zH~BD;v-&E396}=ONR=acygnmzC7n^%I?*2Nr~_&->JR6fv!BW#A+o`!7Fq|b`n@=6 z)XG-JM?ZPbxaInl0r0c|5TT_=Wp78XIr3 zdh6=twbVl4I}OIKYu)PG#rM2I{^HeCd|DohtaUd6YbGTvdxQ+1j zD(pj(_9+xsdj>!1*+Z_MhZ#&m zieJ(>T~4|B=a38hD~8>h;`b;-@ZY2Bc)8Eee+H?EhIF$zaEA-p8HJ^hFVS-!Hxy>8;BobM>8a$0sfW8-8D}N#MyF%Sb*b$cZa~dHIPT%r11Ot+FS9lM(HC$IG4IVY z#}6@7ob$b7I}L^ssyZnqB=GA9R_85GzkpxXW9p0IDogC`M(!^S5XVIv6vzB@7vhJt zrxjvNGMYgx%}b%qdv%TLxB~#{A1u}%I$&GtABh&r1hhMph8!2lg25u(MLXL}u zld;oW_vHe}iu^0|$Z$(8ysrCi2^1!yxy&~d4yvrXV0pU+zIn!4XKiqFM zj=|P_md7&|hT;!wwpw0}e@VRM>6c62avoNV3|pFZWtlUEHY*sAufU4x{oFHmyb(w} zg}Z&gzeFN~%TD6O`aT%I>#M@)a{8Ojj)zPX!DLsEiz~v-+{%g zOzBP)=jes|y7D;xHJ?BYbK6l5;OK*3XN&lCFKuoBBz;oYsei`(05#Ar!Sy8Z-Xi}x z;B2mISre9(OKCGXZgn5z+Kkw{mFqS={c=!$IOxFDH!Dquj01@*J6CkTwp{7$`H}kF z^t=l--!o?cK^@+jods`tUZIlk$#AQu%Y0kQuX+2a@J~(DD2~@;+31P#_~BdfrQPkL zJMvGRf$X{v(c@nm^SD?>V`aa&ivDqE(R4UFa7uAl3~J@YqpW=czJ95SIBk+)9 zl0FHyN7dy#TgUkIkQooLPr^2n%>@VLv|L9*dYbwC7sR0`8B-SSD{vDmmmV05gVD>K zGFP9#32Tl~-^%xI`1uswkj47>85-lV!y`sgO*rkj2xu1q+U+@wdRhmS{VUq$#?Dy# zaFxL}8-DmsfeXzz|20yqpC6Z;Wx&pi%VDgSRSTq53b9uPqUGZk)$@3kD4iyFmH=A^jTrQO)P(^F@?Qt(Vg`8!RBM2z0FGyjHwc-d!yx+s zehuTdR*V7Gk^kcN>@$d-XXoVJB7QBDTl-_pJqo9=hppI2>j$Dm4oruL2kGXm_A&{5@=3Wun#Eo^8 zLHrQ$dCIUAbtq#ka>L6jqp3kkx#5o$kGPUhae8*TQpBr!MkB+QfF1UUJCz=EP z!3dv!2QQX>!4XNXYZV|uE z(AT*V!xqil%4>7~^@M;M2xKnr-n2rz+3V6C5_2igU0r`pv;0ewa1K1?+}ua%e)dTSX_?E#jBO z`kuDHT4{im;b5%zB|U1ks+;$S0Ka;KI++=UiyjdOR_9^EUx2d|c?+5J0KYnDGv=p( z@4MJe*Vthxen%;S1lx^fR5j&#*Wb2COm$$=0cBokgjMqKP z)dhQIXXuvyQot`+ahzVluOp2zAB}bgw&g9tMI27#btA}sp|(&y=yH9O+-^gyq&Ptb zLM^VZfRw^6Sg7%8M}@LCBP1S3i!np_2`59H|jv8U6@LZUm@@>AHNjhhcI6< z!tqQ$Z3@gaJ8_^jxIYT#mr;E!qj^A^k6%6!a|8SeU7+&{X|Fu)tNe|+o>1T0hR#^H zH;tsvPZ2-FQMDsh{=P+YXkgh1jtSQ)E^>#2zPEOk_~^<{Pp<9sP&-Xgm7*ups?LvH94X#>m;eMN^ARyRr zvJgMy`+K=sqv|W&e@x#{f4axIYxi**^@n*Ba#-G)a{LfypkyLxd>r|&r7F^HjM>PD znW!)+i65Tt#(9UgLc2`94hu_wg{uWFOHUT?**RLWQ-5d8`M5D+nK`%`>={; zW(D}g(ZWtL;91d(>@=$oYeK|+1-!3WCHRFim>R#tQG0=`Ik2i3F{>D?=p5mF7uU}p z>S>i*(=iYzcUiZ^@m`!w9uKE)3gU-MyENkfY^`aP3)AAi;K>&_kQn5@5U!y_@0D}$ z1QdpoWp~p)xdHjF()tY^GoN2J$LR^D2JFG+Ld0k>|MelT66#99@}JGz;|Ng^m@Dl(zv4e0JU=vIjhai3!+#kiU zCQ!vsR@;K(hcFH{athkd^y=pkHni)w93>{Nyic5R_L1m@4_WE?EjoUf?o1&P_z^l9 zTGsou^sRii;e9fio>k0$VT3wtIF&x@boMRO{7V48O6oTnj}BEyU3eoBE%1==}1psB~!CTwXkpCRm2#ZWL2M#Fdz8g`=hwd+)7ryh&A1? zy~>8W3)>Q}%GO!lo*${en5}kqZ5}TA^Rg{fgL-U*8#&rq^0WN!;`kxd%8h12*SJ_O zceakjAvp7i>?|L@Lhy_)APEr3&N@#&p=)I#ZydmTKx(qZ^Isb=p51PBRvc0NZqu7J zd{E^v>bwsiRT4jZ6cr}GxHstA!wbf&`)<@6&EY-;{E84#EpB!4Mh+1;>O(dHiQr#! zRkF_a51D^G%Hsh<;+W?$70DtweldhSmM`YNc+4wZ+y|@6Hq>H1l6+BojH3CEOjqhX z?;_p{DN4cox|`YJ}-H7pkKxKAw8m+ zQr1lOin*Km8*^9n#Qvn`@$@x$U_rpYxNM#iNdko|;N9m2+NL51LzzdF;7KTrAFgdY41GUF-!~CR>=mz|vKsZq zrRTrskxXL-43YB%&UE!%sIT3j8gtKYh~+)~()Z7klf!JV`-Ba7t$0xl$}hM`ZkE&^ zzC~?Z7R6;7qpEeeNI_K#!?w<#KJxNhlu=~_W6+?q~;vgzg#=kh*1-sge^};rO zz*rz*MI{6*#V?rU@Vx^jC>0E~zDP>6t^+G6!>@zZB2&tqyB`J{WYQ`@eKeR=6fM0Y-fKI}76#cl5y86DlvCtNfG2BK{ieH%Lgg4Kl zvK28;=V&eF`2k~t=dXJFt5fJbHsf^2nsn3DR((guw~T;)0l%=62{q`@xHU>R9~U!G zQ4b^16vPktB>Q5rT%gQ$H>RxVtvJyfYT60>3iuc67vhI2p&EmeY|O=M_(;&NEcyia zh02E)tzV0IcLNJt1id?&|6Vl?U_S@^OCMX#Mef=LJ2sunMWz8j|E%_<%IgmiEj$KI zISttAbi)}0^M7Rng=Y%olC$9|{a`}A6gd5X08J*om9 z5k5+CA8u?HN5HmFNMD9ud@FmL%^img;{=fhO(b8k1^x2xKXd_G-u+S9|G_~pi7}Jm ztvlZz<(FZb?+BPdPK3eo6UJPEUl*J%6x$B!_@Rs(McKx`Cfmnw-k}7)9(7xjkzo zuW({~uB|5{O7QD~?6MO-3@_~->)m%-#6qwNM8i$&3YFj&pKHSrp;JtyQ?T>DtkdUw z`67-K&okfOdk$wJYHWn*##3##p+0k=QQqFc%9! zoWc6PQ;uH=S=D-FcaAV#d$c3-77r;#}-i681? zU*k26g9s#2Qbh2SJRYhVPl*QlXQ%OH>$cMKU;2a^*PP%WSO!PcstIGB zzU1$xu%vts=lzsXJ9lIPNhk=D!ZnNBEr7(rx#wY63^YMTmtQP{BWB{?#ZOdc|D$^VcwJ&7%I*AYxpL z&RfH~f1b-@IDR*MohS>(^*^0e=+|;-r+BHhB=Vf`G?VCP45s6G9zKMx`cn7 z&0N1BdR!kP!Zo>*;bn^J=hv3R4}o93vAJPY-B>p)ciY2TyJJdc#4^SBA+xPGGerL5 zFHY~3$$<(7&aKpA?&C3Y{UPS3=jN~sL>KV_jYW_tl;3v#61;=Sy zG0$i~cfVd5KZNIyirU+z=uNZZ$RF%7#tQkb68z#d#kIybR$!uRW9a_IZVm)R`it>H z#;?|lm4nOtwZ7OcHC1=LJgxv_m*UrYZrs;k>9WyC#+OCes!d*czCw?GnKugX2#%%VtX#Ju9*K~pBCr8*v=nEW43BSA$`vi z$AQ#A{)?+M*q;wyDP9`t0uJ7~f*8owUV>jW64yq}qs>S;^t>W=sefT$y#&8-G`

N^drwI3p?g=l3-PrH` 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 We*cOjW%&2Fq5%IME~cgYm;B#7qqOM& literal 42175 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 diff --git a/fpga/fpga_hf.v b/fpga/fpga_hf.v index 264e1b0c..f99a43dd 100644 --- a/fpga/fpga_hf.v +++ b/fpga/fpga_hf.v @@ -73,6 +73,8 @@ wire hi_read_tx_shallow_modulation = conf_word[0]; wire hi_read_rx_xcorr_848 = conf_word[0]; // and whether to drive the coil (reader) or just short it (snooper) wire hi_read_rx_xcorr_snoop = conf_word[1]; +// divide subcarrier frequency by 4 +wire hi_read_rx_xcorr_quarter = conf_word[2]; // For the high-frequency simulated tag: what kind of modulation to use. wire [2:0] hi_simulate_mod_type = conf_word[2:0]; @@ -100,7 +102,7 @@ hi_read_rx_xcorr hrxc( hrxc_ssp_frame, hrxc_ssp_din, ssp_dout, hrxc_ssp_clk, cross_hi, cross_lo, hrxc_dbg, - hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop + hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop, hi_read_rx_xcorr_quarter ); hi_simulate hs( diff --git a/fpga/hi_read_rx_xcorr.v b/fpga/hi_read_rx_xcorr.v index 80e36327..afa46c44 100644 --- a/fpga/hi_read_rx_xcorr.v +++ b/fpga/hi_read_rx_xcorr.v @@ -10,7 +10,7 @@ module hi_read_rx_xcorr( ssp_frame, ssp_din, ssp_dout, ssp_clk, cross_hi, cross_lo, dbg, - xcorr_is_848, snoop + xcorr_is_848, snoop, xcorr_quarter_freq ); input pck0, ck_1356meg, ck_1356megb; output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; @@ -20,7 +20,7 @@ module hi_read_rx_xcorr( output ssp_frame, ssp_din, ssp_clk; input cross_hi, cross_lo; output dbg; - input xcorr_is_848, snoop; + input xcorr_is_848, snoop, xcorr_quarter_freq; // Carrier is steady on through this, unless we're snooping. assign pwr_hi = ck_1356megb & (~snoop); @@ -28,19 +28,21 @@ assign pwr_oe1 = 1'b0; assign pwr_oe3 = 1'b0; assign pwr_oe4 = 1'b0; -// Clock divider -reg [0:0] fc_divider; +reg [2:0] fc_div; always @(negedge ck_1356megb) - fc_divider <= fc_divider + 1; -wire fc_div2 = fc_divider[0]; + fc_div <= fc_div + 1; -reg adc_clk; -always @(ck_1356megb) - if (xcorr_is_848) +(* clock_signal = "yes" *) reg adc_clk; // sample frequency, always 16 * fc +always @(ck_1356megb, xcorr_is_848, xcorr_quarter_freq, fc_div) + if (xcorr_is_848 & ~xcorr_quarter_freq) // fc = 847.5 kHz adc_clk <= ck_1356megb; - else - adc_clk <= fc_div2; - + else if (~xcorr_is_848 & ~xcorr_quarter_freq) // fc = 424.25 kHz + adc_clk <= fc_div[0]; + else if (xcorr_is_848 & xcorr_quarter_freq) // fc = 212.125 kHz + adc_clk <= fc_div[1]; + else // fc = 106.0625 kHz + adc_clk <= fc_div[2]; + // When we're a reader, we just need to do the BPSK demod; but when we're an // eavesdropper, we also need to pick out the commands sent by the reader, // using AM. Do this the same way that we do it for the simulated tag. @@ -71,8 +73,7 @@ end // so we need a 6-bit counter. reg [5:0] corr_i_cnt; // And a couple of registers in which to accumulate the correlations. -// we would add at most 32 times adc_d, the result can be held in 13 bits. -// Need one additional bit because it can be negative as well +// we would add/sub at most 32 times adc_d, the signed result can be held in 14 bits. reg signed [13:0] corr_i_accum; reg signed [13:0] corr_q_accum; reg signed [7:0] corr_i_out; @@ -84,7 +85,7 @@ reg ssp_frame; always @(negedge adc_clk) begin - corr_i_cnt <= corr_i_cnt + 1; + corr_i_cnt <= corr_i_cnt + 1; end -- 2.39.5