@@ -139,7 +139,7 @@ ARCHITECTURE behave OF xwb_fofb_shaper_filt IS
139
139
(OTHERS => c_WB_FOFB_SHAPER_FILT_REGS_COEFFS_O_IFC_0s);
140
140
141
141
SIGNAL coeffs : t_fofb_shaper_filt_coeffs(g_CHANNELS- 1 DOWNTO 0 )(
142
- c_MAX_ABI_BIQUADS - 1 DOWNTO 0 )(
142
+ g_NUM_BIQUADS - 1 DOWNTO 0 )(
143
143
b0(g_COEFF_INT_WIDTH- 1 DOWNTO - g_COEFF_FRAC_WIDTH),
144
144
b1(g_COEFF_INT_WIDTH- 1 DOWNTO - g_COEFF_FRAC_WIDTH),
145
145
b2(g_COEFF_INT_WIDTH- 1 DOWNTO - g_COEFF_FRAC_WIDTH),
@@ -187,47 +187,54 @@ BEGIN
187
187
-- RAM address 7 + 8*{biquad_idx} = unused
188
188
FOR ch IN 0 TO g_CHANNELS- 1
189
189
LOOP
190
- CASE coeff_idx IS
191
- WHEN 0 =>
192
- wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
193
- (to_slv(coeffs(ch)(biquad_idx).b0), OTHERS => '0' );
194
- WHEN 1 =>
195
- wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
196
- (to_slv(coeffs(ch)(biquad_idx).b1), OTHERS => '0' );
197
- WHEN 2 =>
198
- wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
199
- (to_slv(coeffs(ch)(biquad_idx).b2), OTHERS => '0' );
200
- WHEN 3 =>
201
- wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
202
- (to_slv(coeffs(ch)(biquad_idx).a1), OTHERS => '0' );
203
- WHEN 4 =>
204
- wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
205
- (to_slv(coeffs(ch)(biquad_idx).a2), OTHERS => '0' );
206
- WHEN OTHERS =>
207
- END CASE ;
190
+ IF biquad_idx < g_NUM_BIQUADS THEN
191
+ CASE coeff_idx IS
192
+ WHEN 0 =>
193
+ wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
194
+ (to_slv(coeffs(ch)(biquad_idx).b0), OTHERS => '0' );
195
+ WHEN 1 =>
196
+ wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
197
+ (to_slv(coeffs(ch)(biquad_idx).b1), OTHERS => '0' );
198
+ WHEN 2 =>
199
+ wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
200
+ (to_slv(coeffs(ch)(biquad_idx).b2), OTHERS => '0' );
201
+ WHEN 3 =>
202
+ wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
203
+ (to_slv(coeffs(ch)(biquad_idx).a1), OTHERS => '0' );
204
+ WHEN 4 =>
205
+ wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <=
206
+ (to_slv(coeffs(ch)(biquad_idx).a2), OTHERS => '0' );
207
+ WHEN OTHERS =>
208
+ END CASE ;
209
+ -- If trying to access biquads that aren't instatiated, return zeros
210
+ ELSE
211
+ wb_fofb_shaper_filt_regs_coeffs_i_ifc_arr(ch).data <= (OTHERS => '0' );
212
+ END IF ;
208
213
209
214
IF rising_edge (clk_i) THEN
210
215
IF rst_n_i = '0' THEN
211
216
ELSE
212
217
IF wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).wr = '1' THEN
213
- CASE coeff_idx IS
214
- WHEN 0 =>
215
- coeffs(ch)(biquad_idx).b0 <= f_parse_wb_coeff(
216
- wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
217
- WHEN 1 =>
218
- coeffs(ch)(biquad_idx).b1 <= f_parse_wb_coeff(
219
- wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
220
- WHEN 2 =>
221
- coeffs(ch)(biquad_idx).b2 <= f_parse_wb_coeff(
222
- wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
223
- WHEN 3 =>
224
- coeffs(ch)(biquad_idx).a1 <= f_parse_wb_coeff(
225
- wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
226
- WHEN 4 =>
227
- coeffs(ch)(biquad_idx).a2 <= f_parse_wb_coeff(
228
- wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
229
- WHEN OTHERS =>
230
- END CASE ;
218
+ IF biquad_idx < g_NUM_BIQUADS THEN
219
+ CASE coeff_idx IS
220
+ WHEN 0 =>
221
+ coeffs(ch)(biquad_idx).b0 <= f_parse_wb_coeff(
222
+ wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
223
+ WHEN 1 =>
224
+ coeffs(ch)(biquad_idx).b1 <= f_parse_wb_coeff(
225
+ wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
226
+ WHEN 2 =>
227
+ coeffs(ch)(biquad_idx).b2 <= f_parse_wb_coeff(
228
+ wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
229
+ WHEN 3 =>
230
+ coeffs(ch)(biquad_idx).a1 <= f_parse_wb_coeff(
231
+ wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
232
+ WHEN 4 =>
233
+ coeffs(ch)(biquad_idx).a2 <= f_parse_wb_coeff(
234
+ wb_fofb_shaper_filt_regs_coeffs_o_ifc_arr(ch).data);
235
+ WHEN OTHERS =>
236
+ END CASE ;
237
+ END IF ;
231
238
END IF ;
232
239
END IF ;
233
240
END IF ;
0 commit comments