From a4faeb28b050c057b26d79e2534d3de37b7d6caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Fri, 3 Jan 2025 14:36:10 +0100 Subject: [PATCH] Working dwell time feature - Bugfixes: - improve SPI timing in FPGA - fix markers and reduce CPU load when using markers with fast traces - New features: - dwell time configurable in acquisition toolbar - PLL settling delay in device configuration - device configuration persistent across power cycles --- FPGA/VNA/SPIConfig.vhd | 200 ++++++++++-------- FPGA/VNA/Test_SPI.vhd | 15 +- FPGA/VNA/Test_SPICommands.vhd | 19 ++ FPGA/VNA/VNA.gise | 68 ++---- FPGA/VNA/spi_slave.vhd | 73 +++++-- FPGA/VNA/top.bin | Bin 341436 -> 341712 bytes FPGA/VNA/top.ucf | 18 +- FPGA/VNA/top.vhd | 4 +- .../LibreVNA/deviceconfigurationdialogv1.cpp | 2 + .../LibreVNA/deviceconfigurationdialogv1.ui | 55 +++-- .../Device/LibreVNA/librevnadriver.cpp | 1 - .../Device/LibreVNA/librevnausbdriver.cpp | 12 +- .../Device/LibreVNA/librevnausbdriver.h | 6 + .../LibreVNA-GUI/Device/devicedriver.cpp | 1 - .../LibreVNA-GUI/Device/devicedriver.h | 4 +- .../LibreVNA-GUI/Traces/Marker/marker.cpp | 6 +- .../LibreVNA-GUI/Traces/Marker/marker.h | 2 +- .../LibreVNA-GUI/Traces/Math/dft.cpp | 4 +- .../LibreVNA-GUI/Traces/Math/expression.cpp | 2 +- .../LibreVNA-GUI/Traces/Math/tdr.cpp | 6 +- .../LibreVNA-GUI/Traces/Math/tracemath.cpp | 26 +++ .../LibreVNA-GUI/Traces/Math/tracemath.h | 3 + .../LibreVNA-GUI/Traces/trace.cpp | 24 ++- .../LibreVNA-GUI/Traces/trace.h | 4 +- .../PC_Application/LibreVNA-GUI/VNA/vna.cpp | 11 +- .../LibreVNA-GUI/preferences.cpp | 5 + .../PC_Application/LibreVNA-GUI/preferences.h | 2 + .../LibreVNA-GUI/preferencesdialog.ui | 86 ++++---- Software/VNA_embedded/Application/App.cpp | 2 +- .../Application/Communication/Protocol.hpp | 2 +- .../Application/Drivers/FPGA/FPGA.cpp | 8 +- .../VNA_embedded/Application/Drivers/stm.cpp | 5 + .../VNA_embedded/Application/Hardware.cpp | 100 ++++++--- .../VNA_embedded/Application/Hardware.hpp | 16 +- Software/VNA_embedded/Application/VNA.cpp | 13 +- 35 files changed, 516 insertions(+), 289 deletions(-) diff --git a/FPGA/VNA/SPIConfig.vhd b/FPGA/VNA/SPIConfig.vhd index 66882df..4703728 100644 --- a/FPGA/VNA/SPIConfig.vhd +++ b/FPGA/VNA/SPIConfig.vhd @@ -91,7 +91,8 @@ end SPICommands; architecture Behavioral of SPICommands is COMPONENT spi_slave - Generic(W : integer); + Generic(W : integer; + PREWIDTH : integer); PORT( SPI_CLK : in STD_LOGIC; MISO : out STD_LOGIC; @@ -100,7 +101,9 @@ architecture Behavioral of SPICommands is BUF_OUT : out STD_LOGIC_VECTOR (W-1 downto 0) := (others => '0'); BUF_IN : in STD_LOGIC_VECTOR (W-1 downto 0); CLK : in STD_LOGIC; - COMPLETE : out STD_LOGIC + COMPLETE : out STD_LOGIC; + PRE_COMPLETE : out STD_LOGIC; + PRE_BUF_OUT : out STD_LOGIC_VECTOR (PREWIDTH-1 downto 0) ); END COMPONENT; @@ -108,6 +111,8 @@ architecture Behavioral of SPICommands is signal spi_buf_out : std_logic_vector(15 downto 0); signal spi_buf_in : std_logic_vector(15 downto 0); signal spi_complete : std_logic; + signal spi_pre_complete : std_logic; + signal spi_pre_buf_out : std_logic_vector(2 downto 0); signal word_cnt : integer range 0 to 19; type SPI_states is (FirstWord, WriteSweepConfig, ReadResult, WriteRegister); signal state : SPI_states; @@ -128,7 +133,8 @@ architecture Behavioral of SPICommands is signal sweepconfig_buffer : std_logic_vector(79 downto 0); begin SPI: spi_slave - GENERIC MAP(w => 16) + GENERIC MAP(W => 16, + PREWIDTH => 3) PORT MAP( SPI_CLK => SCLK, MISO => MISO, @@ -137,7 +143,9 @@ begin BUF_OUT => spi_buf_out, BUF_IN => spi_buf_in, CLK => CLK, - COMPLETE =>spi_complete + COMPLETE => spi_complete, + PRE_COMPLETE => spi_pre_complete, + PRE_BUF_OUT => spi_pre_buf_out ); SWEEP_WRITE(0) <= sweep_config_write; @@ -205,91 +213,113 @@ begin word_cnt <= 0; spi_buf_in <= interrupt_status; state <= FirstWord; - elsif spi_complete = '1' then - word_cnt <= word_cnt + 1; + else + -- handle read operations when the first PREWIDTH bits are complete + if spi_pre_complete = '1' 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 <= FirstWord; - SWEEP_RESUME <= '1'; - when "010" => state <= FirstWord; - spi_buf_in <= "1111000010100101"; - when "011" => state <= FirstWord; - RESET_MINMAX <= '1'; - when "100" => state <= WriteRegister; - selected_register <= to_integer(unsigned(spi_buf_out(4 downto 0))); - when "101" => state <= ReadResult;-- can use same state as read result, but the latched data will contain the DFT values - latched_result(175 downto 0) <= DFT_OUTPUT(191 downto 16); - spi_buf_in <= DFT_OUTPUT(15 downto 0); - dft_next <= '1'; - when "110" => state <= ReadResult; - latched_result <= SAMPLING_RESULT(303 downto 16); - spi_buf_in <= SAMPLING_RESULT(15 downto 0); - unread_sampling_data <= '0'; - 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 <= FirstWord; + -- initial word determines the action + case spi_pre_buf_out is + when "010" => state <= FirstWord; + spi_buf_in <= "1111000010100101"; + when "101" => state <= ReadResult;-- can use same state as read result, but the latched data will contain the DFT values + latched_result(175 downto 0) <= DFT_OUTPUT(191 downto 16); + spi_buf_in <= DFT_OUTPUT(15 downto 0); + dft_next <= '1'; + when "110" => state <= ReadResult; + latched_result <= SAMPLING_RESULT(303 downto 16); + spi_buf_in <= SAMPLING_RESULT(15 downto 0); + unread_sampling_data <= '0'; + 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); + --ignore other options + when others => end case; - 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); - SYNC_MASTER <= spi_buf_out(1); - when 4 => ADC_PRESCALER <= spi_buf_out(7 downto 0); - when 5 => ADC_PHASEINC <= spi_buf_out(11 downto 0); - when 6 => STAGES <= spi_buf_out(15 downto 13); - SYNC_ENABLED <= spi_buf_out(12); - PORT1_STAGE <= spi_buf_out(5 downto 3); - PORT2_STAGE <= spi_buf_out(2 downto 0); - when 7 => SPI_OVERWRITE_ENABLED <= spi_buf_out(15); - SPI_OVERWRITE_DATA <= spi_buf_out(14 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 20 => SETTLING_TIME(15 downto 0) <= spi_buf_out; - when 21 => SETTLING_TIME(19 downto 16) <= spi_buf_out(3 downto 0); - 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; - 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); + 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); + when others => end case; + end if; + -- handle write operations when the whole word is complete + if spi_complete = '1' then + word_cnt <= word_cnt + 1; + 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 <= FirstWord; + SWEEP_RESUME <= '1'; + when "011" => state <= FirstWord; + RESET_MINMAX <= '1'; + when "100" => state <= WriteRegister; + selected_register <= to_integer(unsigned(spi_buf_out(4 downto 0))); + -- ignore read options (already handled in other state machine) + when "010" => + when "101" => + when "110" => + when "111" => + when others => state <= FirstWord; + end case; + 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); + SYNC_MASTER <= spi_buf_out(1); + when 4 => ADC_PRESCALER <= spi_buf_out(7 downto 0); + when 5 => ADC_PHASEINC <= spi_buf_out(11 downto 0); + when 6 => STAGES <= spi_buf_out(15 downto 13); + SYNC_ENABLED <= spi_buf_out(12); + PORT1_STAGE <= spi_buf_out(5 downto 3); + PORT2_STAGE <= spi_buf_out(2 downto 0); + when 7 => SPI_OVERWRITE_ENABLED <= spi_buf_out(15); + SPI_OVERWRITE_DATA <= spi_buf_out(14 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 20 => SETTLING_TIME(15 downto 0) <= spi_buf_out; + when 21 => SETTLING_TIME(19 downto 16) <= spi_buf_out(3 downto 0); + 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; + -- read already handled in pre_complete, ignore + when ReadResult => + end case; + end if; end if; end if; end if; diff --git a/FPGA/VNA/Test_SPI.vhd b/FPGA/VNA/Test_SPI.vhd index 17a1a13..953a47f 100644 --- a/FPGA/VNA/Test_SPI.vhd +++ b/FPGA/VNA/Test_SPI.vhd @@ -40,7 +40,8 @@ ARCHITECTURE behavior OF Test_SPI IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT spi_slave - GENERIC(W : integer); + GENERIC(W : integer; + PREWIDTH : integer); PORT( SPI_CLK : IN std_logic; MISO : OUT std_logic; @@ -49,7 +50,9 @@ ARCHITECTURE behavior OF Test_SPI IS BUF_OUT : OUT std_logic_vector(W-1 downto 0); BUF_IN : IN std_logic_vector(W-1 downto 0); CLK : IN std_logic; - COMPLETE : OUT std_logic + COMPLETE : OUT std_logic; + PRE_COMPLETE : out STD_LOGIC; + PRE_BUF_OUT : out STD_LOGIC_VECTOR (PREWIDTH-1 downto 0) ); END COMPONENT; @@ -65,6 +68,8 @@ ARCHITECTURE behavior OF Test_SPI IS signal MISO : std_logic; signal BUF_OUT : std_logic_vector(15 downto 0); signal COMPLETE : std_logic; + signal PRE_COMPLETE : std_logic; + signal PRE_BUF_OUT : std_logic_vector(2 downto 0); -- Clock period definitions constant CLK_period : time := 9.765625 ns; @@ -76,7 +81,7 @@ BEGIN -- Instantiate the Unit Under Test (UUT) uut: spi_slave - GENERIC MAP(W => 16) + GENERIC MAP(W => 16, PREWIDTH => 3) PORT MAP ( SPI_CLK => SPI_CLK, MISO => MISO, @@ -85,7 +90,9 @@ BEGIN BUF_OUT => BUF_OUT, BUF_IN => BUF_IN, CLK => CLK, - COMPLETE => COMPLETE + COMPLETE => COMPLETE, + PRE_COMPLETE => PRE_COMPLETE, + PRE_BUF_OUT => PRE_BUF_OUT ); -- Clock process definitions diff --git a/FPGA/VNA/Test_SPICommands.vhd b/FPGA/VNA/Test_SPICommands.vhd index 07e8646..eef0cf4 100644 --- a/FPGA/VNA/Test_SPICommands.vhd +++ b/FPGA/VNA/Test_SPICommands.vhd @@ -293,11 +293,30 @@ BEGIN wait for 100 ns; RESET <= '0'; wait for CLK_period*10; + -- read static test register NSS <= '0'; SPI("0100000000000000"); SPI("0000000000000000"); NSS <= '1'; + wait for CLK_period*50; + -- write register 3 = 0xFFFF (enable all periphery) + NSS <= '0'; + SPI("1000000000000011"); + SPI("1111111111111111"); + NSS <= '1'; + + wait for CLK_period*50; + -- set sampling result and read first 4 words + SAMPLING_RESULT(63 downto 0) <= "1111000011110000101010101010101001010101010101010000111100001111"; + NSS <= '0'; + SPI("1100000000000000"); + SPI("0000000000000000"); + SPI("0000000000000000"); + SPI("0000000000000000"); + SPI("0000000000000000"); + NSS <= '1'; + wait for CLK_period*50; -- insert stimulus here -- write number of points diff --git a/FPGA/VNA/VNA.gise b/FPGA/VNA/VNA.gise index 33b0c07..4fb8862 100644 --- a/FPGA/VNA/VNA.gise +++ b/FPGA/VNA/VNA.gise @@ -137,13 +137,9 @@ - + - - - - @@ -167,15 +163,15 @@ - + - + - + @@ -188,14 +184,9 @@ - + - - - - - @@ -224,13 +215,10 @@ - + - - - @@ -239,10 +227,9 @@ - + - @@ -257,7 +244,7 @@ - + @@ -286,13 +273,11 @@ - + - - @@ -306,33 +291,23 @@ - + - - - + - - - - + - - - - - @@ -343,12 +318,10 @@ - + + - - - @@ -360,10 +333,9 @@ - + - @@ -378,7 +350,6 @@ - @@ -389,7 +360,6 @@ - @@ -401,7 +371,6 @@ - @@ -413,17 +382,14 @@ - - + + - - - diff --git a/FPGA/VNA/spi_slave.vhd b/FPGA/VNA/spi_slave.vhd index 7d293e1..c4654e4 100644 --- a/FPGA/VNA/spi_slave.vhd +++ b/FPGA/VNA/spi_slave.vhd @@ -31,7 +31,8 @@ use IEEE.numeric_std.all; --use UNISIM.VComponents.all; entity spi_slave is - generic ( W : integer); + generic ( W : integer; + PREWIDTH : integer); Port ( SPI_CLK : in STD_LOGIC; MISO : out STD_LOGIC; MOSI : in STD_LOGIC; @@ -39,9 +40,12 @@ entity spi_slave is BUF_OUT : out STD_LOGIC_VECTOR (W-1 downto 0) := (others => '0'); BUF_IN : in STD_LOGIC_VECTOR (W-1 downto 0); CLK : in STD_LOGIC; - COMPLETE : out STD_LOGIC --- RISING_TOGGLE : inout STD_LOGIC; --- FALLING_TOGGLE : inout STD_LOGIC + COMPLETE : out STD_LOGIC; + -- processing the complete word after it is complete leaves very little time + -- for read operations. Indicate when the first PREWIDTH bits are ready which + -- allows more time to prepare the response to the next word + PRE_COMPLETE : out STD_LOGIC; + PRE_BUF_OUT : out STD_LOGIC_VECTOR (PREWIDTH-1 downto 0) := (others => '0') ); end spi_slave; @@ -52,6 +56,8 @@ architecture Behavioral of spi_slave is signal data_valid : STD_LOGIC_VECTOR(2 downto 0); signal data_synced : STD_LOGIC_VECTOR(2 downto 0); signal data : STD_LOGIC_VECTOR(W-1 downto 0); + signal pre_data : STD_LOGIC_VECTOR(PREWIDTH-1 downto 0); + signal pre_data_valid : STD_LOGIC_VECTOR(3 downto 0); signal bit_cnt : integer range 0 to W-1; begin @@ -59,9 +65,11 @@ begin process(CLK) begin if rising_edge(CLK) then - data_valid(2 downto 1) <= data_valid(1 downto 0); COMPLETE <= '0'; - if data_valid(1) = '1' then + PRE_COMPLETE <= '0'; + data_valid(2 downto 1) <= data_valid(1 downto 0); + pre_data_valid(3 downto 1) <= pre_data_valid(2 downto 0); + if data_valid(2) = '1' then if data_synced(0) = '0' then BUF_OUT <= data; COMPLETE <= '1'; @@ -70,19 +78,33 @@ begin else data_synced(0) <= '0'; end if; + if pre_data_valid(3 downto 2) = "01" then + -- pre_data has just become valid + PRE_BUF_OUT <= pre_data; + PRE_COMPLETE <= '1'; + end if; end if; end process; - --MISO <= BUF_IN(W - 1 - bit_cnt);-- when bit_cnt = 0 else miso_buffer(W-2); MISO <= BUF_IN(15) when bit_cnt = 0 else miso_buffer(W-2); - slave_in: process(SPI_CLK) + slave_in: process(SPI_CLK, CS) begin - if rising_edge(SPI_CLK) then --- FALLING_TOGGLE <= not FALLING_TOGGLE; + if CS = '1' then + bit_cnt <= 0; + data_valid(0) <= '0'; + pre_data_valid(0) <= '0'; + elsif rising_edge(SPI_CLK) then + -- data input process: sample on the rising edge data_synced(2 downto 1) <= data_synced(1 downto 0); + if bit_cnt = PREWIDTH-1 then + -- first couple of bits are ready + pre_data <= mosi_buffer(PREWIDTH-2 downto 0) & MOSI; + pre_data_valid(0) <= '1'; + end if; if bit_cnt = W-1 then -- this was the last bit + pre_data_valid(0) <= '0'; data_valid(0) <= '1'; data <= mosi_buffer(W-2 downto 0) & MOSI; else @@ -91,14 +113,9 @@ begin end if; mosi_buffer <= mosi_buffer(W-3 downto 0) & MOSI; end if; - end if; - end process; - - slave_out: process(SPI_CLK, CS, BUF_IN, bit_cnt) - begin - if CS = '1' then - bit_cnt <= 0; - elsif falling_edge(SPI_CLK) then + + -- data output process: data should be launched on the falling edge + -- but the delay is too large. Launch on the rising edge instead if bit_cnt < W-1 then bit_cnt <= bit_cnt + 1; if bit_cnt = 0 then @@ -108,9 +125,27 @@ begin end if; else bit_cnt <= 0; - --miso_buffer <= BUF_IN; end if; end if; end process; + +-- slave_out: process(SPI_CLK, CS, BUF_IN, bit_cnt) +-- begin +-- if CS = '1' then +-- bit_cnt <= 0; +-- elsif falling_edge(SPI_CLK) then +-- if bit_cnt < W-1 then +-- bit_cnt <= bit_cnt + 1; +-- if bit_cnt = 0 then +-- miso_buffer <= BUF_IN; +-- else +-- miso_buffer <= miso_buffer(W-2 downto 0) & '0'; +-- end if; +-- else +-- bit_cnt <= 0; +-- --miso_buffer <= BUF_IN; +-- end if; +-- end if; +-- end process; end Behavioral; \ No newline at end of file diff --git a/FPGA/VNA/top.bin b/FPGA/VNA/top.bin index d43e0432136b158c1abc63022fb90979807a2299..38369cdc019243c1bbb820c6ed70d00ab99ff85b 100644 GIT binary patch literal 341712 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Ū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 Ae*gdg literal 341436 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ͺ+JT$7Y`Xy*+@ zn=Nc!H_0F`(_~72;$gLDr->a5?7Tjdd|NbWLdgjwbtfS`Opff>&gZl~5@xnwA^M@< zLr>4%EerQUPuHCvlVJx3xQZ@|xlh^qeah&+<6c$+fA@d%7n75}`K7Dq#$3&DaR#E? z{#W6SQt*9WmkVIPMri;3BUjO{me32k$hQ#enV;hEGCVD+WVcLDG$HzhQ0PPoPlc5BcyUAL1a^qV4td&t|Y7nbyabH0z5**OBE zif4XU1wzc8l1bMd=C(@}_8WwqcBGJ9m_;HZKq?pZ;73&NvUFQAyRdy+LfBMt%o>dv zfhh|W-q&hYYePxD2EM4zl=*(5=S6@_Zpeq{6u}S=6iwH50yAM6p!M@1hm68_+Hw}F zrRv$gVPIw|j4j#M`82dr*yU1@fP9#jP*bw<#xpTYZ8+(unPKJ<*P!f754;GypgwLK z60uQinN=-E-|{LSw$8Z5O^47dk0C^wbgD`iOv!JK4PeS9t0f|ABoQJ7I})jNna@(5 zr8XH^@tGr@rkakEhxh^2%UNJnp{)?Od6vOx7M5uyPew8yw1GEqhZq$mpXRkU<;<(J zwV%478No2~FqMf{YFDaZ5+qiRr_uzCiK}k-T>v8`oTY7OTk#a>c$j4QIHM6dC=wP8 zSo*C7qr8-ziC}U_Qq641R(DV44A1MBAXPlcEyhbkP(=er&~^+FyK*zi*5;hLLqIWT za+HXhF#6y%hm1nZ`wK}ZchO*eOQYOpoO>_(~eX#zt>whFUzjdK<- z>hcj|LOyTmam(>+rz!q$5xCm%F~=sk)12Dc8Eb9EaY}2boxGsD7-}Y)hI^&Wr=(&3 zoB0|N+{|LMFWtim?nLu(QOw~}p- zlTZ;3PlQN`sT#PNxq9S!(CP&B9yL`QE5b6uK!*#4r8Oht{eT@nJtqwF)d+SR`?e)2 zyo>0Hy%ar8DxYFQaBCTFaU2)-t7p#brR><0UFnEyz_EmCnSuIrmT*R{3VRyfj95D& ztuvhB^v0+yN8S%nkPNUQ@TIdFh|94tlvV}}OcpOk%=$yrV)A?lMfyb;dimB^_G{@k zS;QKIn4+dKTgPCAa%wikX^nYfLPbtn;Rv@0`l`K@$~3qZ!>1&iL6t~doaCG~a89Tt zHHEWy0vBBTtUYmQ1+NVlS*R^7?;Lh(vOs6XcjC#MZh-*BTkKqA;kq7@80<74;ZYhv z5;Piw=LgJnpf_C}9aHCduYIe^$EbzJ(+8a4FZJ0GeTeu3yvI&}8n)l+$~Y1TueR12 zgb6e)2Zp}lb*u&CpwbC~lp5$@-3&bjf2g+9kRD;IY)myBviguhI#%rgBO5%EM&D{F zM^LixGBDP;vUF}Fg}e;}lv2^F@x&HpoDo#^$ld{rGi!+9gcTFx2qz_bz((mi=y>TI z@#a>*s3PU7c@o=Ez)nFC2N}3bdh@oh`#d55B-q#9pWWaze^BsIB|PH*cb}QRw=X( zp`8lRHtCV;th-x-Z+zp4C(fqd)IbuV+{-lRxvtXStUlk}*ePdhZ{0duNqg*64Q_q< z(=Wa8(i@`0Js<6^MBReF#uMu6CeS-ds2ReN(5Kv4w!M#kd@$Ih!P8HtA51^EN$KVE z8g%k@Xduc;tE)8V_76$&E}3hbusyTC_yZ>HH}?3Ui}W79-l61F?_<9;G)=$%_yaDc zR6OiVI-?!UM%rnd5JZ1}Kkl6^yV{Pvc759i_s~E7$?y4Mz4Z9k{_^lIOWF&=&AmTi zs4JLs+V}3hcF))?CJr#V_zi!pfsi3bTzT_{N;p)31~#c%w;Z>p^Q-n(Q62%K2s58@f#-6wf_ z$>%lD?%~xMXn#=}sH|^B1IuGuYj&2YVx1ROnp?%pteB-xm_pkj^s)_Hq8A;HIDynu z@^#It_~cPIfJCifGrYzIc`?dkD^Um^2v6A%qT_6VV@fNO-NJ80TjT|aTlnp$+eUP8 zt2qV*kHE}LGr0f-S-UPQ4!;U_fsm~?ewDr3=GchO%#mvqw=$GuKC6;dLd`5PEm!NY zUNL#f#_&W)sG>fStU^6CBCN4J%cV6jt2yY_+G%dhlsTocp7uYR2|HALPS2P!3s8uq zR{SFj098tBwVdGi$#86;MECT0=(kYnko%dEoJ<@pJMX&OQ}M*;11E;Tnc zI~J3-qsBBL1UF@wO=`^LIU5klBJ-*Uz1S21f0Ry1*Cd{;KGIPD7_)FiF0dB?wsDzJ zg)K($oNW~mF-}Kz%nY#7lFk&Is#$iKMcsD9Ypql)Gcv5!)R(0lu|=6>)|Jky z&Socb8l^=KdQwI*>3tsN84%G_K}%)LNlZ3O(qol26t|{701lLOoIX_~T!^!+FW6SNhA;9;VjMN;{+$OL_|U3xM}#D{45S zH2SfZJsy-JY<72&x@o01o%1Zb+c%(@lGK)#UNTCp;oL$ttWe$u3X ztYG0&a7cv-yfpD4NXH4_=UviXQW5CL7I^)-a6oj941DUD?2LEhG$eimjYbTGbzauH z!JOwkOW3^gE_DOqjCkO6lGjt=UN=QZQQ;H!6+=lG!Z^?`gn0|8Nm*mclV--@S`EB( zx*(CZp4W*CWf{-t1zSseK{bOD4>9fzMh3P)k)$S2>N-uDgrgNrpfMyjf$U&83kcRz z$7GA9;Xp`}%(KJ=-qwuNtk8qdc}fqUSHP=y!jR#DsKnSL+VL$d4ka^*RG7_N+SaTt z0J7d)#&S--Ng7f{C-b!I2%9`pJuRqQY+sr|R{J4a%)|k1RPT)+WgHj>HLxZHA9{jG z)k&ywEl+#zOh&`RMpP2#L%$Wb$f1D|xCxf=Ag0lawGt3})7T$IeCQbpVuBkE&A5{O zsb#U)%_yAuyFgtzqz)8@!$Nr)Yf4c`acGF11F8)i7biLtR!orCRIdJF2GoD3-9QXZ zmvPeR%+04U70?(>XGmG7tpkE4k#Eg3Mz>t7^2(s6taAb@8=LsEVikVnBa!&+RlKJ> z-C6B@3OK^4-l$TL00+MK&OvWqz4qGvzUI>*u6Z_>tQ5ujt54kHyLiXFnc~Y|{_?VT zvUq$Y4c0Gz`P<*_C2abE2Sn4ny&4#E)7U3BHSlarZ{{4s;@I0e;1Dt=Z0UuvY_J`I zS)y>H6Q`WQ_t4|loS`CcMBy~;>E3@&$4nxfFD)PJ@4fKCkN#+%e(kR`Ak}3WD8TGUr@pky$M(+Loz1QACUQ6gX0)^AP&2#2IH_u>O zn;*`H&V12y@4rTMHeG5rD5xdwacv$oKGWpRV_# z26}H+GQQ&)aHz!cT+uf`oN0J<<P!^s=@d2gq2H1`8Wx-H(l#`AwFhM5q+k;|Kg_xMiiBBhIEj_IMNFIYO6elZ;w#V{34NMkV@G&T3G=CGwtbZ8i@ zEx!!mSHW0pnk;c3j)_ET=}uhCi7TIxS2)hE5Uxq*Sv*T>oq)pZGH5RJWoJ^0+;Ub^X3>pO{$#{Nz!n?o~`ZBxqCbQhjg|WvC zl~h%z%(OM}bZ8&Ca&@^9s#)II(@_e_;HM_bY4kAIAb?VY)taKfXjiH7+<_`m>dewF z%)l0<_*zy}v1+G#|=fDRym6V&@p%Fv@I=0O3T6q8Y3@fGujN(p;NVt$%1!d z#oM_d*gIAw0HOY0WF=}qJECP}IZZMiEy@Ok^p2_QXK7E@ zg?He6=FCVEPDIJTX-GZa^^{~23Z7zsOBuBo$vAmz)yDJblp%W7n6f>F+-jgS$%#o9 z83j&_ty<_QVO~T&ra_Y0!C?l6gGDY0)()q%aMr+aIkd4OAT&t_wD6oee2jEQwmKJ! zpLac_IbFT=~MK^ znCNx&6vK&bx+$Ff9droZc}8Tf z)8X)VXGLqdZ1*GBflK>P=WoZi$g3!$L9@=3jy-DW-ZRn3&EoLWfDuAT&+4TRKOp3^ z`3Q8vZi5Yob{kFHa(R;liVN<=jyDDsn58K{YA%3I-RKe~vpu#WK8#0IqXmLPNgue-r^=~551pa~RiXw4kVT+ z6PhRIVNnbRge`c#m8B)k6=0|9DuC67I%uLk#F-hBD?B}hO5>QSHyJq1fhjL1Xi;C9 z7t~b)uV7@DUSM^e5g#aL9cNwUIK0W+wlQufQ;dhDHDO=T@YSQHotcdLk55qKX~{x7 z_F(37>{EV2X9lC$(bQyGww`A!TS!?f2kZoXR^7;Wp*q+cHzI0^@riI{4Xy zY!!Bk9Mb!Am7M@#TE93~!YjE2@njAKX9QXMtef{hOLEVEgftUk{KOAodWTkuP_H&T7CQU47&s(~IgzE8x~%EW{furzIJoW zJJ+5(y%}+-mk~S0wIp}mp9~2LEcmhaCG|y2T$cd#NA>w_4o_lLxN!&>dVfey3ny1~ zF2cbtyhA$K^LRZZl+tZdWr&LSq;|(yh#PN&z5v3!T(|iO8bWP~qt_&80`<%^W4k+} zf#(U)#I~>)ZX9YqrOI>H&gU3xGpe4~wlUsBapo|@8QbTI?*=J=xD}{ROz9cS1R9P; zG)+Bs7L(j%NyZWPbjHKn9XG6$wKkn=CoRpgh8KZb-ub1!BrO6t*qz~9H?I($B66O> zxf?|Gp%+KG4e<<|2V6uND%tBRH+nVR(+iG7CL!$(C^YxJk&nH=Pk>8Tfde#Qxfg-k zB1kFfn+EV9q{Fy|z28N3lqt&@0y*xE#SrL(D+N%oY6y7F@Dim1k1bK*Tlv?3B=9Cw zOw=VjIcb;?osqRM4$SlFr%h~{6%N)mnKLxXx5`D-ctzeT2O^*x&!7+e-Py8z20je0?Kk zxxA;KxyPBp`?pRBeU1;ry!Y?jF^cKB$0uw4#rtpGeEH@5{r2X~n~&VSW1fEEPDpiK zr`O=6mtr;EYX{~YznkXf6Vjl)88k3a1I2XdqdC$*xxG~luB-9e%fGjOXSu(;bLYl` zZ++{DANs~CclP&|KlI8Ez4AXTKOO!>s@ebW-{C8?pC{M7Z~f7Y8z25VH*VZ~b#HI* zDjzldn7Q+#|CQM{Pib@Rkw+dGnf)jJ%ysoc0~%WzJn~4VfqCK^PkiH-mUot)Mv0(7 z-2K~oWE3^HabIU4&uU=yuF^oecf-dRemhuwiDs=cBQ3zBOPEHS7g)M|8V@=jHXMJ$p*OL)FLMn*TkZ z0X;G9^2OcpUFGTb9edi_TnGDm-9F=YLIc|?jo-KsDR~MQ9xR?mZT#_SRp!A#*3#k{ z?AFWeNhFb0zb(KV)*s^ zLFfk8TM1@vCDojfdrp^-OOJJ3p1t2iS0(7HHSY=Xohtk+%&E?VDN4k$&bvWY*bO%j zA*gdwq`DADr9HMebC4D$O|LhhmE9A58JT6dMy|wXhsunUBcdGcZ1N_X>WeKxGPN;G zZX!6gkirC0CcU2Yp;(b-)@@9tE+A1O%-66y+Ja^d=3vL(!o!{*4Z!pxvv|(%)*4j4 zDkUBnX)6f%5%Y<3CNKS604>$#D8EGxKQec4PKh@gJ-!a9r&ywNXrDFlFkZB1RbtT{ zyIu8$79ojWRY!>KcFr{Yip8%&n*k5=)cVpSD&g#(BXct2 zJUI1yx zHV{by%!3=8RLNI0?l6)#6`>QGxrFZ<{hBB|Nkv2U;O5C#D=hY#s@6oOg;46%R>_0QP=fBznZPhxS-}RyU!YN%Y0`Y=s zW;s&_Ok!W}X+2Bl>o7&i?h%^8Y&Ftl1g{Or+2JK2drr#oaIic`nskS}D%bb9!(uG^ z!6CWZ!M2U+`tUZITVvpcte5pru*&TRdheJ%;90pj56v*;Re3enXqX<2okZ*732zcA z+LHpU6l6cTr1tgr@Ry5R@NMC0bfi9622Q28BF!#|G=ibxSENMEpjKeC*?45F=<5J) z8Ni~RqT+`hQ=rYYp~CjwO!T4N7Vo}l8);xSffP^6qF<#9fk!qFo7^G%JLfPDg}8g; zOS}1Q{>J^k+EbQaS$?GtzwQ2A6He{zkb8G|@aH=8l^SSdc@yxJ{jc0OJw5${i<8Q< z-lm>I1O^v6$u{p*acQtCk99hz=N@pMS(6_=^qd*A$(p@CA!~I0^|6hcWX-~Ve2Lcf z&9oiyoPF-m@9(Vgn`@?r59wR9zYg>%UgJxzgL}7jS7*;;evK6!(;VFWVlQekJGM5r38pwN7aB%QofBQtN zpM3c@FBZ1XvW^+p4W1S&PA$H4QNzFfMh$kF(f*-%$@p z!>${T>qwouP+uMETktUa{Eps0Uc{Q=iqI;3n$Jc$!b9bkCIii$Ar}IJSrmh~*sKfVEn;h)`89oDe%yqfkYEV~5!tf>#=PsBDC_#$vTu)-I-+b+}nJ!$UKrmWzZHoZuOq3Ua)JCiEoerc3rzXuaY!Lh4gwF+Gs$QvXf&}XyU z*G-V&W2y!tC1&0C#faCc2wJ+#YTispU=60UDq{nvq@B=5_CI4UhSp7-u&x1J$z3?_H3YsphmURCYL_YC2)uopuUjON=7k8jaCvHsGZ<>AL3Mo0tJI|M!>0D0&~-rh1mN}dS*{K2#5jAd_<=<&q-(~- zzB~ChhL8VFl6thTs)o$uhpnh@3hJ4~z)xEgK$0N3y)d=^JVYGXbJOsi1mn~g^OP@N z4HhU?b0ouMZD4v6j;CpjZ@eX~4^<5&GzA`@Ts5}qHVgCyZ($dHPQCbJH1PcKS#Z3E z0S#_v!5d$9nDi{Ai}lMvL&hyZH;tIvaoh0y5VE)4>FM=mq2A%$ z{{r{s?c4k(+&fG2pndx3HP82c=&Z4^+`qG@{|zg>FWk=EDAc`suLkRtS3U2j` zJ0Jh}_5XY3N+=ri{~PwAJ!yxQ19*E+yBL1v|kg6nz%+CTvLG^c}J8q;7#0+ z^Yt`1FEZf^s#!LL5c-Fo@u(?%270f(1=2@b1nxxhi&6s1_2^3}|RhJIE@-qB;h0;Y7mQw4?xN$)&bQ=Ova0{4a zhhMgZC(6b=E;FQQYg<_&14n}VZMZ94p8};}0Ajf#I<5|FVj>c-3AJVrNC3arSd09|BW7apNS|&gi>4w?(8kqQ&n{eb$OzXYpm0F+ix^89or!KWVHg8SF ze-+X_=+{+6QiY1S_ zYCgNbH`b?mpNucxhhEwwL{`AY>AVG>N;$pjYm#XgAQ6!9T4hZ$#U`kOAM1=1MHpa( zJOf%tPqUWxPt1@-S~ZkIXra&BPv;A)^cmHW_KBP`GskP#Y1&$HZ&ASV5%!iOjXTMj z&`-n+hUQdUDg>Vb2Kit%plN99yyL4>z~O^ifqt~7O@TODutgjUN~O# z2N2Cg^OXvxLz8-E+nAzrP4LC#`NZ?M81kL5ZP3RLk57)PSdQFJyW^98`@4z=M^n*mfO`yl~Pqee{TT+37HQxKT73kw; zjqmAoN575FwawY5==~L4$u>avGJM5{8SnCR8FsT@25#QJ`->f)UGslr&zJ|?pR!UO z48HJ%k9_2SUC1>(hV(_7z053hzR9!V41r#Q)1bje(BSU! z_3*!NMec_VS(Oj1fk6Y(YRcd5mN$20jorI3yEDE{)+^)(m-&G+{BhSZPq637>^jo-yaPlHr$4DPb$Ot6t-E`?5`zw1UGPNhF` z<1yc2b7$tSnJ@C_|Cx8a>$e`ONjWe#3>(Yom>D<#x_5_%l~WcKz-npe<|C?ukh^^ zbjW{fGV{y-b@S{+oSezuJH6XgQc)B!zEbF-WY@$u?&1V9e`F4scUeA|fWe}{+-vsd zyfwyW-T*VY<{FZ95Dp@~m9Jl>7+1*^W{mh(gSEzrigH!@ha4*a#q$|RLj#c86p0-l#$0IEh#1P$ zjc?=f9L}tmrk1Y>p@4p}Xta^etObe#BmYvcP^CR9B&~BtHs?*&p|J@mrS-g5WYrMl zdYpKNTGR5FPf}^FlrXo_Bp|`KlP{3lUjY%EsodC~dZerbS1H!;6Hvxs2*_cemaQxZ z#)l7~Rlyulho+Wl(uE1#r?ujYuqs85IOF#T$N|PsrcHVyjiZE8C9)2u3_7WLy)N+H zOm#WqKtw3}fPA+Z*$OKWwSd^E3PWaErbywUf}`~)EI2uhDsVB%tq)R%92qyxnyjuS zp%<`&?C1kPE$5*?=U^&zh1h2(MuiA;p&!`65H$iMrnSa56cyg4@z&5K$7$0t!w%=P z*?UW%=~_b@Tm14?Xvo@`+LLS)ZYceGs8AQo;M0VAf;tH&4njr1#!J*@Mx)P4Gjyd! zOk=VBE0iud%i1P3;a|@ht1?_TGH#EUHENuLoEEkxlq&pG4lkZY4!Cg6qa~QmSpqA= z3WUip`c$2Wi|NFB4ni}X!6MG2Cx-)T`7fFzohNmYrpJ_=)(lH%hFSdF^3UUH&SR%( z6Hb{p`mUz+2`?fG(Kd&vO43qiL^C~3PFe@%N>KUu@2k_S@iB@g zf@3$_)BF?dLtbJ(8k8rpj>qF_5EPIa{JSOJ7_Sal6e;aF_9H%BG~r*4>YLPE=W{Rs z(G9_i9W?T#y?=bTkeLUAytQp352MxBvcATCU#P0=V1%V$jS6=q)ICSSE<6X$lQf}LxeYTj_t2D~QQSg(N_A&{J$503?nklt2fwVYL?_lM}9_rSBre6S|uZE{P z%lFZh1^m1c)tyB=#qWjaKh9QbOS!}2J=LhDFr0^qs>WlnW2eO``wo_vd;8-bXWqX2#JTj@ezyO$uPv8PtOS1FS211Ka@}RG{!`?w7%vEHXz&KFGT)H~ zvNrFqlRN*T-HD{BHMS#u-&e6DF|u}PaBulbzqDJ%^|3lQXr^U){ge-z;xm*>Z6W>~ zyZsY)mY?|jpZ)!x-A<2f|A$}u>es%ye{=t4q{V&L?HX7vf9LC8eFZ^(ye;9Pc+lYc z&G(BwTINeW8F1VFE&I35^Y7Xu-amN@CS|g=<>h)!xx5s@m>G!-~HOJ zo&NLFe=fe|!QL?V7Z~AdS?kdLKIg=5Jo@@@&kR4X{{cQcE2W| z5EW_nLiwM(Pyr4ImOE0Zf+Ro;+JEk|ud7Q>E-A`ef ztr#;)kf{k|uMj?98@W9=0#?r31GX2Vn*mUN*7P$8dCM1+!QFHoy5Damx<=SCd0w-7 zL%ge#Cis!&*DTixY0MSK@52GnIck!GnfMf+vvEeYwI)yEWiG{~u|$wXZ{=QuUoj{U z1vSi8!!*E~^e9g}qC7-T*Ekdx-2_&vx-Ts=+A+CVG|0HLF$Vt-nq}Icc>z(NYsOft zB%sbaIot1p(5Om=%2ulp)_R4Muahq=_4742O{lXewc-_?3>v0Uqe#&P5fEoIA-Hx_ zVLKrO>!OxHJcZ^lh&CCo)DqmP;F(a@fc7e0@-J9I37cyjuZ}u(KtV<4uym(~RH~?p z^PvA<1L)YQeuC(R;JO@L^sE<>I&gKjrpLM-Jt1iqGv>v79!-@RcWZ-HZ`EigW-0>4g)%#*4KRBnvH_qu#Zm+fZQY%=v)9Y{<4tLI1Lxg^|zd9?-o~5mTuW zv`RFiuZTJ@4fFb$jrm8OYq>L3)pqIlikGRLi^Vj4KjX`~b$(&6SD6@7l zPn&uc1{^SHix^CZwx!&OBPu|tHtdOyoU8L`WyjS0eBOlp>6Y)pO)(!H0)q0}d_MI< z?|t7_Cn}ofxQSeDe+Us4E=?UPoX316Q2!Sjx>pMs<0<^Q9U}Jy?sjvF%~9lunUo4E zQ_uel_nAi~hZ^Pq6YzTXn18^7uBs*i5@%&j`0xdRMz zgn)nio5*&PHI^qOHgOAak(g=gw3^6Q;8L5HqSuc0;v3t?FeK4Zo-zz(nNmRNt8!;` zi)?7Vvye)G<7NRijHG-xU_iyRZEF*gx)v&hN3~;f?DPdeXO6A23r9mhR8CqxXr%B8 z2yVnyXa(kHVv2Z2BgFGe8Wydm574q63cX;APa}wpw?@S4C&RR&xL(g6=Lymtx`h@B zb{&G=pk6z!~qw?I~vInOX(2wmKvTz`iN3+mLW?By=jo`9ia33IR4WeKKL7W z(7n|!jtxo`;y6<741nk}I)e|9(|fP3k@wipir`#-HQ`lj6a59&WyC)94PG+=Apd@gLd{q(PVwW8k&mDXLQm|04;`nCX#}0<; z7rP-v+Xa?zHbDM)xC@-e#vRX}tfFbv-eN6+(o2K89}DXe!FIa)vAZ8>Nv!>CEVZD) zXP2Mt#X%A!MtgguC$9aAG%%HY%sd7kmhO$muz>5qBjLMi!SA{gcLV#|EMe9Sd5N3@7m^FpBi7QMd+Dl*zvu0`l^tzF8h<%XTLpm@XRxN z=H~Ji7ViE({D;5s8>;Wm9jLE_dR)F3ZUV&w;ao)w?sWT+QNz$P&)j1j`42)*)ONb$ z#q{SjxVe9e{0|P&^bPj8H#IQkS{h`AF)Tv#@4dQtFZ3F)AAQ=f;eGPkKa%g?*njZJ zPyWb{G%x7j#`?7SSe`f=-GKFDVzZR)03j_EGY#lLkLL=y+=$&wG&0abimk2!#tAjbh&^E6E=PPJl2rb z4GsfA3bOCRH8l-oQ(6HbA44J9JK!Q#J{BuOE+kon#?`3{)zu=X9yI}<6E@+31MY2@ zoo@*rYgU|;Z99QShzIGrA3@7S7A}e()*-%;u+PGY?{bK#vcRNv+y>Q={sonV;EX2d z*%W(F&_?!{MoSu0ea>3VSs`iQT{(6Y>H{Us$7WqZ`9c*lIc}hZ8pfw950%#$;J*lw zVP5e5w9(;J`d6Wh^iecyVoif(5MfKhQOwhMcRrgEYPS(xoA6UbHC$6A&bUj|Ye1sY z6;QTlm|OG=ysD8I=ji2YTek_dqqr~;;MaZ7fsMXC_&-z-KJ|5dq+J>SMNlmSdnew< zDz8QavGyR`2G}kv(Kfa&p{m2;oo%EZ-!(u-U#s5Jpm$Xn&>cPeL-)mDRr#u#Hyp4& ztf(5#`Ic%p@DzAanL$sV4ZK^^-2{4sO5%Y*MoNY&PgoLrj<5^`vasG*dxl==9LxfC z{+AA$j8(g^#3$4=IWIhsv-II2JwqoaIwRm?M-2UdT2$Qy36!U&PsFFbffk!|>IV&s z&KXpRKB^FMa606x#!;pA^phlM7Ueb_2A~b?MS!hmeW;_&RuXzTEC3tJPCjO5%z@Y< zVDRf~VyxmJO~^Qu<}$hww851_2WsSRNFde<6@ae0(R&xdd0KiA>Zw{_8KWX`D@xf^ zxPk5zKS!@c58ykWw(mlj{E~JE;G@?yNFRyx#ljnZsJh{OlEq-LsJ!?CEY%8;1tQ*krg!7Vfxio%j<5)HbOD z-9>sP`e>7`O7FTIe#4>)FbYUXNL-sB%XJ!P!5f&QayRITeCTPp^7Vh3w8P!UxBcC8 zxVjV=$WcN}xRP`wz2pCn)BC%B|FUxbt1n$eH|8pitLV@Dzu``l8t?mhr_9RiY=8D2 zTtzqL_IrQE#f0fvLXY_ufA5j2=-dPRG(uTF!*96~F1@s*xacb=L&)m(0&H+YfIc3& z`Fd-ir$ziKwhnBJOA+ZeBnDxOt^!R$wtyLIz)H~$d{i6N^oy_~Wk(6#I<+V60?v@w zcA<+s-;w06v+Iy6T2B#Itk1;Z7#)mr~!86D{R56?HJJo&Zs%2ge=#T zCxPM-gxLvNA6$bHu%7CZ{y9?4GG!Emaxj-~m~1z>XGW->X2`LPrC%0wh=MZ>{YL+* zUW2^C0mQ7gNXxKQ5F$9BA7rA`lRAK3P%ASf+M=Ie=a>zJK~o<~(;!BWX;W1tCDyigMTZ%yP+yQ-6% z-4JH_mC|;tufw=oAf0ESokN|_>PW|q(f%))SOYzFu#qChQY%sdbyh zGw7pSJ+w3zc@}MW(M~$`(4sK^N{U%B_UF1!_2divF*&rxJMX>GuLnOeHE}l4_(AI- zhI-5zZ&qo0TAyOKZ#U4KW>9i|m0Uq^S;q=-IuLOS8dzXnr^Wo3Ud`*PKH%hpkd1!E z2u@N(`n51eEOy60AhrpKY0T6a8X;+e&8&Ai2b8WE!<|q5jUCEeu`AqG~2mJE1V!rDdos4GD*-zWCvNsKlJ8U zvU3(D@RH5GeaHe-;G`1bv0-(YtAUYDEyvHR8P*`PAL{^ws2vcmJP!>ad6ei3U4U3r zf}qWmD)&{ucO}laDK7wa_ne2OOnmMY3{t=X1V`ZUdzcON)G7+43iwWgkjRJ;eDM1e zSNUzyB+fW0Pt6g=of)-DJWrjIUvM)L=wQ(lrkWW}4AN6nz?B9q5g~N@%70jRcD+}p z&A6wP4xdi2+QSQRp@l!|2lh2(2j@!QX38L@cb50Q@s0oE%b%xR&%&LL#r?jgwCi?n zP5Zodz}OAb4#Pe6*dpltPVF#->ood3?J9rYeB&EGv44J6shqUq_!PN)q1)G!tX>11 zOFgSWc>h$nb8YU8T%|!zuNaigwEPEs{JZBb|Kbx*oX_o_{WD`;rdB^kO}xz8vU-QO z2W{)Aj2le@CcIY*R;{KM*-X)=-0eTHQ-iY;IUu(zG z|2FULJ`%oit$j!tf^k2xA(VKWhk>ODZ?m3Zef8BF`qp^Zq`iCLp7*()sHR&3>(%SX zrJ?0{4OH)MSpzECtuo#NR*{Df*vnbZ)xidPx)Bb+o%`Y2OxKNHropzXLlbN>Tv29R z@zAGUlGHC+ADM_75XzAm8{1R1N-&fPxjG#JT-DO6szA1tDE&q7JfU>OpC_!}4(PHq zP-*11r+Q zVWD>4gfdgTCIewDmkv#FY>E(F=CGI+QI}}q_Ew4Zs05jD!S5X%Hf5d|EsY+DpXl<) zZum`&7pajWXp$LIu`F2jK43f?3h_bNjQLY3tp=eR2J)tJ(pyA>4eVw(qS zrwTJgD4wpaQiC66O|3~h6#W3gmb`3DwQ+(p1;z2XK{cgqS>us~8&`UIACxgCYq24| z%Ly;^Iyyr$)w8*9{D+}6I7(=0m*FZ;GSRn=LeL0_PPNL(6{7*SDhx60a&6wrp~fQD zIXB4l=g>k3tLqHVC_uau2>TGdwu7O^I!!c5rzUA+_yO2&^QLwtZB_L^YcgtxD`q?9 zJ~iB}I4K`aGJ!J-Pu&)rbFr2PUI~8at%qx2{7_vEBZ}^Y@mmUOd~g-uC)e;M9<9{y z$sg+1MjU8y$_qRzHz2NXh9q>P1~MHE1;7ZA$`5g(Y=aMu%yByOI=oS_>FvlqY>{Q~ zICycD7KpwEnKUAVyco1{*oK-vWFe)7aY{U+y5&2?({_%HmJDWXV? zJS~|C+Tcb%biW?a;dgl)^T=rfle#(9do2}?(?!PPAUjT4=ZMeK);M<3s%$Eo<|}|#MZH)0V?3Hco#3$5%hs7c93O?$w1SH0ORV+q@5tx@ zM2AOV5yf$bx|Ie#rZD&lo_`Jm`i4Wt3$2eo3Q4f$4H*&-rNVcTRO6iZbVM}e#6-$= zxVQX!!%h@b(#X-D1PC_Am4Mjgw22L)hkPyB)cE=aKJm;@G<=hSQcpNe4S@tFN$3l8 z(h!UQCETvTM}RmV7Wy-{{hPMu{c|>XwC`8e{CVqrGsU|fLJ?-`r()}Ttg`(lAJ@^l zaGf^KD!%JPZuR2eK`%edjg+9GR+*x<5s_mUr;EfBcU_zTquKts96@U#N=bO~rY& zJ#3=Cu#xM*kLiCS7eDi^Y^YuJ+fj0G|I2V2J%_EV?^gvYJNlu@`m?(m z2`&mQmu`Z;xdGGY+`5)Ik^{0P2p4#o>SNP|~3H~Q}dnQe{ zW^%AR_*#z-`J;g>U7e-27foo8r{0_f-Eiryq1^RYqX}_wnycs+r+m98daV4(f`6#&H3|JrLDvm- zim#Y|?j&3riKH-xxo*PtYyv%WRu7)Dr0rM(Lf2aaM|#)KdETO|camSP2G#>aeCPRW z>NPds+q2ZSFV?SxynPbik@QXtyi)`3)WAD6@J7Tq!{?-ffRwS?j{=EZ-Z(0?%N*Na~tg#)2trbGL zA{2NoP}>d@d2NU}TpQ>L^%uboTptL&Wdq-y!Tjlpe5ZBaIe2|nt7zWk*8AI;pU0=$ zENA22_4&}*>@SbCfqYIy?(yvn^IdXc>PhRz&kbY=4yav zgjdSme{)iHrMgJsS$udjIhFt<0{`uUizM#A&%0cE|Ls%aB8i)LOLntx>1zXuwc$ra z;ah6O5sFy7!6@EnAB$?cutMP-gn*I621>)+OnF5qoUtUXuW`g51mezk1y|;LdB>pkT zxe(wIhuaGR0)&lo!gIJ}ZBM`Fd7WH5;{Xnn1EPL$5hAY%QxSA`IYD0ba3Ls{7@!Y1 zfq&Yu43jYv+zZpB6ne$U=UX*B@4WkiE9ac^0eNP+>(^6HJ@r&|bv^Z~ja3L&q;q6^ zL{Lx{tTuWGP3P6Domvm;+4mUyB1TCZ1Zo3{i+=32^rfX3^bw<4N>N6ftmeZkP8n3v zIUg#@^c^%e6od904EYL3C$|j)(Mx?uVy^Fw)y-N|dE&z+Q5d)DaG3x;r{Ux?)uB)7 zV$XD-bAlUqvL_ za&jl$!Lr1|&{1|sE61<0AuF+k=!rEK!lo{IdB z#wmXsmaq+AkB=|w9x0c=AvIyfD3;C`XMKEM_40Q`70&R@y1;QbM^9{w`9>4re3+J9 zTp992yS8|6>^A5BLWJGJ5X&ld2xS=(FSAKi9^U75+p!pOx`M zCG3<+Pr*=(eNT3rl8mC9q!q<%n#qh4j2Sv{y(wpNzQHVn0IIWkf(DrNxlK5(#Ps9r zFioB4q(k7^oXPByY}UlJ)giXmPI2Qsmx2W~7iZgtr}fAfEiVsC%+)F@j>7Tg8uG22 zP5d;p+dOCd@GzFFMW9duIPN*2;QK(z2Jdk54#P&eK3J=|(SZs)4-}NK#kianq$pxa zP|tE4ijctZ)mYb(94;}_ak+3lR4U1p&%hd%!B?QAJU&{8&&R#=ScEj=X+Zi4fp#uX zvydG%b6zJ@!T3$Q+K7?FHHt<>3-RElD3hYaCBcxSj^CWk3cJ9$n9*iiEJ`IyxlBrF zhDxAq0NRW~f#FebQeinhDrqV@PW6YZATid0Fi$vkp(pNyPdr;r8(%P~k_8sPna^$K z60kEUa_3ZXN-yO!ldeef1tDs+jZ2GQVg-|h_k3E56N6KW+e<*O$MJ~Ry@z3sgpqkA z2HAL~tsVG#GLnLsc3lc4RJl|ulzkl~p=e%%M&ohg8=TX_(mIoSN+_TYF|Ex2{c>v^JapQkM^$xRM zn;~_DM;L6uT*owRr5KIkU~*rl5Z%EM@Yghg@$BDt=CUlSpEsKo;mt*_VW{u5Z;+^2X>;O-n8 zo5;aUBM!d$RcpVlIO6aVQXRh!w+9sy|D8Fdp{yjjyq?}yXMhH&ED?r{=R%)U43uGAp?8A&(!z{ z2Ny2fjf0PTB+@bFkvG`+*6+M_=FIN?&Q8qB5VpNE|KW$t7ccBw*x`(Top?ro<;!5! zn5Qq^Fdrty(`H}pPA1Qu%;{8zNbwAM2>1K zFF75JeJ5BTzRQFae*;!GSk|V61-e(^Ct9cJ#Z>UN{I&r%Z()2|xQ$>jLaX1g-7)bH z633P;`|5Z^?roD(JmZ!CT>(59wmKDhp+l_l_0e8X5_za+p-@pgbV|DHs0&HSD!C1-SddjzgBwDk7zq6;fMr;ASm!f|w^ z_?WcLH$D_n&S$hin+dn1t3})@OEAHu22j*x5WT{o7I>M_Wrqop1&eLK#8?+nc^Il^ zCz*O-1W?h@p=~iLTBhJkRzr^9 zw!`6^%?w$z6#l3a%~0b~OP1sfLqV4v6_d_Df6_93kkp;8p(C(-rFNc%yc5?~!BZS% z6Lb%i+Sp~(8*W*xuQw}-U{sIT{ELj_Wsp+UQB%^oP01hBdv6#~NlB>i!cg;KX1VE+ z$jn0jz}O~1uok6fN~t&0;!f159^|t!RezM!DiIYRedbZ4Pu_dTP?P5*+dI1Hc43>e z1E(>aPUH6-3PdaQOqG`>B267cRrW{@rMBbw<}sk?5RTc;U);7&nmR8I>YHL1>;>;wYZ(0BMDXB{;es5~*>A96v^>cZVuLxGegk z(ur*-th=+=s6ESBqf$=^U()yxyJutu9>;xY6IW`#d6}f>6~I!rC_X553~?ajep-xE z(>495n`BLzQ{*b3iBE%MEfK_j;io}j$T08ZX^fM>o8Id~P2MwzX}niVik9qIE;Khv zfUi1ug$!+|G1dV1WN0xSEbxsbg_N@i`JT8-?V`_%#VDQ3wc8vD9uC5{lRLF1oJ7jm zafix_cgSaImR=(^Q$Hhk&s?lsl<+e!LQe!M<3qpMa{&JSjM@gP8VQZRDC7Yyk zd5=v^Gi?KOj8)Yjc4C|{#x)~qY+~k_l~!LKPP?eRyT+u>n7(7LI{=Yl*3*XgcC!hD!v2@T3fT zJ!1246sp&$H;BM%FrbkBKQ<=B47_-%G=~Eo5W^qN2%rj%=|E0rJhl_k3l$P}kKlnK z&1~)q>D`oZjtDBr!_?!EbC6n6p4RvHQ0Y>IK$k{_RC&}WtD+uNsWW`7ek}@^2x5jp z>AaiNsVj4$E;-9Uk@}<~afB7xEG!mV8^j+xagiVVDG2#5XE4-?d|$+2nIf@_Rs=Rx z=|LPKGE{?T0G$ELmpguK3Ak}X)L-6--}NoO@nf&ZeLJN8 z>$OMBxpU{kWv+8}!P&EBXMbmZwfsTsg~#4`jJK_`|J={L{kD9|ANxk2eEqE(D?ZR2 zH~^2G-jRdObjJbj131{bS~t2lEnv;TuGu~I-}K)M=?=Yf9NQf1?#5pHz=5gHUE1GY zt)6;nbqN9RZS%NOe{bi~&TD6{UcG&M;p)#lQJ>v?yU!nZuRC}Cx{+Ne?C$D#fS2>D zSNHcvqu0;v@4t5Twat!s=}OX8UVi!N`4>O?;%B9`z5e<`51|hpzy8qc5ACDh1`ZIx zX%6c8_VERAFzS!Z#qK(#dE>n7f`Nnc=dWI^>(|eXMz5WvTs9EZlsvzB{_*tj^r?%x zyZ`*3pF8*DlRM_zL+2hU|3mv3^F&^hf5+})ZZzRRv(2*y#^0h5$qhR8S)TlK&d}7a z8uMNAp+5O#QYoKSOeKd_9ny{FMrVE+o%sp#l}-3~4`olXBZ{bPkZ_uTobGU0`jJWgQu?cKLmm!5iRPfrZlQx0@S z0HRSk; zkIAPDF1g*>HiX5HA$${9ggDN0#s|OCNd_&>?dkQY%Yf_T zE-boH#6Iw?NgTl>sE!QKVb7SwND%^W)U+*U@?L`@D!orWid|~y=?3QVt>r}33});S zkV{Pgt8ZVa?2#J1l1%-S%C5Px69#Y$(5p5m2!67$C0oQ8~2X5iWXQdqry?A z!tDv;2x@g3IRqYd0v`IKFT7~0^V7pcq~HkG=gczs`@j?WWfQ{Ds4(f)(cyw#!8})K z4T_|o%QDlsKAT0F@~TdBqxmS64`9PRBBf$QT&oCk`33jHsE1qi+#)ueZ%I$Gi1@)G zIi@BNzsf}`6n=80neyC%*2A;>`*2qt5KPuL~(T zgGC8Z!Rnr5dh9eN)?zAa3L%M6$CMOZU&12bTQR<3y1b(!tFzNuFk%~!P3AV@Wrb!b zJ7OUNE;{v&0g$q*BHbBvD-M%X4eJ~VzN+2VN2cv*up7H zkRunFYph=4qNTK;535FfLQ!Nr z8R^M{yL))E4zCsdK@<|2r`y6u!+zMZ&b+H6*EBsCh z*^)e*U{DgbQ?RGP$wMLzD1yXPNittnsAN-@qMq{ME&{f~M@h0+#`s&|+Za$-EUS>h z7RE^mP?#_0r^6lP#3dl%DZ_s!Zh5-x@RaZqcdzg}G1A*G+=+WRg~ILOo^q575a)94 zH8?T2E96aq-5$PiS4dm%0T}nApm4tYm6I+Xi}Us9^q0VL##_=&I4CikN(9F>aTUHr z;Vu{qn&?|&F$KbHNa2J6;Ul-C4S)laSW1X5f#vDuOJQkm@=dsD*5TbIJnK>6%?DvH zAUM7=+-)dmz>u_olP`na{Yzl?3;*+=5IOn(=ly=)@w#95zYbptyWh9O?ib!u^fnZ~ z#gw*@8NEewYJg*6oqptKrc^@bt$7_W4=E$2(=&g(3z49zQVVd*-$7hIh_ zTVk?|XD9w_k6V4*4d^Ad0d<8vFVPww&&4}b^Bkc&=5XH$kY0n<{|R@{USc0k8c+q5 zQQ(rdbAk&{3Ie`w0<7Qn;8qOOEg8yvG! zWkL)CCGINW(JTZ9JmHE#-pR0pO^(E>La)JNE=iN68G#;zi5ccl=S-VhYjibjL5-ZF4bj%^nL8)T4R>tM^&(Juth9cS9Y zTJLxgEDXYnhRlO$9J>Wq zkNW+XY%H3bRV*C>EKtB5O`X1~ z6d;@9)uR_W298nurzdQ=dSIGDGy9PURu2_+@hyb-J02gc(|cpdelZ{ z_o}{^%G)G8d7sUjBsCpVIu;CJ8QUir^|G0%%BX4RjRmLH1g}cbc$Gdkujk6BFPPae zR!_;{Jz3hGd>WQldf{u1F9(Vi4PFZtEsVF^nVIpL<%6Q90)rJO z6g2*B>H7-4C?`C<-Ye4?Q@75O@xYGrerBvI{c>9RvhvluBLBv7iKj6)d`d{yUKttB z#cbg<|0}mwCapiBUGg(uYm(U;8dyrsb9S`mrI%EejtbH9jc=`~(JY>WsU;F*aEn4h zq*U|e;i5zDO-2iALd}Orcoa|4yWrDsR9wVA zp(v38$YIvQ5B@UDWX zbTs0*Neh;ymX%A>qC@eqU>q?@!ctLIj?NvKm@Vc+?Mk)}r1SpBq~NI$$i@e-1EfB0 z#2iAOQf#AkNw_B!Z@fLA3VRsm#o;ZU0RBkHmk5oEyp&z%Q;Jw6Uid?brAsq>7P&Q+ za4nW4)XW-gJQ38I+AQo5?*^aY!yol^W_dd<8{hLBnKcxYpzA$}_kB(OM`gI?x@Nab z<-^=)^cm^thSd@X!lM$uWC$?!(ASgt=7&y<~y3vg4 zU`)p^S<ZktMKa1`Qzkm76{QvIqzj|TC(ZVl$4 z+&Qh~)v7|R*?r`VN8Vt*arMkIJIt2u?Oa)%`K5=yw7RmhH-7dbFQl(B%eDH_my~^# z#)TJNdu@0Bm{q-JU%T+aYV{g-t=|kB-1=>E;lh{MKQ)_)gTM8+Sox65W|uGjnh6}d z`)fuV{O!NpG+N6$8ZooEf8oNT0P@>;<{5*;;lPLkbBcpAXVwJ(2bvr1U%PNY92jPb zFT8N&%HH0=)>f-2EqKXVZL#gXS{rRUh;`2R(o-7IMxQuGcvb!EEo0grsn9h z>RI#R0^w^8E@JDh+1~zEb3=A!+lZ-|Lb(*{>tC07%#7kg53Tlo_WhrY^N*ooa%4K# zPdstcoPX>4e=0n|9!pZ0%|og?JKG$@GtQ5Xg}=KSXV7Dem-F-I@5O;JYYwO_4?T3# zxIc1#6k=_0Aouz6tMidsyuWw-z12;9b0k2VJ=EOzty`LR)H>!kM<2s=fBWq?ryhNf zK)^c*A8c=5f182?Lb#sn81nt|-#^8{MRW0zIEXWp0|%Eb4ID5e+r*f|eVEmc?t62v zdwut=9JFQFwqY{kXtG)8!d1}(>xXJ*tF-0yC+KiXFQ&h;{u$y7b{c=c)_Ubzy<8UB zS!BKR9ZY_G5qboqlnE8r3AnYjBNgL1Ucw$aqGS`OW!6N{LQqTRF1jiV8?D^MWps&t zM_;4Eue0jQ%3mYxdL@s!7V_awzfMdIyu^&k4@^LWS`fYQasqlQ3ly<{!Vpt_fdM=Q zDxOe}D^p+utWwnns7+uooC&+M|nfCfi?QBlLbYwmMC?CZg8GdUD20g3k_Qo zV@9Yd=2wcuF~vrW0C}0SMvZZZK)W}YOUzNGT=d@fhOEXK>XbTUSkQ&=QB^X73N`he z>F}ge3dd#9K-BUJ-6Zbp`?JKiVyg3G*B4<-j76OIh*t}lRKaqGdz0|&;8Uw+X0c!u zrVby>1N87)LMxazB-ls>QknzMIrB&b=!s(NoD7)pk(Cd1DRYket8nKdYub#!jGlf* zRc!dE?_}WsQbw2ZG z`()AChC-qXDYCE*4GKWIe*`xp3%ObV+m-M*j2Y2Zb!0Rf(JHYCcxK9xrn^~nSh~@{ zC^54oe)MhU%Y5Xd@EOsl<0s3dA~yvXa#uwkVM%TN>L~)5D#M3p?S^sa2VQOEcB$xnh7u?L&tR5Sd_M zv*th&uSKwzcFH3{3qD2tlKveVKEov4cx0?v3T3kNTAM5IMUi<+w(;i{ps=3S1bNWN z@ujgUhti=pRO)p&hG$R*9DUNMirlC&;=zEXBQdHG-YAH0qT=zD z@BO%fO%<13TRAkjc=B>%RZ1pj+#vITVf+a2W�X8!&=H`Fs8}i2m(R2 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 diff --git a/FPGA/VNA/top.ucf b/FPGA/VNA/top.ucf index 3a01e40..b0c65f6 100644 --- a/FPGA/VNA/top.ucf +++ b/FPGA/VNA/top.ucf @@ -1,9 +1,23 @@ CONFIG VCCAUX = 3.3; +# Global FPGA clock NET "CLK" PERIOD = 62.5 ns HIGH 50%; + +# Constraints for SPI interface to MCU NET "MCU_SCK" PERIOD = 23.52941176ns HIGH 50%; +NET "MCU_MOSI" OFFSET = IN 2ns VALID 3ns BEFORE "MCU_SCK"; +NET "MCU_MISO" OFFSET = OUT 18.529ns VALID 10ns AFTER "MCU_SCK"; +NET "MCU_MISO" SLEW = FAST; + +# ADC constraints NET "REF_SCLK" PERIOD = 19.5ns HIGH 50%; +NET "REF_SDO" OFFSET = IN 9ns VALID 9ns BEFORE "REF_SCLK"; NET "PORT1_SCLK" PERIOD = 19.5ns HIGH 50%; +NET "PORT1_SDO" OFFSET = IN 9ns VALID 9ns BEFORE "PORT1_SCLK"; NET "PORT2_SCLK" PERIOD = 19.5ns HIGH 50%; +NET "PORT2_SDO" OFFSET = IN 9ns VALID 9ns BEFORE "PORT2_SCLK"; +NET "PORT1_SCLK" SLEW = FAST; +NET "PORT2_SCLK" SLEW = FAST; +NET "REF_SCLK" SLEW = FAST; NET "ATTENUATION[6]" IOSTANDARD = LVCMOS33; NET "ATTENUATION[5]" IOSTANDARD = LVCMOS33; @@ -63,10 +77,6 @@ NET "MCU_AUX3" IOSTANDARD = LVCMOS33; NET "TRIGGER_IN" IOSTANDARD = LVCMOS33; NET "TRIGGER_OUT" IOSTANDARD = LVCMOS33; -NET "PORT1_SCLK" SLEW = FAST; -NET "PORT2_SCLK" SLEW = FAST; -NET "REF_SCLK" SLEW = FAST; - NET "ATTENUATION[6]" LOC = P9; NET "ATTENUATION[5]" LOC = P10; NET "ATTENUATION[4]" LOC = P11; diff --git a/FPGA/VNA/top.vhd b/FPGA/VNA/top.vhd index 80fc565..89b8ea1 100644 --- a/FPGA/VNA/top.vhd +++ b/FPGA/VNA/top.vhd @@ -562,7 +562,7 @@ begin Source: MAX2871 - GENERIC MAP(CLK_DIV => 10) + GENERIC MAP(CLK_DIV => 6) PORT MAP( CLK => clk_pll, RESET => int_reset, @@ -577,7 +577,7 @@ begin DONE => source_reloaded ); LO1: MAX2871 - GENERIC MAP(CLK_DIV => 10) + GENERIC MAP(CLK_DIV => 6) PORT MAP( CLK => clk_pll, RESET => int_reset, diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/deviceconfigurationdialogv1.cpp b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/deviceconfigurationdialogv1.cpp index 35e08c6..65832af 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/deviceconfigurationdialogv1.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/deviceconfigurationdialogv1.cpp @@ -71,6 +71,7 @@ void DeviceConfigurationDialogV1::updateGUI(const Protocol::DeviceConfig &c) ui->IF1->setEnabled(true); ui->ADCpresc->setValue(c.V1.ADCprescaler); ui->ADCphaseInc->setValue(c.V1.DFTphaseInc); + ui->PLLSettlingDelay->setValue(c.V1.PLLSettlingDelay); } void DeviceConfigurationDialogV1::updateDevice() @@ -80,5 +81,6 @@ void DeviceConfigurationDialogV1::updateDevice() p.deviceConfig.V1.IF1 = ui->IF1->value(); p.deviceConfig.V1.ADCprescaler = ui->ADCpresc->value(); p.deviceConfig.V1.DFTphaseInc = ui->ADCphaseInc->value(); + p.deviceConfig.V1.PLLSettlingDelay = ui->PLLSettlingDelay->value(); dev.SendPacket(p); } diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/deviceconfigurationdialogv1.ui b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/deviceconfigurationdialogv1.ui index f11fb02..8a8a8fb 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/deviceconfigurationdialogv1.ui +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/deviceconfigurationdialogv1.ui @@ -6,14 +6,24 @@ 0 0 - 487 - 356 + 454 + 464 Device Configuration + + + + This dialog contains advanced system settings. It is recommended to leave them at default values unless you know what you are doing. + + + true + + + @@ -23,26 +33,13 @@ - This section contains advanced system settings. It is recommended to leave them at default values unless you know what you are doing. Slight changes of the IF frequencies can be used to shift possible spikes to less problematic frequencies. Large changes of these frequencies may severely impact device performance. + Slight changes of the IF frequencies can be used to shift possible spikes to less problematic frequencies. Large changes of these frequencies may severely impact device performance. true - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - @@ -138,6 +135,32 @@ + + + + Other settings + + + + + + PLL settling delay [us]: + + + + + + + 10 + + + 255 + + + + + + diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnadriver.cpp b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnadriver.cpp index 4ff11f8..bc8aef9 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnadriver.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnadriver.cpp @@ -684,7 +684,6 @@ void LibreVNADriver::handleReceivedPacket(const Protocol::PacketInfo &packet) info.Limits.VNA.maxIFBW = packet.info.limits_maxIFBW; info.Limits.VNA.mindBm = (double) packet.info.limits_cdbm_min / 100; info.Limits.VNA.maxdBm = (double) packet.info.limits_cdbm_max / 100; - info.Limits.VNA.minDwellTime = (double) packet.info.limits_minDwellTime * 1e-6; info.Limits.VNA.maxDwellTime = (double) packet.info.limits_maxDwellTime * 1e-6; info.Limits.Generator.ports = packet.info.num_ports; diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnausbdriver.cpp b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnausbdriver.cpp index e3eb188..3ff746b 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnausbdriver.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnausbdriver.cpp @@ -26,6 +26,8 @@ LibreVNAUSBDriver::LibreVNAUSBDriver() dataBuffer = nullptr; logBuffer = nullptr; m_receiveThread = nullptr; + lastTimestamp = QDateTime::currentDateTime(); + byteCnt = 0; specificSettings.push_back(Savable::SettingDescription(&captureRawReceiverValues, "LibreVNAUSBDriver.captureRawReceiverValues", false)); specificSettings.push_back(Savable::SettingDescription(&harmonicMixing, "LibreVNAUSBDriver.harmonicMixing", false)); @@ -183,11 +185,19 @@ void LibreVNAUSBDriver::ReceivedData() case Protocol::PacketType::Nack: emit receivedAnswer(TransmissionResult::Nack); break; - default: + default: // pass on to LibreVNADriver class emit receivedPacket(packet); break; } + // byteCnt += handled_len; + // auto now = QDateTime::currentDateTime(); + // if(lastTimestamp.time().msecsTo(now.time()) > 1000) { + // lastTimestamp = now; + // constexpr unsigned int maxThroughput = 12000000 / 8; + // qDebug() << "USB throughput: " << byteCnt << "(" << (double) byteCnt * 100.0 / maxThroughput << "%)"; + // byteCnt = 0; + // } } while (handled_len > 0); } diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnausbdriver.h b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnausbdriver.h index 5f5921f..1f44b96 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnausbdriver.h +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/librevnausbdriver.h @@ -8,6 +8,7 @@ #include #include +#include class LibreVNAUSBDriver : public LibreVNADriver { @@ -76,6 +77,11 @@ private: std::thread *m_receiveThread; std::mutex accessMutex; + + // USB throughput indicator + QDateTime lastTimestamp; + unsigned long byteCnt; + }; #endif // LIBREVNAUSBDRIVER_H diff --git a/Software/PC_Application/LibreVNA-GUI/Device/devicedriver.cpp b/Software/PC_Application/LibreVNA-GUI/Device/devicedriver.cpp index 7d9b788..980011d 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/devicedriver.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/devicedriver.cpp @@ -118,7 +118,6 @@ DeviceDriver::Info::Info() Limits.VNA.minIFBW = 1; Limits.VNA.maxIFBW = 100000000; Limits.VNA.maxPoints = 65535; - Limits.VNA.minDwellTime = 0; Limits.VNA.maxDwellTime = 1; Limits.Generator.ports = 2; diff --git a/Software/PC_Application/LibreVNA-GUI/Device/devicedriver.h b/Software/PC_Application/LibreVNA-GUI/Device/devicedriver.h index 6cc8129..c34435b 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/devicedriver.h +++ b/Software/PC_Application/LibreVNA-GUI/Device/devicedriver.h @@ -102,8 +102,8 @@ public: unsigned int maxPoints; // Stimulus level limits in dBm double mindBm, maxdBm; - // dwell time limts - double minDwellTime, maxDwellTime; + // dwell time limit + double maxDwellTime; } VNA; struct { // Number of ports diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/Marker/marker.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/Marker/marker.cpp index c50bfb4..38e21fd 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/Marker/marker.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/Marker/marker.cpp @@ -788,8 +788,10 @@ void Marker::parentTraceDeleted(Trace *t) } } -void Marker::traceDataChanged() +void Marker::traceDataChanged(unsigned int begin, unsigned int end) { + Q_UNUSED(begin) + Q_UNUSED(end) complex newdata; if(!parentTrace || parentTrace->numSamples() == 0) { // no data, invalidate @@ -1088,7 +1090,7 @@ void Marker::constrainPosition() position = parentTrace->sample(parentTrace->index(position)).x; } } - traceDataChanged(); + traceDataChanged(0, parentTrace->size()); } } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/Marker/marker.h b/Software/PC_Application/LibreVNA-GUI/Traces/Marker/marker.h index 7ebac8e..f2fde28 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/Marker/marker.h +++ b/Software/PC_Application/LibreVNA-GUI/Traces/Marker/marker.h @@ -161,7 +161,7 @@ signals: private slots: void parentTraceDeleted(Trace *t); - void traceDataChanged(); + void traceDataChanged(unsigned int begin, unsigned int end); void updateSymbol(); void checkDeltaMarker(); void deltaDeleted(); diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/Math/dft.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/Math/dft.cpp index 0cab2fb..029be3c 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/Math/dft.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/Math/dft.cpp @@ -147,7 +147,7 @@ void Math::DFT::inputSamplesChanged(unsigned int begin, unsigned int end) { Q_UNUSED(begin); Q_UNUSED(end); - if(input->getData().size() < 2) { + if(input->numSamples() < 2) { // not enough input data clearOutput(); warning("Not enough input samples"); @@ -161,7 +161,7 @@ void Math::DFT::inputSamplesChanged(unsigned int begin, unsigned int end) void Math::DFT::updateDFT() { if(dataType != DataType::Invalid) { - inputSamplesChanged(0, input->getData().size()); + inputSamplesChanged(0, input->numSamples()); } } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/Math/expression.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/Math/expression.cpp index f7878ce..0f82145 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/Math/expression.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/Math/expression.cpp @@ -142,6 +142,6 @@ void Math::Expression::expressionChanged() break; } if(input) { - inputSamplesChanged(0, input->getData().size()); + inputSamplesChanged(0, input->numSamples()); } } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/Math/tdr.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/Math/tdr.cpp index 3260bb9..5b08c76 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/Math/tdr.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/Math/tdr.cpp @@ -205,7 +205,7 @@ void TDR::setMode(Mode m) } mode = m; if(input) { - inputSamplesChanged(0, input->getData().size()); + inputSamplesChanged(0, input->numSamples()); } } @@ -213,7 +213,7 @@ void TDR::inputSamplesChanged(unsigned int begin, unsigned int end) { Q_UNUSED(begin); Q_UNUSED(end); - if(input->getData().size() >= 2) { + if(input->numSamples() >= 2) { // trigger calculation in thread semphr.release(); success(); @@ -227,7 +227,7 @@ void TDR::inputSamplesChanged(unsigned int begin, unsigned int end) void TDR::updateTDR() { if(dataType != DataType::Invalid) { - inputSamplesChanged(0, input->getData().size()); + inputSamplesChanged(0, input->numSamples()); } } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.cpp index 926dc2c..9399127 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.cpp @@ -324,3 +324,29 @@ std::vector TraceMath::getData() dataMutex.unlock(); return ret; } + +double TraceMath::minX() +{ + double ret; + dataMutex.lock(); + if(data.size() > 0) { + ret = data.front().x; + } else { + ret = std::numeric_limits::max(); + } + dataMutex.unlock(); + return ret; +} + +double TraceMath::maxX() +{ + double ret; + dataMutex.lock(); + if(data.size() > 0) { + ret = data.back().x; + } else { + ret = std::numeric_limits::min(); + } + dataMutex.unlock(); + return ret; +} diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.h b/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.h index 1583b2a..e99b4b1 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.h +++ b/Software/PC_Application/LibreVNA-GUI/Traces/Math/tracemath.h @@ -48,6 +48,7 @@ class Trace; class TraceMath : public QObject, public Savable { + friend class Trace; Q_OBJECT public: TraceMath(); @@ -112,6 +113,8 @@ public: DataType getDataType() const; virtual std::vector getData(); + virtual double minX(); + virtual double maxX(); Status getStatus() const; QString getStatusDescription() const; virtual Type getType() = 0; diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp index 2c3ac11..13e68c2 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp @@ -1354,19 +1354,19 @@ void Trace::clearDeembedding() double Trace::minX() { - if(lastMath->numSamples() > 0) { - return lastMath->getData().front().x; + if(lastMath == this) { + return TraceMath::minX(); } else { - return numeric_limits::max(); + return lastMath->minX(); } } double Trace::maxX() { - if(lastMath->numSamples() > 0) { - return lastMath->getData().back().x; + if(lastMath == this) { + return TraceMath::maxX(); } else { - return numeric_limits::lowest(); + return lastMath->maxX(); } } @@ -1620,12 +1620,16 @@ double Trace::getGroupDelay(double frequency) int Trace::index(double x) { - auto lower = lower_bound(lastMath->getData().begin(), lastMath->getData().end(), x, [](const Data &lhs, const double x) -> bool { + int ret; + lastMath->dataMutex.lock(); + auto lower = lower_bound(lastMath->data.begin(), lastMath->data.end(), x, [](const Data &lhs, const double x) -> bool { return lhs.x < x; }); - if(lower == lastMath->getData().end()) { + if(lower == lastMath->data.end()) { // actually beyond the last sample, return the index of the last anyway to avoid access past data - return lastMath->getData().size() - 1; + ret = lastMath->data.size() - 1; } - return lower - lastMath->getData().begin(); + ret = lower - lastMath->data.begin(); + lastMath->dataMutex.unlock(); + return ret; } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/trace.h b/Software/PC_Application/LibreVNA-GUI/Traces/trace.h index 0ece8a0..d4b813a 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/trace.h +++ b/Software/PC_Application/LibreVNA-GUI/Traces/trace.h @@ -74,8 +74,8 @@ public: void setDeembeddingActive(bool active); void clearDeembedding(); - double minX(); - double maxX(); + double minX() override; + double maxX() override; double findExtremum(bool max, double xmin = std::numeric_limits::lowest(), double xmax = std::numeric_limits::max()); /* Searches for peaks in the trace data and returns the peak frequencies in ascending order. * Up to maxPeaks will be returned, with higher level peaks taking priority over lower level peaks. diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp index 42fb01a..ddc0620 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp @@ -653,6 +653,7 @@ VNA::VNA(AppWindow *window, QString name) SetPowerSweepFrequency(pref.Startup.DefaultSweep.dbm_freq); SetIFBandwidth(pref.Startup.DefaultSweep.bandwidth); SetAveraging(pref.Startup.DefaultSweep.averaging); + SetDwellTime(pref.Startup.DefaultSweep.dwellTime); SetPoints(pref.Startup.DefaultSweep.points); if(pref.Startup.DefaultSweep.type == "Power Sweep") { SetSweepType(SweepType::Power); @@ -836,6 +837,7 @@ void VNA::resetSettings() SetStopPower(DeviceDriver::getInfo(window->getDevice()).Limits.VNA.maxdBm); SetPowerSweepFrequency(DeviceDriver::getInfo(window->getDevice()).Limits.VNA.maxFreq); SetIFBandwidth(1000); + SetDwellTime(0); SetAveraging(1); SetPoints(501); SetSweepType(SweepType::Frequency); @@ -1246,8 +1248,6 @@ void VNA::SetSourceLevel(double level) void VNA::SetDwellTime(double time) { if(time > DeviceDriver::getInfo(window->getDevice()).Limits.VNA.maxDwellTime) { time = DeviceDriver::getInfo(window->getDevice()).Limits.VNA.maxDwellTime; - } else if(time < DeviceDriver::getInfo(window->getDevice()).Limits.VNA.minDwellTime) { - time = DeviceDriver::getInfo(window->getDevice()).Limits.VNA.minDwellTime; } emit dwellTimeChanged(time); settings.dwellTime = time; @@ -1640,6 +1640,7 @@ void VNA::LoadSweepSettings() SetPoints(s.value("SweepPoints", pref.Startup.DefaultSweep.points).toInt()); SetIFBandwidth(s.value("SweepBandwidth", pref.Startup.DefaultSweep.bandwidth).toUInt()); SetAveraging(s.value("SweepAveraging", pref.Startup.DefaultSweep.averaging).toInt()); + SetDwellTime(s.value("SweepDwellTime", pref.Startup.DefaultSweep.dwellTime).toDouble()); ConstrainAndUpdateFrequencies(); auto typeString = s.value("SweepType", pref.Startup.DefaultSweep.type).toString(); if(typeString == "Power") { @@ -1663,6 +1664,7 @@ void VNA::StoreSweepSettings() s.setValue("SweepBandwidth", settings.bandwidth); s.setValue("SweepPoints", settings.npoints); s.setValue("SweepAveraging", averages); + s.setValue("SweepDwellTime", settings.dwellTime); } void VNA::UpdateCalWidget() @@ -1680,13 +1682,12 @@ void VNA::ConstrainAllSettings() auto maxIFBW = DeviceDriver::getInfo(window->getDevice()).Limits.VNA.maxIFBW; auto minIFBW = DeviceDriver::getInfo(window->getDevice()).Limits.VNA.minIFBW; auto maxDwell = DeviceDriver::getInfo(window->getDevice()).Limits.VNA.maxDwellTime; - auto minDwell = DeviceDriver::getInfo(window->getDevice()).Limits.VNA.minDwellTime; auto maxPoints = DeviceDriver::getInfo(window->getDevice()).Limits.VNA.maxPoints; Util::constrain(settings.Freq.start, minFreq, maxFreq); Util::constrain(settings.Freq.stop, minFreq, maxFreq); Util::constrain(settings.Freq.excitation_power, minPower, maxPower); Util::constrain(settings.bandwidth, minIFBW, maxIFBW); - Util::constrain(settings.dwellTime, minDwell, maxDwell); + Util::constrain(settings.dwellTime, 0.0, maxDwell); Util::constrain(settings.npoints, (unsigned int) 0, maxPoints); Util::constrain(settings.Power.frequency, minFreq, maxFreq); Util::constrain(settings.Power.start, minPower, maxPower); @@ -1832,7 +1833,7 @@ void VNA::preset() void VNA::deviceInfoUpdated() { - if(DeviceDriver::getInfo(window->getDevice()).supportedFeatures.count(DeviceDriver::Feature::VNADwellTime)) { + if(window->getDevice()->supports(DeviceDriver::Feature::VNADwellTime)) { acquisitionDwellTime->setEnabled(true); } else { acquisitionDwellTime->setEnabled(false); diff --git a/Software/PC_Application/LibreVNA-GUI/preferences.cpp b/Software/PC_Application/LibreVNA-GUI/preferences.cpp index 2656194..7bca628 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferences.cpp +++ b/Software/PC_Application/LibreVNA-GUI/preferences.cpp @@ -78,6 +78,9 @@ PreferencesDialog::PreferencesDialog(Preferences *pref, QWidget *parent) : ui->StartupSweepPowerFrequency->setPrefixes(" kMG"); ui->StartupSweepBandwidth->setUnit("Hz"); ui->StartupSweepBandwidth->setPrefixes(" k"); + ui->StartupSweepDwellTime->setUnit("s"); + ui->StartupSweepDwellTime->setPrefixes("um "); + ui->StartupSweepDwellTime->setPrecision(3); ui->StartupGeneratorFrequency->setUnit("Hz"); ui->StartupGeneratorFrequency->setPrefixes(" kMG"); ui->StartupSAStart->setUnit("Hz"); @@ -246,6 +249,7 @@ void PreferencesDialog::setInitialGUIState() ui->StartupGeneratorFrequency->setValue(p->Startup.Generator.frequency); ui->StartupGeneratorLevel->setValue(p->Startup.Generator.level); ui->StartupSweepAveraging->setValue(p->Startup.DefaultSweep.averaging); + ui->StartupSweepDwellTime->setValue(p->Startup.DefaultSweep.dwellTime); ui->StartupSAStart->setValue(p->Startup.SA.start); ui->StartupSAStop->setValue(p->Startup.SA.stop); ui->StartupSARBW->setValue(p->Startup.SA.RBW); @@ -360,6 +364,7 @@ void PreferencesDialog::updateFromGUI() p->Startup.DefaultSweep.bandwidth = ui->StartupSweepBandwidth->value(); p->Startup.DefaultSweep.points = ui->StartupSweepPoints->value(); p->Startup.DefaultSweep.averaging = ui->StartupSweepAveraging->value(); + p->Startup.DefaultSweep.dwellTime = ui->StartupSweepDwellTime->value(); p->Startup.Generator.frequency = ui->StartupGeneratorFrequency->value(); p->Startup.Generator.level = ui->StartupGeneratorLevel->value(); p->Startup.SA.start = ui->StartupSAStart->value(); diff --git a/Software/PC_Application/LibreVNA-GUI/preferences.h b/Software/PC_Application/LibreVNA-GUI/preferences.h index b02042d..b152c1a 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferences.h +++ b/Software/PC_Application/LibreVNA-GUI/preferences.h @@ -84,6 +84,7 @@ public: int points; double bandwidth; int averaging; + double dwellTime; } DefaultSweep; struct { double frequency; @@ -232,6 +233,7 @@ private: {&Startup.DefaultSweep.points, "Startup.DefaultSweep.points", 501}, {&Startup.DefaultSweep.bandwidth, "Startup.DefaultSweep.bandwidth", 1000.0}, {&Startup.DefaultSweep.averaging, "Startup.DefaultSweep.averaging", 1}, + {&Startup.DefaultSweep.dwellTime, "Startup.DefaultSweep.dwellTime", 60e-6}, {&Startup.Generator.frequency, "Startup.Generator.frequency", 1000000000.0}, {&Startup.Generator.level, "Startup.Generator.level", -10.00}, {&Startup.SA.start, "Startup.SA.start", 950000000.0}, diff --git a/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui b/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui index 30e0876..861fcb3 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui +++ b/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui @@ -17,7 +17,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -98,7 +98,7 @@ - 2 + 0 @@ -111,9 +111,9 @@ 0 - -206 - 679 - 836 + 0 + 683 + 928 @@ -167,7 +167,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -201,7 +201,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -268,7 +268,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -493,6 +493,16 @@ + + + + Dwell Time: + + + + + + @@ -673,7 +683,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -703,8 +713,8 @@ 0 0 - 696 - 564 + 564 + 477 @@ -867,7 +877,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -898,7 +908,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -916,7 +926,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -943,9 +953,9 @@ 0 - -400 - 679 - 992 + 0 + 683 + 1118 @@ -1233,7 +1243,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -1257,7 +1267,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -1291,7 +1301,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -1436,7 +1446,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -1466,8 +1476,8 @@ 0 0 - 402 - 540 + 683 + 605 @@ -1684,7 +1694,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -1711,7 +1721,7 @@ - QComboBox::AdjustToContents + QComboBox::SizeAdjustPolicy::AdjustToContents @@ -1782,7 +1792,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -1812,8 +1822,8 @@ 0 0 - 138 - 112 + 697 + 563 @@ -1859,7 +1869,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -1874,7 +1884,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -2056,7 +2066,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -2071,7 +2081,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -2095,8 +2105,8 @@ 0 0 - 696 - 564 + 697 + 563 @@ -2156,7 +2166,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -2171,7 +2181,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -2193,10 +2203,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Apply|QDialogButtonBox::Ok|QDialogButtonBox::Open|QDialogButtonBox::RestoreDefaults|QDialogButtonBox::Save + QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Ok|QDialogButtonBox::StandardButton::Open|QDialogButtonBox::StandardButton::RestoreDefaults|QDialogButtonBox::StandardButton::Save false diff --git a/Software/VNA_embedded/Application/App.cpp b/Software/VNA_embedded/Application/App.cpp index 62ad231..be2cb3b 100644 --- a/Software/VNA_embedded/Application/App.cpp +++ b/Software/VNA_embedded/Application/App.cpp @@ -273,7 +273,7 @@ inline void App_Process() { } break; case Protocol::PacketType::DeviceConfiguration: - HW::setAcquisitionFrequencies(recv_packet.deviceConfig); + HW::setDeviceConfig(recv_packet.deviceConfig); Communication::SendWithoutPayload(Protocol::PacketType::Ack); break; case Protocol::PacketType::SetTrigger: diff --git a/Software/VNA_embedded/Application/Communication/Protocol.hpp b/Software/VNA_embedded/Application/Communication/Protocol.hpp index ca28602..8f92a77 100644 --- a/Software/VNA_embedded/Application/Communication/Protocol.hpp +++ b/Software/VNA_embedded/Application/Communication/Protocol.hpp @@ -216,7 +216,6 @@ using DeviceInfo = struct _deviceInfo { uint8_t limits_maxAmplitudePoints; uint64_t limits_maxFreqHarmonic; uint8_t num_ports; - uint16_t limits_minDwellTime; uint16_t limits_maxDwellTime; }; @@ -440,6 +439,7 @@ using DeviceConfig = struct _deviceconfig { uint32_t IF1; uint8_t ADCprescaler; uint16_t DFTphaseInc; + uint8_t PLLSettlingDelay; } V1; struct { uint32_t ip; diff --git a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp index 0c81583..e600c59 100644 --- a/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp +++ b/Software/VNA_embedded/Application/Drivers/FPGA/FPGA.cpp @@ -353,7 +353,7 @@ void FPGA::SetMode(Mode mode) { Low(AUX2); Delay::us(1); High(CS); - // Configure SPI to use faster speed of 32MHz + // Configure SPI to use faster speed of 42.5MHz FPGA_SPI.Instance->CR1 = (FPGA_SPI.Instance->CR1 & ~SPI_CR1_BR_Msk) | SPI_BAUDRATEPRESCALER_4; break; case Mode::SourcePLL: @@ -361,15 +361,15 @@ void FPGA::SetMode(Mode mode) { Low(AUX2); Delay::us(1); High(AUX1); - // Configure SPI to use slower speed of 16MHz (MAX2871 is limited to 20MHz) - FPGA_SPI.Instance->CR1 = (FPGA_SPI.Instance->CR1 & ~SPI_CR1_BR_Msk) | SPI_BAUDRATEPRESCALER_8; + // Configure SPI to use slower speed of 10.625MHz (MAX2871 is limited to 20MHz) + FPGA_SPI.Instance->CR1 = (FPGA_SPI.Instance->CR1 & ~SPI_CR1_BR_Msk) | SPI_BAUDRATEPRESCALER_16; break; case Mode::LOPLL: Low(CS); Low(AUX1); Delay::us(1); High(AUX2); - // Configure SPI to use slower speed of 16MHz (MAX2871 is limited to 20MHz) + // Configure SPI to use slower speed of 10.625MHz (MAX2871 is limited to 20MHz) FPGA_SPI.Instance->CR1 = (FPGA_SPI.Instance->CR1 & ~SPI_CR1_BR_Msk) | SPI_BAUDRATEPRESCALER_8; break; } diff --git a/Software/VNA_embedded/Application/Drivers/stm.cpp b/Software/VNA_embedded/Application/Drivers/stm.cpp index def6d9c..258431d 100644 --- a/Software/VNA_embedded/Application/Drivers/stm.cpp +++ b/Software/VNA_embedded/Application/Drivers/stm.cpp @@ -1,5 +1,9 @@ #include "stm.hpp" +#define LOG_LEVEL LOG_LEVEL_INFO +#define LOG_MODULE "STM" +#include "Log.h" + using Callback = void(*)(void); static constexpr uint8_t numCallbacks = 10; static Callback callbacks[numCallbacks]; @@ -34,6 +38,7 @@ bool STM::DispatchToInterrupt(void (*cb)(void)) { return true; } else { // already at limit + LOG_ERR("Interrupt dispatch queue full"); return false; } } diff --git a/Software/VNA_embedded/Application/Hardware.cpp b/Software/VNA_embedded/Application/Hardware.cpp index bf1f939..68dee17 100644 --- a/Software/VNA_embedded/Application/Hardware.cpp +++ b/Software/VNA_embedded/Application/Hardware.cpp @@ -26,11 +26,17 @@ static bool StatusUpdateFlag = true; static Protocol::ReferenceSettings ref; static volatile uint64_t lastISR; -static uint32_t IF1 = HW::DefaultIF1; -static uint32_t IF2 = HW::DefaultIF2; -static uint32_t ADCsamplerate = HW::DefaultADCSamplerate; -static uint8_t ADCprescaler = HW::DefaultADCprescaler; -static uint16_t DFTphaseInc = HW::DefaultDFTphaseInc; +// increment when device config struct format changed. If a wrong version is found in flash, it will revert to default values +static constexpr uint16_t deviceConfigVersion = 0x001; + +using DeviceConfig = struct _devicConfig { + uint16_t version; + Protocol::DeviceConfig config; + uint32_t IF2; + uint32_t ADCsamplerate; +}; + +static DeviceConfig deviceConfig; using namespace HWHAL; @@ -100,6 +106,8 @@ bool HW::Init() { activeMode = Mode::Idle; + LoadDeviceConfig(); + Si5351.Init(); // Use Si5351 to generate reference frequencies for other PLLs and ADC @@ -152,12 +160,12 @@ bool HW::Init() { FPGA::DisableHardwareOverwrite(); // Set default ADC samplerate - FPGA::WriteRegister(FPGA::Reg::ADCPrescaler, ADCprescaler); + FPGA::WriteRegister(FPGA::Reg::ADCPrescaler, deviceConfig.config.V1.ADCprescaler); // Set phase increment according to - FPGA::WriteRegister(FPGA::Reg::PhaseIncrement, DFTphaseInc); + FPGA::WriteRegister(FPGA::Reg::PhaseIncrement, deviceConfig.config.V1.DFTphaseInc); // Set default settling time - FPGA::SetSettlingTime(HW::DefaultDwellTime); + FPGA::SetSettlingTime(deviceConfig.config.V1.PLLSettlingDelay); Exti::SetCallback(FPGA_INTR_GPIO_Port, FPGA_INTR_Pin, Exti::EdgeType::Rising, Exti::Pull::Down, FPGA_Interrupt); @@ -190,7 +198,7 @@ bool HW::Init() { } else { LOG_INFO("LO1 VCO map complete"); } - LO1.SetFrequency(1000000000 + IF1); + LO1.SetFrequency(1000000000 + deviceConfig.config.V1.IF1); LO1.UpdateFrequency(); LOG_DEBUG("LO temp: %u", LO1.GetTemp()); @@ -428,37 +436,39 @@ Si5351C::PLLSource HW::Ref::getSource() { } } -void HW::setAcquisitionFrequencies(Protocol::DeviceConfig s) { - IF1 = s.V1.IF1; - ADCprescaler = s.V1.ADCprescaler; - DFTphaseInc = s.V1.DFTphaseInc; - float ADCrate = (float) FPGA::Clockrate / ADCprescaler; - IF2 = ADCrate * DFTphaseInc / 4096; - ADCsamplerate = ADCrate; +static void updateOtherParametersFromProtocolDeviceConfig() { + float ADCrate = (float) FPGA::Clockrate / deviceConfig.config.V1.ADCprescaler; + deviceConfig.IF2 = ADCrate * deviceConfig.config.V1.DFTphaseInc / 4096; + deviceConfig.ADCsamplerate = ADCrate; +} + +void HW::setDeviceConfig(Protocol::DeviceConfig s) { + deviceConfig.config = s; + if(deviceConfig.config.V1.PLLSettlingDelay < HW::MinPLLSettlingDelay) { + deviceConfig.config.V1.PLLSettlingDelay = HW::MinPLLSettlingDelay; + } + updateOtherParametersFromProtocolDeviceConfig(); + SaveDeviceConfig(); } Protocol::DeviceConfig HW::getDeviceConfig() { - Protocol::DeviceConfig s; - s.V1.ADCprescaler = ADCprescaler; - s.V1.DFTphaseInc = DFTphaseInc; - s.V1.IF1 = IF1; - return s; + return deviceConfig.config; } uint32_t HW::getIF1() { - return IF1; + return deviceConfig.config.V1.IF1; } uint32_t HW::getIF2() { - return IF2; + return deviceConfig.IF2; } uint32_t HW::getADCRate() { - return ADCsamplerate; + return deviceConfig.ADCsamplerate; } uint8_t HW::getADCPrescaler() { - return ADCprescaler; + return deviceConfig.config.V1.ADCprescaler; } uint64_t HW::getLastISRTimestamp() { @@ -496,6 +506,44 @@ void HW::updateDeviceStatus() { } uint16_t HW::getDFTPhaseInc() { - return DFTphaseInc; + return deviceConfig.config.V1.DFTphaseInc; } +uint8_t HW::getPLLSettlingDelay() { + return deviceConfig.config.V1.PLLSettlingDelay; +} + +bool HW::LoadDeviceConfig() { + HWHAL::flash.read(flash_address, sizeof(deviceConfig), &deviceConfig); + if(deviceConfig.version != deviceConfigVersion) { + LOG_WARN("Invalid version in flash, expected %u, got %u", deviceConfigVersion, deviceConfig.version); + SetDefaultDeviceConfig(); + return false; + } else { + LOG_INFO("Device config loaded from flash"); + return true; + } +} + +bool HW::SaveDeviceConfig() { + if(!HWHAL::flash.eraseRange(flash_address, flash_size)) { + return false; + } + uint32_t write_size = sizeof(deviceConfig); + if(write_size % Flash::PageSize != 0) { + // round up to next page + write_size += Flash::PageSize - write_size % Flash::PageSize; + } + return HWHAL::flash.write(flash_address, write_size, &deviceConfig); +} + +void HW::SetDefaultDeviceConfig() { + memset(&deviceConfig, 0, sizeof(deviceConfig)); + deviceConfig.version = deviceConfigVersion; + deviceConfig.config.V1.IF1 = HW::DefaultIF1; + deviceConfig.config.V1.ADCprescaler = HW::DefaultADCprescaler; + deviceConfig.config.V1.DFTphaseInc = HW::DefaultDFTphaseInc; + deviceConfig.config.V1.PLLSettlingDelay = HW::DefaultPLLSettlingDelay; + updateOtherParametersFromProtocolDeviceConfig(); + LOG_INFO("Device config set to default"); +} diff --git a/Software/VNA_embedded/Application/Hardware.hpp b/Software/VNA_embedded/Application/Hardware.hpp index 77cbb59..e429e89 100644 --- a/Software/VNA_embedded/Application/Hardware.hpp +++ b/Software/VNA_embedded/Application/Hardware.hpp @@ -45,7 +45,8 @@ static constexpr uint32_t BandSwitchFrequency = 25000000; static constexpr uint32_t DefaultLO2 = DefaultIF1 - DefaultIF2; static constexpr uint8_t LO2Multiplier = 13; static constexpr uint32_t SI5351CPLLAlignedFrequency = DefaultLO2 * LO2Multiplier; -static constexpr uint16_t DefaultDwellTime = 60; +static constexpr uint16_t DefaultPLLSettlingDelay = 60; +static constexpr uint16_t MinPLLSettlingDelay = 10; static constexpr uint8_t DefaultADCprescaler = FPGA::Clockrate / DefaultADCSamplerate; static_assert(DefaultADCprescaler * DefaultADCSamplerate == FPGA::Clockrate, "ADCSamplerate can not be reached exactly"); @@ -87,7 +88,6 @@ static constexpr Protocol::DeviceInfo Info = { .limits_maxAmplitudePoints = Cal::maxPoints, .limits_maxFreqHarmonic = 18000000000, .num_ports = 2, - .limits_minDwellTime = 0, .limits_maxDwellTime = 10239, }; @@ -135,13 +135,21 @@ namespace Ref { Si5351C::PLLSource getSource(); } -// Acquisition frequency settings -void setAcquisitionFrequencies(Protocol::DeviceConfig s); +// Device configuration settings +constexpr uint32_t flash_address = Firmware::maxSize + Cal::flash_size; // stored directly behind calibration in flash +constexpr uint32_t flash_size = 4096; // reserve one sector for now + +bool LoadDeviceConfig(); +bool SaveDeviceConfig(); +void SetDefaultDeviceConfig(); + +void setDeviceConfig(Protocol::DeviceConfig s); Protocol::DeviceConfig getDeviceConfig(); uint32_t getIF1(); uint32_t getIF2(); uint32_t getADCRate(); uint8_t getADCPrescaler(); uint16_t getDFTPhaseInc(); +uint8_t getPLLSettlingDelay(); } diff --git a/Software/VNA_embedded/Application/VNA.cpp b/Software/VNA_embedded/Application/VNA.cpp index 966a683..9219fa4 100644 --- a/Software/VNA_embedded/Application/VNA.cpp +++ b/Software/VNA_embedded/Application/VNA.cpp @@ -47,7 +47,8 @@ static_assert(alternativePhaseInc * alternativeSamplerate == 4096 * HW::DefaultI // Constants for USB buffer overflow prevention static constexpr uint16_t maxPointsBetweenHalts = 40; -static constexpr uint32_t reservedUSBbuffer = maxPointsBetweenHalts * (sizeof(Protocol::Datapoint) + 8 /*USB packet overhead*/); +static constexpr uint16_t full2portDatapointSize = 66;// See Protocol::VNADatapoint:: +static constexpr uint32_t reservedUSBbuffer = (maxPointsBetweenHalts + 2 /*additional buffer*/) * (full2portDatapointSize + 8 /*USB packet overhead*/); using namespace HWHAL; @@ -118,6 +119,9 @@ bool VNA::Setup(Protocol::SweepSettings s) { if(settings.points > FPGA::MaxPoints) { settings.points = FPGA::MaxPoints; } + if(settings.dwell_time > HW::Info.limits_maxDwellTime) { + settings.dwell_time = HW::Info.limits_maxDwellTime; + } settings = s; // calculate factor between adjacent points for log sweep for faster calculation when sweeping logMultiplier = pow((double) settings.f_stop / settings.f_start, 1.0 / (settings.points-1)); @@ -132,7 +136,7 @@ bool VNA::Setup(Protocol::SweepSettings s) { // has to be one less than actual number of samples FPGA::SetSamplesPerPoint(samplesPerPoint); - FPGA::SetSettlingTime(s.dwell_time); + FPGA::SetSettlingTime(s.dwell_time + HW::getPLLSettlingDelay()); // reset unlevel flag if it was set from a previous sweep/mode HW::SetOutputUnlevel(false); @@ -216,6 +220,7 @@ bool VNA::Setup(Protocol::SweepSettings s) { pointsWithoutHalt++; if(pointsWithoutHalt > maxPointsBetweenHalts) { needs_halt = true; + pointsWithoutHalt = 0; } } else { pointsWithoutHalt = 0; @@ -304,7 +309,9 @@ static void PassOnData() { Protocol::PacketInfo info; info.type = Protocol::PacketType::VNADatapoint; info.VNAdatapoint = &data; - Communication::Send(info); + if(!Communication::Send(info)) { + LOG_ERR("Failed to transmit VNADatapoint"); + } data.clear(); }