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

Subversion Repositories vitdec

[/] [vitdec/] [trunk/] [acs.v] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 yuhuang198
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company: 
4
// Engineer: 
5
// 
6
// Create Date:    11:50:09 12/01/2010 
7
// Design Name: 
8
// Module Name:    acs 
9
// Project Name: 
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 0.01 - File Created
18
// Additional Comments: 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
module acs(clk, rst, frame_rst, en, in1, in2, out);
22
 
23
parameter       r                                       =       1,      //r = 2 radix4; r = 3 radix8; r = 1 radix2;
24
                                n                                       =       2,  //current version only support n = 2
25
                                m                                       =       7,
26
                                k                                       =       1,
27
                                nu                                      =       6,
28
                                state                           =       64,
29
                                tb_length               =       128,
30
                                tb_length_log   =       7,
31
                                bitwise                 =       1,
32
                                reglen                  =       11;
33
 
34
input                   clk, rst, frame_rst, en;
35
 
36
input           [0:bitwise-1]                    in1;
37
input           [0:bitwise-1]                    in2;
38
input           [0:bitwise-1]                    in3;
39
input           [0:bitwise-1]                    in4;
40
input           [0:bitwise-1]                    in5;
41
input           [0:bitwise-1]                    in6;
42
input           [0:bitwise-1]                    in7;
43
input           [0:bitwise-1]                    in8;
44
output  [0:state-1]                              out;
45
 
46
wire            [0:state-1]                              out;
47
reg             [0:bitwise+1+(r-1)-1]                                            hamm_dist1                                      [0:2**(n*r)-1];
48
wire            [0:reglen-1]                     branch_metric_calc_w            [0:2*r-1][0:state-1];             //wire
49
wire            [0:2*r*(2*r-1)-1]                decision_tmp_w                          [0:state-1];                                     //wire  
50
reg             [0:reglen-1]                     branch_metric                           [0:state-1];                                     //reg
51
reg             [0:r-1]                                  decision                                                [0:state-1];                                     //reg
52
 
53
integer                 i, j, fid, rcv, hdf, bmf;
54
reg             [0:(r*n)-1]                              hamming_index_reg                       [0:state-1][0:2**r-1];
55
reg             [0:3]                                    en_reg;
56
 
57
genvar                  gi, gj, gk, gii, gjj, gkk;
58
 
59
//`include "hamming_index_16.v"
60
//`include "hamming_index_8.v"
61
//`include "hamming_index_4.v"
62
//`include "hamming_index_2.v"
63
 
64
initial
65
begin
66
        hdf = $fopen("hamming_dist.txt","w");
67
        bmf = $fopen("branch_metric.txt","w");
68
        if (r == 1)
69
                fid = $fopen("hamming_index_reg_2.txt", "r");
70
        else if (r == 2)
71
                fid = $fopen("hamming_index_reg_4.txt", "r");
72
        else if (r == 8)
73
                fid = $fopen("hamming_index_reg_8.txt", "r");
74
        for (i = 0; i < state; i = i + 1)
75
                for (j = 0; j < 2**r; j = j + 1)
76
                        rcv = $fscanf(fid, "%b", hamming_index_reg[i][j]);
77
end
78
 
79
always @(clk, rst, en)
80
begin
81
        if (rst == 0)
82
                en_reg = 0;
83
        else if (clk == 1)
84
                if (frame_rst == 1)
85
                        en_reg = 0;
86
                else if (en == 1)
87
                        en_reg = { en, en_reg[0:2] };
88
end
89
 
90
always @ (clk, rst, en)
91
begin
92
        if(rst == 0)
93
        begin
94
                hamm_dist1[0] = 0;
95
                hamm_dist1[1] = 0;
96
                hamm_dist1[2] = 0;
97
                hamm_dist1[3] = 0;
98
        end
99
        else if(clk == 1)
100
        begin
101
                if(frame_rst == 1)
102
                begin
103
                        hamm_dist1[0] = 0;
104
                        hamm_dist1[1] = 0;
105
                        hamm_dist1[2] = 0;
106
                        hamm_dist1[3] = 0;
107
                end
108
                else if(en_reg[1] == 1)
109
                begin
110
                        hamm_dist1[0] = {1'b0, ( in1)} + {1'b0, ( in2)};
111
                        hamm_dist1[1] = {1'b0, ( in1)} + {1'b0, (~in2)};
112
                        hamm_dist1[2] = {1'b0, (~in1)} + {1'b0, ( in2)};
113
                        hamm_dist1[3] = {1'b0, (~in1)} + {1'b0, (~in2)};
114
                        for (i = 0; i < 2**(n*r); i = i + 1)
115
                                $fdisplay(hdf, "%d", hamm_dist1[i]);
116
                end
117
        end
118
 
119
end
120
 
121
generate for (gi = 0; gi < state; gi = gi + 1) begin : g10
122
        for (gj = 0; gj < 2**r; gj = gj + 1) begin : g11
123
                assign branch_metric_calc_w[gj][gi] = branch_metric[(gi*(2**r)+gj)%state] + hamm_dist1[hamming_index_reg[gi][gj]];
124
        end
125
end
126
endgenerate
127
 
128
generate for (gi = 0; gi < state; gi = gi + 1) begin : g12
129
        assign decision_tmp_w[gi] = branch_metric_calc_w[0][gi] > branch_metric_calc_w[1][gi];
130
end
131
endgenerate
132
 
133
generate for (gi = 0; gi < state; gi = gi + 1)
134
begin : g15
135
        always @ (clk, rst)
136
        begin
137
                if (rst == 0)
138
                        decision[gi] = 0;
139
                else if (clk == 1)
140
                        if (frame_rst == 1)
141
                                decision[gi] = 0;
142
                        else if (en_reg[2] == 1)
143
                                decision[gi] = decision_tmp_w[gi];
144
        end
145
end
146
endgenerate
147
 
148
generate for (gi = 0; gi < state; gi = gi + 1)
149
begin : g16
150
        always @ (clk, rst)
151
        begin : g16_1
152
                if (rst == 0)
153
                        branch_metric[gi] = 0;
154
                else if (clk == 1)
155
                        if (frame_rst == 1)
156
                                branch_metric[gi] = 0;
157
                        else if (en_reg[2] == 1)
158
                                branch_metric[gi] = branch_metric_calc_w[decision_tmp_w[gi]][gi];
159
        end
160
end
161
endgenerate
162
 
163
always @ (posedge clk)
164
begin
165
        for (i = 0; i < state; i = i + 1)
166
                $fwrite(bmf, "cmp %4.3d with %4.3d, decision is %2.1d, decision_w is %2.1d, result is %4.3d\n", branch_metric_calc_w[0][i], branch_metric_calc_w[1][i], decision[i], decision_tmp_w[i], branch_metric[i]);
167
        $fwrite(bmf, "================================================================================================================================\n");
168
end
169
 
170
generate for (gi = 0; gi < state; gi = gi + 1)
171
begin : assgn_out
172
        assign out[gi] = decision[gi];
173
end
174
endgenerate;
175
 
176
endmodule

powered by: WebSVN 2.1.0

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