@@ -64,8 +64,6 @@ module ad_iqcor #(
64
64
// internal registers
65
65
66
66
reg p1_valid = 'd0;
67
- reg [15 :0 ] p1_data_i = 'd0;
68
- reg [15 :0 ] p1_data_q = 'd0;
69
67
reg [33 :0 ] p1_data_p = 'd0;
70
68
reg valid_int = 'd0;
71
69
reg [15 :0 ] data_int = 'd0;
@@ -81,16 +79,18 @@ module ad_iqcor #(
81
79
wire [15 :0 ] p1_data_i_s;
82
80
wire [33 :0 ] p1_data_p_q_s;
83
81
wire [15 :0 ] p1_data_q_s;
82
+ wire [15 :0 ] p1_data_i_int;
83
+ wire [15 :0 ] p1_data_q_int;
84
84
85
85
// data-path disable
86
86
87
87
generate
88
88
if (DISABLE == 1 ) begin
89
- assign valid_out = valid;
90
- assign data_out = data_in;
89
+ assign valid_out = valid;
90
+ assign data_out = data_in;
91
91
end else begin
92
- assign valid_out = valid_int;
93
- assign data_out = data_int;
92
+ assign valid_out = valid_int;
93
+ assign data_out = data_int;
94
94
end
95
95
endgenerate
96
96
@@ -116,29 +116,51 @@ module ad_iqcor #(
116
116
.ddata_in ({valid, data_i_s}),
117
117
.ddata_out ({p1_valid_s, p1_data_i_s}));
118
118
119
- generate
119
+ generate
120
120
if (SCALE_ONLY == 0 ) begin
121
- // scaling functions - q
121
+ // scaling functions - q
122
122
123
- ad_mul #(.DELAY_DATA_WIDTH(16 )) i_mul_q (
124
- .clk (clk),
125
- .data_a ({data_q_s[15 ], data_q_s}),
126
- .data_b ({iqcor_coeff_2_r[15 ], iqcor_coeff_2_r}),
127
- .data_p (p1_data_p_q_s),
128
- .ddata_in (data_q_s),
129
- .ddata_out (p1_data_q_s));
123
+ ad_mul #(.DELAY_DATA_WIDTH(16 )) i_mul_q (
124
+ .clk (clk),
125
+ .data_a ({data_q_s[15 ], data_q_s}),
126
+ .data_b ({iqcor_coeff_2_r[15 ], iqcor_coeff_2_r}),
127
+ .data_p (p1_data_p_q_s),
128
+ .ddata_in (data_q_s),
129
+ .ddata_out (p1_data_q_s));
130
130
131
131
// sum
132
132
end else begin
133
- assign p1_data_p_q_s = 34'h0 ;
134
- assign p1_data_q_s = 16'h0 ;
133
+ assign p1_data_p_q_s = 34'h0 ;
134
+ assign p1_data_q_s = 16'h0 ;
135
+ end
136
+
137
+ endgenerate
138
+ generate
139
+ if (Q_OR_I_N == 1 && SCALE_ONLY == 0 ) begin
140
+ reg [15 :0 ] p1_data_q = 'd0;
141
+
142
+ always @(posedge clk) begin
143
+ p1_data_q <= p1_data_q_s;
144
+ end
145
+
146
+ assign p1_data_i_int = 16'h0 ;
147
+ assign p1_data_q_int = p1_data_q;
148
+
149
+ // sum
150
+ end else begin
151
+ reg [15 :0 ] p1_data_i = 'd0;
152
+
153
+ always @(posedge clk) begin
154
+ p1_data_i <= p1_data_i_s;
155
+ end
156
+
157
+ assign p1_data_i_int = p1_data_i;
158
+ assign p1_data_q_int = 16'h0 ;
135
159
end
136
160
endgenerate
137
161
138
162
always @(posedge clk) begin
139
163
p1_valid <= p1_valid_s;
140
- p1_data_i <= p1_data_i_s;
141
- p1_data_q <= p1_data_q_s;
142
164
p1_data_p <= p1_data_p_i_s + p1_data_p_q_s;
143
165
end
144
166
// output registers
@@ -148,9 +170,9 @@ module ad_iqcor #(
148
170
if (iqcor_enable == 1'b1 ) begin
149
171
data_int <= p1_data_p[29 :14 ];
150
172
end else if (Q_OR_I_N == 1 && SCALE_ONLY == 0 ) begin
151
- data_int <= p1_data_q ;
173
+ data_int <= p1_data_q_int ;
152
174
end else begin
153
- data_int <= p1_data_i ;
175
+ data_int <= p1_data_i_int ;
154
176
end
155
177
end
156
178
0 commit comments