29.12.2013 Views

Spectral Estimation Using a MUSIC Algorithm - Altera

Spectral Estimation Using a MUSIC Algorithm - Altera

Spectral Estimation Using a MUSIC Algorithm - Altera

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Spectral</strong> <strong>Estimation</strong> <strong>Using</strong> a <strong>MUSIC</strong> <strong>Algorithm</strong><br />

Figure 9. RTL of Complex CORDIC<br />

vec_rot<br />

clk<br />

reset<br />

R_x_real_in[21:0]<br />

[21:0]<br />

reg_gen_enZ2<br />

reset<br />

clk<br />

1 ro[0]<br />

clk_en<br />

1<br />

reg_gen_enZ2<br />

reset<br />

clk<br />

clk_en<br />

ri[0]<br />

ro[0]<br />

reg_gen_enZ1<br />

reset<br />

clk<br />

ro[17:0]<br />

clk_en<br />

[17:0]<br />

ri[17:0]<br />

[17:0]<br />

1<br />

[21:0]<br />

[21:0]<br />

[17:0]<br />

start<br />

[21:0]<br />

clk_en x_out[21:0]<br />

xout_real_th[21:0]<br />

[21:0]<br />

output_en<br />

[21:0]<br />

y_out[21:0]<br />

vec_rot_sel<br />

[21:0]<br />

result[17:0]<br />

dataa[21:0]<br />

[17:0]<br />

datab[21:0]<br />

zin[17:0]<br />

vec_rot_theta_real<br />

ri[0]<br />

vec_rot_sel_delay2<br />

theta_real_store<br />

reset<br />

reg_gen_enZ2<br />

reset<br />

vec_rot_sel_reg1<br />

clk<br />

output_en<br />

1<br />

clk<br />

clk_en<br />

ri[0]<br />

ro[0]<br />

vec_rot<br />

clk<br />

reset<br />

vec_rot<br />

output_delay<br />

[21:0]<br />

xin_imag[21:0]<br />

start<br />

xin_real[21:0]<br />

[21:0]<br />

reg_gen_enZ2<br />

reset<br />

clk<br />

1<br />

clk_en<br />

ro[0]<br />

vec_rot_sel<br />

ri[0]<br />

[17:0]<br />

1<br />

[21:0]<br />

reg_gen_enZ1<br />

reset<br />

[21:0]<br />

clk<br />

[17:0]<br />

ro[17:0]<br />

clk_en<br />

[17:0]<br />

ri[17:0]<br />

clk<br />

reset<br />

start<br />

[21:0]<br />

clk_en x_out[21:0]<br />

output_en<br />

y_out[21:0]<br />

vec_rot_sel<br />

[21:0]<br />

result[17:0]<br />

dataa[21:0]<br />

datab[21:0]<br />

zin[17:0]<br />

vec_rot_inst<br />

mux_genZ3<br />

sel<br />

mux_out[21:0]<br />

[21:0]<br />

A[21:0]<br />

[21:0]<br />

B[21:0]<br />

mux_vec<br />

start<br />

1 [21:0]<br />

[21:0] clk_en x_out[21:0]<br />

xout_imag_th[21:0]<br />

[21:0]<br />

output_en<br />

y_out[21:0]<br />

[21:0]<br />

xout_imag_th_next[21:0]<br />

vec_rot_sel<br />

[21:0]<br />

[21:0]<br />

result[17:0]<br />

dataa[21:0]<br />

[17:0]<br />

[21:0]<br />

datab[21:0]<br />

[17:0]<br />

zin[17:0]<br />

vec_rot_theta_imag<br />

vec_rot_sel_delay1<br />

phi_store<br />

reg_gen_enZ1<br />

R_x_imag_in[21:0]<br />

[21:0]<br />

[17:0]<br />

reset<br />

clk<br />

clk_en<br />

ri[17:0]<br />

ro[17:0]<br />

[17:0]<br />

theta_imag_store<br />

This complex CORDIC block is the key block for EVD. It comprises three CORDIC blocks and one<br />

phi-CORDIC block. These blocks are used for compensating the imaginary part of the complex input,<br />

the two theta-CORDIC ones are for the real part and the other is for the imaginary part. Because we are<br />

using a complex CORDIC in a time division multiplex manner, the angles phi and theta are stored in<br />

vector mode and these angles are used subsequently in rotation mode. The output block is important, as<br />

shown in Figure 10, for storing the final result and generating the control-signal-like interrupt when<br />

EVD is over. It also provides all necessary addresses and bus control signals for interfacing with the<br />

Nios II processor.<br />

Figure 10. Output Block<br />

load_en<br />

reset<br />

done<br />

clk<br />

cordic_clock<br />

1<br />

address_wr_op<br />

reset<br />

tc<br />

clk<br />

address[5:0]<br />

clk_en<br />

[5:0]<br />

1<br />

reg_gen_enZ4<br />

reset<br />

clk<br />

ro[0]<br />

clk_en<br />

ri[0]<br />

tc_reg_1<br />

address_wr_op<br />

reset<br />

[5:0]<br />

tc<br />

clk<br />

[5:0]<br />

address[5:0]<br />

1<br />

clk_en<br />

address_wirte_inst<br />

[5:0]<br />

mux_rd_wr_address_inst<br />

sel<br />

mux_genZ2<br />

[5:0]<br />

A[5:0]<br />

[5:0]<br />

mux_out[5:0]<br />

B[5:0]<br />

address_rd_wr[5:0]<br />

address_read_inst<br />

[5:0]<br />

rd_wr<br />

address_rd[5:0]<br />

81

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!