-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmel_filterbank_tb.sv
105 lines (89 loc) · 2.3 KB
/
mel_filterbank_tb.sv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
`timescale 1ns / 1ps
`default_nettype none
module mel_filterbank_tb;
// Input logics
logic clk_in, rst_in;
logic [31:0] power_data_in;
logic power_valid_in, power_last_in, filtered_ready_in;
// Output logics
logic [31:0] filtered_data_out [25:0];
logic power_ready_out, filtered_valid_out;
// Explicitly assign output logics so we can view them in GTKwave
logic [31:0] filter0, filter1, filter12, filter13, filter24, filter25;
assign filter0 = filtered_data_out[0];
assign filter1 = filtered_data_out[1];
assign filter12 = filtered_data_out[12];
assign filter13 = filtered_data_out[13];
assign filter24 = filtered_data_out[24];
assign filter25 = filtered_data_out[25];
mel_filterbank #(
.NUM_FILTERS(26),
.N_FFT(512)
) uut (
.clk_in(clk_in),
.rst_in(rst_in),
.power_data_in(power_data_in),
.power_valid_in(power_valid_in),
.power_last_in(power_last_in),
.power_ready_out(power_ready_out),
.filtered_ready_in(filtered_ready_in),
.filtered_valid_out(filtered_valid_out),
.filtered_data_out(filtered_data_out)
);
always begin
#5; // 100MHz clock
clk_in = !clk_in;
end
initial begin
$dumpfile("vcd/mel_filterbank.vcd");
$dumpvars(0, mel_filterbank_tb);
$display("Starting Sim");
// Initialize variables
clk_in = 0;
rst_in = 0;
power_data_in = 0;
power_valid_in = 0;
power_last_in = 0;
filtered_ready_in = 0;
// Wait a lil bit and reset
#10;
rst_in = 1;
#10;
rst_in = 0;
#10;
// Test case 1: flat signal
power_data_in = 32'hBEEF;
power_valid_in = 1;
filtered_ready_in = 0;
#5110;
power_last_in = 1;
#10;
power_last_in = 0;
power_data_in = 0;
power_valid_in = 0;
filtered_ready_in = 1;
#30;
filtered_ready_in = 0;
#100;
// Test case 2: sine wave
power_valid_in = 1;
filtered_ready_in = 0;
for (int i = 0; i < 512; i = i + 1) begin
power_data_in = 32'hF00D * $sin(i / 5.0) * $sin(i / 5.0);
power_last_in = (i == 511);
#10;
end
power_last_in = 0;
power_data_in = 0;
power_valid_in = 0;
filtered_ready_in = 1;
#30;
filtered_ready_in = 0;
#100;
// Test case 3: timing
// TODO
$display("Finishing Sim");
$finish;
end
endmodule
`default_nettype wire