OpenCores
URL https://opencores.org/ocsvn/simple_agc/simple_agc/trunk

Subversion Repositories simple_agc

[/] [simple_agc/] [trunk/] [agc.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tyer426
module agc(
2
                          input wire                       clk,
3
                          input wire                       rst,
4
                          input wire signed [15:0] x_in,
5
                          input wire [7:0] a_coef,
6
                          input wire [15:0] reference,
7
                          output wire signed [15:0] y_out
8
);
9
 
10
                wire [31:0] x_mod;
11
                wire [31:0] ref_rms;
12
                wire signed [32:0] tmp_level;
13
                wire signed [32:0] feedback_level;
14
                reg signed [32:0] zreg;
15
                wire signed [8:0] a_coef_s;
16
 
17
                assign a_coef_s = { 1'b0, a_coef};
18
                assign ref_rms = (reference[15:1] * reference[15:1]);
19
                assign x_mod = (y_out * y_out);
20
                assign tmp_level = ($signed(ref_rms - x_mod))>>>18;
21
                assign feedback_level = (tmp_level * a_coef_s) >>> 8;
22
 
23
                always @(posedge clk or negedge rst)
24
                if (!rst) zreg <= 'h0;
25
                else zreg <=  zreg + feedback_level;
26
 
27
                assign y_out = (zreg * x_in) >>>16;
28
 
29
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.