From 3f19c6662968733e36d66cc034e34d8ae3663378 Mon Sep 17 00:00:00 2001 From: TinyTapeoutBot <139130078+TinyTapeoutBot@users.noreply.github.com> Date: Tue, 5 Mar 2024 19:51:17 +0200 Subject: [PATCH] feat: update project tt_um_digitaler_filter_rathmayr from NicoRathmayr/jku-tt06-Digitaler-Filter Commit: 9c7fb254f298a02c8900c089bf1838d160e7b945 Workflow: https://github.com/NicoRathmayr/jku-tt06-Digitaler-Filter/actions/runs/8156817736 --- .../commit_id.json | 6 ++-- .../docs/info.md | 26 ++++++++++-------- .../stats/metrics.csv | 2 +- .../tt_um_digitaler_filter_rathmayr.gds | Bin 2938674 -> 2938674 bytes 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/projects/tt_um_digitaler_filter_rathmayr/commit_id.json b/projects/tt_um_digitaler_filter_rathmayr/commit_id.json index 107d3e21..4dc03adb 100644 --- a/projects/tt_um_digitaler_filter_rathmayr/commit_id.json +++ b/projects/tt_um_digitaler_filter_rathmayr/commit_id.json @@ -1,8 +1,8 @@ { - "app": "Tiny Tapeout tt06 e8c5040d", + "app": "Tiny Tapeout tt06 12c79b06", "repo": "https://github.com/NicoRathmayr/jku-tt06-Digitaler-Filter", - "commit": "c8eb78496df78c3b2e8ebc1f4f752a9e855ee77f", - "workflow_url": "https://github.com/NicoRathmayr/jku-tt06-Digitaler-Filter/actions/runs/7986714345", + "commit": "9c7fb254f298a02c8900c089bf1838d160e7b945", + "workflow_url": "https://github.com/NicoRathmayr/jku-tt06-Digitaler-Filter/actions/runs/8156817736", "sort_id": 1709300416068, "openlane_version": "OpenLane f691c8c0712ca6c6645e3fd548985b3cbcf08c78", "pdk_version": "open_pdks e0f692f46654d6c7c99fc70a0c94a080dab53571" diff --git a/projects/tt_um_digitaler_filter_rathmayr/docs/info.md b/projects/tt_um_digitaler_filter_rathmayr/docs/info.md index 7f2246a5..fa3b2b45 100644 --- a/projects/tt_um_digitaler_filter_rathmayr/docs/info.md +++ b/projects/tt_um_digitaler_filter_rathmayr/docs/info.md @@ -9,24 +9,28 @@ You can also include images in this folder and reference them in the markdown. E ## How it works -Ziel dieses Projekts ist es, einen effizienten digitalen Filter zu entwerfen und zu implementieren, der in der Lage ist, unerwünschte Frequenzen aus einem digitalen Signal zu filtern. +The goal of this project is to design and implement an efficient digital filter capable of filtering unwanted frequencies from a digital signal. -Der FIR-Filter (Finite Impulse Response) zeichnet sich durch seine endliche Impulsantwort aus, die durch eine endliche Anzahl von Koeffizienten definiert wird. In diesem Fall werden lediglich zwei Koeffizienten verwendet, was den Entwurfsprozess vereinfacht und die Implementierung auf einem FPGA (Field-Programmable Gate Array) oder einem anderen digitalen Schaltkreis optimiert. +The FIR filter (Finite Impulse Response) is characterized by its finite impulse response defined by a finite number of coefficients. In this case, only two coefficients are used, simplifying the design process and optimizing the implementation on an FPGA (Field-Programmable Gate Array) or another digital circuit. -Die zwei Koeffizienten werden sorgfältig ausgewählt, um die gewünschte Frequenzantwort des Filters zu erreichen. Dabei ist es wichtig, die Anforderungen des Anwendungsfall zu berücksichtigen, sei es für Audioverarbeitung, Bildverarbeitung oder eine andere Anwendung im Bereich der Signalverarbeitung. +The two coefficients are carefully selected to achieve the desired frequency response of the filter. It is essential to consider the requirements of the application, whether it be for audio processing, image processing, or any other signal processing application. -Belegung der digitale Inputs und Outputs: -- ui_in 8 bit Einganssignal 'x' -- uio_in 8 bit Koeffizienten 'const\_h' -- uo_out 8 bit Ausgangssignal 'y' -- uio_out nicht verwendet! -- uio_oe nicht verwendet! +Assignment of digital inputs and outputs: -Ursprünglich war die Programmierung des Filters mit vier Koeffizienten geplant, jedoch musste diese Ambition aufgrund von Kapazitätsbeschränkungen des Chips auf zwei Koeffizienten reduziert werden. Im Code sind entsprechende Ergänzungen für vier Koeffizienten auskommentiert, was die Möglichkeit einer zukünftigen Erweiterung des Programms gewährleistet. Um nun sämtliche Koeffizienten mit nur einem 8-Bit-Eingang einzulesen und in das entsprechende Register zu speichern, wurde eine Art Schieberegister implementiert. Jede neue Flanke des Clock-Signals ermöglicht es, einen neu eingelesenen Wert an der gewünschten Position im Register abzulegen. Sobald die maximale Anzahl an Plätzen im Register belegt ist, wird die Flag auf Low gesetzt und der Zähler zurückgesetzt. Das Eingangssignal wird ebenfalls mittels eines Schieberegisters eingelesen, indem der Wert im Register in jedem Schritt um eine Stelle verschoben wird. Nun zur eigentlichen Filteroperation: Die gewünschten Koeffizienten werden mit dem Eingangssignal multipliziert und nach jedem Schritt summiert. Dabei ist zu berücksichtigen, dass die beiden Register unterschiedliche Größen haben und daher angepasst werden müssen. Das gefilterte Eingangssignal wird als Ausgangssignal aus einem Ausschnitt der in der Summe gespeicherten Bitfolge ausgegeben. Diese Schritte gewährleisten eine präzise Signalverarbeitung und verdeutlichen die Anpassungsfähigkeit des Programms für potenzielle zukünftige Erweiterungen. +- ui_in: 8-bit input signal 'x' +- uio_in: 8-bit coefficients 'const_h' +- uo_out: 8-bit output signal 'y' +- uio_out: not used! +- uio_oe: not used! +Originally, the filter programming was planned with four coefficients, but due to chip capacity limitations, this ambition had to be reduced to two coefficients. The code includes comments for additional four-coefficient support, ensuring the possibility of future program expansion. + +To read all coefficients with just one 8-bit input and store them in the corresponding register, a shift register has been implemented. Each new clock signal edge allows storing a newly read value at the desired position in the register. Once the maximum number of positions in the register is occupied, the flag is set to low, and the counter is reset. The input signal is also read using a shift register by shifting the value in the register by one position in each step. + +Now, for the actual filter operation: the desired coefficients are multiplied with the input signal and summed after each step. It is important to note that the two registers have different sizes and need to be adjusted accordingly. The filtered input signal is output as the output signal from a section of the bit sequence stored in the sum. These steps ensure precise signal processing and demonstrate the program's adaptability for potential future expansions. ## How to test -siehe Testbench. +Refer to the Testbench. ## External hardware diff --git a/projects/tt_um_digitaler_filter_rathmayr/stats/metrics.csv b/projects/tt_um_digitaler_filter_rathmayr/stats/metrics.csv index 5f81ebb4..cc089b4a 100644 --- a/projects/tt_um_digitaler_filter_rathmayr/stats/metrics.csv +++ b/projects/tt_um_digitaler_filter_rathmayr/stats/metrics.csv @@ -1,2 +1,2 @@ design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Final_Util,Peak_Memory_Usage_MB,synth_cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,pin_antenna_violations,net_antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,DecapCells,WelltapCells,DiodeCells,FillCells,NonPhysCells,TotalCells,CoreArea_um^2,power_slowest_internal_uW,power_slowest_switching_uW,power_slowest_leakage_uW,power_typical_internal_uW,power_typical_switching_uW,power_typical_leakage_uW,power_fastest_internal_uW,power_fastest_switching_uW,power_fastest_leakage_uW,critical_path_ns,suggested_clock_period,suggested_clock_frequency,CLOCK_PERIOD,FP_ASPECT_RATIO,FP_CORE_UTIL,FP_PDN_HPITCH,FP_PDN_VPITCH,GRT_ADJUSTMENT,GRT_REPAIR_ANTENNAS,MAX_FANOUT_CONSTRAINT,PL_TARGET_DENSITY,RUN_HEURISTIC_DIODE_INSERTION,STD_CELL_LIBRARY,SYNTH_STRATEGY -/work/src,tt_um_digitaler_filter_rathmayr,wokwi,flow completed,0h2m57s0ms,0h2m32s0ms,114176.10522469858,0.01795472,57088.05261234929,62.04,78.9637,567.05,987,0,0,0,0,0,0,0,0,0,0,-1,-1,19760,6797,0.0,-1,-1,-1,-1,0.0,-1,-1,-1,-1,14525152.0,0.0,41.87,29.23,8.31,3.8,-1,880,1139,21,144,0,0,0,958,130,48,52,55,90,199,93,18,76,126,19,735,225,1,416,1025,2402,16493.3184,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,21.0,47.61904761904762,20,1,50,26.520,38.870,0.3,1,10,0.8,0,sky130_fd_sc_hd,AREA 0 +/work/src,tt_um_digitaler_filter_rathmayr,wokwi,flow completed,0h2m56s0ms,0h2m31s0ms,114176.10522469858,0.01795472,57088.05261234929,62.04,78.9637,564.92,987,0,0,0,0,0,0,0,0,0,0,-1,-1,19760,6797,0.0,-1,-1,-1,-1,0.0,-1,-1,-1,-1,14525152.0,0.0,41.87,29.23,8.31,3.8,-1,880,1139,21,144,0,0,0,958,130,48,52,55,90,199,93,18,76,126,19,735,225,1,416,1025,2402,16493.3184,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,21.0,47.61904761904762,20,1,50,26.520,38.870,0.3,1,10,0.8,0,sky130_fd_sc_hd,AREA 0 diff --git a/projects/tt_um_digitaler_filter_rathmayr/tt_um_digitaler_filter_rathmayr.gds b/projects/tt_um_digitaler_filter_rathmayr/tt_um_digitaler_filter_rathmayr.gds index 237e8fbccef3b7b4f0a7e7fdade51156b6153fb1..cfba0e67bffd72af72f95750d705304dddfb02fa 100644 GIT binary patch delta 2308 zcmZuzYfKzf6lP|2Uc0~o%gpYuyX*oBf;0uK0jfY(8r0gvEY{jK0hhK3sZGR$MC}g| z)F>(CA>F`jn;I64u`Y>N#&D80ZA>-6N)>iI3}5eNp?=K^Z9)NJ~Tx>vM%2g6)c5-&uNrvZ9Bp8!~Mg3YmXMmh@Na zpW-d~*d*s83&&+%7n{ndxX6#Qj6$Z4$b!BjHbWg?!0On5Eb3M9p$9BGBq{NlzI5VI zHzh+GUVU4tHOG?Sb%lhQosvFx#-~_vlKe#UlJqO+PhR+D?ScN^uPa_l*)%eL7?V-{ z{Vd;-ljuH1dzbMr9!rM0ekd(t-paCMu&{}FCeQjd?)gajq|6iE!|WolL(KI=6+{zT z%9WW%nA!qM6;L%nhi6{>;C?3$f4;!{;C(QoC5hH#RMTd!kpIZ$11F(nB{;a z1Z34Su-FyhxE^2z?}ZP3ED8Wv}?`Rwh)JLSpA+kv!MR z1|jKZzoY!FvOj-b7GS)N?WL(P>Ix5TXESrHFiGRfLIAp2*?*{nu#+?xd7eF(b7#*E z2=}oSG<9ac;U%Q**^}%*kg|`>ppxF*PSL1Gki@#V&1C9Zu`4m$6eYurjwq>mT$D(B zD=U+s0lpeiXW0oVK(j%HuZlc$e$E~#u`HVhTW-n{gs!u^bn+{GBIA7 z4aCEximmGgPa5p6;f~S78?6ie$GA&W^gH0Ml!te-p zfZ}szk^`y`@Xur5Un&hK`N z-eZ>|wHh4icRXETmt$K7K>pBif^v&BQb~0SGIH^vLYB?4F+FX5VXSgp-WvEG7T)pO<;JkXPy2)&R5<~sZIFu099H=4xNwRV zn)^Dv=n?>?g_{&1Mj~)&R_LJ?ps_1dICxojjcT}6Iz4G&1Ksgvf3Ec5DDBS`k5YCG z8-CEr#J^RG9P=4~+6J-TzJe84iitOBC`B^@w7Zp>&eb*K?!hGXOp1+EY=9;5P$rFM z3%*_y-=rqQC^F#Cx7V$4GxnrQ1f@iJ;$HiK5BhgXQ|m|^pFsa@ol*z2P>ko$3qSWr zf!sS3EHWZ3(#op~;caOsL^(7H1hW^UR_cW``!bYvNwDoJ>6ZPuR${12Gd^J)M9 delta 2308 zcmZuzYfKzf6yBNHdF=uVEHk^q?y?Ik2+|a^2B-o>8r0gvEY{jK0hhK3sZGR$MC}g| z)F>(CA>F`jn;I64u`Y>N#&D80ZA>-6N))Z=SRjzS#d7fUXfjK_t(u5b1@t|h zCYMd5ka&SCB|ffG^+oMdCuO8aAT3cjqR$m{2(~K$eP_u9%8DMTs?V@#C}jR2S<+vv zdy2Q@W0RbpEF714U2H0&;vzrJG76bGA`AMC*bH@m0jpyJvZz`1Eb5)@)0L*A)_Oc1il&8NXu5N%9lXN7ApLKY8JswFmltzpnT!Wz)#~VN6E( z_p>}pP8#{~5AJvI@aGH6FMdmtpcBk!&LxmPQcMUUBg|>deyqYuidha? zLO{m;@>1nCdghc{o4LZArD|Z9*5HS$%!?E$hR{!v*JK`gSoVtFZe>DsD}Zi*?0Er zgh(G-PE%(F99cr@o;}G9ged#i3@Yi}?GlZ8gh;HL+f1gu6}u9{O^sx@!P!VE9~UJO z-^$8lXn?PR)LC|d3eaqj;j1DKou9KuiY?3L!Iqn{1mWxKtwMXGUoN|XCOrh{sYr~M zWC8JVsUqvT!IK92tGQz|@kZ-H;4$tJRef0L-~y`MK2|aao4UDbx@D0BmAn*mi7-6E z9iaG}ndE>f1blRk8_#v$UL1~SqS2E_+69*f1{b)l0xC+h>4R{Z6I4pS$kfjscW093 z?QDqjF7ulc@r4_tXD`=C(lwj{*97P2ngaPqyxS$fdqHPyA?3kLnQ3qy%U_qG2IqG> zNAI!Aky;H7^*f&~x683DgCKwCJVCj|8mXkJ1sS<`(fLJ#~dq+;irAV4yv4h(>6#&W)3U-c3e0` z3(b9XAViXy0=-X@8xEXuWErL=kJ#nx7zz_X9rKxo!j!&Tfwoa*oS}4YI=!2ho zq+re+3Kkua7HQ?xh48jC6s8;+1%lZNQY-aBntd5gyCvB6m2}JgT&u8eNt&;t+(iZR zucEIlC?i}5HzEU(iO52D5ZQ