diff --git a/libraries/base/dp/src/vhdl/dp_reverse_n_data.vhd b/libraries/base/dp/src/vhdl/dp_reverse_n_data.vhd index 0b310e901eb493cab9ecfd2358c179e7ab0e3698..3ce1d4545d1a6c06353ced19e22ac43e474348ba 100644 --- a/libraries/base/dp/src/vhdl/dp_reverse_n_data.vhd +++ b/libraries/base/dp/src/vhdl/dp_reverse_n_data.vhd @@ -51,7 +51,8 @@ ENTITY dp_reverse_n_data IS g_pipeline_mux_in : NATURAL := 0; -- parallel to serial section g_pipeline_mux_out : NATURAL := 1; g_reverse_len : NATURAL := 2; - g_data_w : NATURAL := 16; + g_data_w : NATURAL := 16; -- should be 2 times the c_complex_w if g_use_complex = TRUE + g_use_complex : BOOLEAN := FALSE; g_signed : BOOLEAN := TRUE ); PORT ( @@ -69,6 +70,7 @@ ARCHITECTURE str OF dp_reverse_n_data IS CONSTANT c_pipeline_total : NATURAL := g_pipeline_demux_in + g_pipeline_demux_out + g_reverse_len-1 + g_pipeline_mux_in + g_pipeline_mux_out; + CONSTANT c_complex_w : NATURAL := g_data_w / 2; SIGNAL in_data : STD_LOGIC_VECTOR(g_data_w-1 DOWNTO 0); @@ -79,7 +81,14 @@ ARCHITECTURE str OF dp_reverse_n_data IS BEGIN - in_data <= snk_in.data(g_data_w-1 DOWNTO 0); + p_in_data : PROCESS(snk_in) + BEGIN + IF g_use_complex = FALSE THEN + in_data <= snk_in.data(g_data_w-1 DOWNTO 0); + ELSE + in_data <= snk_in.im(c_complex_w-1 DOWNTO 0) & snk_in.re(c_complex_w-1 DOWNTO 0); + END IF; + END PROCESS; u_common_reverse_n : ENTITY common_lib.common_reverse_n_data GENERIC MAP ( @@ -119,10 +128,15 @@ BEGIN p_src_out : PROCESS(snk_in_delayed, reversed_data) BEGIN src_out <= snk_in_delayed; - IF g_signed = TRUE THEN - src_out.data <= RESIZE_DP_SDATA(reversed_data); + IF g_use_complex = FALSE THEN + IF g_signed = TRUE THEN + src_out.data <= RESIZE_DP_SDATA(reversed_data); + ELSE + src_out.data <= RESIZE_DP_DATA(reversed_data); + END IF; ELSE - src_out.data <= RESIZE_DP_DATA(reversed_data); + src_out.im <= RESIZE_DP_DSP_DATA(reversed_data(g_data_w-1 DOWNTO c_complex_w)); + src_out.re <= RESIZE_DP_DSP_DATA(reversed_data(c_complex_w-1 DOWNTO 0)); END IF; END PROCESS;