Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions fir4tap1016/README.md.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# fir4tap1016 - 4-Tap Moving Average FIR Filter

## Description
A fully synchronous, 4-tap moving average filter RTL IP block. This filter acts as a low-pass DSP module, designed to smooth out high-frequency noise in digital signal streams by continuously outputting the mean of the last four acquired samples utilizing an optimized shift-register pipeline.

## Block Diagram
Refer to the comprehensive project report for detailed schematics and block diagrams.

## Pin Configuration
* **Inputs (10):** clk (1), rst (1), data_in (8)
* **Outputs (16):** filter_out (16)

## Author & Contact
* **Name:** Hanzala Zafar
* **Institution:** Jamia Millia Islamia
* **GitHub:** [@zafarhanzala](https://github.com/zafarhanzala)
37 changes: 37 additions & 0 deletions fir4tap1016/Verilog_Files/moving_average_4tap.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
module moving_average_4tap (
input wire clk,
input wire reset,
input wire [7:0] data_in,
output reg [7:0] data_out
);

// The 4-stage pipeline registers to hold our samples
reg [7:0] reg1, reg2, reg3, reg4;

// 10-bit wire for the sum to prevent overflow (8-bit + 8-bit + 8-bit + 8-bit = max 10 bits)
wire [9:0] sum;

// Continuous combinational addition of the pipeline
assign sum = reg1 + reg2 + reg3 + reg4;

// Sequential logic triggered on the clock edge
always @(posedge clk or posedge reset) begin
if (reset) begin
reg1 <= 8'd0;
reg2 <= 8'd0;
reg3 <= 8'd0;
reg4 <= 8'd0;
data_out <= 8'd0;
end else begin
// Shift the new data into the pipeline
reg1 <= data_in;
reg2 <= reg1;
reg3 <= reg2;
reg4 <= reg3;

// Output the average (sum divided by 4)
data_out <= sum[9:2];
end
end

endmodule
153 changes: 153 additions & 0 deletions fir4tap1016/eSim_Project_Files/4-Tap_MovingAverageFilter-cache.lib
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
EESchema-LIBRARY Version 2.3
#encoding utf-8
#
# GND
#
DEF GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -250 50 H I C CNN
F1 "GND" 0 -150 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
X GND 1 0 0 0 D 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# adc_bridge_1
#
DEF adc_bridge_1 U 0 40 Y Y 1 F N
F0 "U" 0 0 60 H V C CNN
F1 "adc_bridge_1" 0 150 60 H V C CNN
F2 "" 0 0 60 H V C CNN
F3 "" 0 0 60 H V C CNN
DRAW
S -400 200 350 -50 0 1 0 N
X IN1 1 -600 50 200 R 50 50 1 1 I
X OUT1 2 550 50 200 L 50 50 1 1 O
ENDDRAW
ENDDEF
#
# adc_bridge_8
#
DEF adc_bridge_8 U 0 40 Y Y 1 F N
F0 "U" 0 0 60 H V C CNN
F1 "adc_bridge_8" 0 150 60 H V C CNN
F2 "" 0 0 60 H V C CNN
F3 "" 0 0 60 H V C CNN
DRAW
S -400 200 350 -700 0 1 0 N
X IN1 1 -600 50 200 R 50 50 1 1 I
X IN2 2 -600 -50 200 R 50 50 1 1 I
X IN3 3 -600 -150 200 R 50 50 1 1 I
X IN4 4 -600 -250 200 R 50 50 1 1 I
X IN5 5 -600 -350 200 R 50 50 1 1 I
X IN6 6 -600 -450 200 R 50 50 1 1 I
X IN7 7 -600 -550 200 R 50 50 1 1 I
X IN8 8 -600 -650 200 R 50 50 1 1 I
X OUT1 9 550 50 200 L 50 50 1 1 O
X OUT2 10 550 -50 200 L 50 50 1 1 O
X OUT3 11 550 -150 200 L 50 50 1 1 O
X OUT4 12 550 -250 200 L 50 50 1 1 O
X OUT5 13 550 -350 200 L 50 50 1 1 O
X OUT6 14 550 -450 200 L 50 50 1 1 O
X OUT7 15 550 -550 200 L 50 50 1 1 O
X OUT8 16 550 -650 200 L 50 50 1 1 O
ENDDRAW
ENDDEF
#
# dac_bridge_8
#
DEF dac_bridge_8 U 0 40 Y Y 1 F N
F0 "U" 0 0 60 H V C CNN
F1 "dac_bridge_8" 0 150 60 H V C CNN
F2 "" 0 0 60 H V C CNN
F3 "" 0 0 60 H V C CNN
DRAW
S -400 200 350 -700 0 1 0 N
X IN1 1 -600 50 200 R 50 50 1 1 I
X IN2 2 -600 -50 200 R 50 50 1 1 I
X IN3 3 -600 -150 200 R 50 50 1 1 I
X IN4 4 -600 -250 200 R 50 50 1 1 I
X IN5 5 -600 -350 200 R 50 50 1 1 I
X IN6 6 -600 -450 200 R 50 50 1 1 I
X IN7 7 -600 -550 200 R 50 50 1 1 I
X IN8 8 -600 -650 200 R 50 50 1 1 I
X OUT1 9 550 50 200 L 50 50 1 1 O
X OUT2 10 550 -50 200 L 50 50 1 1 O
X OUT3 11 550 -150 200 L 50 50 1 1 O
X OUT4 12 550 -250 200 L 50 50 1 1 O
X OUT5 13 550 -350 200 L 50 50 1 1 O
X OUT6 14 550 -450 200 L 50 50 1 1 O
X OUT7 15 550 -550 200 L 50 50 1 1 O
X OUT8 16 550 -650 200 L 50 50 1 1 O
ENDDRAW
ENDDEF
#
# moving_average_4tap
#
DEF moving_average_4tap U 0 40 Y Y 1 F N
F0 "U" 2850 1800 60 H V C CNN
F1 "moving_average_4tap" 2850 2000 60 H V C CNN
F2 "" 2850 1950 60 H V C CNN
F3 "" 2850 1950 60 H V C CNN
DRAW
S 2350 2100 3350 800 0 1 0 N
X clk0 1 2150 1900 200 R 50 50 1 1 I
X reset0 2 2150 1800 200 R 50 50 1 1 I
X data_in7 3 2150 1700 200 R 50 50 1 1 I
X data_in6 4 2150 1600 200 R 50 50 1 1 I
X data_in5 5 2150 1500 200 R 50 50 1 1 I
X data_in4 6 2150 1400 200 R 50 50 1 1 I
X data_in3 7 2150 1300 200 R 50 50 1 1 I
X data_in2 8 2150 1200 200 R 50 50 1 1 I
X data_in1 9 2150 1100 200 R 50 50 1 1 I
X data_in0 10 2150 1000 200 R 50 50 1 1 I
X data_out7 11 3550 1900 200 L 50 50 1 1 O
X data_out6 12 3550 1800 200 L 50 50 1 1 O
X data_out5 13 3550 1700 200 L 50 50 1 1 O
X data_out4 14 3550 1600 200 L 50 50 1 1 O
X data_out3 15 3550 1500 200 L 50 50 1 1 O
X data_out2 16 3550 1400 200 L 50 50 1 1 O
X data_out1 17 3550 1300 200 L 50 50 1 1 O
X data_out0 18 3550 1200 200 L 50 50 1 1 O
ENDDRAW
ENDDEF
#
# plot_v1
#
DEF plot_v1 U 0 40 Y Y 1 F N
F0 "U" 0 500 60 H V C CNN
F1 "plot_v1" 200 350 60 H V C CNN
F2 "" 0 0 60 H V C CNN
F3 "" 0 0 60 H V C CNN
DRAW
C 0 500 100 0 1 0 N
X ~ ~ 0 200 200 U 50 50 1 1 I
ENDDRAW
ENDDEF
#
# pulse
#
DEF pulse v 0 40 Y Y 1 F N
F0 "v" -200 100 60 H V C CNN
F1 "pulse" -200 -50 60 H V C CNN
F2 "R1" -300 0 60 H V C CNN
F3 "" 0 0 60 H V C CNN
$FPLIST
1_pin
$ENDFPLIST
DRAW
A -25 -450 501 928 871 0 1 0 N -50 50 0 50
A 25 400 451 -931 -868 0 1 0 N 0 -50 50 -50
A 75 600 551 -926 -873 0 1 0 N 50 50 100 50
A 350 0 403 -1728 1728 0 1 0 N -50 -50 -50 50
A 450 0 453 1736 -1736 0 1 0 N 0 50 0 -50
A 600 0 552 -1748 1748 0 1 0 N 50 -50 50 50
C 0 0 150 0 1 0 N
X + 1 0 450 300 D 50 50 1 1 P
X - 2 0 -450 300 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
#End Library
26 changes: 26 additions & 0 deletions fir4tap1016/eSim_Project_Files/4-Tap_MovingAverageFilter.cir
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
* C:\FOSSEE\eSim-Workspace\4-Tap_MovingAverageFilter\4-Tap_MovingAverageFilter.cir

* EESchema Netlist Version 1.1 (Spice format) creation date: 03/14/26 14:21:00

* To exclude a component from the Spice Netlist add [Spice_Netlist_Enabled] user FIELD set to: N
* To reorder the component spice node sequence add [Spice_Node_Sequence] user FIELD and define sequence: 2,1,0

* Sheet Name: /
U1 Net-_U1-Pad1_ Net-_U1-Pad2_ Net-_U1-Pad3_ Net-_U1-Pad4_ Net-_U1-Pad5_ Net-_U1-Pad6_ Net-_U1-Pad7_ Net-_U1-Pad8_ Net-_U1-Pad9_ Net-_U1-Pad10_ Net-_U1-Pad11_ Net-_U1-Pad12_ Net-_U1-Pad13_ Net-_U1-Pad14_ Net-_U1-Pad15_ Net-_U1-Pad16_ Net-_U1-Pad17_ Net-_U1-Pad18_ moving_average_4tap
U2 Net-_U2-Pad1_ Net-_U1-Pad2_ adc_bridge_1
U5 GND GND GND Net-_U5-Pad4_ GND GND GND GND Net-_U1-Pad3_ Net-_U1-Pad4_ Net-_U1-Pad5_ Net-_U1-Pad6_ Net-_U1-Pad7_ Net-_U1-Pad8_ Net-_U1-Pad9_ Net-_U1-Pad10_ adc_bridge_8
U6 Net-_U1-Pad11_ Net-_U1-Pad12_ Net-_U1-Pad13_ Net-_U1-Pad14_ Net-_U1-Pad15_ Net-_U1-Pad16_ Net-_U1-Pad17_ Net-_U1-Pad18_ /OUT_1 /OUT_2 /OUT_3 /OUT_4 /OUT_5 /OUT_6 /OUT_7 /OUT_8 dac_bridge_8
v1 Net-_U2-Pad1_ GND pulse
v4 Net-_U5-Pad4_ GND pulse
U7 /OUT_1 plot_v1
U8 /OUT_2 plot_v1
U9 /OUT_8 plot_v1
v2 Net-_U3-Pad1_ GND pulse
U3 Net-_U3-Pad1_ Net-_U1-Pad1_ adc_bridge_1
U4 /OUT_3 plot_v1
U10 /OUT_4 plot_v1
U11 /OUT_5 plot_v1
U12 /OUT_6 plot_v1
U13 /OUT_7 plot_v1

.end
73 changes: 73 additions & 0 deletions fir4tap1016/eSim_Project_Files/4-Tap_MovingAverageFilter.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
update=22/05/2015 07:44:53
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
LibName1=adc-dac
LibName2=memory
LibName3=xilinx
LibName4=microcontrollers
LibName5=dsp
LibName6=microchip
LibName7=analog_switches
LibName8=motorola
LibName9=texas
LibName10=intel
LibName11=audio
LibName12=interface
LibName13=digital-audio
LibName14=philips
LibName15=display
LibName16=cypress
LibName17=siliconi
LibName18=opto
LibName19=atmel
LibName20=contrib
LibName21=power
LibName22=eSim_Plot
LibName23=transistors
LibName24=conn
LibName25=eSim_User
LibName26=regul
LibName27=74xx
LibName28=cmos4000
LibName29=eSim_Analog
LibName30=eSim_Devices
LibName31=eSim_Digital
LibName32=eSim_Hybrid
LibName33=eSim_Miscellaneous
LibName34=eSim_Power
LibName35=eSim_Sources
LibName36=eSim_Subckt
LibName37=eSim_Nghdl
LibName38=eSim_Ngveri
LibName39=eSim_SKY130
LibName40=eSim_SKY130_Subckts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
schematicFile 4-Tap_MovingAverageFilter.sch
Loading