Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LIBRARY ieee;
- use ieee.numeric_std.all;
- use IEEE.std_logic_1164.all;
- library work;
- use work.type_package.all;
- ENTITY uart_interpreter IS
- generic (
- max_experiment_repetition_counter_value : integer;
- max_step_counter_value : integer;
- max_initialization_repetition_counter_value : integer;
- max_photon_counter_value : integer;
- max_photon_counter_window_pulse_value : integer
- );
- PORT(
- rst : in std_logic;
- clk : in std_logic;
- ready : in std_logic;
- byte0 : in std_logic_vector(7 downto 0);
- byte1 : in std_logic_vector(7 downto 0);
- byte2 : in std_logic_vector(7 downto 0);
- byte3 : in std_logic_vector(7 downto 0);
- byte4 : in std_logic_vector(7 downto 0);
- byte5 : in std_logic_vector(7 downto 0);
- experiment_repetition_counter_threshold : out integer range 0 to max_experiment_repetition_counter_value;
- initialization_repetition_counter_threshold : out integer range 0 to max_initialization_repetition_counter_value;
- step_counter_threshold_initialization : out integer range 0 to max_step_counter_value;
- step_counter_threshold_measurement : out integer range 0 to max_step_counter_value;
- photon_counter_threshold_initialization : out integer range 0 to max_photon_counter_value;
- photon_counter_threshold_measurement : out integer range 0 to max_photon_counter_value;
- photon_counter_window_offset_initialization : out integer range 0 to max_photon_counter_window_pulse_value;
- photon_counter_window_length_initialization : out integer range 0 to max_photon_counter_window_pulse_value;
- photon_counter_window_offset_measurement : out integer range 0 to max_photon_counter_window_pulse_value;
- photon_counter_window_length_measurement : out integer range 0 to max_photon_counter_window_pulse_value;
- laser_1_offset1_initialization : out integer range 0 to max_step_counter_value;
- laser_1_length1_initialization : out integer range 0 to max_step_counter_value;
- laser_1_offset2_initialization : out integer range 0 to max_step_counter_value;
- laser_1_length2_initialization : out integer range 0 to max_step_counter_value;
- laser_1_offset1_measurement : out integer range 0 to max_step_counter_value;
- laser_1_length1_measurement : out integer range 0 to max_step_counter_value;
- laser_1_offset2_measurement : out integer range 0 to max_step_counter_value;
- laser_1_length2_measurement : out integer range 0 to max_step_counter_value;
- laser_2_offset1_initialization : out integer range 0 to max_step_counter_value;
- laser_2_length1_initialization : out integer range 0 to max_step_counter_value;
- laser_2_offset2_initialization : out integer range 0 to max_step_counter_value;
- laser_2_length2_initialization : out integer range 0 to max_step_counter_value;
- laser_2_offset1_measurement : out integer range 0 to max_step_counter_value;
- laser_2_length1_measurement : out integer range 0 to max_step_counter_value;
- laser_2_offset2_measurement : out integer range 0 to max_step_counter_value;
- laser_2_length2_measurement : out integer range 0 to max_step_counter_value;
- laser_3_offset1_initialization : out integer range 0 to max_step_counter_value;
- laser_3_length1_initialization : out integer range 0 to max_step_counter_value;
- laser_3_offset2_initialization : out integer range 0 to max_step_counter_value;
- laser_3_length2_initialization : out integer range 0 to max_step_counter_value;
- laser_3_offset1_measurement : out integer range 0 to max_step_counter_value;
- laser_3_length1_measurement : out integer range 0 to max_step_counter_value;
- laser_3_offset2_measurement : out integer range 0 to max_step_counter_value;
- laser_3_length2_measurement : out integer range 0 to max_step_counter_value;
- laser_4_offset1_initialization : out integer range 0 to max_step_counter_value;
- laser_4_length1_initialization : out integer range 0 to max_step_counter_value;
- laser_4_offset2_initialization : out integer range 0 to max_step_counter_value;
- laser_4_length2_initialization : out integer range 0 to max_step_counter_value;
- laser_4_offset1_measurement : out integer range 0 to max_step_counter_value;
- laser_4_length1_measurement : out integer range 0 to max_step_counter_value;
- laser_4_offset2_measurement : out integer range 0 to max_step_counter_value;
- laser_4_length2_measurement : out integer range 0 to max_step_counter_value;
- htm_dac_1_offset1_initialization : out integer range 0 to max_step_counter_value;
- htm_dac_1_length1_initialization : out integer range 0 to max_step_counter_value;
- htm_dac_1_offset2_initialization : out integer range 0 to max_step_counter_value;
- htm_dac_1_length2_initialization : out integer range 0 to max_step_counter_value;
- htm_dac_1_offset1_measurement : out integer range 0 to max_step_counter_value;
- htm_dac_1_length1_measurement : out integer range 0 to max_step_counter_value;
- htm_dac_1_offset2_measurement : out integer range 0 to max_step_counter_value;
- htm_dac_1_length2_measurement : out integer range 0 to max_step_counter_value;
- htm_dac_2_offset1_initialization : out integer range 0 to max_step_counter_value;
- htm_dac_2_length1_initialization : out integer range 0 to max_step_counter_value;
- htm_dac_2_offset2_initialization : out integer range 0 to max_step_counter_value;
- htm_dac_2_length2_initialization : out integer range 0 to max_step_counter_value;
- htm_dac_2_offset1_measurement : out integer range 0 to max_step_counter_value;
- htm_dac_2_length1_measurement : out integer range 0 to max_step_counter_value;
- htm_dac_2_offset2_measurement : out integer range 0 to max_step_counter_value;
- htm_dac_2_length2_measurement : out integer range 0 to max_step_counter_value;
- ni_gate_offset1_initialization : out integer range 0 to max_step_counter_value;
- ni_gate_length1_initialization : out integer range 0 to max_step_counter_value;
- ni_gate_offset2_initialization : out integer range 0 to max_step_counter_value;
- ni_gate_length2_initialization : out integer range 0 to max_step_counter_value;
- ni_gate_offset1_measurement : out integer range 0 to max_step_counter_value;
- ni_gate_length1_measurement : out integer range 0 to max_step_counter_value;
- ni_gate_offset2_measurement : out integer range 0 to max_step_counter_value;
- ni_gate_length2_measurement : out integer range 0 to max_step_counter_value;
- start : out std_logic;
- measurement_mode : out t_measurement
- );
- END ENTITY uart_interpreter;
- ARCHITECTURE behavioural OF uart_interpreter IS
- type t_integer_array_step_counter is array (integer range <>, integer range <>) of integer range 0 to max_step_counter_value;
- signal demux_uart_pulser : t_integer_array_step_counter(0 to 6, 0 to 7);
- signal start_experiment : std_logic;
- begin
- laser_1_offset1_initialization <= demux_uart_pulser(0,0);
- laser_1_length1_initialization <= demux_uart_pulser(0,1);
- laser_1_offset2_initialization <= demux_uart_pulser(0,2);
- laser_1_length2_initialization <= demux_uart_pulser(0,3);
- laser_1_offset1_measurement <= demux_uart_pulser(0,4);
- laser_1_length1_measurement <= demux_uart_pulser(0,5);
- laser_1_offset2_measurement <= demux_uart_pulser(0,6);
- laser_1_length2_measurement <= demux_uart_pulser(0,7);
- laser_2_offset1_initialization <= demux_uart_pulser(1,0);
- laser_2_length1_initialization <= demux_uart_pulser(1,1);
- laser_2_offset2_initialization <= demux_uart_pulser(1,2);
- laser_2_length2_initialization <= demux_uart_pulser(1,3);
- laser_2_offset1_measurement <= demux_uart_pulser(1,4);
- laser_2_length1_measurement <= demux_uart_pulser(1,5);
- laser_2_offset2_measurement <= demux_uart_pulser(1,6);
- laser_2_length2_measurement <= demux_uart_pulser(1,7);
- laser_3_offset1_initialization <= demux_uart_pulser(2,0);
- laser_3_length1_initialization <= demux_uart_pulser(2,1);
- laser_3_offset2_initialization <= demux_uart_pulser(2,2);
- laser_3_length2_initialization <= demux_uart_pulser(2,3);
- laser_3_offset1_measurement <= demux_uart_pulser(2,4);
- laser_3_length1_measurement <= demux_uart_pulser(2,5);
- laser_3_offset2_measurement <= demux_uart_pulser(2,6);
- laser_3_length2_measurement <= demux_uart_pulser(2,7);
- laser_4_offset1_initialization <= demux_uart_pulser(3,0);
- laser_4_length1_initialization <= demux_uart_pulser(3,1);
- laser_4_offset2_initialization <= demux_uart_pulser(3,2);
- laser_4_length2_initialization <= demux_uart_pulser(3,3);
- laser_4_offset1_measurement <= demux_uart_pulser(3,4);
- laser_4_length1_measurement <= demux_uart_pulser(3,5);
- laser_4_offset2_measurement <= demux_uart_pulser(3,6);
- laser_4_length2_measurement <= demux_uart_pulser(3,7);
- htm_dac_1_offset1_initialization <= demux_uart_pulser(4,0);
- htm_dac_1_length1_initialization <= demux_uart_pulser(4,1);
- htm_dac_1_offset2_initialization <= demux_uart_pulser(4,2);
- htm_dac_1_length2_initialization <= demux_uart_pulser(4,3);
- htm_dac_1_offset1_measurement <= demux_uart_pulser(4,4);
- htm_dac_1_length1_measurement <= demux_uart_pulser(4,5);
- htm_dac_1_offset2_measurement <= demux_uart_pulser(4,6);
- htm_dac_1_length2_measurement <= demux_uart_pulser(4,7);
- htm_dac_2_offset1_initialization <= demux_uart_pulser(5,0);
- htm_dac_2_length1_initialization <= demux_uart_pulser(5,1);
- htm_dac_2_offset2_initialization <= demux_uart_pulser(5,2);
- htm_dac_2_length2_initialization <= demux_uart_pulser(5,3);
- htm_dac_2_offset1_measurement <= demux_uart_pulser(5,4);
- htm_dac_2_length1_measurement <= demux_uart_pulser(5,5);
- htm_dac_2_offset2_measurement <= demux_uart_pulser(5,6);
- htm_dac_2_length2_measurement <= demux_uart_pulser(5,7);
- ni_gate_offset1_initialization <= demux_uart_pulser(6,0);
- ni_gate_length1_initialization <= demux_uart_pulser(6,1);
- ni_gate_offset2_initialization <= demux_uart_pulser(6,2);
- ni_gate_length2_initialization <= demux_uart_pulser(6,3);
- ni_gate_offset1_measurement <= demux_uart_pulser(6,4);
- ni_gate_length1_measurement <= demux_uart_pulser(6,5);
- ni_gate_offset2_measurement <= demux_uart_pulser(6,6);
- ni_gate_length2_measurement <= demux_uart_pulser(6,7);
- process (rst, clk) is
- begin
- if rst = '1' then
- experiment_repetition_counter_threshold <= 0;
- initialization_repetition_counter_threshold <= 0;
- step_counter_threshold_initialization <= 0;
- step_counter_threshold_measurement <= 0;
- photon_counter_threshold_initialization <= 0;
- photon_counter_threshold_measurement <= 0;
- photon_counter_window_offset_initialization <= 0;
- photon_counter_window_length_initialization <= 0;
- photon_counter_window_offset_measurement <= 0;
- photon_counter_window_length_measurement <= 0;
- start_experiment <= '0';
- measurement_mode <= measurement1;
- demux_uart_pulser <= (others => (others => 0));
- elsif rising_edge(clk) then
- if ready = '1' then
- case to_integer(unsigned(byte0)) is
- when 0 =>
- case to_integer(unsigned(byte1)) is
- when 0 =>
- experiment_repetition_counter_threshold <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 1 =>
- initialization_repetition_counter_threshold <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 2 =>
- step_counter_threshold_initialization <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 3 =>
- step_counter_threshold_measurement <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 4 =>
- photon_counter_threshold_initialization <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 5 =>
- photon_counter_threshold_measurement <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 6 =>
- photon_counter_window_offset_initialization <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 7 =>
- photon_counter_window_length_initialization <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 8 =>
- photon_counter_window_offset_measurement <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 9 =>
- photon_counter_window_length_measurement <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 10 =>
- if byte3 = "00000000" then
- measurement_mode <= measurement1;
- else
- measurement_mode <= measurement2;
- end if;
- when others =>
- null;
- end case;
- when 1 =>
- demux_uart_pulser(to_integer(unsigned(byte1)), to_integer(unsigned(byte2))) <= to_integer(unsigned(byte5 & byte4 & byte3));
- when 2 =>
- if byte3 /= "00000000" then
- start_experiment <= '1';
- end if;
- when 3 =>
- experiment_repetition_counter_threshold <= 0;
- initialization_repetition_counter_threshold <= 0;
- step_counter_threshold_initialization <= 0;
- step_counter_threshold_measurement <= 0;
- photon_counter_threshold_initialization <= 0;
- photon_counter_threshold_measurement <= 0;
- photon_counter_window_offset_initialization <= 0;
- photon_counter_window_length_initialization <= 0;
- photon_counter_window_offset_measurement <= 0;
- photon_counter_window_length_measurement <= 0;
- start_experiment <= '0';
- measurement_mode <= measurement1;
- demux_uart_pulser <= (others => (others => 0));
- when others =>
- null;
- end case;
- end if;
- if start_experiment = '1' then
- start_experiment <= '0';
- end if;
- end if;
- end process;
- start <= start_experiment;
- end architecture behavioural;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement