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

Subversion Repositories cic_core

[/] [cic_core/] [trunk/] [src/] [cic_package.sv] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 vadimuzzz
package cic_package;
2
/*********************************************************************************************/
3
function longint nchoosek;
4
    input   longint n;
5
    input   longint k;
6
    longint tmp;
7
    longint i;
8
    begin
9
        tmp = 1.0;
10
        for (i=1;i<=(n-k);i++)
11
            tmp = tmp*(k+i)/i;
12
        nchoosek = tmp;
13
    end
14
endfunction
15
/*********************************************************************************************/
16
function longint clog2_l;
17
    input longint depth;
18
    longint i;
19
    begin
20
         i = depth;
21
        for(clog2_l = 0; i > 0; clog2_l = clog2_l + 1)
22
            i = i >> 1;
23
    end
24
endfunction
25
/*********************************************************************************************/
26
function longint h;
27
    input   longint j;
28
    input   longint k;
29
    input   longint R;
30
    input   longint M;
31
    input   longint N;
32
    longint c_stop;
33
    longint i;
34
    longint tmp;
35
    begin
36
        c_stop = k/(R*M);
37
        if ((j>=1)&&(j<=N)) begin
38
            tmp=0.0;
39
            for (i=0;i<=c_stop;i++) begin
40
                if (i%2)
41
                    tmp = tmp - nchoosek(N,i)*nchoosek(N-j+k-R*M*i,k-R*M*i);
42
                else
43
                    tmp = tmp + nchoosek(N,i)*nchoosek(N-j+k-R*M*i,k-R*M*i);
44
            end
45
        end
46
        else begin
47
            tmp = nchoosek(2*N+1-j,k);
48
            if (k%2)
49
                tmp = -tmp;
50
        end
51
        h = tmp;
52
    end
53
endfunction
54
/*********************************************************************************************/
55
function longint F;
56
    input   longint j;
57
    input   longint R;
58
    input   longint G;
59
    input   longint M;
60
    longint c_stop;
61
    longint tmp;
62
    longint i;
63
    begin
64
        tmp = 0.0;
65
        if (j<=M)
66
            c_stop=(((R*G-1)*M)+j-1);
67
        else
68
            c_stop=2*M+1-j;
69
        for (i=0;i<=c_stop;i++) begin
70
            tmp = tmp + h(j,i,R,G,M)*h(j,i,R,G,M);
71
        end
72
        F = tmp;
73
    end
74
endfunction
75
/*********************************************************************************************/
76
function integer B;
77
    input   longint j;
78
    input   longint R;
79
    input   longint G;
80
    input   longint M;
81
    input   longint dw_in;
82
    input   longint dw_out;
83
    longint B_max;
84
    longint sigma_T;
85
    longint tmp;
86
    begin
87
        B_max = $clog2((R*G)**M)+dw_in-1;
88
        sigma_T = (2**(2*(B_max-dw_out+1)))/12;
89
        tmp = (6*sigma_T)/(M*F(j,R,G,M));
90
        B = (clog2_l(tmp)-1)/2;
91
    end
92
endfunction
93
/*********************************************************************************************/
94
endpackage

powered by: WebSVN 2.1.0

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