From ce475fa04250738b3979e048d86d3e211447fc9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Sat, 7 Nov 2020 00:50:59 +0100 Subject: [PATCH] Basic DFT spectrum analysis working --- Documentation/DeveloperInfo/FPGA_protocol.pdf | Bin 162906 -> 159925 bytes Documentation/DeveloperInfo/FPGA_protocol.tex | 24 -- FPGA/VNA/DFT.vhd | 250 ++++++++++-------- FPGA/VNA/ResetDelay.vhd | 5 +- FPGA/VNA/SPIConfig.vhd | 117 ++++---- FPGA/VNA/Sampling.vhd | 72 +---- FPGA/VNA/Sweep.vhd | 66 ++--- FPGA/VNA/Test_DFT.vhd | 13 +- FPGA/VNA/Test_Windowing.vhd | 135 ++++++++++ FPGA/VNA/VNA.gise | 58 ++-- FPGA/VNA/VNA.xise | 69 +++-- FPGA/VNA/Windowing.vhd | 201 ++++++++++++++ FPGA/VNA/dft_result.vhd | 56 ---- FPGA/VNA/ipcore_dir/DSP48.xco | 136 ++++++++++ FPGA/VNA/ipcore_dir/DSP48.xise | 73 +++++ FPGA/VNA/ipcore_dir/DSP_SLICE.xco | 136 ++++++++++ FPGA/VNA/ipcore_dir/DSP_SLICE.xise | 73 +++++ FPGA/VNA/top.bin | Bin 341712 -> 341712 bytes FPGA/VNA/top.vhd | 73 +++-- .../Application/Drivers/FPGA/FPGA.cpp | 21 ++ .../Application/Drivers/FPGA/FPGA.hpp | 6 +- .../Application/Drivers/Si5351C.cpp | 48 ++-- .../VNA_embedded/Application/Hardware.cpp | 4 - .../VNA_embedded/Application/Hardware.hpp | 8 +- Software/VNA_embedded/Application/Manual.cpp | 3 + .../Application/SpectrumAnalyzer.cpp | 226 +++++++++------- Software/VNA_embedded/Application/VNA.cpp | 3 + 27 files changed, 1313 insertions(+), 563 deletions(-) create mode 100644 FPGA/VNA/Test_Windowing.vhd create mode 100644 FPGA/VNA/Windowing.vhd delete mode 100644 FPGA/VNA/dft_result.vhd create mode 100644 FPGA/VNA/ipcore_dir/DSP48.xco create mode 100644 FPGA/VNA/ipcore_dir/DSP48.xise create mode 100644 FPGA/VNA/ipcore_dir/DSP_SLICE.xco create mode 100644 FPGA/VNA/ipcore_dir/DSP_SLICE.xise diff --git a/Documentation/DeveloperInfo/FPGA_protocol.pdf b/Documentation/DeveloperInfo/FPGA_protocol.pdf index e93a2bce3fb78e999be5d6cdf91a0916401cc8c1..0e4cacdaefdaf8d49b329b628fa9958247fa5350 100644 GIT binary patch delta 50935 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�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 delta 53938 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 cosine, sine => sine ); - Mult1 : SinCosMult + Mult1 : DSP_SLICE PORT MAP ( clk => CLK, + ce => mult_enable, + sel => mult_accumulate, a => mult1_a, b => mult1_b, + c => mult1_c, p => mult1_p ); - Mult2 : SinCosMult + Mult2 : DSP_SLICE PORT MAP ( clk => CLK, + ce => mult_enable, + sel => mult_accumulate, a => mult2_a, b => mult2_b, + c => mult2_c, p => mult2_p ); - Mult3 : SinCosMult + Mult3 : DSP_SLICE PORT MAP ( clk => CLK, + ce => mult_enable, + sel => mult_accumulate, a => mult3_a, b => mult3_b, + c => mult3_c, p => mult3_p ); - Mult4 : SinCosMult + Mult4 : DSP_SLICE PORT MAP ( clk => CLK, + ce => mult_enable, + sel => mult_accumulate, a => mult4_a, b => mult4_b, + c => mult4_c, p => mult4_p ); - WindowROM: window PORT MAP( - CLK => CLK, - INDEX => window_index(15 downto 9), - WINDOW_TYPE => WINDOW_TYPE, - VALUE => window_value - ); --- result_ram: dft_result --- GENERIC MAP(depth => BINS) --- PORT MAP( --- CLK => CLK, --- READ_ADDRESS => read_address, --- WRITE_ADDRESS => write_address, --- DATA_IN => ram_in, --- DATA_OUT => ram_out, --- WE => we --- ); - -your_instance_name : result_bram - PORT MAP ( - clka => CLK, - wea => we, - addra => write_address_vector, - dina => ram_in, - clkb => CLK, - addrb => read_address_vector, - doutb => ram_out - ); + result_ram: result_bram + PORT MAP ( + clka => CLK, + wea => we, + addra => write_address_vector, + dina => ram_in, + clkb => CLK, + addrb => read_address_vector, + doutb => ram_out + ); read_address_vector <= std_logic_vector(to_unsigned(read_address, 6)); write_address_vector <= std_logic_vector(to_unsigned(write_address, 6)); OUTPUT <= ram_out; + mult1_c <= ram_out(191 downto 144); + mult2_c <= ram_out(143 downto 96); + mult3_c <= ram_out(95 downto 48); + mult4_c <= ram_out(47 downto 0); + + ram_in <= mult1_p & mult2_p & mult3_p & mult4_p; + process(CLK, RESET) begin if rising_edge(CLK) then if RESET = '1' then - window_index <= (others => '0'); + mult_enable <= '0'; + mult_accumulate <= "0"; sample_cnt <= 0; RESULT_READY <= '0'; read_address <= 0; @@ -227,108 +243,124 @@ your_instance_name : result_bram we <= "0"; state <= WaitingForSample; else + samples_to_take <= to_integer(unsigned(NSAMPLES & "0000")) - 1; case state is when WaitingForSample => we <= "0"; + mult_enable <= '0'; + mult_accumulate <= "0"; + read_address <= 0; + write_address <= 0; if NEW_SAMPLE = '1' then -- calculate phase for initial bin - -- TODO this should use unsigned multiplication - mult1_a <= std_logic_vector(to_unsigned(sample_cnt, 16)); - mult1_b <= BIN1_PHASEINC; - mult2_a <= std_logic_vector(to_unsigned(sample_cnt, 16)); - mult2_b <= DIFFBIN_PHASEINC; - -- window ADC data - mult3_a <= PORT1; - mult3_b <= window_value; - mult4_a <= PORT2; - mult4_b <= window_value; + mult1_a <= std_logic_vector(to_unsigned(sample_cnt, 18)); + mult1_b <= "00" & BIN1_PHASEINC; + mult2_a <= std_logic_vector(to_unsigned(sample_cnt, 18)); + mult2_b <= "00" & DIFFBIN_PHASEINC; state <= WaitMult; - read_address <= 0; + bin_cnt <= 0; + mult_enable <= '1'; end if; when WaitMult => RESULT_READY <= '0'; we <= "0"; - state <= WaitMult2; - when WaitMult2 => - RESULT_READY <= '0'; - we <= "0"; - state <= PhaseReady; - when PhaseReady => - RESULT_READY <= '0'; - we <= "0"; - -- initial phase is ready - phase <= mult1_p(15 downto 0) & "0000000000000000"; - phase_inc <= mult2_p(23 downto 0) & "00000000"; - state <= WindowingReady; - when WindowingReady => - RESULT_READY <= '0'; - we <= "0"; - phase <= std_logic_vector(unsigned(phase)+unsigned(phase_inc)); - port1_latch <= mult3_p(31 downto 16); - port2_latch <= mult4_p(31 downto 16); - bin_cnt <= 0; - state <= WaitSinCos; - when WaitSinCos => - phase <= std_logic_vector(unsigned(phase)+unsigned(phase_inc)); - RESULT_READY <= '0'; - we <= "0"; + mult_enable <= '1'; + mult_accumulate <= "0"; + read_address <= 0; + write_address <= 0; if bin_cnt < 4 then bin_cnt <= bin_cnt + 1; else bin_cnt <= 0; + mult_enable <= '0'; + state <= WaitSinCos; + phase <= mult1_p(15 downto 0) & "0000000000000000"; + phase_inc <= mult2_p(23 downto 0) & "00000000"; + port1_latch <= PORT1; + port2_latch <= PORT2; + end if; + when WaitSinCos => + phase <= std_logic_vector(unsigned(phase)+unsigned(phase_inc)); + RESULT_READY <= '0'; + we <= "0"; + mult_enable <= '0'; + mult_accumulate <= "0"; + read_address <= 0; + write_address <= 0; + if bin_cnt < 6 then + bin_cnt <= bin_cnt + 1; + else + bin_cnt <= 0; + mult_enable <= '1'; + read_address <= 1; + -- sign extended multiplication + mult1_a <= port1_latch(15) & port1_latch(15) & port1_latch; + mult1_b <= sine(15) & sine(15) & sine; + mult2_a <= port1_latch(15) & port1_latch(15) & port1_latch; + mult2_b <= cosine(15) & cosine(15) & cosine; + mult3_a <= port2_latch(15) & port2_latch(15) & port2_latch; + mult3_b <= sine(15) & sine(15) & sine; + mult4_a <= port2_latch(15) & port2_latch(15) & port2_latch; + mult4_b <= cosine(15) & cosine(15) & cosine; state <= BUSY; + if sample_cnt = 0 then + mult_accumulate <= "0"; + else + mult_accumulate <= "1"; + end if; end if; when BUSY => + mult_enable <= '1'; + if sample_cnt = 0 then + mult_accumulate <= "0"; + else + mult_accumulate <= "1"; + end if; RESULT_READY <= '0'; phase <= std_logic_vector(unsigned(phase)+unsigned(phase_inc)); - mult1_a <= port1_latch; - mult1_b <= sine; - mult2_a <= port1_latch; - mult2_b <= cosine; - mult3_a <= port2_latch; - mult3_b <= sine; - mult4_a <= port2_latch; - mult4_b <= cosine; + -- sign extended multiplication + mult1_a <= port1_latch(15) & port1_latch(15) & port1_latch; + mult1_b <= sine(15) & sine(15) & sine; + mult2_a <= port1_latch(15) & port1_latch(15) & port1_latch; + mult2_b <= cosine(15) & cosine(15) & cosine; + mult3_a <= port2_latch(15) & port2_latch(15) & port2_latch; + mult3_b <= sine(15) & sine(15) & sine; + mult4_a <= port2_latch(15) & port2_latch(15) & port2_latch; + mult4_b <= cosine(15) & cosine(15) & cosine; if bin_cnt >= 3 then - -- multiplier result is available, accumulate + -- multiplier result is available, advance write address we <= "1"; write_address <= bin_cnt - 3; - ram_in <= std_logic_vector(signed(ram_out(191 downto 144))+signed(mult1_p)) - & std_logic_vector(signed(ram_out(143 downto 96))+signed(mult2_p)) - & std_logic_vector(signed(ram_out(95 downto 48))+signed(mult3_p)) - & std_logic_vector(signed(ram_out(47 downto 0))+signed(mult4_p)); else we <= "0"; + write_address <= 0; end if; if bin_cnt >= BINS+2 then read_address <= 0; - if sample_cnt < unsigned(NSAMPLES) then + if sample_cnt < samples_to_take then sample_cnt <= sample_cnt + 1; state <= WaitingForSample; - window_index <= std_logic_vector(unsigned(window_index)+unsigned(WINDOW_INC)); else state <= Ready; end if; else bin_cnt <= bin_cnt + 1; - if bin_cnt >= 1 then - read_address <= bin_cnt - 1; + if bin_cnt < BINS - 2 then + read_address <= bin_cnt + 2; end if; end if; when Ready => we <= "0"; RESULT_READY <= '1'; + write_address <= 0; if NEXT_OUTPUT = '1' then - -- reset last entry to prepare for next DFT - write_address <= read_address; - ram_in <= (others => '0'); - we <= "1"; -- fetch next entry from RAM if read_address < BINS - 1 then read_address <= read_address + 1; else RESULT_READY <= '0'; sample_cnt <= 0; + mult_enable <= '0'; state <= WaitingForSample; read_address <= 0; end if; diff --git a/FPGA/VNA/ResetDelay.vhd b/FPGA/VNA/ResetDelay.vhd index 6ef1028..bb8c1d0 100644 --- a/FPGA/VNA/ResetDelay.vhd +++ b/FPGA/VNA/ResetDelay.vhd @@ -40,16 +40,17 @@ architecture Behavioral of ResetDelay is signal clk_cnt : integer range 0 to CLK_DELAY-1; begin - OUT_RESET <= '1' when IN_RESET = '1' or clk_cnt < CLK_DELAY-1 else '0'; - process(CLK, IN_RESET) begin if rising_edge(CLK) then if IN_RESET = '1' then clk_cnt <= 0; + OUT_RESET <= '1'; else if clk_cnt < CLK_DELAY-1 then clk_cnt <= clk_cnt + 1; + else + OUT_RESET <= '0'; end if; end if; end if; diff --git a/FPGA/VNA/SPIConfig.vhd b/FPGA/VNA/SPIConfig.vhd index 183eeff..62307c6 100644 --- a/FPGA/VNA/SPIConfig.vhd +++ b/FPGA/VNA/SPIConfig.vhd @@ -71,10 +71,8 @@ entity SPICommands is SWEEP_RESUME : out STD_LOGIC; -- DFT signals - DFT_NSAMPLES : out STD_LOGIC_VECTOR (15 downto 0); DFT_BIN1_PHASEINC : out STD_LOGIC_VECTOR (15 downto 0); DFT_DIFFBIN_PHASEINC : out STD_LOGIC_VECTOR (15 downto 0); - DFT_WINDOW_INC : out STD_LOGIC_VECTOR (15 downto 0); DFT_RESULT_READY : in STD_LOGIC; DFT_OUTPUT : in STD_LOGIC_VECTOR (191 downto 0); DFT_NEXT_OUTPUT : out STD_LOGIC; @@ -103,7 +101,7 @@ architecture Behavioral of SPICommands is signal spi_buf_in : std_logic_vector(15 downto 0); signal spi_complete : std_logic; signal word_cnt : integer range 0 to 19; - type SPI_states is (Invalid, WriteSweepConfig, ReadResult, WriteRegister, ReadTest); + type SPI_states is (FirstWord, WriteSweepConfig, ReadResult, WriteRegister); signal state : SPI_states; signal selected_register : integer range 0 to 31; @@ -166,11 +164,10 @@ begin ADC_PHASEINC <= std_logic_vector(to_unsigned(1120, 12)); RESET_MINMAX <= '0'; INTERRUPT_ASSERTED <= '0'; + latched_result <= (others => '0'); - DFT_NSAMPLES <= (others => '0'); DFT_BIN1_PHASEINC <= (others => '0'); DFT_DIFFBIN_PHASEINC <= (others => '0'); - DFT_WINDOW_INC <= (others => '0'); dft_next <= '0'; last_NSS <= '1'; else @@ -198,19 +195,21 @@ begin if NSS = '0' and last_NSS = '1' then word_cnt <= 0; spi_buf_in <= interrupt_status; + state <= FirstWord; elsif spi_complete = '1' then word_cnt <= word_cnt + 1; - if word_cnt = 0 then + case state is + when FirstWord => -- initial word determines action case spi_buf_out(15 downto 13) is when "000" => state <= WriteSweepConfig; -- also extract the point number SWEEP_ADDRESS <= spi_buf_out(12 downto 0); - when "001" => state <= Invalid; + when "001" => state <= FirstWord; SWEEP_RESUME <= '1'; - when "010" => state <= ReadTest; + when "010" => state <= FirstWord; spi_buf_in <= "1111000010100101"; - when "011" => state <= Invalid; + when "011" => state <= FirstWord; RESET_MINMAX <= '1'; when "100" => state <= WriteRegister; selected_register <= to_integer(unsigned(spi_buf_out(4 downto 0))); @@ -225,60 +224,56 @@ begin when "111" => state <= ReadResult; -- can use same state as read result, but the latched data will contain the min/max ADC values latched_result(79 downto 0) <= ADC_MINMAX(95 downto 16); spi_buf_in <= ADC_MINMAX(15 downto 0); - when others => state <= Invalid; + when others => state <= FirstWord; end case; - else - if state = WriteRegister then - -- write received data into previously selected register - case selected_register is - when 0 => interrupt_mask <= spi_buf_out; - when 1 => SWEEP_POINTS <= spi_buf_out(12 downto 0); - when 2 => NSAMPLES <= spi_buf_out(12 downto 0); - when 3 => PORTSWITCH_EN <= spi_buf_out(0); - PORT1_EN <= spi_buf_out(15); - PORT2_EN <= spi_buf_out(14); - REF_EN <= spi_buf_out(13); - AMP_SHDN <= not spi_buf_out(12); - SOURCE_RF_EN <= spi_buf_out(11); - LO_RF_EN <= spi_buf_out(10); - LEDS <= not spi_buf_out(9 downto 7); - WINDOW_SETTING <= spi_buf_out(6 downto 5); - SOURCE_CE_EN <= spi_buf_out(4); - LO_CE_EN <= spi_buf_out(3); - EXCITE_PORT1 <= spi_buf_out(1); - EXCITE_PORT2 <= spi_buf_out(2); - when 4 => ADC_PRESCALER <= spi_buf_out(7 downto 0); - when 5 => ADC_PHASEINC <= spi_buf_out(11 downto 0); - when 8 => MAX2871_DEF_0(15 downto 0) <= spi_buf_out; - when 9 => MAX2871_DEF_0(31 downto 16) <= spi_buf_out; - when 10 => MAX2871_DEF_1(15 downto 0) <= spi_buf_out; - when 11 => MAX2871_DEF_1(31 downto 16) <= spi_buf_out; - when 12 => MAX2871_DEF_3(15 downto 0) <= spi_buf_out; - when 13 => MAX2871_DEF_3(31 downto 16) <= spi_buf_out; - when 14 => MAX2871_DEF_4(15 downto 0) <= spi_buf_out; - when 15 => MAX2871_DEF_4(31 downto 16) <= spi_buf_out; - when 16 => DFT_NSAMPLES <= spi_buf_out; - when 17 => DFT_WINDOW_INC <= spi_buf_out; - when 18 => DFT_BIN1_PHASEINC <= spi_buf_out; - when 19 => DFT_DIFFBIN_PHASEINC <= spi_buf_out; - when others => - end case; - selected_register <= selected_register + 1; - elsif state = WriteSweepConfig then - if word_cnt = 6 then - -- Sweep config data is complete pass on - SWEEP_DATA <= sweepconfig_buffer & spi_buf_out; - sweep_config_write <= '1'; - else - -- shift next word into buffer - sweepconfig_buffer <= sweepconfig_buffer(63 downto 0) & spi_buf_out; - end if; - elsif state = ReadResult then - -- pass on next word of latched result - spi_buf_in <= latched_result(15 downto 0); - latched_result <= "0000000000000000" & latched_result(287 downto 16); + when WriteRegister => + -- write received data into previously selected register + case selected_register is + when 0 => interrupt_mask <= spi_buf_out; + when 1 => SWEEP_POINTS <= spi_buf_out(12 downto 0); + when 2 => NSAMPLES <= spi_buf_out(12 downto 0); + when 3 => PORTSWITCH_EN <= spi_buf_out(0); + PORT1_EN <= spi_buf_out(15); + PORT2_EN <= spi_buf_out(14); + REF_EN <= spi_buf_out(13); + AMP_SHDN <= not spi_buf_out(12); + SOURCE_RF_EN <= spi_buf_out(11); + LO_RF_EN <= spi_buf_out(10); + LEDS <= not spi_buf_out(9 downto 7); + WINDOW_SETTING <= spi_buf_out(6 downto 5); + SOURCE_CE_EN <= spi_buf_out(4); + LO_CE_EN <= spi_buf_out(3); + EXCITE_PORT1 <= spi_buf_out(1); + EXCITE_PORT2 <= spi_buf_out(2); + when 4 => ADC_PRESCALER <= spi_buf_out(7 downto 0); + when 5 => ADC_PHASEINC <= spi_buf_out(11 downto 0); + when 8 => MAX2871_DEF_0(15 downto 0) <= spi_buf_out; + when 9 => MAX2871_DEF_0(31 downto 16) <= spi_buf_out; + when 10 => MAX2871_DEF_1(15 downto 0) <= spi_buf_out; + when 11 => MAX2871_DEF_1(31 downto 16) <= spi_buf_out; + when 12 => MAX2871_DEF_3(15 downto 0) <= spi_buf_out; + when 13 => MAX2871_DEF_3(31 downto 16) <= spi_buf_out; + when 14 => MAX2871_DEF_4(15 downto 0) <= spi_buf_out; + when 15 => MAX2871_DEF_4(31 downto 16) <= spi_buf_out; + when 18 => DFT_BIN1_PHASEINC <= spi_buf_out; + when 19 => DFT_DIFFBIN_PHASEINC <= spi_buf_out; + when others => + end case; + selected_register <= selected_register + 1; + when WriteSweepConfig => + if word_cnt = 6 then + -- Sweep config data is complete pass on + SWEEP_DATA <= sweepconfig_buffer & spi_buf_out; + sweep_config_write <= '1'; + else + -- shift next word into buffer + sweepconfig_buffer <= sweepconfig_buffer(63 downto 0) & spi_buf_out; end if; - end if; + when ReadResult => + -- pass on next word of latched result + spi_buf_in <= latched_result(15 downto 0); + latched_result <= "0000000000000000" & latched_result(287 downto 16); + end case; end if; end if; end if; diff --git a/FPGA/VNA/Sampling.vhd b/FPGA/VNA/Sampling.vhd index 7cc30ab..f1b2287 100644 --- a/FPGA/VNA/Sampling.vhd +++ b/FPGA/VNA/Sampling.vhd @@ -44,7 +44,6 @@ entity Sampling is PRE_DONE : out STD_LOGIC; START : in STD_LOGIC; SAMPLES : in STD_LOGIC_VECTOR (12 downto 0); - WINDOW_TYPE : in STD_LOGIC_VECTOR (1 downto 0); PORT1_I : out STD_LOGIC_VECTOR (47 downto 0); PORT1_Q : out STD_LOGIC_VECTOR (47 downto 0); PORT2_I : out STD_LOGIC_VECTOR (47 downto 0); @@ -94,16 +93,6 @@ END COMPONENT; signal sine : std_logic_vector(15 downto 0); signal cosine : std_logic_vector(15 downto 0); - signal windowed_sine : std_logic_vector(31 downto 0); - signal windowed_cosine : std_logic_vector(31 downto 0); - - signal window_index : std_logic_vector(6 downto 0); - signal window_value : std_logic_vector(15 downto 0); - signal window_sample_cnt : integer range 0 to 8191; - signal window_index_inc : integer range 0 to 8; - signal window_sample_compare : integer range 0 to 8191; - signal window_sample_cnt_inc : integer range 0 to 8; - signal mult1_I : std_logic_vector(31 downto 0); signal mult1_Q : std_logic_vector(31 downto 0); signal mult2_I : std_logic_vector(31 downto 0); @@ -132,66 +121,45 @@ begin PORT MAP ( clk => CLK, a => PORT1, - b => windowed_cosine(31 downto 16), + b => cosine, p => mult1_I ); Port1_Q_Mult : SinCosMult PORT MAP ( clk => CLK, a => PORT1, - b => windowed_sine(31 downto 16), + b => sine, p => mult1_Q ); Port2_I_Mult : SinCosMult PORT MAP ( clk => CLK, a => PORT2, - b => windowed_cosine(31 downto 16), + b => cosine, p => mult2_I ); Port2_Q_Mult : SinCosMult PORT MAP ( clk => CLK, a => PORT2, - b => windowed_sine(31 downto 16), + b => sine, p => mult2_Q ); Ref_I_Mult : SinCosMult PORT MAP ( clk => CLK, a => REF, - b => windowed_cosine(31 downto 16), + b => cosine, p => multR_I ); Ref_Q_Mult : SinCosMult PORT MAP ( clk => CLK, a => REF, - b => windowed_sine(31 downto 16), + b => sine, p => multR_Q ); - Sine_Mult : SinCosMult - PORT MAP ( - clk => CLK, - a => window_value, - b => sine, - p => windowed_sine - ); - Cosine_Mult : SinCosMult - PORT MAP ( - clk => CLK, - a => window_value, - b => cosine, - p => windowed_cosine - ); - WindowROM: window PORT MAP( - CLK => CLK, - INDEX => window_index, - WINDOW_TYPE => WINDOW_TYPE, - VALUE => window_value - ); - process(CLK, RESET) begin if rising_edge(CLK) then @@ -203,8 +171,6 @@ begin ACTIVE <= '0'; clk_cnt <= 0; sample_cnt <= 0; - window_sample_cnt <= 0; - window_index <= (others => '0'); phase <= (others => '0'); else -- when not idle, generate pulses for ADCs @@ -244,25 +210,6 @@ begin if START = '1' then state <= Sampling; samples_to_take <= to_integer(unsigned(SAMPLES & "0000") - 1); - window_sample_compare <= to_integer(unsigned(SAMPLES) - 1); - case SAMPLES is - when "0000000000001" => - -- 16 samples, increment on every sample by 8 - window_sample_cnt_inc <= 1; - window_index_inc <= 8; - when "0000000000010" | "0000000000011" => - -- 32-48 samples, increment by 4 - window_sample_cnt_inc <= 2; - window_index_inc <= 4; - when "0000000000100" | "0000000000101" | "0000000000110" | "0000000000111"=> - -- 64-112 samples, increment by 2 - window_sample_cnt_inc <= 4; - window_index_inc <= 2; - when others => - -- 128 or more samples, increment by 1 - window_sample_cnt_inc <= 8; - window_index_inc <= 1; - end case; end if; when Sampling => DONE <= '0'; @@ -294,13 +241,6 @@ begin else state <= Ready; end if; - -- keep track of window index - if window_sample_cnt < window_sample_compare then - window_sample_cnt <= window_sample_cnt + window_sample_cnt_inc; - else - window_sample_cnt <= window_sample_cnt - window_sample_compare; - window_index <= std_logic_vector( unsigned(window_index) + window_index_inc ); - end if; when Ready => ACTIVE <= '1'; DONE <= '1'; diff --git a/FPGA/VNA/Sweep.vhd b/FPGA/VNA/Sweep.vhd index 3e2fc3e..3c81251 100644 --- a/FPGA/VNA/Sweep.vhd +++ b/FPGA/VNA/Sweep.vhd @@ -82,45 +82,41 @@ architecture Behavioral of Sweep is signal state : Point_states; signal settling_cnt : unsigned(15 downto 0); signal settling_time : unsigned(15 downto 0); + signal config_reg : std_logic_vector(95 downto 0); begin CONFIG_ADDRESS <= std_logic_vector(point_cnt); -- assemble registers -- source register 0: N divider and fractional division value - SOURCE_REG_0 <= MAX2871_DEF_0(31) & "000000000" & CONFIG_DATA(6 downto 0) & CONFIG_DATA(27 downto 16) & "000"; + SOURCE_REG_0 <= MAX2871_DEF_0(31) & "000000000" & config_reg(6 downto 0) & config_reg(27 downto 16) & "000"; -- source register 1: Modulus value - SOURCE_REG_1 <= MAX2871_DEF_1(31 downto 15) & CONFIG_DATA(39 downto 28) & "001"; + SOURCE_REG_1 <= MAX2871_DEF_1(31 downto 15) & config_reg(39 downto 28) & "001"; -- source register 3: VCO selection - SOURCE_REG_3 <= CONFIG_DATA(12 downto 7) & MAX2871_DEF_3(25 downto 3) & "011"; + SOURCE_REG_3 <= config_reg(12 downto 7) & MAX2871_DEF_3(25 downto 3) & "011"; -- output power A passed on from default registers, output B disabled - SOURCE_REG_4 <= MAX2871_DEF_4(31 downto 23) & CONFIG_DATA(15 downto 13) & MAX2871_DEF_4(19 downto 9) & "000" & MAX2871_DEF_4(5 downto 3) & "100"; + SOURCE_REG_4 <= MAX2871_DEF_4(31 downto 23) & config_reg(15 downto 13) & MAX2871_DEF_4(19 downto 9) & "000" & MAX2871_DEF_4(5 downto 3) & "100"; -- LO register 0: N divider and fractional division value - LO_REG_0 <= MAX2871_DEF_0(31) & "000000000" & CONFIG_DATA(54 downto 48) & CONFIG_DATA(75 downto 64) & "000"; + LO_REG_0 <= MAX2871_DEF_0(31) & "000000000" & config_reg(54 downto 48) & config_reg(75 downto 64) & "000"; -- LO register 1: Modulus value - LO_REG_1 <= MAX2871_DEF_1(31 downto 15) & CONFIG_DATA(87 downto 76) & "001"; + LO_REG_1 <= MAX2871_DEF_1(31 downto 15) & config_reg(87 downto 76) & "001"; -- LO register 3: VCO selection - LO_REG_3 <= CONFIG_DATA(60 downto 55) & MAX2871_DEF_3(25 downto 3) & "011"; + LO_REG_3 <= config_reg(60 downto 55) & MAX2871_DEF_3(25 downto 3) & "011"; -- both outputs enabled at +5dbm - LO_REG_4 <= MAX2871_DEF_4(31 downto 23) & CONFIG_DATA(63 downto 61) & MAX2871_DEF_4(19 downto 9) & "111111100"; + LO_REG_4 <= MAX2871_DEF_4(31 downto 23) & config_reg(63 downto 61) & MAX2871_DEF_4(19 downto 9) & "111111100"; - ATTENUATOR <= CONFIG_DATA(46 downto 40); - SOURCE_FILTER <= CONFIG_DATA(89 downto 88); - BAND_SELECT <= CONFIG_DATA(47); - - settling_time <= to_unsigned(2048, 16) when CONFIG_DATA(94 downto 93) = "00" else -- 20us - to_unsigned(6144, 16) when CONFIG_DATA(94 downto 93) = "01" else -- 60us - to_unsigned(18432, 16) when CONFIG_DATA(94 downto 93) = "10" else -- 180us - to_unsigned(55296, 16); -- 540us + ATTENUATOR <= config_reg(46 downto 40); + SOURCE_FILTER <= config_reg(89 downto 88); + BAND_SELECT <= config_reg(47); - NSAMPLES <= USER_NSAMPLES when CONFIG_DATA(92 downto 90) = "000" else - std_logic_vector(to_unsigned(6, 13)) when CONFIG_DATA(92 downto 90) = "001" else - std_logic_vector(to_unsigned(19, 13)) when CONFIG_DATA(92 downto 90) = "010" else - std_logic_vector(to_unsigned(57, 13)) when CONFIG_DATA(92 downto 90) = "011" else - std_logic_vector(to_unsigned(190, 13)) when CONFIG_DATA(92 downto 90) = "100" else - std_logic_vector(to_unsigned(571, 13)) when CONFIG_DATA(92 downto 90) = "101" else - std_logic_vector(to_unsigned(1904, 13)) when CONFIG_DATA(92 downto 90) = "110" else + NSAMPLES <= USER_NSAMPLES when config_reg(92 downto 90) = "000" else + std_logic_vector(to_unsigned(6, 13)) when config_reg(92 downto 90) = "001" else + std_logic_vector(to_unsigned(19, 13)) when config_reg(92 downto 90) = "010" else + std_logic_vector(to_unsigned(57, 13)) when config_reg(92 downto 90) = "011" else + std_logic_vector(to_unsigned(190, 13)) when config_reg(92 downto 90) = "100" else + std_logic_vector(to_unsigned(571, 13)) when config_reg(92 downto 90) = "101" else + std_logic_vector(to_unsigned(1904, 13)) when config_reg(92 downto 90) = "110" else std_logic_vector(to_unsigned(5712, 13)); DEBUG_STATUS(10 downto 8) <= "000" when state = TriggerSetup else @@ -135,7 +131,9 @@ begin DEBUG_STATUS(6) <= PLL_RELOAD_DONE and PLL_LOCKED; DEBUG_STATUS(5) <= SAMPLING_BUSY; DEBUG_STATUS(4 downto 0) <= (others => '1'); - + + config_reg <= CONFIG_DATA; + process(CLK, RESET) begin if rising_edge(CLK) then @@ -154,21 +152,25 @@ begin state <= SettingUp; end if; when SettingUp => - -- highest bit in CONFIG_DATA determines whether the sweep should be halted prior to sampling - SWEEP_HALTED <= CONFIG_DATA(95); + -- highest bit in config_reg determines whether the sweep should be halted prior to sampling + SWEEP_HALTED <= config_reg(95); RELOAD_PLL_REGS <= '0'; + case config_reg(94 downto 93) is + when "00" => settling_time <= to_unsigned(2048, 16); -- 20us + when "01" => settling_time <= to_unsigned(6144, 16); -- 60us + when "10" => settling_time <= to_unsigned(18432, 16); -- 180us + when others => settling_time <= to_unsigned(55296, 16); -- 540us + end case; + settling_cnt <= settling_time; if PLL_RELOAD_DONE = '1' and PLL_LOCKED = '1' then -- check if halted sweep is resumed - if CONFIG_DATA(95) = '0' or SWEEP_RESUME = '1' then + if config_reg(95) = '0' or SWEEP_RESUME = '1' then SWEEP_HALTED <= '0'; if EXCITE_PORT1 = '1' then state <= SettlingPort1; - elsif EXCITE_PORT2 = '1' then - state <= SettlingPort2; else - state <= Done; + state <= SettlingPort2; end if; - settling_cnt <= settling_time; end if; end if; when SettlingPort1 => @@ -192,7 +194,7 @@ begin else state <= NextPoint; end if; - settling_cnt <= unsigned(SETTLING_TIME); + settling_cnt <= settling_time; end if; when SettlingPort2 => PORT_SELECT <= '0'; diff --git a/FPGA/VNA/Test_DFT.vhd b/FPGA/VNA/Test_DFT.vhd index e4d7f8f..2bd28ad 100644 --- a/FPGA/VNA/Test_DFT.vhd +++ b/FPGA/VNA/Test_DFT.vhd @@ -47,11 +47,9 @@ ARCHITECTURE behavior OF Test_DFT IS PORT1 : IN std_logic_vector(15 downto 0); PORT2 : IN std_logic_vector(15 downto 0); NEW_SAMPLE : IN std_logic; - NSAMPLES : in STD_LOGIC_VECTOR (15 downto 0); + NSAMPLES : in STD_LOGIC_VECTOR (12 downto 0); BIN1_PHASEINC : IN std_logic_vector(15 downto 0); DIFFBIN_PHASEINC : IN std_logic_vector(15 downto 0); - WINDOW_INC : IN std_logic_vector(15 downto 0); - WINDOW_TYPE : IN std_logic_vector(1 downto 0); RESULT_READY : OUT std_logic; OUTPUT : out STD_LOGIC_VECTOR (191 downto 0); NEXT_OUTPUT : IN std_logic @@ -67,10 +65,8 @@ ARCHITECTURE behavior OF Test_DFT IS signal NEW_SAMPLE : std_logic := '0'; signal BIN1_PHASEINC : std_logic_vector(15 downto 0) := (others => '0'); signal DIFFBIN_PHASEINC : std_logic_vector(15 downto 0) := (others => '0'); - signal WINDOW_INC : std_logic_vector(15 downto 0) := (others => '0'); - signal WINDOW_TYPE : std_logic_vector(1 downto 0) := (others => '0'); signal NEXT_OUTPUT : std_logic := '0'; - signal NSAMPLES : STD_LOGIC_VECTOR (15 downto 0); + signal NSAMPLES : STD_LOGIC_VECTOR (12 downto 0); --Outputs signal RESULT_READY : std_logic; @@ -93,8 +89,6 @@ BEGIN NSAMPLES => NSAMPLES, BIN1_PHASEINC => BIN1_PHASEINC, DIFFBIN_PHASEINC => DIFFBIN_PHASEINC, - WINDOW_INC => WINDOW_INC, - WINDOW_TYPE => WINDOW_TYPE, RESULT_READY => RESULT_READY, OUTPUT => OUTPUT, NEXT_OUTPUT => NEXT_OUTPUT @@ -119,7 +113,6 @@ BEGIN PORT2 <= "0100000000000000"; BIN1_PHASEINC <= "0100000000000000"; DIFFBIN_PHASEINC <= "0010000000000000"; - WINDOW_INC <= "0000100000000000"; NSAMPLES <= "0000000000000011"; wait for 100 ns; RESET <= '0'; @@ -128,7 +121,7 @@ BEGIN wait for CLK_period; NEW_SAMPLE <= '0'; while True loop - wait for CLK_period * 111; + wait for CLK_period * 79; NEW_SAMPLE <= '1'; wait for CLK_period; NEW_SAMPLE <= '0'; diff --git a/FPGA/VNA/Test_Windowing.vhd b/FPGA/VNA/Test_Windowing.vhd new file mode 100644 index 0000000..58517e4 --- /dev/null +++ b/FPGA/VNA/Test_Windowing.vhd @@ -0,0 +1,135 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 18:37:51 11/06/2020 +-- Design Name: +-- Module Name: /home/jan/Projekte/VNA2/FPGA/VNA/Test_Windowing.vhd +-- Project Name: VNA +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: Windowing +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--USE ieee.numeric_std.ALL; + +ENTITY Test_Windowing IS +END Test_Windowing; + +ARCHITECTURE behavior OF Test_Windowing IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT Windowing + PORT( + CLK : IN std_logic; + RESET : IN std_logic; + WINDOW_TYPE : IN std_logic_vector(1 downto 0); + PORT1_RAW : IN std_logic_vector(15 downto 0); + PORT2_RAW : IN std_logic_vector(15 downto 0); + REF_RAW : IN std_logic_vector(15 downto 0); + ADC_READY : IN std_logic; + PORT1_WINDOWED : OUT std_logic_vector(15 downto 0); + PORT2_WINDOWED : OUT std_logic_vector(15 downto 0); + REF_WINDOWED : OUT std_logic_vector(15 downto 0); + WINDOWING_DONE : OUT std_logic; + NSAMPLES : IN std_logic_vector(12 downto 0) + ); + END COMPONENT; + + + --Inputs + signal CLK : std_logic := '0'; + signal RESET : std_logic := '0'; + signal WINDOW_TYPE : std_logic_vector(1 downto 0) := (others => '0'); + signal PORT1_RAW : std_logic_vector(15 downto 0) := (others => '0'); + signal PORT2_RAW : std_logic_vector(15 downto 0) := (others => '0'); + signal REF_RAW : std_logic_vector(15 downto 0) := (others => '0'); + signal ADC_READY : std_logic := '0'; + signal NSAMPLES : std_logic_vector(12 downto 0) := (others => '0'); + + --Outputs + signal PORT1_WINDOWED : std_logic_vector(15 downto 0); + signal PORT2_WINDOWED : std_logic_vector(15 downto 0); + signal REF_WINDOWED : std_logic_vector(15 downto 0); + signal WINDOWING_DONE : std_logic; + + -- Clock period definitions + constant CLK_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: Windowing PORT MAP ( + CLK => CLK, + RESET => RESET, + WINDOW_TYPE => WINDOW_TYPE, + PORT1_RAW => PORT1_RAW, + PORT2_RAW => PORT2_RAW, + REF_RAW => REF_RAW, + ADC_READY => ADC_READY, + PORT1_WINDOWED => PORT1_WINDOWED, + PORT2_WINDOWED => PORT2_WINDOWED, + REF_WINDOWED => REF_WINDOWED, + WINDOWING_DONE => WINDOWING_DONE, + NSAMPLES => NSAMPLES + ); + + -- Clock process definitions + CLK_process :process + begin + CLK <= '0'; + wait for CLK_period/2; + CLK <= '1'; + wait for CLK_period/2; + end process; + + + -- Stimulus process + stim_proc: process + begin + -- hold reset state for 100 ns. + wait for 100 ns; + + wait for CLK_period*10; + + -- insert stimulus here + WINDOW_TYPE <= "10"; + NSAMPLES <= "0000000010001"; + PORT1_RAW <= "0000000010000000"; + PORT2_RAW <= "0000000100000000"; + REF_RAW <= "0000001000000000"; + ADC_READY <= '0'; + RESET <= '1'; + wait for CLK_period; + RESET <= '0'; + for i in 0 to 271 loop + wait for CLK_period*111; + ADC_READY <= '1'; + wait for CLK_period; + ADC_READY <= '0'; + end loop; + + wait; + end process; + +END; diff --git a/FPGA/VNA/VNA.gise b/FPGA/VNA/VNA.gise index 2642c8c..955d340 100644 --- a/FPGA/VNA/VNA.gise +++ b/FPGA/VNA/VNA.gise @@ -39,9 +39,7 @@ - - @@ -51,7 +49,12 @@ + + + + + @@ -68,7 +71,6 @@ - @@ -129,7 +131,7 @@ - + @@ -154,22 +156,25 @@ - + + - + - + - + + + @@ -180,7 +185,7 @@ - + @@ -206,7 +211,9 @@ - + + + @@ -216,7 +223,7 @@ - + @@ -224,22 +231,20 @@ - - + + - - + - + - @@ -249,9 +254,11 @@ - + + + @@ -278,8 +285,9 @@ - + + @@ -295,11 +303,11 @@ - + - + @@ -308,7 +316,7 @@ - + @@ -322,7 +330,7 @@ - + @@ -336,7 +344,7 @@ - + @@ -390,7 +398,7 @@ - + diff --git a/FPGA/VNA/VNA.xise b/FPGA/VNA/VNA.xise index ec70abb..1327387 100644 --- a/FPGA/VNA/VNA.xise +++ b/FPGA/VNA/VNA.xise @@ -17,14 +17,14 @@ - + - + @@ -34,22 +34,22 @@ - + - + - + - + - + @@ -64,15 +64,15 @@ - + - + - + @@ -100,7 +100,7 @@ - + @@ -114,7 +114,7 @@ - + @@ -127,23 +127,33 @@ - - + + - + - - - - - + + + + + + + + + + + + + + + @@ -159,6 +169,9 @@ + + + @@ -226,8 +239,8 @@ - - + + @@ -345,7 +358,7 @@ - + @@ -403,8 +416,8 @@ - - + + @@ -422,7 +435,7 @@ - + @@ -454,7 +467,7 @@ - + @@ -474,7 +487,7 @@ - + diff --git a/FPGA/VNA/Windowing.vhd b/FPGA/VNA/Windowing.vhd new file mode 100644 index 0000000..8271d3f --- /dev/null +++ b/FPGA/VNA/Windowing.vhd @@ -0,0 +1,201 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 18:18:17 11/06/2020 +-- Design Name: +-- Module Name: Windowing - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +use IEEE.NUMERIC_STD.ALL; + +-- Uncomment the following library declaration if instantiating +-- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity Windowing is + Port ( CLK : in STD_LOGIC; + RESET : in STD_LOGIC; + WINDOW_TYPE : in STD_LOGIC_VECTOR (1 downto 0); + PORT1_RAW : in STD_LOGIC_VECTOR (15 downto 0); + PORT2_RAW : in STD_LOGIC_VECTOR (15 downto 0); + REF_RAW : in STD_LOGIC_VECTOR (15 downto 0); + ADC_READY : in STD_LOGIC; + PORT1_WINDOWED : out STD_LOGIC_VECTOR (15 downto 0); + PORT2_WINDOWED : out STD_LOGIC_VECTOR (15 downto 0); + REF_WINDOWED : out STD_LOGIC_VECTOR (15 downto 0); + WINDOWING_DONE : out STD_LOGIC; + NSAMPLES : in STD_LOGIC_VECTOR (12 downto 0)); +end Windowing; + +architecture Behavioral of Windowing is +COMPONENT window +PORT( + CLK : IN std_logic; + INDEX : IN std_logic_vector(6 downto 0); + WINDOW_TYPE : IN std_logic_vector(1 downto 0); + VALUE : OUT std_logic_vector(15 downto 0) + ); +END COMPONENT; +COMPONENT DSP_SLICE + PORT ( + clk : IN STD_LOGIC; + ce : IN STD_LOGIC; + sel : IN STD_LOGIC_VECTOR(0 DOWNTO 0); + a : IN STD_LOGIC_VECTOR(17 DOWNTO 0); + b : IN STD_LOGIC_VECTOR(17 DOWNTO 0); + c : IN STD_LOGIC_VECTOR(47 DOWNTO 0); + p : OUT STD_LOGIC_VECTOR(47 DOWNTO 0) + ); +END COMPONENT; + signal window_index : std_logic_vector(6 downto 0); + signal window_value : std_logic_vector(15 downto 0); + signal window_sample_cnt : integer range -8 to 8191; + signal window_index_inc : integer range 0 to 8; + signal window_sample_compare : integer range 0 to 8191; + signal window_sample_cnt_inc : integer range 0 to 8; + + signal mult_a : std_logic_vector(17 downto 0); + signal mult_b : std_logic_vector(17 downto 0); + signal mult_p : std_logic_vector(47 downto 0); + signal mult_enable : std_logic; + + type states is (CalcWindowInc, WaitingForADC, CalcPort1, CalcPort2, CalcRef, MultDelay1, MultDelay2, StorePort1, StorePort2, StoreRef); + signal state : states; +begin + + Mult : DSP_SLICE + PORT MAP ( + clk => CLK, + ce => mult_enable, + sel => "0", + a => mult_a, + b => mult_b, + c => (others => '0'), + p => mult_p + ); + WindowROM: window PORT MAP( + CLK => CLK, + INDEX => window_index, + WINDOW_TYPE => WINDOW_TYPE, + VALUE => window_value + ); + -- sign extend multiplier inputs + mult_a(17 downto 16) <= mult_a(15) & mult_a(15); + mult_b(17 downto 16) <= mult_b(15) & mult_b(15); + + mult_a(15 downto 0) <= window_value; + + process(CLK) + begin + if rising_edge(CLK) then + if RESET = '1' then + WINDOWING_DONE <= '0'; + state <= CalcWindowInc; + mult_enable <= '0'; + mult_b(15 downto 0) <= (others => '0'); + window_index <= (others => '0'); + window_sample_cnt <= 0; + window_sample_compare <= to_integer(unsigned(NSAMPLES)); + else + case state is + when CalcWindowInc => + case window_sample_compare is + when 1 => + -- 16 samples, increment on every sample by 8 + window_sample_cnt_inc <= 1; + window_index_inc <= 8; + when 2 to 3 => + -- 32-48 samples, increment by 4 + window_sample_cnt_inc <= 2; + window_index_inc <= 4; + when 4 to 7 => + -- 64-112 samples, increment by 2 + window_sample_cnt_inc <= 4; + window_index_inc <= 2; + when others => + -- 128 or more samples, increment by 1 + window_sample_cnt_inc <= 8; + window_index_inc <= 1; + end case; + state <= WaitingForADC; + when WaitingForADC => + WINDOWING_DONE <= '0'; + mult_enable <= '0'; + mult_b(15 downto 0) <= (others => '0'); + if ADC_READY = '1' then + state <= CalcPort1; + end if; + when CalcPort1 => + WINDOWING_DONE <= '0'; + mult_enable <= '1'; + mult_b(15 downto 0) <= PORT1_RAW; + state <= CalcPort2; + when CalcPort2 => + WINDOWING_DONE <= '0'; + mult_enable <= '1'; + mult_b(15 downto 0) <= PORT2_RAW; + state <= CalcRef; + when CalcRef => + WINDOWING_DONE <= '0'; + mult_enable <= '1'; + mult_b(15 downto 0) <= REF_RAW; + state <= MultDelay1; + when MultDelay1 => + WINDOWING_DONE <= '0'; + mult_enable <= '1'; + mult_b(15 downto 0) <= (others => '0'); + state <= MultDelay2; + when MultDelay2 => + WINDOWING_DONE <= '0'; + mult_enable <= '1'; + mult_b(15 downto 0) <= (others => '0'); + state <= StorePort1; + when StorePort1 => + WINDOWING_DONE <= '0'; + mult_enable <= '1'; + mult_b(15 downto 0) <= (others => '0'); + PORT1_WINDOWED <= mult_p(30 downto 15); + state <= StorePort2; + when StorePort2 => + WINDOWING_DONE <= '0'; + mult_enable <= '1'; + mult_b(15 downto 0) <= (others => '0'); + PORT2_WINDOWED <= mult_p(30 downto 15); + state <= StoreRef; + when StoreRef => + WINDOWING_DONE <= '1'; + mult_enable <= '0'; + mult_b(15 downto 0) <= (others => '0'); + REF_WINDOWED <= mult_p(30 downto 15); + -- update window increment + if window_sample_cnt + window_sample_cnt_inc < window_sample_compare then + window_sample_cnt <= window_sample_cnt + window_sample_cnt_inc; + else + window_sample_cnt <= window_sample_cnt + window_sample_cnt_inc - window_sample_compare; + window_index <= std_logic_vector( unsigned(window_index) + window_index_inc ); + end if; + state <= WaitingForADC; + end case; + end if; + end if; + end process; + +end Behavioral; + diff --git a/FPGA/VNA/dft_result.vhd b/FPGA/VNA/dft_result.vhd deleted file mode 100644 index e4388f7..0000000 --- a/FPGA/VNA/dft_result.vhd +++ /dev/null @@ -1,56 +0,0 @@ ----------------------------------------------------------------------------------- --- Company: --- Engineer: --- --- Create Date: 22:01:17 11/03/2020 --- Design Name: --- Module Name: dft_result - Behavioral --- Project Name: --- Target Devices: --- Tool versions: --- Description: --- --- Dependencies: --- --- Revision: --- Revision 0.01 - File Created --- Additional Comments: --- ----------------------------------------------------------------------------------- -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; - --- Uncomment the following library declaration if using --- arithmetic functions with Signed or Unsigned values -use IEEE.NUMERIC_STD.ALL; - --- Uncomment the following library declaration if instantiating --- any Xilinx primitives in this code. ---library UNISIM; ---use UNISIM.VComponents.all; - -entity dft_result is - Generic (depth : integer); - Port ( CLK : in STD_LOGIC; - READ_ADDRESS : in integer range 0 to depth-1; - WRITE_ADDRESS : in integer range 0 to depth-1; - DATA_IN : in STD_LOGIC_VECTOR (191 downto 0); - DATA_OUT : out STD_LOGIC_VECTOR (191 downto 0); - WE : in STD_LOGIC); -end dft_result; - -architecture rtl of dft_result is - type memory is array(depth-1 downto 0) of std_logic_vector(191 downto 0); - signal ram : memory; -begin - process(CLK) - begin - if rising_edge(CLK) then - DATA_OUT <= ram(READ_ADDRESS); - if(WE = '1') then - ram(WRITE_ADDRESS) <= DATA_IN; - end if; - end if; - end process; -end rtl; - diff --git a/FPGA/VNA/ipcore_dir/DSP48.xco b/FPGA/VNA/ipcore_dir/DSP48.xco new file mode 100644 index 0000000..face7fc --- /dev/null +++ b/FPGA/VNA/ipcore_dir/DSP48.xco @@ -0,0 +1,136 @@ +############################################################## +# +# Xilinx Core Generator version 14.6 +# Date: Fri Nov 6 13:56:17 2020 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# Generated from component: xilinx.com:ip:xbip_dsp48_macro:2.1 +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = VHDL +SET device = xc6slx9 +SET devicefamily = spartan6 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = tqg144 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -2 +SET verilogsim = false +SET vhdlsim = true +# END Project Options +# BEGIN Select +SELECT DSP48_Macro xilinx.com:ip:xbip_dsp48_macro:2.1 +# END Select +# BEGIN Parameters +CSET a_binarywidth=0 +CSET a_width=18 +CSET areg_1=false +CSET areg_2=false +CSET areg_3=true +CSET areg_4=true +CSET b_binarywidth=0 +CSET b_width=18 +CSET breg_1=false +CSET breg_2=false +CSET breg_3=true +CSET breg_4=true +CSET c_binarywidth=0 +CSET c_width=48 +CSET cinreg_1=false +CSET cinreg_2=false +CSET cinreg_3=false +CSET cinreg_4=false +CSET cinreg_5=false +CSET component_name=DSP48 +CSET concat_binarywidth=0 +CSET concat_width=48 +CSET concatreg_3=false +CSET concatreg_4=false +CSET concatreg_5=false +CSET creg_1=false +CSET creg_2=false +CSET creg_3=true +CSET creg_4=true +CSET creg_5=true +CSET d_binarywidth=0 +CSET d_width=18 +CSET dreg_1=false +CSET dreg_2=false +CSET dreg_3=false +CSET gui_behaviour=Coregen +CSET has_a_ce=false +CSET has_a_sclr=false +CSET has_acout=false +CSET has_b_ce=false +CSET has_b_sclr=false +CSET has_bcout=false +CSET has_c_ce=false +CSET has_c_sclr=false +CSET has_carrycascout=false +CSET has_carryout=false +CSET has_ce=true +CSET has_concat_ce=false +CSET has_concat_sclr=false +CSET has_d_ce=false +CSET has_d_sclr=false +CSET has_m_ce=false +CSET has_m_sclr=false +CSET has_p_ce=false +CSET has_p_sclr=false +CSET has_pcout=false +CSET has_sclr=false +CSET has_sel_ce=false +CSET has_sel_sclr=false +CSET instruction1=A*B +CSET instruction2=A*B+C +CSET instruction3=# +CSET instruction4=# +CSET instruction5=# +CSET instruction6=# +CSET instruction7=# +CSET instruction8=# +CSET instruction_list=# +CSET mreg_5=true +CSET opreg_1=false +CSET opreg_2=false +CSET opreg_3=true +CSET opreg_4=true +CSET opreg_5=true +CSET output_properties=Full_Precision +CSET p_binarywidth=0 +CSET p_full_width=48 +CSET p_width=48 +CSET pcin_binarywidth=0 +CSET pipeline_options=Automatic +CSET preg_6=true +CSET show_filtered=false +CSET tier_1=false +CSET tier_2=false +CSET tier_3=false +CSET tier_4=false +CSET tier_5=false +CSET tier_6=false +CSET use_dsp48=true +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2012-11-05T14:23:53Z +# END Extra information +GENERATE +# CRC: 2ca4f824 diff --git a/FPGA/VNA/ipcore_dir/DSP48.xise b/FPGA/VNA/ipcore_dir/DSP48.xise new file mode 100644 index 0000000..4da40c6 --- /dev/null +++ b/FPGA/VNA/ipcore_dir/DSP48.xise @@ -0,0 +1,73 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/FPGA/VNA/ipcore_dir/DSP_SLICE.xco b/FPGA/VNA/ipcore_dir/DSP_SLICE.xco new file mode 100644 index 0000000..b39e78b --- /dev/null +++ b/FPGA/VNA/ipcore_dir/DSP_SLICE.xco @@ -0,0 +1,136 @@ +############################################################## +# +# Xilinx Core Generator version 14.6 +# Date: Fri Nov 6 13:57:46 2020 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# Generated from component: xilinx.com:ip:xbip_dsp48_macro:2.1 +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = VHDL +SET device = xc6slx9 +SET devicefamily = spartan6 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = tqg144 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -2 +SET verilogsim = false +SET vhdlsim = true +# END Project Options +# BEGIN Select +SELECT DSP48_Macro xilinx.com:ip:xbip_dsp48_macro:2.1 +# END Select +# BEGIN Parameters +CSET a_binarywidth=0 +CSET a_width=18 +CSET areg_1=false +CSET areg_2=false +CSET areg_3=true +CSET areg_4=true +CSET b_binarywidth=0 +CSET b_width=18 +CSET breg_1=false +CSET breg_2=false +CSET breg_3=true +CSET breg_4=true +CSET c_binarywidth=0 +CSET c_width=48 +CSET cinreg_1=false +CSET cinreg_2=false +CSET cinreg_3=false +CSET cinreg_4=false +CSET cinreg_5=false +CSET component_name=DSP_SLICE +CSET concat_binarywidth=0 +CSET concat_width=48 +CSET concatreg_3=false +CSET concatreg_4=false +CSET concatreg_5=false +CSET creg_1=false +CSET creg_2=false +CSET creg_3=true +CSET creg_4=true +CSET creg_5=true +CSET d_binarywidth=0 +CSET d_width=18 +CSET dreg_1=false +CSET dreg_2=false +CSET dreg_3=false +CSET gui_behaviour=Coregen +CSET has_a_ce=false +CSET has_a_sclr=false +CSET has_acout=false +CSET has_b_ce=false +CSET has_b_sclr=false +CSET has_bcout=false +CSET has_c_ce=false +CSET has_c_sclr=false +CSET has_carrycascout=false +CSET has_carryout=false +CSET has_ce=true +CSET has_concat_ce=false +CSET has_concat_sclr=false +CSET has_d_ce=false +CSET has_d_sclr=false +CSET has_m_ce=false +CSET has_m_sclr=false +CSET has_p_ce=false +CSET has_p_sclr=false +CSET has_pcout=false +CSET has_sclr=false +CSET has_sel_ce=false +CSET has_sel_sclr=false +CSET instruction1=A*B +CSET instruction2=A*B+C +CSET instruction3=# +CSET instruction4=# +CSET instruction5=# +CSET instruction6=# +CSET instruction7=# +CSET instruction8=# +CSET instruction_list=# +CSET mreg_5=true +CSET opreg_1=false +CSET opreg_2=false +CSET opreg_3=true +CSET opreg_4=true +CSET opreg_5=true +CSET output_properties=Full_Precision +CSET p_binarywidth=0 +CSET p_full_width=48 +CSET p_width=48 +CSET pcin_binarywidth=0 +CSET pipeline_options=Automatic +CSET preg_6=true +CSET show_filtered=false +CSET tier_1=false +CSET tier_2=false +CSET tier_3=false +CSET tier_4=false +CSET tier_5=false +CSET tier_6=false +CSET use_dsp48=true +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2012-11-05T14:23:53Z +# END Extra information +GENERATE +# CRC: 57648294 diff --git a/FPGA/VNA/ipcore_dir/DSP_SLICE.xise b/FPGA/VNA/ipcore_dir/DSP_SLICE.xise new file mode 100644 index 0000000..b4222ea --- /dev/null +++ b/FPGA/VNA/ipcore_dir/DSP_SLICE.xise @@ -0,0 +1,73 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/FPGA/VNA/top.bin b/FPGA/VNA/top.bin index a47191b5825001ea96d0f60c1b3ffcb3bfb55a8e..6ad41eca06b541954910e41fe1ddad37657a8fe6 100644 GIT binary patch literal 341712 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 fd~8 REF_SCLK ); + + Windower: Windowing PORT MAP( + CLK => clk160, + RESET => sampling_start, + WINDOW_TYPE => sampling_window, + PORT1_RAW => adc_port1_data, + PORT2_RAW => adc_port2_data, + REF_RAW => adc_ref_data, + ADC_READY => adc_port1_ready, + PORT1_WINDOWED => port1_windowed, + PORT2_WINDOWED => port2_windowed, + REF_WINDOWED => ref_windowed, + WINDOWING_DONE => windowing_ready, + NSAMPLES => sampling_samples + ); + Sampler: Sampling GENERIC MAP(CLK_CYCLES_PRE_DONE => 0) PORT MAP( @@ -586,16 +618,15 @@ begin RESET => sweep_reset, ADC_PRESCALER => sampling_prescaler, PHASEINC => sampling_phaseinc, - PORT1 => adc_port1_data, - PORT2 => adc_port2_data, - REF => adc_ref_data, + PORT1 => port1_windowed, + PORT2 => port2_windowed, + REF => ref_windowed, ADC_START => adc_trigger_sample, - NEW_SAMPLE => adc_port1_ready, + NEW_SAMPLE => windowing_ready, DONE => sampling_done, PRE_DONE => open, START => sampling_start, SAMPLES => sampling_samples, - WINDOW_TYPE => sampling_window, PORT1_I => sampling_result(287 downto 240), PORT1_Q => sampling_result(239 downto 192), PORT2_I => sampling_result(191 downto 144), @@ -614,7 +645,7 @@ begin CONFIG_ADDRESS => sweep_config_address, CONFIG_DATA => sweep_config_data, USER_NSAMPLES => sampling_user_samples, - NSAMPLES => sampling_user_samples, + NSAMPLES => sampling_samples, SAMPLING_BUSY => sampling_busy, SAMPLING_DONE => sampling_done, START_SAMPLING => sampling_start, @@ -691,7 +722,7 @@ begin SWEEP_ADDRESS => sweep_config_write_address, SWEEP_WRITE => sweep_config_write, SWEEP_POINTS => sweep_points, - NSAMPLES => sampling_samples, + NSAMPLES => sampling_user_samples, PORT1_EN => port1mix_en, PORT2_EN => port2mix_en, REF_EN => refmix_en, @@ -711,10 +742,8 @@ begin SWEEP_RESUME => sweep_resume, EXCITE_PORT1 => sweep_excite_port1, EXCITE_PORT2 => sweep_excite_port2, - DFT_NSAMPLES => dft_nsamples, DFT_BIN1_PHASEINC => dft_bin1_phaseinc, DFT_DIFFBIN_PHASEINC => dft_diffbin_phaseinc, - DFT_WINDOW_INC => dft_window_inc, DFT_RESULT_READY => dft_ready, DFT_OUTPUT => dft_output, DFT_NEXT_OUTPUT => dft_next_output, @@ -728,14 +757,12 @@ begin PORT MAP( CLK => clk160, RESET => dft_reset, - PORT1 => adc_port1_data, - PORT2 => adc_port2_data, - NEW_SAMPLE => adc_port1_ready, - NSAMPLES => dft_nsamples, + PORT1 => port1_windowed, + PORT2 => port2_windowed, + NEW_SAMPLE => windowing_ready, + NSAMPLES => sampling_samples, BIN1_PHASEINC => dft_bin1_phaseinc, DIFFBIN_PHASEINC => dft_diffbin_phaseinc, - WINDOW_INC => dft_window_inc, - WINDOW_TYPE => sampling_window, RESULT_READY => dft_ready, OUTPUT => dft_output, NEXT_OUTPUT => dft_next_output diff --git a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp index b686adb..7997810 100644 --- a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp +++ b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp @@ -12,6 +12,7 @@ static FPGA::HaltedCallback halted_cb; static uint16_t SysCtrlReg = 0x0000; static uint16_t ISRMaskReg = 0x0000; +static uint32_t ADC_samplerate; using namespace FPGAHAL; @@ -27,6 +28,9 @@ void FPGA::WriteRegister(FPGA::Reg reg, uint16_t value) { Low(CS); HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) cmd, 4, 100); High(CS); + if(reg == Reg::ADCPrescaler) { + ADC_samplerate = Clockrate / value; + } } bool FPGA::Configure(Flash *f, uint32_t start_address, uint32_t bitstream_size) { @@ -371,6 +375,23 @@ void FPGA::ResumeHaltedSweep() { High(CS); } +void FPGA::SetupDFT(uint32_t f_firstBin, uint32_t f_binSpacing) { + // see FPGA protocol for formulas + uint16_t firstBin = f_firstBin * (1ULL << 16) / ADC_samplerate; + uint16_t binSpacing = f_binSpacing * (1ULL << 24) / ADC_samplerate; + WriteRegister(Reg::DFTFirstBin, firstBin); + WriteRegister(Reg::DFTFreqSpacing, binSpacing); +} + +void FPGA::StopDFT() { + DisableInterrupt(Interrupt::DFTReady); +} + +void FPGA::StartDFT() { + StopDFT(); + EnableInterrupt(Interrupt::DFTReady); +} + FPGA::DFTResult FPGA::ReadDFTResult() { uint8_t cmd[2] = {0xA0, 0x00}; uint8_t recv[24]; diff --git a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp index 07cafce..cae5e3e 100644 --- a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp +++ b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.hpp @@ -7,6 +7,7 @@ namespace FPGA { static constexpr uint16_t MaxPoints = 4501; static constexpr uint16_t DFTbins = 64; +static constexpr uint32_t Clockrate = 102400000UL; enum class Reg { InterruptMask = 0x00, @@ -23,8 +24,6 @@ enum class Reg { MAX2871Def3MSB = 0x0D, MAX2871Def4LSB = 0x0E, MAX2871Def4MSB = 0x0F, - DFTSamples = 0x10, - DFTWindowInc = 0x11, DFTFirstBin = 0x12, DFTFreqSpacing = 0x13, }; @@ -124,6 +123,9 @@ void WriteSweepConfig(uint16_t pointnum, bool lowband, uint32_t *SourceRegs, uin uint8_t attenuation, uint64_t frequency, SettlingTime settling, Samples samples, bool halt = false, LowpassFilter filter = LowpassFilter::Auto); using ReadCallback = void(*)(const SamplingResult &result); bool InitiateSampleRead(ReadCallback cb); +void SetupDFT(uint32_t f_firstBin, uint32_t f_binSpacing); +void StopDFT(); +void StartDFT(); DFTResult ReadDFTResult(); ADCLimits GetADCLimits(); void ResetADCLimits(); diff --git a/Software/VNA_embedded/Application/Drivers/Si5351C.cpp b/Software/VNA_embedded/Application/Drivers/Si5351C.cpp index 34576cd..3997afb 100644 --- a/Software/VNA_embedded/Application/Drivers/Si5351C.cpp +++ b/Software/VNA_embedded/Application/Drivers/Si5351C.cpp @@ -315,29 +315,31 @@ void Si5351C::FindOptimalDivider(uint32_t f_pll, uint32_t f, uint32_t &P1, // see https://www.silabs.com/documents/public/application-notes/AN619.pdf (page 3/6) uint32_t a = f_pll / f; int32_t f_rem = f_pll - f * a; - uint32_t best_b, best_c; - uint32_t best_deviation = UINT32_MAX; - for (uint32_t c = (1UL << 20) - 1; c >= (1UL << 19); c--) { - uint32_t guess_b = (uint64_t) f_rem * c / f; - for (uint32_t b = guess_b; b <= guess_b + 1; b++) { - int32_t f_div = (uint64_t) f * b / c; - uint32_t deviation = abs(f_rem - f_div); - if (deviation < best_deviation) { - best_b = b; - best_c = c; - best_deviation = deviation; - if (deviation == 0) { - break; - } - } - } - if (best_deviation == 0) { - break; - } - } - LOG_DEBUG( - "Optimal divider for %luHz/%luHz is: a=%lu, b=%lu, c=%lu (%luHz deviation)", - f_pll, f, a, best_b, best_c, best_deviation); + // always using the highest modulus divider results in less than 1Hz deviation for all frequencies, that is good enough + uint32_t best_c = (1UL << 20) - 1; + uint32_t best_b = (uint64_t) f_rem * best_c / f; +// uint32_t best_deviation = UINT32_MAX; +// for (uint32_t c = (1UL << 20) - 1; c >= (1UL << 19); c--) { +// uint32_t guess_b = (uint64_t) f_rem * c / f; +// for (uint32_t b = guess_b; b <= guess_b + 1; b++) { +// int32_t f_div = (uint64_t) f * b / c; +// uint32_t deviation = abs(f_rem - f_div); +// if (deviation < best_deviation) { +// best_b = b; +// best_c = c; +// best_deviation = deviation; +// if (deviation <= 3) { +// break; +// } +// } +// } +// if (best_deviation <= 3) { +// break; +// } +// } +// LOG_DEBUG( +// "Optimal divider for %luHz/%luHz is: a=%lu, b=%lu, c=%lu (%luHz deviation)", +// f_pll, f, a, best_b, best_c, best_deviation); // convert to Si5351C parameters uint32_t floor = 128 * best_b / best_c; P1 = 128 * a + floor - 512; diff --git a/Software/VNA_embedded/Application/Hardware.cpp b/Software/VNA_embedded/Application/Hardware.cpp index d7e1ebf..b788a8b 100644 --- a/Software/VNA_embedded/Application/Hardware.cpp +++ b/Software/VNA_embedded/Application/Hardware.cpp @@ -131,10 +131,6 @@ bool HW::Init() { // Set phase increment according to FPGA::WriteRegister(FPGA::Reg::PhaseIncrement, HW::DFTphaseInc); - // Enable new data and sweep halt interrupt - FPGA::EnableInterrupt(FPGA::Interrupt::NewData); - FPGA::EnableInterrupt(FPGA::Interrupt::SweepHalted); - Exti::SetCallback(FPGA_INTR_GPIO_Port, FPGA_INTR_Pin, Exti::EdgeType::Rising, Exti::Pull::Down, FPGA_Interrupt); // Initialize PLLs and build VCO maps diff --git a/Software/VNA_embedded/Application/Hardware.hpp b/Software/VNA_embedded/Application/Hardware.hpp index 6ace39a..2522051 100644 --- a/Software/VNA_embedded/Application/Hardware.hpp +++ b/Software/VNA_embedded/Application/Hardware.hpp @@ -2,6 +2,7 @@ #include #include "Protocol.hpp" +#include "FPGA/FPGA.hpp" #define USE_DEBUG_PINS @@ -31,10 +32,9 @@ static constexpr uint32_t LO1_minFreq = 25000000; static constexpr uint32_t MaxSamples = 130944; static constexpr uint32_t MinSamples = 16; static constexpr uint32_t PLLRef = 100000000; -static constexpr uint16_t MaxPoints = 4501; -static constexpr uint8_t ADCprescaler = 102400000UL / ADCSamplerate; -static_assert(ADCprescaler * ADCSamplerate == 102400000UL, "ADCSamplerate can not be reached exactly"); +static constexpr uint8_t ADCprescaler = FPGA::Clockrate / ADCSamplerate; +static_assert(ADCprescaler * ADCSamplerate == FPGA::Clockrate, "ADCSamplerate can not be reached exactly"); static constexpr uint16_t DFTphaseInc = 4096 * IF2 / ADCSamplerate; static_assert(DFTphaseInc * ADCSamplerate == 4096 * IF2, "DFT can not be computed for 2.IF"); @@ -43,7 +43,7 @@ static constexpr Protocol::DeviceLimits Limits = { .maxFreq = 6000000000, .minIFBW = ADCSamplerate / MaxSamples, .maxIFBW = ADCSamplerate / MinSamples, - .maxPoints = MaxPoints, + .maxPoints = FPGA::MaxPoints, .cdbm_min = -4000, .cdbm_max = 0, .minRBW = (uint32_t) (ADCSamplerate * 2.23f / MaxSamples), diff --git a/Software/VNA_embedded/Application/Manual.cpp b/Software/VNA_embedded/Application/Manual.cpp index 42cb1e2..41061f7 100644 --- a/Software/VNA_embedded/Application/Manual.cpp +++ b/Software/VNA_embedded/Application/Manual.cpp @@ -73,6 +73,9 @@ void Manual::Setup(Protocol::ManualControl m) { FPGA::Enable(FPGA::Periphery::ExcitePort2, m.PortSwitch == 1); FPGA::Enable(FPGA::Periphery::PortSwitch); + // Enable new data and sweep halt interrupt + FPGA::EnableInterrupt(FPGA::Interrupt::NewData); + active = true; FPGA::StartSweep(); } diff --git a/Software/VNA_embedded/Application/SpectrumAnalyzer.cpp b/Software/VNA_embedded/Application/SpectrumAnalyzer.cpp index 78e5625..9f53e94 100644 --- a/Software/VNA_embedded/Application/SpectrumAnalyzer.cpp +++ b/Software/VNA_embedded/Application/SpectrumAnalyzer.cpp @@ -11,6 +11,8 @@ #define LOG_MODULE "SA" #include "Log.h" +using namespace HWHAL; + static Protocol::SpectrumAnalyzerSettings s; static uint32_t pointCnt; static uint32_t points; @@ -21,10 +23,11 @@ static Protocol::PacketInfo p; static bool active = false; static uint32_t lastLO2; static uint32_t actualRBW; +static bool usingDFT; +static uint16_t DFTpoints; +static bool negativeDFT; // if true, a positive frequency shift at input results in a negative shift at the 2.IF. Handle DFT accordingly -static float port1Measurement, port2Measurement; - -using namespace HWHAL; +static float port1Measurement[FPGA::DFTbins], port2Measurement[FPGA::DFTbins]; static void StartNextSample() { uint64_t freq = s.f_start + (s.f_stop - s.f_start) * pointCnt / (points - 1); @@ -34,16 +37,20 @@ static void StartNextSample() { case 0: default: // reset minimum amplitudes in first signal ID step - port1Measurement = std::numeric_limits::max(); - port2Measurement = std::numeric_limits::max(); + for (uint16_t i = 0; i < DFTpoints; i++) { + port1Measurement[i] = std::numeric_limits::max(); + port2Measurement[i] = std::numeric_limits::max(); + } // Use default LO frequencies LO1freq = freq + HW::IF1; LO2freq = HW::IF1 - HW::IF2; FPGA::WriteRegister(FPGA::Reg::ADCPrescaler, 112); FPGA::WriteRegister(FPGA::Reg::PhaseIncrement, 1120); + negativeDFT = true; break; case 1: LO2freq = HW::IF1 - HW::IF2; + negativeDFT = false; // Shift first LO to other side // depending on the measurement frequency this is not possible or additive mixing has to be used if(freq >= HW::IF1 + HW::LO1_minFreq) { @@ -59,13 +66,15 @@ static void StartNextSample() { signalIDstep++; /* no break */ case 2: - // Shift both LOs to other side + // Shift second LOs to other side LO1freq = freq + HW::IF1; LO2freq = HW::IF1 + HW::IF2; + negativeDFT = false; break; case 3: + // Shift both LO to other side LO2freq = HW::IF1 + HW::IF2; - // Shift second LO to other side + negativeDFT = true; // depending on the measurement frequency this is not possible or additive mixing has to be used if(freq >= HW::IF1 + HW::LO1_minFreq) { // frequency is high enough to shift 1.LO below measurement frequency @@ -81,6 +90,7 @@ static void StartNextSample() { /* no break */ case 4: // Use default frequencies with different ADC samplerate to remove images in final IF + negativeDFT = true; LO1freq = freq + HW::IF1; LO2freq = HW::IF1 - HW::IF2; FPGA::WriteRegister(FPGA::Reg::ADCPrescaler, 120); @@ -96,6 +106,17 @@ static void StartNextSample() { Si5351.SetCLK(SiChannel::Port2LO2, LO2freq, Si5351C::PLL::B, Si5351C::DriveStrength::mA2); lastLO2 = LO2freq; } + if (usingDFT) { + uint32_t spacing = (s.f_stop - s.f_start) / (points - 1); + uint32_t start = HW::IF2; + if(negativeDFT) { + // needs to look below the start frequency, shift start + start -= spacing * (DFTpoints - 1); + } + FPGA::SetupDFT(start, spacing); + FPGA::StartDFT(); + } + // Configure the sampling in the FPGA FPGA::WriteSweepConfig(0, 0, Source.GetRegisters(), LO1.GetRegisters(), 0, 0, FPGA::SettlingTime::us20, FPGA::Samples::SPPRegister, 0, @@ -111,9 +132,6 @@ void SA::Setup(Protocol::SpectrumAnalyzerSettings settings) { s = settings; HW::SetMode(HW::Mode::SA); FPGA::SetMode(FPGA::Mode::FPGA); - FPGA::DisableInterrupt(FPGA::Interrupt::NewData); - FPGA::DisableInterrupt(FPGA::Interrupt::SweepHalted); - FPGA::EnableInterrupt(FPGA::Interrupt::DFTReady); // in almost all cases a full sweep requires more points than the FPGA can handle at a time // individually start each point and do the sweep in the uC FPGA::SetNumberOfPoints(1); @@ -148,12 +166,17 @@ void SA::Setup(Protocol::SpectrumAnalyzerSettings settings) { FPGA::Enable(FPGA::Periphery::Port1Mixer); FPGA::Enable(FPGA::Periphery::Port2Mixer); - // Configure DFT - LOG_INFO("DFT samples: %lu", sampleNum); - FPGA::WriteRegister(FPGA::Reg::DFTSamples, sampleNum - 1); - FPGA::WriteRegister(FPGA::Reg::DFTWindowInc, 65536 / sampleNum); - FPGA::WriteRegister(FPGA::Reg::DFTFirstBin, 17920); - FPGA::WriteRegister(FPGA::Reg::DFTFreqSpacing, 1147); + // automatically select DFT mode for lower RBWs + usingDFT = actualRBW <= 1000; + + if (usingDFT) { + DFTpoints = FPGA::DFTbins; // use full DFT in FPGA + FPGA::DisableInterrupt(FPGA::Interrupt::NewData); + } else { + DFTpoints = 1; // can only measure one point at a time + FPGA::StopDFT(); + FPGA::EnableInterrupt(FPGA::Interrupt::NewData); + } lastLO2 = 0; active = true; @@ -166,26 +189,39 @@ bool SA::MeasurementDone(const FPGA::SamplingResult &result) { } FPGA::AbortSweep(); - uint16_t i=0; - while(FPGA::GetStatus() & (uint16_t) FPGA::Interrupt::DFTReady) { - auto dft = FPGA::ReadDFTResult(); - dft.P1 /= sampleNum; - dft.P2 /= sampleNum; - LOG_INFO("DFT %d: %lu, %lu", i, (uint32_t) dft.P1, (uint32_t) dft.P2); - Log_Flush(); - i++; - } - FPGA::DisableInterrupt(FPGA::Interrupt::DFTReady); - FPGA::EnableInterrupt(FPGA::Interrupt::DFTReady); + for(uint16_t i=0;i(result.P1I, result.P1Q)); + port2 = abs(std::complex(result.P2I, result.P2Q)); + } + port1 /= sampleNum; + port2 /= sampleNum; - float port1 = abs(std::complex(result.P1I, result.P1Q))/sampleNum; - float port2 = abs(std::complex(result.P2I, result.P2Q))/sampleNum; - if(port1 < port1Measurement) { - port1Measurement = port1; + uint16_t index = i; + if (negativeDFT) { + // bin order is reversed + index = DFTpoints - i - 1; + } + + if(port1 < port1Measurement[index]) { + port1Measurement[index] = port1; + } + if(port2 < port2Measurement[index]) { + port2Measurement[index] = port2; + } } - if(port2 < port2Measurement) { - port2Measurement = port2; + + if (usingDFT) { + FPGA::StopDFT(); + // will be started again in StartNextSample } + // trigger work function return true; } @@ -196,74 +232,76 @@ void SA::Work() { } if(!s.SignalID || signalIDstep >= 4) { // this measurement point is done, handle result according to detector - uint16_t binIndex = pointCnt / binSize; - uint32_t pointInBin = pointCnt % binSize; - bool lastPointInBin = pointInBin >= binSize - 1; - auto det = (Detector) s.Detector; - if(det == Detector::Normal) { - det = binIndex & 0x01 ? Detector::PosPeak : Detector::NegPeak; - } - switch(det) { - case Detector::PosPeak: - if(pointInBin == 0) { - p.spectrumResult.port1 = std::numeric_limits::min(); - p.spectrumResult.port2 = std::numeric_limits::min(); + for(uint16_t i=0;i= binSize - 1; + auto det = (Detector) s.Detector; + if(det == Detector::Normal) { + det = binIndex & 0x01 ? Detector::PosPeak : Detector::NegPeak; } - if(port1Measurement > p.spectrumResult.port1) { - p.spectrumResult.port1 = port1Measurement; + switch(det) { + case Detector::PosPeak: + if(pointInBin == 0) { + p.spectrumResult.port1 = std::numeric_limits::min(); + p.spectrumResult.port2 = std::numeric_limits::min(); + } + if(port1Measurement[i] > p.spectrumResult.port1) { + p.spectrumResult.port1 = port1Measurement[i]; + } + if(port2Measurement[i] > p.spectrumResult.port2) { + p.spectrumResult.port2 = port2Measurement[i]; + } + break; + case Detector::NegPeak: + if(pointInBin == 0) { + p.spectrumResult.port1 = std::numeric_limits::max(); + p.spectrumResult.port2 = std::numeric_limits::max(); + } + if(port1Measurement[i] < p.spectrumResult.port1) { + p.spectrumResult.port1 = port1Measurement[i]; + } + if(port2Measurement[i] < p.spectrumResult.port2) { + p.spectrumResult.port2 = port2Measurement[i]; + } + break; + case Detector::Sample: + if(pointInBin <= binSize / 2) { + // still in first half of bin, simply overwrite + p.spectrumResult.port1 = port1Measurement[i]; + p.spectrumResult.port2 = port2Measurement[i]; + } + break; + case Detector::Average: + if(pointInBin == 0) { + p.spectrumResult.port1 = 0; + p.spectrumResult.port2 = 0; + } + p.spectrumResult.port1 += port1Measurement[i]; + p.spectrumResult.port2 += port2Measurement[i]; + if(lastPointInBin) { + // calculate average + p.spectrumResult.port1 /= binSize; + p.spectrumResult.port2 /= binSize; + } + break; + case Detector::Normal: + // nothing to do, normal detector handled by PosPeak or NegPeak in each sample + break; } - if(port2Measurement > p.spectrumResult.port2) { - p.spectrumResult.port2 = port2Measurement; - } - break; - case Detector::NegPeak: - if(pointInBin == 0) { - p.spectrumResult.port1 = std::numeric_limits::max(); - p.spectrumResult.port2 = std::numeric_limits::max(); - } - if(port1Measurement < p.spectrumResult.port1) { - p.spectrumResult.port1 = port1Measurement; - } - if(port2Measurement < p.spectrumResult.port2) { - p.spectrumResult.port2 = port2Measurement; - } - break; - case Detector::Sample: - if(pointInBin <= binSize / 2) { - // still in first half of bin, simply overwrite - p.spectrumResult.port1 = port1Measurement; - p.spectrumResult.port2 = port2Measurement; - } - break; - case Detector::Average: - if(pointInBin == 0) { - p.spectrumResult.port1 = 0; - p.spectrumResult.port2 = 0; - } - p.spectrumResult.port1 += port1Measurement; - p.spectrumResult.port2 += port2Measurement; if(lastPointInBin) { - // calculate average - p.spectrumResult.port1 /= binSize; - p.spectrumResult.port2 /= binSize; + // Send result to application + p.type = Protocol::PacketType::SpectrumAnalyzerResult; + // measurements are already up to date, fill remaining fields + p.spectrumResult.pointNum = binIndex; + p.spectrumResult.frequency = s.f_start + (s.f_stop - s.f_start) * binIndex / (s.pointNum - 1); + Communication::Send(p); } - break; - case Detector::Normal: - // nothing to do, normal detector handled by PosPeak or NegPeak in each sample - break; - } - if(lastPointInBin) { - // Send result to application - p.type = Protocol::PacketType::SpectrumAnalyzerResult; - // measurements are already up to date, fill remaining fields - p.spectrumResult.pointNum = binIndex; - p.spectrumResult.frequency = s.f_start + (s.f_stop - s.f_start) * binIndex / (s.pointNum - 1); - Communication::Send(p); } // setup for next step signalIDstep = 0; - if(pointCnt < points - 1) { - pointCnt++; + if(pointCnt < points - DFTpoints) { + pointCnt += DFTpoints; } else { pointCnt = 0; } diff --git a/Software/VNA_embedded/Application/VNA.cpp b/Software/VNA_embedded/Application/VNA.cpp index 8d74732..450c10d 100644 --- a/Software/VNA_embedded/Application/VNA.cpp +++ b/Software/VNA_embedded/Application/VNA.cpp @@ -187,6 +187,9 @@ bool VNA::Setup(Protocol::SweepSettings s, SweepCallback cb) { IFTableIndexCnt = 0; adcShifted = false; active = true; + // Enable new data and sweep halt interrupt + FPGA::EnableInterrupt(FPGA::Interrupt::NewData); + FPGA::EnableInterrupt(FPGA::Interrupt::SweepHalted); // Start the sweep FPGA::StartSweep(); return true;