From 8f8733aefb530048c074726438270afff99a4cd0 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Mon, 17 Feb 2020 22:22:50 +0100 Subject: [PATCH 01/41] wip --- hdl/top.vhd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hdl/top.vhd b/hdl/top.vhd index e8b54f5..2cc8822 100644 --- a/hdl/top.vhd +++ b/hdl/top.vhd @@ -19,6 +19,9 @@ PORT( HEX4 : out std_logic_vector(6 downto 0); HEX5 : out std_logic_vector(6 downto 0); + -- //////////// Infrared Interface ////////// + IRDA_RXD : in std_logic; + IRDA_TXD : in std_logic; ---------HPS Connections--------------- HPS_CONV_USB_N : inout std_logic; From 57d0885373c46a92a8bcc9eb4c46ec789c86510b Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 14:17:26 +0100 Subject: [PATCH 02/41] add hdl units --- hdl/components/infrared/counter.vhd | 91 +++++++++++++++++++ hdl/components/infrared/infrared.vhd | 116 ++++++++++++++++++++++++ hdl/components/infrared/strobe_gen.vhd | 119 +++++++++++++++++++++++++ hdl/components/infrared/sync.vhd | 101 +++++++++++++++++++++ 4 files changed, 427 insertions(+) create mode 100644 hdl/components/infrared/counter.vhd create mode 100644 hdl/components/infrared/infrared.vhd create mode 100644 hdl/components/infrared/strobe_gen.vhd create mode 100644 hdl/components/infrared/sync.vhd diff --git a/hdl/components/infrared/counter.vhd b/hdl/components/infrared/counter.vhd new file mode 100644 index 0000000..d129025 --- /dev/null +++ b/hdl/components/infrared/counter.vhd @@ -0,0 +1,91 @@ +------------------------------------------------------------------------------- +--! @file counter.vhd +--! @author Michael Wurm +--! @copyright 2020 Michael Wurm +--! @brief Entity implementation of counter. +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +--! @brief Entity declaration of counter +--! @details +--! Provides a counter value of clock ticks of clk_i. +--! The counter is free-running, and thus overflows at its maximum. + +entity counter is + port ( + --! @name Clocks and resets + --! @{ + + --! System clock + clk_i : in std_logic; + --! Asynchronous reset + rst_n_i : in std_logic; + + --! @} + --! @name Control signals + --! @{ + + --! Enable + enable_i : in std_ulogic; + --! Generated strobe + count_o : out std_ulogic_vector(31 downto 0)); + + --! @} + +end entity counter; + +--! RTL implementation of counter +architecture rtl of counter is + ----------------------------------------------------------------------------- + --! @name Internal Registers + ----------------------------------------------------------------------------- + --! @{ + + signal count : unsigned(count_o'range); + + --! @} + ----------------------------------------------------------------------------- + --! @name Internal Wires + ----------------------------------------------------------------------------- + --! @{ + + + --! @} + +begin -- architecture rtl + + ------------------------------------------------------------------------------ + -- Outputs + ------------------------------------------------------------------------------ + + count_o <= count; + + ----------------------------------------------------------------------------- + -- Signal Assignments + ----------------------------------------------------------------------------- + + ------------------------------------------------------------------------------ + -- Registers + ------------------------------------------------------------------------------ + + regs : process (clk_i, rst_n_i) is + procedure reset is + begin + count <= to_unsigned(0, count'length); + end procedure reset; + begin -- process strobe + if rst_n_i = '0' then + reset; + elsif rising_edge(clk_i) then + if enable_i = '0' then + reset; + else + count <= count + 1; + end if; + end if; + end process regs; + +end architecture rtl; diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd new file mode 100644 index 0000000..e31e345 --- /dev/null +++ b/hdl/components/infrared/infrared.vhd @@ -0,0 +1,116 @@ +------------------------------------------------------------------------------- +--! @file infrared.vhd +--! @author Michael Wurm +--! @copyright 2020 Michael Wurm +--! @brief Entity implementation of infrared. +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +--! @brief Entity declaration of infrared +--! @details +--! TODO + +entity infrared is + generic ( + --! System clock frequency + clk_freq_g : natural := clk_freq_c; + --! Period between two strobes + period_g : time := 100 us); + port ( + --! @name Clocks and resets + --! @{ + + --! System clock + clk_i : in std_logic; + --! Asynchronous reset + rst_n_i : in std_logic; + + --! @} + --! @name Strobe signals + --! @{ + + --! Enable + enable_i : in std_ulogic; + --! Generated strobe + strobe_o : out std_ulogic); + + --! @} + +begin + + -- pragma translate_off + assert ((1 sec / clk_freq_g) <= period_g) + report "infrared: The Clk frequency is to low to generate such a short strobe cycle." + severity error; + -- pragma translate_on + +end entity infrared; + +--! RTL implementation of infrared +architecture rtl of infrared is + ----------------------------------------------------------------------------- + --! @name Types and Constants + ----------------------------------------------------------------------------- + --! @{ + + constant clks_per_strobe_c : natural := clk_freq_g / (1 sec / period_g); + + --! @} + ----------------------------------------------------------------------------- + --! @name Internal Registers + ----------------------------------------------------------------------------- + --! @{ + + signal count : unsigned(log_dualis(clks_per_strobe_c) downto 0); + + --! @} + ----------------------------------------------------------------------------- + --! @name Internal Wires + ----------------------------------------------------------------------------- + --! @{ + + signal strobe : std_ulogic; + + --! @} + +begin -- architecture rtl + + ------------------------------------------------------------------------------ + -- Outputs + ------------------------------------------------------------------------------ + + strobe_o <= strobe; + + ------------------------------------------------------------------------------ + -- Registers + ------------------------------------------------------------------------------ + + -- Count the number of clk_i cycles from strobe pulse to strobe pulse. + regs : process (clk_i, rst_n_i) is + procedure reset is + begin + count <= to_unsigned(0, count'length); + strobe <= '0'; + end procedure reset; + begin -- process strobe + if rst_n_i = '0' then + reset; + elsif rising_edge(clk_i) then + if enable_i = '0' then + reset; + else + if count = clks_per_strobe_c-1 then + count <= (others => '0'); + strobe <= '1'; + else + count <= count + 1; + strobe <= '0'; + end if; + end if; + end if; + end process regs; + +end architecture rtl; diff --git a/hdl/components/infrared/strobe_gen.vhd b/hdl/components/infrared/strobe_gen.vhd new file mode 100644 index 0000000..8c26822 --- /dev/null +++ b/hdl/components/infrared/strobe_gen.vhd @@ -0,0 +1,119 @@ +------------------------------------------------------------------------------- +--! @file strobe_gen.vhd +--! @author Michael Wurm +--! @copyright 2020 Michael Wurm +--! @brief Entity implementation of strobe_gen. +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +--! @brief Entity declaration of strobe_gen +--! @details +--! Generates a strobe signal that will be '1' for one clock cycle +--! of clk_i. The strobe comes every period_g. If this cycle time +--! cannot be generated exactly it will be truncated with the +--! accuracy of one clk_i cycle. + +entity strobe_gen is + generic ( + --! System clock frequency + clk_freq_g : natural := clk_freq_c; + --! Period between two strobes + period_g : time := 100 us); + port ( + --! @name Clocks and resets + --! @{ + + --! System clock + clk_i : in std_logic; + --! Asynchronous reset + rst_n_i : in std_logic; + + --! @} + --! @name Strobe signals + --! @{ + + --! Enable + enable_i : in std_ulogic; + --! Generated strobe + strobe_o : out std_ulogic); + + --! @} + +begin + + -- pragma translate_off + assert ((1 sec / clk_freq_g) <= period_g) + report "strobe_gen: The Clk frequency is to low to generate such a short strobe cycle." + severity error; + -- pragma translate_on + +end entity strobe_gen; + +--! RTL implementation of strobe_gen +architecture rtl of strobe_gen is + ----------------------------------------------------------------------------- + --! @name Types and Constants + ----------------------------------------------------------------------------- + --! @{ + + constant clks_per_strobe_c : natural := clk_freq_g / (1 sec / period_g); + + --! @} + ----------------------------------------------------------------------------- + --! @name Internal Registers + ----------------------------------------------------------------------------- + --! @{ + + signal count : unsigned(log_dualis(clks_per_strobe_c) downto 0); + + --! @} + ----------------------------------------------------------------------------- + --! @name Internal Wires + ----------------------------------------------------------------------------- + --! @{ + + signal strobe : std_ulogic; + + --! @} + +begin -- architecture rtl + + ------------------------------------------------------------------------------ + -- Outputs + ------------------------------------------------------------------------------ + + strobe_o <= strobe; + + ------------------------------------------------------------------------------ + -- Registers + ------------------------------------------------------------------------------ + + -- Count the number of clk_i cycles from strobe pulse to strobe pulse. + regs : process (clk_i, rst_n_i) is + procedure reset is + begin + count <= to_unsigned(0, count'length); + strobe <= '0'; + end procedure reset; + begin -- process strobe + if rst_n_i = '0' then + reset; + elsif rising_edge(clk_i) then + if enable_i = '0' then + reset; + else + if count = clks_per_strobe_c-1 then + count <= (others => '0'); + strobe <= '1'; + else + count <= count + 1; + strobe <= '0'; + end if; + end if; + end if; + end process regs; + +end architecture rtl; diff --git a/hdl/components/infrared/sync.vhd b/hdl/components/infrared/sync.vhd new file mode 100644 index 0000000..2caec00 --- /dev/null +++ b/hdl/components/infrared/sync.vhd @@ -0,0 +1,101 @@ +------------------------------------------------------------------------------- +--! @file sync.vhd +--! @author Michael Wurm +--! @copyright 2020 Michael Wurm +--! @brief Implementation of sync. +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +--! @brief Entity declaration of sync +--! @details +--! The sync implementation. + +entity sync is + generic ( + init_value_g : std_ulogic := '0'; + num_delays_g : natural := 2; + sig_width_g : natural := 1); + port ( + --! @name Clocks and resets + --! @{ + + --! System clock + clk_i : in std_logic; + --! Asynchronous reset + rst_n_i : in std_logic; + + --! @} + --! @name Sync signals + --! @{ + + --! Asynchronous input + async_i : in std_ulogic_vector(sig_width_g-1 downto 0); + --! Synchronous output + sync_o : out std_ulogic_vector(sig_width_g-1 downto 0)); + + --! @} + +end entity sync; + +--! RTL implementation of sync +architecture rtl of sync is + ----------------------------------------------------------------------------- + --! @name Types and Constants + ----------------------------------------------------------------------------- + --! @{ + + type delay_t is array(num_delays_g-1 downto 0) of + std_ulogic_vector(sig_width_g-1 downto 0); + + --! @} + ----------------------------------------------------------------------------- + --! @name Internal Registers + ----------------------------------------------------------------------------- + --! @{ + + signal delay : delay_t := (others => (others => init_value_g)); + + --! @} + ----------------------------------------------------------------------------- + --! @name Internal Wires + ----------------------------------------------------------------------------- + --! @{ + + signal next_delay : delay_t := (others => (others => init_value_g)); + + --! @} + +begin -- architecture rtl + + ------------------------------------------------------------------------------ + -- Outputs + ------------------------------------------------------------------------------ + + sync_o <= delay(delay'high); + + ----------------------------------------------------------------------------- + -- Signal Assignments + ----------------------------------------------------------------------------- + + next_delay <= delay(delay'high-1 downto delay'low) & async_i; + + ------------------------------------------------------------------------------ + -- Registers + ------------------------------------------------------------------------------ + + regs : process(clk_i, rst_n_i) + procedure reset is + begin + delay <= (others => (others => init_value_g)); + end procedure reset; + begin -- process regs + if rst_n_i = '0' then + reset; + elsif rising_edge(clk_i) then + delay <= next_delay; + end if; + end process regs; + +end architecture rtl; From 19e4f6a83b713423308b443e1aef0cac1b05c244 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 15:20:53 +0100 Subject: [PATCH 03/41] implement infrared entity --- hdl/components/infrared/infrared.vhd | 118 +++++++++++++++++++-------- 1 file changed, 84 insertions(+), 34 deletions(-) diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index e31e345..9358e15 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -14,11 +14,6 @@ use ieee.numeric_std.all; --! TODO entity infrared is - generic ( - --! System clock frequency - clk_freq_g : natural := clk_freq_c; - --! Period between two strobes - period_g : time := 100 us); port ( --! @name Clocks and resets --! @{ @@ -29,23 +24,32 @@ entity infrared is rst_n_i : in std_logic; --! @} - --! @name Strobe signals + --! @name Avalon MM Bus --! @{ + avs_s0_address : in std_logic_vector(7 downto 0); + avs_s0_read : in std_logic; + avs_s0_readdata : out std_logic_vector(31 downto 0); + avs_s0_write : in std_logic; + avs_s0_writedata : in std_logic_vector(31 downto 0); + avs_s0_waitrequest : out std_logic; - --! Enable - enable_i : in std_ulogic; - --! Generated strobe - strobe_o : out std_ulogic); + --! @} + --! @name Infrared transceiver signals + --! @{ - --! @} + --! IR Receive + ir_rx_i : in std_ulogic; + --! IR Transmit + ir_tx_o : out std_ulogic; + + --! @} + --! @name Status signals + --! @{ -begin + --! IR Receive Mirror + ir_rx_o : out std_ulogic); - -- pragma translate_off - assert ((1 sec / clk_freq_g) <= period_g) - report "infrared: The Clk frequency is to low to generate such a short strobe cycle." - severity error; - -- pragma translate_on + --! @} end entity infrared; @@ -56,15 +60,18 @@ architecture rtl of infrared is ----------------------------------------------------------------------------- --! @{ - constant clks_per_strobe_c : natural := clk_freq_g / (1 sec / period_g); - --! @} ----------------------------------------------------------------------------- --! @name Internal Registers ----------------------------------------------------------------------------- --! @{ - signal count : unsigned(log_dualis(clks_per_strobe_c) downto 0); + type ram_t is array(0 to 255) of std_ulogic_vector(31 downto 0); + signal ram : ram_t := (others => (others => '0')); + + signal addr : unsigned(7 downto 0) := (others => '0'); + signal ir_rx : std_ulogic_vector(1 downto 0); + signal store_timestamp : std_ulogic; --! @} ----------------------------------------------------------------------------- @@ -72,7 +79,10 @@ architecture rtl of infrared is ----------------------------------------------------------------------------- --! @{ - signal strobe : std_ulogic; + signal ir_rx_sync : std_ulogic; + signal rising : std_ulogic; + signal falling : std_ulogic; + signal timestamp : std_ulogic_vector(31 downto 0); --! @} @@ -82,35 +92,75 @@ begin -- architecture rtl -- Outputs ------------------------------------------------------------------------------ - strobe_o <= strobe; + ir_rx_o <= ir_rx(ir_rx'high); + avs_s0_readdata <= ram_readdata; + + ----------------------------------------------------------------------------- + -- Signal Assignments + ----------------------------------------------------------------------------- + + next_ir_rx <= ir_rx(ir_rx'high-1 downto ir_rx'low) & ir_rx_sync; + rising <= '1' when ir_rx(1)='0' and ir_rx(0)='1' else '0'; + falling <= not rising; + + ----------------------------------------------------------------------------- + -- Instantiations + ----------------------------------------------------------------------------- + + sync_inst : entity work.sync + generic map ( + init_value_g => '0', + num_delays_g => 2, + sig_width_g => 1) + port map ( + clk_i => clk_i, + rst_n_i => rst_n_i, + async_i => ir_rx_i, + sync_o => ir_rx_sync); + + counter_inst : entity work.counter + port map ( + clk_i => clk_i, + rst_n_i => rst_n_i, + enable_i => '1', + count_o => timestamp); ------------------------------------------------------------------------------ -- Registers ------------------------------------------------------------------------------ - -- Count the number of clk_i cycles from strobe pulse to strobe pulse. regs : process (clk_i, rst_n_i) is procedure reset is begin - count <= to_unsigned(0, count'length); + addr <= to_unsigned(0, count'length); strobe <= '0'; end procedure reset; begin -- process strobe if rst_n_i = '0' then reset; elsif rising_edge(clk_i) then - if enable_i = '0' then - reset; - else - if count = clks_per_strobe_c-1 then - count <= (others => '0'); - strobe <= '1'; - else - count <= count + 1; - strobe <= '0'; - end if; + -- Defaults + ir_rx <= next_ir_rx; + store_timestamp <= '0'; + + if rising = '1' or falling = '1' then + addr <= addr + 1; + store_timestamp <= '1'; end if; end if; end process regs; + ram : process (clk_i) is + begin + if rising_edge(clk_i) then + if store_timestamp = '1' then + ram(to_integer(addr)) <= timestamp; + end if; + + if avs_s0_read = '1' then + ram_readdata <= ram(to_integer(to_unsigned(avs_s0_address, addr'length))); + end if; + end if; + end process ram; + end architecture rtl; From d22ef9b687d51edb931aec9ced8ddc2a6cd82281 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 16:20:40 +0100 Subject: [PATCH 04/41] instantiate counters --- hdl/components/infrared/comp.do | 18 ++++++++++++++ hdl/components/infrared/counter.vhd | 21 ++++++++++++---- hdl/components/infrared/infrared.vhd | 36 +++++++++++++++++++++------- 3 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 hdl/components/infrared/comp.do diff --git a/hdl/components/infrared/comp.do b/hdl/components/infrared/comp.do new file mode 100644 index 0000000..dca8e74 --- /dev/null +++ b/hdl/components/infrared/comp.do @@ -0,0 +1,18 @@ + +#----------------------------------*-tcl-*- + +#------------------------------------------- +proc myvcom {filename} { + if {[file exists ${filename}] == 1} { + puts "## vcom $filename" + vcom -93 -novopt -quiet ${filename} -work work + } else { + puts "## WARNING: File not found: ${filename}" + } +} + +#------------------------------------------- +vlib work +myvcom counter.vhd +myvcom sync.vhd +myvcom infrared.vhd diff --git a/hdl/components/infrared/counter.vhd b/hdl/components/infrared/counter.vhd index d129025..7df6422 100644 --- a/hdl/components/infrared/counter.vhd +++ b/hdl/components/infrared/counter.vhd @@ -15,6 +15,8 @@ use ieee.numeric_std.all; --! The counter is free-running, and thus overflows at its maximum. entity counter is + generic ( + counter_width_g : natural := 31); port ( --! @name Clocks and resets --! @{ @@ -25,13 +27,15 @@ entity counter is rst_n_i : in std_logic; --! @} - --! @name Control signals + --! @name Control and status signals --! @{ --! Enable enable_i : in std_ulogic; + --! Overflow + overflow_o : out std_ulogic; --! Generated strobe - count_o : out std_ulogic_vector(31 downto 0)); + count_o : out std_ulogic_vector(counter_width_g-1 downto 0)); --! @} @@ -45,6 +49,7 @@ architecture rtl of counter is --! @{ signal count : unsigned(count_o'range); + signal overflow : std_ulogic := '0'; --! @} ----------------------------------------------------------------------------- @@ -61,7 +66,8 @@ begin -- architecture rtl -- Outputs ------------------------------------------------------------------------------ - count_o <= count; + count_o <= count; + overflow_o <= overflow; ----------------------------------------------------------------------------- -- Signal Assignments @@ -75,15 +81,22 @@ begin -- architecture rtl procedure reset is begin count <= to_unsigned(0, count'length); + overflow <= '0'; end procedure reset; - begin -- process strobe + begin -- process regs if rst_n_i = '0' then reset; elsif rising_edge(clk_i) then + -- Defaults + overflow <= '0'; + if enable_i = '0' then reset; else count <= count + 1; + if count = 2**count'length-1 then + overflow <= '1'; + end if; end if; end if; end process regs; diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index 9358e15..c86c191 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -11,7 +11,8 @@ use ieee.numeric_std.all; --! @brief Entity declaration of infrared --! @details ---! TODO +--! Stores timestamps on every change of the IR LED input. +--! In that way, a sequence can be recorded and reproduced afterwards. entity infrared is port ( @@ -46,6 +47,8 @@ entity infrared is --! @name Status signals --! @{ + --! Done recording interrupt + done_recording_irq_o : out std_ulogic; --! IR Receive Mirror ir_rx_o : out std_ulogic); @@ -82,6 +85,7 @@ architecture rtl of infrared is signal ir_rx_sync : std_ulogic; signal rising : std_ulogic; signal falling : std_ulogic; + signal recording_stopped : std_ulogic; signal timestamp : std_ulogic_vector(31 downto 0); --! @} @@ -94,6 +98,7 @@ begin -- architecture rtl ir_rx_o <= ir_rx(ir_rx'high); avs_s0_readdata <= ram_readdata; + done_recording_irq_o <= recording_stopped; ----------------------------------------------------------------------------- -- Signal Assignments @@ -101,7 +106,7 @@ begin -- architecture rtl next_ir_rx <= ir_rx(ir_rx'high-1 downto ir_rx'low) & ir_rx_sync; rising <= '1' when ir_rx(1)='0' and ir_rx(0)='1' else '0'; - falling <= not rising; + falling <= '1' when ir_rx(1)='1' and ir_rx(0)='0' else '0'; ----------------------------------------------------------------------------- -- Instantiations @@ -118,12 +123,25 @@ begin -- architecture rtl async_i => ir_rx_i, sync_o => ir_rx_sync); - counter_inst : entity work.counter - port map ( - clk_i => clk_i, - rst_n_i => rst_n_i, - enable_i => '1', - count_o => timestamp); + timestamp_counter_inst : entity work.counter + generic map ( + counter_width_g => 31) + port map ( + clk_i => clk_i, + rst_n_i => rst_n_i, + enable_i => '1', + overflow_o => open, + count_o => timestamp); + + stop_counter_inst : entity work.counter + generic map ( + counter_width_g => 25) -- 2^25 steps @ 100MHz => 0.3355 sec + port map ( + clk_i => clk_i, + rst_n_i => rst_n_i, + enable_i => falling, + overflow_o => recording_stopped, + count_o => timestamp); ------------------------------------------------------------------------------ -- Registers @@ -146,6 +164,8 @@ begin -- architecture rtl if rising = '1' or falling = '1' then addr <= addr + 1; store_timestamp <= '1'; + elsif recording_stopped = '1' then + addr <= (others => '0'); end if; end if; end process regs; From 9c8555d0861e8fcbc02235bd6d3e40b2e097ca7d Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 16:37:56 +0100 Subject: [PATCH 05/41] fix errors --- hdl/components/infrared/comp.do | 3 + hdl/components/infrared/counter.vhd | 2 +- hdl/components/infrared/infrared.vhd | 24 ++++--- hdl/components/infrared/sync_single.vhd | 91 +++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 12 deletions(-) create mode 100644 hdl/components/infrared/sync_single.vhd diff --git a/hdl/components/infrared/comp.do b/hdl/components/infrared/comp.do index dca8e74..41abef2 100644 --- a/hdl/components/infrared/comp.do +++ b/hdl/components/infrared/comp.do @@ -15,4 +15,7 @@ proc myvcom {filename} { vlib work myvcom counter.vhd myvcom sync.vhd +myvcom sync_single.vhd myvcom infrared.vhd + +quit diff --git a/hdl/components/infrared/counter.vhd b/hdl/components/infrared/counter.vhd index 7df6422..c2d6677 100644 --- a/hdl/components/infrared/counter.vhd +++ b/hdl/components/infrared/counter.vhd @@ -35,7 +35,7 @@ entity counter is --! Overflow overflow_o : out std_ulogic; --! Generated strobe - count_o : out std_ulogic_vector(counter_width_g-1 downto 0)); + count_o : out unsigned(counter_width_g-1 downto 0)); --! @} diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index c86c191..9da7054 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -69,8 +69,10 @@ architecture rtl of infrared is ----------------------------------------------------------------------------- --! @{ - type ram_t is array(0 to 255) of std_ulogic_vector(31 downto 0); - signal ram : ram_t := (others => (others => '0')); + subtype timestamp_t is unsigned(31 downto 0); + type ram_t is array(0 to 255) of timestamp_t; + signal ram_data : ram_t := (others => (others => '0')); + signal ram_readdata : timestamp_t := (others => '0'); signal addr : unsigned(7 downto 0) := (others => '0'); signal ir_rx : std_ulogic_vector(1 downto 0); @@ -83,10 +85,11 @@ architecture rtl of infrared is --! @{ signal ir_rx_sync : std_ulogic; + signal next_ir_rx : std_ulogic_vector(1 downto 0); signal rising : std_ulogic; signal falling : std_ulogic; signal recording_stopped : std_ulogic; - signal timestamp : std_ulogic_vector(31 downto 0); + signal timestamp : timestamp_t; --! @} @@ -97,7 +100,7 @@ begin -- architecture rtl ------------------------------------------------------------------------------ ir_rx_o <= ir_rx(ir_rx'high); - avs_s0_readdata <= ram_readdata; + avs_s0_readdata <= std_logic_vector(ram_readdata); done_recording_irq_o <= recording_stopped; ----------------------------------------------------------------------------- @@ -112,11 +115,10 @@ begin -- architecture rtl -- Instantiations ----------------------------------------------------------------------------- - sync_inst : entity work.sync + sync_inst : entity work.sync_single generic map ( init_value_g => '0', - num_delays_g => 2, - sig_width_g => 1) + num_delays_g => 2) port map ( clk_i => clk_i, rst_n_i => rst_n_i, @@ -150,8 +152,8 @@ begin -- architecture rtl regs : process (clk_i, rst_n_i) is procedure reset is begin - addr <= to_unsigned(0, count'length); - strobe <= '0'; + addr <= to_unsigned(0, addr'length); + store_timestamp <= '0'; end procedure reset; begin -- process strobe if rst_n_i = '0' then @@ -174,11 +176,11 @@ begin -- architecture rtl begin if rising_edge(clk_i) then if store_timestamp = '1' then - ram(to_integer(addr)) <= timestamp; + ram_data(to_integer(addr)) <= timestamp; end if; if avs_s0_read = '1' then - ram_readdata <= ram(to_integer(to_unsigned(avs_s0_address, addr'length))); + ram_readdata <= ram_data(to_integer(unsigned(avs_s0_address))); end if; end if; end process ram; diff --git a/hdl/components/infrared/sync_single.vhd b/hdl/components/infrared/sync_single.vhd new file mode 100644 index 0000000..d43a07a --- /dev/null +++ b/hdl/components/infrared/sync_single.vhd @@ -0,0 +1,91 @@ +------------------------------------------------------------------------------- +--! @file sync_single.vhd +--! @author Michael Wurm +--! @copyright 2020 Michael Wurm +--! @brief Implementation of sync_single. +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +--! @brief Entity declaration of sync_single +--! @details +--! The sync_single implementation. + +entity sync_single is + generic ( + init_value_g : std_ulogic := '0'; + num_delays_g : natural := 2); + port ( + --! @name Clocks and resets + --! @{ + + --! System clock + clk_i : in std_logic; + --! Asynchronous reset + rst_n_i : in std_logic; + + --! @} + --! @name Sync signals + --! @{ + + --! Asynchronous input + async_i : in std_ulogic; + --! Synchronous output + sync_o : out std_ulogic); + + --! @} + +end entity sync_single; + +--! RTL implementation of sync_single +architecture rtl of sync_single is + ----------------------------------------------------------------------------- + --! @name Internal Registers + ----------------------------------------------------------------------------- + --! @{ + + signal delay : std_ulogic_vector(num_delays_g-1 downto 0) := (others => '0'); + + --! @} + ----------------------------------------------------------------------------- + --! @name Internal Wires + ----------------------------------------------------------------------------- + --! @{ + + signal next_delay : std_ulogic_vector(delay'range); + + --! @} + +begin -- architecture rtl + + ------------------------------------------------------------------------------ + -- Outputs + ------------------------------------------------------------------------------ + + sync_o <= delay(delay'high); + + ----------------------------------------------------------------------------- + -- Signal Assignments + ----------------------------------------------------------------------------- + + next_delay <= delay(delay'high-1 downto delay'low) & async_i; + + ------------------------------------------------------------------------------ + -- Registers + ------------------------------------------------------------------------------ + + regs : process(clk_i, rst_n_i) + procedure reset is + begin + delay <= (others => init_value_g); + end procedure reset; + begin -- process regs + if rst_n_i = '0' then + reset; + elsif rising_edge(clk_i) then + delay <= next_delay; + end if; + end process regs; + +end architecture rtl; From 5134bd3841020918d7da7c0e2309394163ec56b6 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 16:43:45 +0100 Subject: [PATCH 06/41] create infrared_hw.tcl --- hdl/components/infrared/infrared_hw.tcl | 122 ++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 hdl/components/infrared/infrared_hw.tcl diff --git a/hdl/components/infrared/infrared_hw.tcl b/hdl/components/infrared/infrared_hw.tcl new file mode 100644 index 0000000..370220c --- /dev/null +++ b/hdl/components/infrared/infrared_hw.tcl @@ -0,0 +1,122 @@ +# TCL File Generated by Component Editor 19.1 +# Tue Feb 18 16:43:18 CET 2020 +# DO NOT MODIFY + + +# +# infrared "infrared" v1.0 +# Michael Wurm 2020.02.18.16:43:18 +# Infrared Recorder/Transmitter +# + +# +# request TCL package from ACDS 16.1 +# +package require -exact qsys 16.1 + + +# +# module infrared +# +set_module_property DESCRIPTION "Infrared Recorder/Transmitter" +set_module_property NAME infrared +set_module_property VERSION 1.0 +set_module_property INTERNAL false +set_module_property OPAQUE_ADDRESS_MAP true +set_module_property AUTHOR "Michael Wurm" +set_module_property DISPLAY_NAME infrared +set_module_property INSTANTIATE_IN_SYSTEM_MODULE true +set_module_property EDITABLE true +set_module_property REPORT_TO_TALKBACK false +set_module_property ALLOW_GREYBOX_GENERATION false +set_module_property REPORT_HIERARCHY false + + +# +# file sets +# +add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" +set_fileset_property QUARTUS_SYNTH TOP_LEVEL infrared +set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false +set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false +add_fileset_file counter.vhd VHDL PATH components/infrared/counter.vhd +add_fileset_file infrared.vhd VHDL PATH components/infrared/infrared.vhd TOP_LEVEL_FILE +add_fileset_file sync_single.vhd VHDL PATH components/infrared/sync_single.vhd + + +# +# parameters +# + + +# +# display items +# + + +# +# connection point s0 +# +add_interface s0 avalon end +set_interface_property s0 addressUnits WORDS +set_interface_property s0 associatedClock clk_i +set_interface_property s0 associatedReset rst_n_i +set_interface_property s0 bitsPerSymbol 8 +set_interface_property s0 burstOnBurstBoundariesOnly false +set_interface_property s0 burstcountUnits WORDS +set_interface_property s0 explicitAddressSpan 0 +set_interface_property s0 holdTime 0 +set_interface_property s0 linewrapBursts false +set_interface_property s0 maximumPendingReadTransactions 0 +set_interface_property s0 maximumPendingWriteTransactions 0 +set_interface_property s0 readLatency 0 +set_interface_property s0 readWaitTime 1 +set_interface_property s0 setupTime 0 +set_interface_property s0 timingUnits Cycles +set_interface_property s0 writeWaitTime 0 +set_interface_property s0 ENABLED true +set_interface_property s0 EXPORT_OF "" +set_interface_property s0 PORT_NAME_MAP "" +set_interface_property s0 CMSIS_SVD_VARIABLES "" +set_interface_property s0 SVD_ADDRESS_GROUP "" + +add_interface_port s0 avs_s0_address address Input 8 +add_interface_port s0 avs_s0_read read Input 1 +add_interface_port s0 avs_s0_readdata readdata Output 32 +add_interface_port s0 avs_s0_write write Input 1 +add_interface_port s0 avs_s0_writedata writedata Input 32 +add_interface_port s0 avs_s0_waitrequest waitrequest Output 1 +set_interface_assignment s0 embeddedsw.configuration.isFlash 0 +set_interface_assignment s0 embeddedsw.configuration.isMemoryDevice 0 +set_interface_assignment s0 embeddedsw.configuration.isNonVolatileStorage 0 +set_interface_assignment s0 embeddedsw.configuration.isPrintableDevice 0 + + +# +# connection point clk_i +# +add_interface clk_i clock end +set_interface_property clk_i clockRate 0 +set_interface_property clk_i ENABLED true +set_interface_property clk_i EXPORT_OF "" +set_interface_property clk_i PORT_NAME_MAP "" +set_interface_property clk_i CMSIS_SVD_VARIABLES "" +set_interface_property clk_i SVD_ADDRESS_GROUP "" + +add_interface_port clk_i clk_i clk Input 1 + + +# +# connection point rst_n_i +# +add_interface rst_n_i reset end +set_interface_property rst_n_i associatedClock clk_i +set_interface_property rst_n_i synchronousEdges DEASSERT +set_interface_property rst_n_i ENABLED true +set_interface_property rst_n_i EXPORT_OF "" +set_interface_property rst_n_i PORT_NAME_MAP "" +set_interface_property rst_n_i CMSIS_SVD_VARIABLES "" +set_interface_property rst_n_i SVD_ADDRESS_GROUP "" + +add_interface_port rst_n_i rst_n_i reset_n Input 1 + From 713f3b8d573510a125e6f09ca8a5a826835f5d35 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 16:46:00 +0100 Subject: [PATCH 07/41] qsys with version 19.1 --- hdl/HPSPlatform.qsys | 50 ++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/hdl/HPSPlatform.qsys b/hdl/HPSPlatform.qsys index 0643f77..e1e9222 100644 --- a/hdl/HPSPlatform.qsys +++ b/hdl/HPSPlatform.qsys @@ -367,7 +367,7 @@ internal="hmi.switches_external_connection" type="conduit" dir="end" /> - + @@ -398,9 +398,9 @@ - + - + @@ -932,7 +932,7 @@ @@ -941,7 +941,7 @@ @@ -950,7 +950,7 @@ @@ -959,7 +959,7 @@ @@ -968,7 +968,7 @@ @@ -977,7 +977,7 @@ @@ -986,76 +986,76 @@ - + - + From 048e60c434d04b49c8ba4ea6625271fd6c76f0f7 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 17:10:03 +0100 Subject: [PATCH 08/41] add ip component into qsys --- .gitignore | 1 + hdl/HPSPlatform.qsys | 35 ++++++++ hdl/components/infrared/infrared.vhd | 8 +- hdl/components/infrared/infrared_hw.tcl | 108 +++++++++++++++++++----- hdl/ip/subsystemHMI.qsys | 62 +++++++++++--- 5 files changed, 176 insertions(+), 38 deletions(-) diff --git a/.gitignore b/.gitignore index 0f214e3..4cbbc17 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ transcript # Quartus temporary files .qsys_edit/ +subsystemHMI/ db/ HPSPlatform/ incremental_db/ diff --git a/hdl/HPSPlatform.qsys b/hdl/HPSPlatform.qsys index e1e9222..fe4a393 100644 --- a/hdl/HPSPlatform.qsys +++ b/hdl/HPSPlatform.qsys @@ -177,6 +177,19 @@ type = "int"; } } + element hmi.infrared_s0 + { + datum _lockedAddress + { + value = "1"; + type = "boolean"; + } + datum baseAddress + { + value = "2048"; + type = "String"; + } + } element hmi.leds_s1 { datum _lockedAddress @@ -378,6 +391,9 @@ + + + @@ -930,6 +946,15 @@ + + + + + + + + + + + + + + - + + @@ -219,45 +259,45 @@ version="1.0" enabled="1"> - + - + - $${FILENAME}_subsystemApds9301 + subsystemHMI_subsystemApds9301 - + - + - $${FILENAME}_subsystemHdc1000 + subsystemHMI_subsystemHdc1000 - + - + - $${FILENAME}_subsystemMpu9250 + subsystemHMI_subsystemMpu9250 - + From 4deb429470b88e8f1fac8904217a0f1ecb1ee1c0 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 17:32:34 +0100 Subject: [PATCH 09/41] update instantiatation --- hdl/HPSPlatform.qsys | 27 +- hdl/top.vhd | 814 ++++++++++++++++++++++--------------------- 2 files changed, 438 insertions(+), 403 deletions(-) diff --git a/hdl/HPSPlatform.qsys b/hdl/HPSPlatform.qsys index fe4a393..6454af1 100644 --- a/hdl/HPSPlatform.qsys +++ b/hdl/HPSPlatform.qsys @@ -197,6 +197,11 @@ value = "1"; type = "boolean"; } + datum _tags + { + value = ""; + type = "String"; + } datum baseAddress { value = "1040"; @@ -292,6 +297,26 @@ + + + + - + diff --git a/hdl/top.vhd b/hdl/top.vhd index 2cc8822..6923cbe 100644 --- a/hdl/top.vhd +++ b/hdl/top.vhd @@ -1,402 +1,412 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - -ENTITY top IS - -PORT( - ---------FPGA Connections------------- - CLOCK_50 : in std_logic; - SW : in std_logic_vector(9 downto 0); - LEDR : out std_logic_vector(9 downto 0); - - - -- //////////// SEG7 ////////// - HEX0 : out std_logic_vector(6 downto 0); - HEX1 : out std_logic_vector(6 downto 0); - HEX2 : out std_logic_vector(6 downto 0); - HEX3 : out std_logic_vector(6 downto 0); - HEX4 : out std_logic_vector(6 downto 0); - HEX5 : out std_logic_vector(6 downto 0); - - -- //////////// Infrared Interface ////////// - IRDA_RXD : in std_logic; - IRDA_TXD : in std_logic; - - ---------HPS Connections--------------- - HPS_CONV_USB_N : inout std_logic; - HPS_DDR3_ADDR : out std_logic_vector(14 downto 0); - HPS_DDR3_BA : out std_logic_vector(2 downto 0); - HPS_DDR3_CAS_N : out std_logic; - HPS_DDR3_CKE : out std_logic; - HPS_DDR3_CK_N : out std_logic; - HPS_DDR3_CK_P : out std_logic; - HPS_DDR3_CS_N : out std_logic; - HPS_DDR3_DM : out std_logic_vector(3 downto 0); - HPS_DDR3_DQ : inout std_logic_vector(31 downto 0); - HPS_DDR3_DQS_N : inout std_logic_vector(3 downto 0); - HPS_DDR3_DQS_P : inout std_logic_vector(3 downto 0); - HPS_DDR3_ODT : out std_logic; - HPS_DDR3_RAS_N : out std_logic; - HPS_DDR3_RESET_N : out std_logic; - HPS_DDR3_RZQ : in std_logic; - HPS_DDR3_WE_N : out std_logic; - - HPS_ENET_GTX_CLK : out std_logic; - HPS_ENET_INT_N : inout std_logic; - HPS_ENET_MDC : out std_logic; - HPS_ENET_MDIO : inout std_logic; - HPS_ENET_RX_CLK : in std_logic; - HPS_ENET_RX_DATA : in std_logic_vector(3 downto 0); - HPS_ENET_RX_DV : in std_logic; - HPS_ENET_TX_DATA : out std_logic_vector(3 downto 0); - HPS_ENET_TX_EN : out std_logic; - - HPS_KEY : inout std_logic; - HPS_LED : inout std_logic; - - HPS_SD_CLK : out std_logic; - HPS_SD_CMD : inout std_logic; - HPS_SD_DATA : inout std_logic_vector(3 downto 0); - - HPS_UART_RX : in std_logic; - HPS_UART_TX : out std_logic; - - HPS_USB_CLKOUT : in std_logic; - HPS_USB_DATA : inout std_logic_vector(7 downto 0); - HPS_USB_DIR : in std_logic; - HPS_USB_NXT : in std_logic; - HPS_USB_STP : out std_logic; - - HPS_I2C1_SCLK : inout std_logic; - HPS_I2C1_SDAT : inout std_logic; - HPS_I2C2_SCLK : inout std_logic; - HPS_I2C2_SDAT : inout std_logic; - HPS_I2C_CONTROL : inout std_logic; - - HPS_LTC_GPIO : inout std_logic; - HPS_GSENSOR_INT : inout std_logic; - - HPS_SPIM_CLK : out std_logic; - HPS_SPIM_MISO : in std_logic; - HPS_SPIM_MOSI : out std_logic; - HPS_SPIM_SS : inout std_logic; - - --////////// GPIO, GPIO connect to RFS - RF and Sensor ////////// - --BT_KEY : inout std_logic; - --BT_UART_RX : in std_logic; - --BT_UART_TX : out std_logic; - LSENSOR_INT : in std_logic; - LSENSOR_SCL : inout std_logic; - LSENSOR_SDA : inout std_logic; - MPU_AD0_SDO : in std_logic; - MPU_CS_n : inout std_logic; - MPU_FSYNC : out std_logic; - MPU_INT : in std_logic; - MPU_SCL_SCLK : inout std_logic; - MPU_SDA_SDI : inout std_logic; - RH_TEMP_DRDY_n : in std_ulogic; - RH_TEMP_I2C_SCL : inout std_logic; - RH_TEMP_I2C_SDA : inout std_logic; - TMD_D : out std_logic_vector(7 downto 0); - --UART2USB_CTS : in std_logic; - --UART2USB_RTS : out std_logic; - --UART2USB_RX : in std_logic; - --UART2USB_TX : out std_logic; - --WIFI_EN : out std_logic; - --WIFI_RST_n : out std_logic; - --WIFI_UART0_CTS : in std_logic; - --WIFI_UART0_RTS : out std_logic; - --WIFI_UART0_RX : in std_logic; - --WIFI_UART0_TX : out std_logic; - --WIFI_UART1_RX : in std_logic - GPIO_0 : out std_logic_vector(35 downto 0) -); - -END ENTITY; - -ARCHITECTURE MAIN OF top IS - component HPSPlatform is - port ( - clk_clk : in std_logic := 'X'; -- clk - hps_0_h2f_reset_reset_n : out std_logic; -- reset_n - hps_0_f2h_cold_reset_req_reset_n : in std_logic := 'X'; -- reset_n - hps_0_f2h_debug_reset_req_reset_n : in std_logic := 'X'; -- reset_n - hps_0_f2h_stm_hw_events_stm_hwevents : in std_logic_vector(27 downto 0) := (others => 'X'); -- stm_hwevents - hps_0_f2h_warm_reset_req_reset_n : in std_logic := 'X'; -- reset_n - hps_io_hps_io_emac1_inst_TX_CLK : out std_logic; -- hps_io_emac1_inst_TX_CLK - hps_io_hps_io_emac1_inst_TXD0 : out std_logic; -- hps_io_emac1_inst_TXD0 - hps_io_hps_io_emac1_inst_TXD1 : out std_logic; -- hps_io_emac1_inst_TXD1 - hps_io_hps_io_emac1_inst_TXD2 : out std_logic; -- hps_io_emac1_inst_TXD2 - hps_io_hps_io_emac1_inst_TXD3 : out std_logic; -- hps_io_emac1_inst_TXD3 - hps_io_hps_io_emac1_inst_RXD0 : in std_logic := 'X'; -- hps_io_emac1_inst_RXD0 - hps_io_hps_io_emac1_inst_MDIO : inout std_logic := 'X'; -- hps_io_emac1_inst_MDIO - hps_io_hps_io_emac1_inst_MDC : out std_logic; -- hps_io_emac1_inst_MDC - hps_io_hps_io_emac1_inst_RX_CTL : in std_logic := 'X'; -- hps_io_emac1_inst_RX_CTL - hps_io_hps_io_emac1_inst_TX_CTL : out std_logic; -- hps_io_emac1_inst_TX_CTL - hps_io_hps_io_emac1_inst_RX_CLK : in std_logic := 'X'; -- hps_io_emac1_inst_RX_CLK - hps_io_hps_io_emac1_inst_RXD1 : in std_logic := 'X'; -- hps_io_emac1_inst_RXD1 - hps_io_hps_io_emac1_inst_RXD2 : in std_logic := 'X'; -- hps_io_emac1_inst_RXD2 - hps_io_hps_io_emac1_inst_RXD3 : in std_logic := 'X'; -- hps_io_emac1_inst_RXD3 - hps_io_hps_io_sdio_inst_CMD : inout std_logic := 'X'; -- hps_io_sdio_inst_CMD - hps_io_hps_io_sdio_inst_D0 : inout std_logic := 'X'; -- hps_io_sdio_inst_D0 - hps_io_hps_io_sdio_inst_D1 : inout std_logic := 'X'; -- hps_io_sdio_inst_D1 - hps_io_hps_io_sdio_inst_CLK : out std_logic; -- hps_io_sdio_inst_CLK - hps_io_hps_io_sdio_inst_D2 : inout std_logic := 'X'; -- hps_io_sdio_inst_D2 - hps_io_hps_io_sdio_inst_D3 : inout std_logic := 'X'; -- hps_io_sdio_inst_D3 - hps_io_hps_io_usb1_inst_D0 : inout std_logic := 'X'; -- hps_io_usb1_inst_D0 - hps_io_hps_io_usb1_inst_D1 : inout std_logic := 'X'; -- hps_io_usb1_inst_D1 - hps_io_hps_io_usb1_inst_D2 : inout std_logic := 'X'; -- hps_io_usb1_inst_D2 - hps_io_hps_io_usb1_inst_D3 : inout std_logic := 'X'; -- hps_io_usb1_inst_D3 - hps_io_hps_io_usb1_inst_D4 : inout std_logic := 'X'; -- hps_io_usb1_inst_D4 - hps_io_hps_io_usb1_inst_D5 : inout std_logic := 'X'; -- hps_io_usb1_inst_D5 - hps_io_hps_io_usb1_inst_D6 : inout std_logic := 'X'; -- hps_io_usb1_inst_D6 - hps_io_hps_io_usb1_inst_D7 : inout std_logic := 'X'; -- hps_io_usb1_inst_D7 - hps_io_hps_io_usb1_inst_CLK : in std_logic := 'X'; -- hps_io_usb1_inst_CLK - hps_io_hps_io_usb1_inst_STP : out std_logic; -- hps_io_usb1_inst_STP - hps_io_hps_io_usb1_inst_DIR : in std_logic := 'X'; -- hps_io_usb1_inst_DIR - hps_io_hps_io_usb1_inst_NXT : in std_logic := 'X'; -- hps_io_usb1_inst_NXT - hps_io_hps_io_spim1_inst_CLK : out std_logic; -- hps_io_spim1_inst_CLK - hps_io_hps_io_spim1_inst_MOSI : out std_logic; -- hps_io_spim1_inst_MOSI - hps_io_hps_io_spim1_inst_MISO : in std_logic := 'X'; -- hps_io_spim1_inst_MISO - hps_io_hps_io_spim1_inst_SS0 : out std_logic; -- hps_io_spim1_inst_SS0 - hps_io_hps_io_uart0_inst_RX : in std_logic := 'X'; -- hps_io_uart0_inst_RX - hps_io_hps_io_uart0_inst_TX : out std_logic; -- hps_io_uart0_inst_TX - hps_io_hps_io_i2c0_inst_SDA : inout std_logic := 'X'; -- hps_io_i2c0_inst_SDA - hps_io_hps_io_i2c0_inst_SCL : inout std_logic := 'X'; -- hps_io_i2c0_inst_SCL - hps_io_hps_io_i2c1_inst_SDA : inout std_logic := 'X'; -- hps_io_i2c1_inst_SDA - hps_io_hps_io_i2c1_inst_SCL : inout std_logic := 'X'; -- hps_io_i2c1_inst_SCL - hps_io_hps_io_gpio_inst_GPIO09 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO09 - hps_io_hps_io_gpio_inst_GPIO35 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO35 - hps_io_hps_io_gpio_inst_GPIO40 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO40 - hps_io_hps_io_gpio_inst_GPIO48 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO48 - hps_io_hps_io_gpio_inst_GPIO53 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO53 - hps_io_hps_io_gpio_inst_GPIO54 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO54 - hps_io_hps_io_gpio_inst_GPIO61 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO61 - memory_mem_a : out std_logic_vector(14 downto 0); -- mem_a - memory_mem_ba : out std_logic_vector(2 downto 0); -- mem_ba - memory_mem_ck : out std_logic; -- mem_ck - memory_mem_ck_n : out std_logic; -- mem_ck_n - memory_mem_cke : out std_logic; -- mem_cke - memory_mem_cs_n : out std_logic; -- mem_cs_n - memory_mem_ras_n : out std_logic; -- mem_ras_n - memory_mem_cas_n : out std_logic; -- mem_cas_n - memory_mem_we_n : out std_logic; -- mem_we_n - memory_mem_reset_n : out std_logic; -- mem_reset_n - memory_mem_dq : inout std_logic_vector(31 downto 0) := (others => 'X'); -- mem_dq - memory_mem_dqs : inout std_logic_vector(3 downto 0) := (others => 'X'); -- mem_dqs - memory_mem_dqs_n : inout std_logic_vector(3 downto 0) := (others => 'X'); -- mem_dqs_n - memory_mem_odt : out std_logic; -- mem_odt - memory_mem_dm : out std_logic_vector(3 downto 0); -- mem_dm - memory_oct_rzqin : in std_logic := 'X'; -- oct_rzqin - reset_reset_n : in std_logic := 'X'; -- reset_n - leds_external_connection_export : out std_logic_vector(9 downto 0); -- export - seven_segment_conduit_end_export : out std_logic_vector(41 downto 0); -- export - switches_external_connection_export : in std_logic_vector(9 downto 0) := (others => 'X'); -- export - hmi_subsystemapds9301_apdsinterrupt_irq_n : in std_logic := 'X'; -- irq_n - hmi_subsystemapds9301_i2c_scl_in : in std_logic := 'X'; -- scl_in - hmi_subsystemapds9301_i2c_scl_oe : out std_logic; -- scl_oe - hmi_subsystemapds9301_i2c_sda_in : in std_logic := 'X'; -- sda_in - hmi_subsystemapds9301_i2c_sda_oe : out std_logic; -- sda_oe - hmi_subsystemhdc1000_hdcrdy_interrupt : in std_logic := 'X'; -- interrupt - hmi_subsystemhdc1000_i2c_0_i2c_serial_sda_in : in std_logic := 'X'; -- sda_in - hmi_subsystemhdc1000_i2c_0_i2c_serial_scl_in : in std_logic := 'X'; -- scl_in - hmi_subsystemhdc1000_i2c_0_i2c_serial_sda_oe : out std_logic; -- sda_oe - hmi_subsystemhdc1000_i2c_0_i2c_serial_scl_oe : out std_logic; -- scl_oe - hmi_subsystemmpu9250_spi_MISO : in std_logic := 'X'; -- MISO - hmi_subsystemmpu9250_spi_MOSI : out std_logic; -- MOSI - hmi_subsystemmpu9250_spi_SCLK : out std_logic; -- SCLK - hmi_subsystemmpu9250_spi_SS_n : out std_logic; -- SS_n - hmi_subsystemmpu9250_mpuint_irq_n : in std_logic := 'X' -- irq_n - ); - end component HPSPlatform; - - component i2c_io_buf - PORT - ( - datain : IN STD_LOGIC_VECTOR (1 DOWNTO 0); - oe : IN STD_LOGIC_VECTOR (1 DOWNTO 0); - dataio : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0); - dataout : OUT STD_LOGIC_VECTOR (1 DOWNTO 0) - ); - end component; - - - signal HPS_H2F_RST : std_logic; - - constant hps_cold_reset : std_logic := '0'; - constant hps_warm_reset : std_logic := '0'; - constant hps_debug_reset : std_logic := '0'; - constant sync_levels : natural := 100; - - signal stm_hw_events : std_logic_vector(27 downto 0); - signal test : std_logic; - signal key_reset_sync : std_logic_vector(sync_levels downto 0); - - signal hdc1000_i2c_serial_sda_in : std_logic; - signal hdc1000_i2c_serial_scl_in : std_logic; - signal hdc1000_i2c_serial_sda_oe : std_logic; - signal hdc1000_i2c_serial_scl_oe : std_logic; - - signal apds9301_i2c_serial_sda_in : std_logic; - signal apds9301_i2c_serial_scl_in : std_logic; - signal apds9301_i2c_serial_sda_oe : std_logic; - signal apds9301_i2c_serial_scl_oe : std_logic; - -BEGIN - - -u0 : component HPSPlatform - port map ( - clk_clk => CLOCK_50, -- clk.clk - reset_reset_n => key_reset_sync(0), -- reset.reset_n - memory_mem_a => HPS_DDR3_ADDR, -- memory.mem_a - memory_mem_ba => HPS_DDR3_BA, -- .mem_ba - memory_mem_ck => HPS_DDR3_CK_P, -- .mem_ck - memory_mem_ck_n => HPS_DDR3_CK_N, -- .mem_ck_n - memory_mem_cke => HPS_DDR3_CKE, -- .mem_cke - memory_mem_cs_n => HPS_DDR3_CS_N, -- .mem_cs_n - memory_mem_ras_n => HPS_DDR3_RAS_N, -- .mem_ras_n - memory_mem_cas_n => HPS_DDR3_CAS_N, -- .mem_cas_n - memory_mem_we_n => HPS_DDR3_WE_N, -- .mem_we_n - memory_mem_reset_n => HPS_DDR3_RESET_N, -- .mem_reset_n - memory_mem_dq => HPS_DDR3_DQ, -- .mem_dq - memory_mem_dqs => HPS_DDR3_DQS_P, -- .mem_dqs - memory_mem_dqs_n => HPS_DDR3_DQS_N, -- .mem_dqs_n - memory_mem_odt => HPS_DDR3_ODT, -- .mem_odt - memory_mem_dm => HPS_DDR3_DM, -- .mem_dm - memory_oct_rzqin => HPS_DDR3_RZQ, -- .oct_rzqin - hps_0_h2f_reset_reset_n => HPS_H2F_RST, -- hps_0_h2f_reset.reset_n - hps_0_f2h_cold_reset_req_reset_n => not(hps_cold_reset), -- hps_0_f2h_cold_reset_req.reset_n - hps_0_f2h_debug_reset_req_reset_n => not(hps_debug_reset), -- hps_0_f2h_debug_reset_req.reset_n - hps_0_f2h_stm_hw_events_stm_hwevents => stm_hw_events, -- hps_0_f2h_stm_hw_events.stm_hwevents - hps_0_f2h_warm_reset_req_reset_n => not(hps_warm_reset), -- hps_0_f2h_warm_reset_req.reset_n - hps_io_hps_io_emac1_inst_TX_CLK => HPS_ENET_GTX_CLK, -- hps_io.hps_io_emac1_inst_TX_CLK - hps_io_hps_io_emac1_inst_TXD0 => HPS_ENET_TX_DATA(0), -- .hps_io_emac1_inst_TXD0 - hps_io_hps_io_emac1_inst_TXD1 => HPS_ENET_TX_DATA(1), -- .hps_io_emac1_inst_TXD1 - hps_io_hps_io_emac1_inst_TXD2 => HPS_ENET_TX_DATA(2), -- .hps_io_emac1_inst_TXD2 - hps_io_hps_io_emac1_inst_TXD3 => HPS_ENET_TX_DATA(3), -- .hps_io_emac1_inst_TXD3 - hps_io_hps_io_emac1_inst_RXD0 => HPS_ENET_RX_DATA(0), -- .hps_io_emac1_inst_RXD0 - hps_io_hps_io_emac1_inst_MDIO => HPS_ENET_MDIO, -- .hps_io_emac1_inst_MDIO - hps_io_hps_io_emac1_inst_MDC => HPS_ENET_MDC, -- .hps_io_emac1_inst_MDC - hps_io_hps_io_emac1_inst_RX_CTL => HPS_ENET_RX_DV, -- .hps_io_emac1_inst_RX_CTL - hps_io_hps_io_emac1_inst_TX_CTL => HPS_ENET_TX_EN, -- .hps_io_emac1_inst_TX_CTL - hps_io_hps_io_emac1_inst_RX_CLK => HPS_ENET_RX_CLK, -- .hps_io_emac1_inst_RX_CLK - hps_io_hps_io_emac1_inst_RXD1 => HPS_ENET_RX_DATA(1), -- .hps_io_emac1_inst_RXD1 - hps_io_hps_io_emac1_inst_RXD2 => HPS_ENET_RX_DATA(2), -- .hps_io_emac1_inst_RXD2 - hps_io_hps_io_emac1_inst_RXD3 => HPS_ENET_RX_DATA(3), -- .hps_io_emac1_inst_RXD3 - hps_io_hps_io_sdio_inst_CMD => HPS_SD_CMD, -- .hps_io_sdio_inst_CMD - hps_io_hps_io_sdio_inst_D0 => HPS_SD_DATA(0), -- .hps_io_sdio_inst_D0 - hps_io_hps_io_sdio_inst_D1 => HPS_SD_DATA(1), -- .hps_io_sdio_inst_D1 - hps_io_hps_io_sdio_inst_CLK => HPS_SD_CLK, -- .hps_io_sdio_inst_CLK - hps_io_hps_io_sdio_inst_D2 => HPS_SD_DATA(2), -- .hps_io_sdio_inst_D2 - hps_io_hps_io_sdio_inst_D3 => HPS_SD_DATA(3), -- .hps_io_sdio_inst_D3 - hps_io_hps_io_usb1_inst_D0 => HPS_USB_DATA(0), -- .hps_io_usb1_inst_D0 - hps_io_hps_io_usb1_inst_D1 => HPS_USB_DATA(1), -- .hps_io_usb1_inst_D1 - hps_io_hps_io_usb1_inst_D2 => HPS_USB_DATA(2), -- .hps_io_usb1_inst_D2 - hps_io_hps_io_usb1_inst_D3 => HPS_USB_DATA(3), -- .hps_io_usb1_inst_D3 - hps_io_hps_io_usb1_inst_D4 => HPS_USB_DATA(4), -- .hps_io_usb1_inst_D4 - hps_io_hps_io_usb1_inst_D5 => HPS_USB_DATA(5), -- .hps_io_usb1_inst_D5 - hps_io_hps_io_usb1_inst_D6 => HPS_USB_DATA(6), -- .hps_io_usb1_inst_D6 - hps_io_hps_io_usb1_inst_D7 => HPS_USB_DATA(7), -- .hps_io_usb1_inst_D7 - hps_io_hps_io_usb1_inst_CLK => HPS_USB_CLKOUT, -- .hps_io_usb1_inst_CLK - hps_io_hps_io_usb1_inst_STP => HPS_USB_STP, -- .hps_io_usb1_inst_STP - hps_io_hps_io_usb1_inst_DIR => HPS_USB_DIR, -- .hps_io_usb1_inst_DIR - hps_io_hps_io_usb1_inst_NXT => HPS_USB_NXT, -- .hps_io_usb1_inst_NXT - hps_io_hps_io_spim1_inst_CLK => HPS_SPIM_CLK, -- .hps_io_spim1_inst_CLK - hps_io_hps_io_spim1_inst_MOSI => HPS_SPIM_MOSI, -- .hps_io_spim1_inst_MOSI - hps_io_hps_io_spim1_inst_MISO => HPS_SPIM_MISO, -- .hps_io_spim1_inst_MISO - hps_io_hps_io_spim1_inst_SS0 => HPS_SPIM_SS, -- .hps_io_spim1_inst_SS0 - hps_io_hps_io_uart0_inst_RX => HPS_UART_RX, -- .hps_io_uart0_inst_RX - hps_io_hps_io_uart0_inst_TX => HPS_UART_TX, -- .hps_io_uart0_inst_TX - hps_io_hps_io_i2c0_inst_SDA => HPS_I2C1_SDAT, -- .hps_io_i2c0_inst_SDA - hps_io_hps_io_i2c0_inst_SCL => HPS_I2C1_SCLK, -- .hps_io_i2c0_inst_SCL - hps_io_hps_io_i2c1_inst_SDA => HPS_I2C2_SDAT, -- .hps_io_i2c1_inst_SDA - hps_io_hps_io_i2c1_inst_SCL => HPS_I2C2_SCLK, -- .hps_io_i2c1_inst_SCL - hps_io_hps_io_gpio_inst_GPIO09 => HPS_CONV_USB_N, -- hps_io_gpio_inst_GPIO09 - hps_io_hps_io_gpio_inst_GPIO35 => HPS_ENET_INT_N, -- .hps_io_gpio_inst_GPIO35 - hps_io_hps_io_gpio_inst_GPIO40 => HPS_LTC_GPIO, -- .hps_io_gpio_inst_GPIO40 - hps_io_hps_io_gpio_inst_GPIO48 => HPS_I2C_CONTROL, -- .hps_io_gpio_inst_GPIO48 - hps_io_hps_io_gpio_inst_GPIO53 => HPS_LED, -- hps_io_gpio_inst_GPIO53 - hps_io_hps_io_gpio_inst_GPIO54 => HPS_KEY, -- hps_io_gpio_inst_GPIO54 - hps_io_hps_io_gpio_inst_GPIO61 => HPS_GSENSOR_INT, -- .hps_io_gpio_inst_GPIO61 - - - -- periph --- leds_external_connection_export => LEDR, -- led_external_connection.export - switches_external_connection_export => SW, -- sw_external_connection.export - - seven_segment_conduit_end_export(6+7*0 downto 7*0) => HEX0, - seven_segment_conduit_end_export(6+7*1 downto 7*1) => HEX1, - seven_segment_conduit_end_export(6+7*2 downto 7*2) => HEX2, - seven_segment_conduit_end_export(6+7*3 downto 7*3) => HEX3, - seven_segment_conduit_end_export(6+7*4 downto 7*4) => HEX4, - seven_segment_conduit_end_export(6+7*5 downto 7*5) => HEX5, - - hmi_subsystemhdc1000_hdcrdy_interrupt => RH_TEMP_DRDY_n, -- hdc1000_0_hdcrdy.interrupt - hmi_subsystemhdc1000_i2c_0_i2c_serial_sda_in => hdc1000_i2c_serial_sda_in, -- hdc1000_i2c_0_i2c_serial.sda_in - hmi_subsystemhdc1000_i2c_0_i2c_serial_scl_in => hdc1000_i2c_serial_scl_in, -- .scl_in - hmi_subsystemhdc1000_i2c_0_i2c_serial_sda_oe => hdc1000_i2c_serial_sda_oe, -- .sda_oe - hmi_subsystemhdc1000_i2c_0_i2c_serial_scl_oe => hdc1000_i2c_serial_scl_oe, -- .scl_oe - - hmi_subsystemapds9301_apdsinterrupt_irq_n => LSENSOR_INT, -- hmi_subsystemapds9301_apdsinterrupt.irq_n - hmi_subsystemapds9301_i2c_sda_in => apds9301_i2c_serial_sda_in, -- hmi_subsystemapds9301_i2c_0_i2c_serial.scl_in - hmi_subsystemapds9301_i2c_scl_in => apds9301_i2c_serial_scl_in, -- .scl_oe - hmi_subsystemapds9301_i2c_sda_oe => apds9301_i2c_serial_sda_oe, -- .sda_in - hmi_subsystemapds9301_i2c_scl_oe => apds9301_i2c_serial_scl_oe, - - hmi_subsystemmpu9250_spi_MISO => MPU_AD0_SDO, -- hmi_subsystemmpu9250_spi_0_external.MISO - hmi_subsystemmpu9250_spi_MOSI => MPU_SDA_SDI, -- .MOSI - hmi_subsystemmpu9250_spi_SCLK => MPU_SCL_SCLK, -- .SCLK - hmi_subsystemmpu9250_spi_SS_n => MPU_CS_n, -- .SS_n - hmi_subsystemmpu9250_mpuint_irq_n => MPU_INT -- hmi_subsystemmpu9250_mpuint.irq_n - ); - - key_sync : process( CLOCK_50, HPS_H2F_RST, SW(0) ) - begin - if (HPS_H2F_RST AND SW(0)) = '0' then - key_reset_sync <= (others => '0'); - elsif rising_edge(CLOCK_50) then - key_reset_sync(sync_levels) <= '1'; - key_reset_sync(sync_levels-1 downto 0) <= key_reset_sync(sync_levels downto 1); - end if; - end process; -- key_sync - - hdc1000_i2c_io : component i2c_io_buf - port map ( - datain => (others => '0'), - oe(1) => hdc1000_i2c_serial_scl_oe, - oe(0) => hdc1000_i2c_serial_sda_oe, - dataout(1) => hdc1000_i2c_serial_scl_in, - dataout(0) => hdc1000_i2c_serial_sda_in, - dataio(1) => RH_TEMP_I2C_SCL, - dataio(0) => RH_TEMP_I2C_SDA); - - apds9301_i2c_io : component i2c_io_buf - port map ( - datain => (others => '0'), - oe(1) => apds9301_i2c_serial_scl_oe, - oe(0) => apds9301_i2c_serial_sda_oe, - dataout(1) => apds9301_i2c_serial_scl_in, - dataout(0) => apds9301_i2c_serial_sda_in, - dataio(1) => LSENSOR_SCL, - dataio(0) => LSENSOR_SDA); - - LEDR(0) <= HPS_H2F_RST AND key_reset_sync(0); - LEDR(LEDR'high downto 1) <= (others => '0'); - - GPIO_0( 0) <= RH_TEMP_DRDY_n; - GPIO_0( 1) <= RH_TEMP_I2C_SCL; - GPIO_0( 2) <= RH_TEMP_I2C_SDA; - - GPIO_0( 4) <= LSENSOR_INT; - GPIO_0( 5) <= LSENSOR_SCL; - GPIO_0( 6) <= LSENSOR_SDA; - - GPIO_0(10) <= MPU_SCL_SCLK; - GPIO_0(11) <= MPU_CS_n; - GPIO_0(12) <= MPU_INT; - GPIO_0(14) <= MPU_AD0_SDO; - GPIO_0(15) <= MPU_SDA_SDI; - -END ARCHITECTURE; +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +ENTITY top IS + +PORT( + ---------FPGA Connections------------- + CLOCK_50 : in std_logic; + SW : in std_logic_vector(9 downto 0); + LEDR : out std_logic_vector(9 downto 0); + + + -- //////////// SEG7 ////////// + HEX0 : out std_logic_vector(6 downto 0); + HEX1 : out std_logic_vector(6 downto 0); + HEX2 : out std_logic_vector(6 downto 0); + HEX3 : out std_logic_vector(6 downto 0); + HEX4 : out std_logic_vector(6 downto 0); + HEX5 : out std_logic_vector(6 downto 0); + + -- //////////// Infrared Interface ////////// + IRDA_RXD : in std_logic; + IRDA_TXD : in std_logic; + + ---------HPS Connections--------------- + HPS_CONV_USB_N : inout std_logic; + HPS_DDR3_ADDR : out std_logic_vector(14 downto 0); + HPS_DDR3_BA : out std_logic_vector(2 downto 0); + HPS_DDR3_CAS_N : out std_logic; + HPS_DDR3_CKE : out std_logic; + HPS_DDR3_CK_N : out std_logic; + HPS_DDR3_CK_P : out std_logic; + HPS_DDR3_CS_N : out std_logic; + HPS_DDR3_DM : out std_logic_vector(3 downto 0); + HPS_DDR3_DQ : inout std_logic_vector(31 downto 0); + HPS_DDR3_DQS_N : inout std_logic_vector(3 downto 0); + HPS_DDR3_DQS_P : inout std_logic_vector(3 downto 0); + HPS_DDR3_ODT : out std_logic; + HPS_DDR3_RAS_N : out std_logic; + HPS_DDR3_RESET_N : out std_logic; + HPS_DDR3_RZQ : in std_logic; + HPS_DDR3_WE_N : out std_logic; + + HPS_ENET_GTX_CLK : out std_logic; + HPS_ENET_INT_N : inout std_logic; + HPS_ENET_MDC : out std_logic; + HPS_ENET_MDIO : inout std_logic; + HPS_ENET_RX_CLK : in std_logic; + HPS_ENET_RX_DATA : in std_logic_vector(3 downto 0); + HPS_ENET_RX_DV : in std_logic; + HPS_ENET_TX_DATA : out std_logic_vector(3 downto 0); + HPS_ENET_TX_EN : out std_logic; + + HPS_KEY : inout std_logic; + HPS_LED : inout std_logic; + + HPS_SD_CLK : out std_logic; + HPS_SD_CMD : inout std_logic; + HPS_SD_DATA : inout std_logic_vector(3 downto 0); + + HPS_UART_RX : in std_logic; + HPS_UART_TX : out std_logic; + + HPS_USB_CLKOUT : in std_logic; + HPS_USB_DATA : inout std_logic_vector(7 downto 0); + HPS_USB_DIR : in std_logic; + HPS_USB_NXT : in std_logic; + HPS_USB_STP : out std_logic; + + HPS_I2C1_SCLK : inout std_logic; + HPS_I2C1_SDAT : inout std_logic; + HPS_I2C2_SCLK : inout std_logic; + HPS_I2C2_SDAT : inout std_logic; + HPS_I2C_CONTROL : inout std_logic; + + HPS_LTC_GPIO : inout std_logic; + HPS_GSENSOR_INT : inout std_logic; + + HPS_SPIM_CLK : out std_logic; + HPS_SPIM_MISO : in std_logic; + HPS_SPIM_MOSI : out std_logic; + HPS_SPIM_SS : inout std_logic; + + --////////// GPIO, GPIO connect to RFS - RF and Sensor ////////// + --BT_KEY : inout std_logic; + --BT_UART_RX : in std_logic; + --BT_UART_TX : out std_logic; + LSENSOR_INT : in std_logic; + LSENSOR_SCL : inout std_logic; + LSENSOR_SDA : inout std_logic; + MPU_AD0_SDO : in std_logic; + MPU_CS_n : inout std_logic; + MPU_FSYNC : out std_logic; + MPU_INT : in std_logic; + MPU_SCL_SCLK : inout std_logic; + MPU_SDA_SDI : inout std_logic; + RH_TEMP_DRDY_n : in std_ulogic; + RH_TEMP_I2C_SCL : inout std_logic; + RH_TEMP_I2C_SDA : inout std_logic; + TMD_D : out std_logic_vector(7 downto 0); + --UART2USB_CTS : in std_logic; + --UART2USB_RTS : out std_logic; + --UART2USB_RX : in std_logic; + --UART2USB_TX : out std_logic; + --WIFI_EN : out std_logic; + --WIFI_RST_n : out std_logic; + --WIFI_UART0_CTS : in std_logic; + --WIFI_UART0_RTS : out std_logic; + --WIFI_UART0_RX : in std_logic; + --WIFI_UART0_TX : out std_logic; + --WIFI_UART1_RX : in std_logic + GPIO_0 : out std_logic_vector(35 downto 0) +); + +END ENTITY; + +ARCHITECTURE MAIN OF top IS + component HPSPlatform is + port ( + clk_clk : in std_logic := 'X'; -- clk + hmi_subsystemapds9301_apdsinterrupt_irq_n : in std_logic := 'X'; -- irq_n + hmi_subsystemapds9301_i2c_sda_in : in std_logic := 'X'; -- sda_in + hmi_subsystemapds9301_i2c_scl_in : in std_logic := 'X'; -- scl_in + hmi_subsystemapds9301_i2c_sda_oe : out std_logic; -- sda_oe + hmi_subsystemapds9301_i2c_scl_oe : out std_logic; -- scl_oe + hmi_subsystemhdc1000_hdcrdy_interrupt : in std_logic := 'X'; -- interrupt + hmi_subsystemhdc1000_i2c_0_i2c_serial_sda_in : in std_logic := 'X'; -- sda_in + hmi_subsystemhdc1000_i2c_0_i2c_serial_scl_in : in std_logic := 'X'; -- scl_in + hmi_subsystemhdc1000_i2c_0_i2c_serial_sda_oe : out std_logic; -- sda_oe + hmi_subsystemhdc1000_i2c_0_i2c_serial_scl_oe : out std_logic; -- scl_oe + hmi_subsystemmpu9250_mpuint_irq_n : in std_logic := 'X'; -- irq_n + hmi_subsystemmpu9250_spi_sclk : out std_logic; -- sclk + hmi_subsystemmpu9250_spi_mosi : out std_logic; -- mosi + hmi_subsystemmpu9250_spi_miso : in std_logic := 'X'; -- miso + hmi_subsystemmpu9250_spi_ss_n : out std_logic; -- ss_n + hps_0_f2h_cold_reset_req_reset_n : in std_logic := 'X'; -- reset_n + hps_0_f2h_debug_reset_req_reset_n : in std_logic := 'X'; -- reset_n + hps_0_f2h_stm_hw_events_stm_hwevents : in std_logic_vector(27 downto 0) := (others => 'X'); -- stm_hwevents + hps_0_f2h_warm_reset_req_reset_n : in std_logic := 'X'; -- reset_n + hps_0_h2f_reset_reset_n : out std_logic; -- reset_n + hps_io_hps_io_emac1_inst_TX_CLK : out std_logic; -- hps_io_emac1_inst_TX_CLK + hps_io_hps_io_emac1_inst_TXD0 : out std_logic; -- hps_io_emac1_inst_TXD0 + hps_io_hps_io_emac1_inst_TXD1 : out std_logic; -- hps_io_emac1_inst_TXD1 + hps_io_hps_io_emac1_inst_TXD2 : out std_logic; -- hps_io_emac1_inst_TXD2 + hps_io_hps_io_emac1_inst_TXD3 : out std_logic; -- hps_io_emac1_inst_TXD3 + hps_io_hps_io_emac1_inst_RXD0 : in std_logic := 'X'; -- hps_io_emac1_inst_RXD0 + hps_io_hps_io_emac1_inst_MDIO : inout std_logic := 'X'; -- hps_io_emac1_inst_MDIO + hps_io_hps_io_emac1_inst_MDC : out std_logic; -- hps_io_emac1_inst_MDC + hps_io_hps_io_emac1_inst_RX_CTL : in std_logic := 'X'; -- hps_io_emac1_inst_RX_CTL + hps_io_hps_io_emac1_inst_TX_CTL : out std_logic; -- hps_io_emac1_inst_TX_CTL + hps_io_hps_io_emac1_inst_RX_CLK : in std_logic := 'X'; -- hps_io_emac1_inst_RX_CLK + hps_io_hps_io_emac1_inst_RXD1 : in std_logic := 'X'; -- hps_io_emac1_inst_RXD1 + hps_io_hps_io_emac1_inst_RXD2 : in std_logic := 'X'; -- hps_io_emac1_inst_RXD2 + hps_io_hps_io_emac1_inst_RXD3 : in std_logic := 'X'; -- hps_io_emac1_inst_RXD3 + hps_io_hps_io_sdio_inst_CMD : inout std_logic := 'X'; -- hps_io_sdio_inst_CMD + hps_io_hps_io_sdio_inst_D0 : inout std_logic := 'X'; -- hps_io_sdio_inst_D0 + hps_io_hps_io_sdio_inst_D1 : inout std_logic := 'X'; -- hps_io_sdio_inst_D1 + hps_io_hps_io_sdio_inst_CLK : out std_logic; -- hps_io_sdio_inst_CLK + hps_io_hps_io_sdio_inst_D2 : inout std_logic := 'X'; -- hps_io_sdio_inst_D2 + hps_io_hps_io_sdio_inst_D3 : inout std_logic := 'X'; -- hps_io_sdio_inst_D3 + hps_io_hps_io_usb1_inst_D0 : inout std_logic := 'X'; -- hps_io_usb1_inst_D0 + hps_io_hps_io_usb1_inst_D1 : inout std_logic := 'X'; -- hps_io_usb1_inst_D1 + hps_io_hps_io_usb1_inst_D2 : inout std_logic := 'X'; -- hps_io_usb1_inst_D2 + hps_io_hps_io_usb1_inst_D3 : inout std_logic := 'X'; -- hps_io_usb1_inst_D3 + hps_io_hps_io_usb1_inst_D4 : inout std_logic := 'X'; -- hps_io_usb1_inst_D4 + hps_io_hps_io_usb1_inst_D5 : inout std_logic := 'X'; -- hps_io_usb1_inst_D5 + hps_io_hps_io_usb1_inst_D6 : inout std_logic := 'X'; -- hps_io_usb1_inst_D6 + hps_io_hps_io_usb1_inst_D7 : inout std_logic := 'X'; -- hps_io_usb1_inst_D7 + hps_io_hps_io_usb1_inst_CLK : in std_logic := 'X'; -- hps_io_usb1_inst_CLK + hps_io_hps_io_usb1_inst_STP : out std_logic; -- hps_io_usb1_inst_STP + hps_io_hps_io_usb1_inst_DIR : in std_logic := 'X'; -- hps_io_usb1_inst_DIR + hps_io_hps_io_usb1_inst_NXT : in std_logic := 'X'; -- hps_io_usb1_inst_NXT + hps_io_hps_io_spim1_inst_CLK : out std_logic; -- hps_io_spim1_inst_CLK + hps_io_hps_io_spim1_inst_MOSI : out std_logic; -- hps_io_spim1_inst_MOSI + hps_io_hps_io_spim1_inst_MISO : in std_logic := 'X'; -- hps_io_spim1_inst_MISO + hps_io_hps_io_spim1_inst_SS0 : out std_logic; -- hps_io_spim1_inst_SS0 + hps_io_hps_io_uart0_inst_RX : in std_logic := 'X'; -- hps_io_uart0_inst_RX + hps_io_hps_io_uart0_inst_TX : out std_logic; -- hps_io_uart0_inst_TX + hps_io_hps_io_i2c0_inst_SDA : inout std_logic := 'X'; -- hps_io_i2c0_inst_SDA + hps_io_hps_io_i2c0_inst_SCL : inout std_logic := 'X'; -- hps_io_i2c0_inst_SCL + hps_io_hps_io_i2c1_inst_SDA : inout std_logic := 'X'; -- hps_io_i2c1_inst_SDA + hps_io_hps_io_i2c1_inst_SCL : inout std_logic := 'X'; -- hps_io_i2c1_inst_SCL + hps_io_hps_io_gpio_inst_GPIO09 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO09 + hps_io_hps_io_gpio_inst_GPIO35 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO35 + hps_io_hps_io_gpio_inst_GPIO40 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO40 + hps_io_hps_io_gpio_inst_GPIO48 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO48 + hps_io_hps_io_gpio_inst_GPIO53 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO53 + hps_io_hps_io_gpio_inst_GPIO54 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO54 + hps_io_hps_io_gpio_inst_GPIO61 : inout std_logic := 'X'; -- hps_io_gpio_inst_GPIO61 + leds_external_connection_export : out std_logic_vector(9 downto 0); -- export + memory_mem_a : out std_logic_vector(14 downto 0); -- mem_a + memory_mem_ba : out std_logic_vector(2 downto 0); -- mem_ba + memory_mem_ck : out std_logic; -- mem_ck + memory_mem_ck_n : out std_logic; -- mem_ck_n + memory_mem_cke : out std_logic; -- mem_cke + memory_mem_cs_n : out std_logic; -- mem_cs_n + memory_mem_ras_n : out std_logic; -- mem_ras_n + memory_mem_cas_n : out std_logic; -- mem_cas_n + memory_mem_we_n : out std_logic; -- mem_we_n + memory_mem_reset_n : out std_logic; -- mem_reset_n + memory_mem_dq : inout std_logic_vector(31 downto 0) := (others => 'X'); -- mem_dq + memory_mem_dqs : inout std_logic_vector(3 downto 0) := (others => 'X'); -- mem_dqs + memory_mem_dqs_n : inout std_logic_vector(3 downto 0) := (others => 'X'); -- mem_dqs_n + memory_mem_odt : out std_logic; -- mem_odt + memory_mem_dm : out std_logic_vector(3 downto 0); -- mem_dm + memory_oct_rzqin : in std_logic := 'X'; -- oct_rzqin + reset_reset_n : in std_logic := 'X'; -- reset_n + seven_segment_conduit_end_export : out std_logic_vector(41 downto 0); -- export + switches_external_connection_export : in std_logic_vector(9 downto 0) := (others => 'X'); -- export + hmi_infrared_ir_tx_o_conduit : out std_logic; -- conduit + hmi_infrared_ir_rx_o_conduit : out std_logic; -- conduit + hmi_infrared_ir_rx_i_conduit : in std_logic := 'X' -- conduit + ); + end component HPSPlatform; + + component i2c_io_buf + PORT + ( + datain : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + oe : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + dataio : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0); + dataout : OUT STD_LOGIC_VECTOR (1 DOWNTO 0) + ); + end component; + + + signal HPS_H2F_RST : std_logic; + + constant hps_cold_reset : std_logic := '0'; + constant hps_warm_reset : std_logic := '0'; + constant hps_debug_reset : std_logic := '0'; + constant sync_levels : natural := 100; + + signal stm_hw_events : std_logic_vector(27 downto 0); + signal test : std_logic; + signal key_reset_sync : std_logic_vector(sync_levels downto 0); + + signal hdc1000_i2c_serial_sda_in : std_logic; + signal hdc1000_i2c_serial_scl_in : std_logic; + signal hdc1000_i2c_serial_sda_oe : std_logic; + signal hdc1000_i2c_serial_scl_oe : std_logic; + + signal apds9301_i2c_serial_sda_in : std_logic; + signal apds9301_i2c_serial_scl_in : std_logic; + signal apds9301_i2c_serial_sda_oe : std_logic; + signal apds9301_i2c_serial_scl_oe : std_logic; + + signal ir_rx_mirror : std_logic; + +BEGIN + + +u0 : component HPSPlatform + port map ( + clk_clk => CLOCK_50, -- clk.clk + reset_reset_n => key_reset_sync(0), -- reset.reset_n + memory_mem_a => HPS_DDR3_ADDR, -- memory.mem_a + memory_mem_ba => HPS_DDR3_BA, -- .mem_ba + memory_mem_ck => HPS_DDR3_CK_P, -- .mem_ck + memory_mem_ck_n => HPS_DDR3_CK_N, -- .mem_ck_n + memory_mem_cke => HPS_DDR3_CKE, -- .mem_cke + memory_mem_cs_n => HPS_DDR3_CS_N, -- .mem_cs_n + memory_mem_ras_n => HPS_DDR3_RAS_N, -- .mem_ras_n + memory_mem_cas_n => HPS_DDR3_CAS_N, -- .mem_cas_n + memory_mem_we_n => HPS_DDR3_WE_N, -- .mem_we_n + memory_mem_reset_n => HPS_DDR3_RESET_N, -- .mem_reset_n + memory_mem_dq => HPS_DDR3_DQ, -- .mem_dq + memory_mem_dqs => HPS_DDR3_DQS_P, -- .mem_dqs + memory_mem_dqs_n => HPS_DDR3_DQS_N, -- .mem_dqs_n + memory_mem_odt => HPS_DDR3_ODT, -- .mem_odt + memory_mem_dm => HPS_DDR3_DM, -- .mem_dm + memory_oct_rzqin => HPS_DDR3_RZQ, -- .oct_rzqin + hps_0_h2f_reset_reset_n => HPS_H2F_RST, -- hps_0_h2f_reset.reset_n + hps_0_f2h_cold_reset_req_reset_n => not(hps_cold_reset), -- hps_0_f2h_cold_reset_req.reset_n + hps_0_f2h_debug_reset_req_reset_n => not(hps_debug_reset), -- hps_0_f2h_debug_reset_req.reset_n + hps_0_f2h_stm_hw_events_stm_hwevents => stm_hw_events, -- hps_0_f2h_stm_hw_events.stm_hwevents + hps_0_f2h_warm_reset_req_reset_n => not(hps_warm_reset), -- hps_0_f2h_warm_reset_req.reset_n + hps_io_hps_io_emac1_inst_TX_CLK => HPS_ENET_GTX_CLK, -- hps_io.hps_io_emac1_inst_TX_CLK + hps_io_hps_io_emac1_inst_TXD0 => HPS_ENET_TX_DATA(0), -- .hps_io_emac1_inst_TXD0 + hps_io_hps_io_emac1_inst_TXD1 => HPS_ENET_TX_DATA(1), -- .hps_io_emac1_inst_TXD1 + hps_io_hps_io_emac1_inst_TXD2 => HPS_ENET_TX_DATA(2), -- .hps_io_emac1_inst_TXD2 + hps_io_hps_io_emac1_inst_TXD3 => HPS_ENET_TX_DATA(3), -- .hps_io_emac1_inst_TXD3 + hps_io_hps_io_emac1_inst_RXD0 => HPS_ENET_RX_DATA(0), -- .hps_io_emac1_inst_RXD0 + hps_io_hps_io_emac1_inst_MDIO => HPS_ENET_MDIO, -- .hps_io_emac1_inst_MDIO + hps_io_hps_io_emac1_inst_MDC => HPS_ENET_MDC, -- .hps_io_emac1_inst_MDC + hps_io_hps_io_emac1_inst_RX_CTL => HPS_ENET_RX_DV, -- .hps_io_emac1_inst_RX_CTL + hps_io_hps_io_emac1_inst_TX_CTL => HPS_ENET_TX_EN, -- .hps_io_emac1_inst_TX_CTL + hps_io_hps_io_emac1_inst_RX_CLK => HPS_ENET_RX_CLK, -- .hps_io_emac1_inst_RX_CLK + hps_io_hps_io_emac1_inst_RXD1 => HPS_ENET_RX_DATA(1), -- .hps_io_emac1_inst_RXD1 + hps_io_hps_io_emac1_inst_RXD2 => HPS_ENET_RX_DATA(2), -- .hps_io_emac1_inst_RXD2 + hps_io_hps_io_emac1_inst_RXD3 => HPS_ENET_RX_DATA(3), -- .hps_io_emac1_inst_RXD3 + hps_io_hps_io_sdio_inst_CMD => HPS_SD_CMD, -- .hps_io_sdio_inst_CMD + hps_io_hps_io_sdio_inst_D0 => HPS_SD_DATA(0), -- .hps_io_sdio_inst_D0 + hps_io_hps_io_sdio_inst_D1 => HPS_SD_DATA(1), -- .hps_io_sdio_inst_D1 + hps_io_hps_io_sdio_inst_CLK => HPS_SD_CLK, -- .hps_io_sdio_inst_CLK + hps_io_hps_io_sdio_inst_D2 => HPS_SD_DATA(2), -- .hps_io_sdio_inst_D2 + hps_io_hps_io_sdio_inst_D3 => HPS_SD_DATA(3), -- .hps_io_sdio_inst_D3 + hps_io_hps_io_usb1_inst_D0 => HPS_USB_DATA(0), -- .hps_io_usb1_inst_D0 + hps_io_hps_io_usb1_inst_D1 => HPS_USB_DATA(1), -- .hps_io_usb1_inst_D1 + hps_io_hps_io_usb1_inst_D2 => HPS_USB_DATA(2), -- .hps_io_usb1_inst_D2 + hps_io_hps_io_usb1_inst_D3 => HPS_USB_DATA(3), -- .hps_io_usb1_inst_D3 + hps_io_hps_io_usb1_inst_D4 => HPS_USB_DATA(4), -- .hps_io_usb1_inst_D4 + hps_io_hps_io_usb1_inst_D5 => HPS_USB_DATA(5), -- .hps_io_usb1_inst_D5 + hps_io_hps_io_usb1_inst_D6 => HPS_USB_DATA(6), -- .hps_io_usb1_inst_D6 + hps_io_hps_io_usb1_inst_D7 => HPS_USB_DATA(7), -- .hps_io_usb1_inst_D7 + hps_io_hps_io_usb1_inst_CLK => HPS_USB_CLKOUT, -- .hps_io_usb1_inst_CLK + hps_io_hps_io_usb1_inst_STP => HPS_USB_STP, -- .hps_io_usb1_inst_STP + hps_io_hps_io_usb1_inst_DIR => HPS_USB_DIR, -- .hps_io_usb1_inst_DIR + hps_io_hps_io_usb1_inst_NXT => HPS_USB_NXT, -- .hps_io_usb1_inst_NXT + hps_io_hps_io_spim1_inst_CLK => HPS_SPIM_CLK, -- .hps_io_spim1_inst_CLK + hps_io_hps_io_spim1_inst_MOSI => HPS_SPIM_MOSI, -- .hps_io_spim1_inst_MOSI + hps_io_hps_io_spim1_inst_MISO => HPS_SPIM_MISO, -- .hps_io_spim1_inst_MISO + hps_io_hps_io_spim1_inst_SS0 => HPS_SPIM_SS, -- .hps_io_spim1_inst_SS0 + hps_io_hps_io_uart0_inst_RX => HPS_UART_RX, -- .hps_io_uart0_inst_RX + hps_io_hps_io_uart0_inst_TX => HPS_UART_TX, -- .hps_io_uart0_inst_TX + hps_io_hps_io_i2c0_inst_SDA => HPS_I2C1_SDAT, -- .hps_io_i2c0_inst_SDA + hps_io_hps_io_i2c0_inst_SCL => HPS_I2C1_SCLK, -- .hps_io_i2c0_inst_SCL + hps_io_hps_io_i2c1_inst_SDA => HPS_I2C2_SDAT, -- .hps_io_i2c1_inst_SDA + hps_io_hps_io_i2c1_inst_SCL => HPS_I2C2_SCLK, -- .hps_io_i2c1_inst_SCL + hps_io_hps_io_gpio_inst_GPIO09 => HPS_CONV_USB_N, -- hps_io_gpio_inst_GPIO09 + hps_io_hps_io_gpio_inst_GPIO35 => HPS_ENET_INT_N, -- .hps_io_gpio_inst_GPIO35 + hps_io_hps_io_gpio_inst_GPIO40 => HPS_LTC_GPIO, -- .hps_io_gpio_inst_GPIO40 + hps_io_hps_io_gpio_inst_GPIO48 => HPS_I2C_CONTROL, -- .hps_io_gpio_inst_GPIO48 + hps_io_hps_io_gpio_inst_GPIO53 => HPS_LED, -- hps_io_gpio_inst_GPIO53 + hps_io_hps_io_gpio_inst_GPIO54 => HPS_KEY, -- hps_io_gpio_inst_GPIO54 + hps_io_hps_io_gpio_inst_GPIO61 => HPS_GSENSOR_INT, -- .hps_io_gpio_inst_GPIO61 + + + -- periph +-- leds_external_connection_export => LEDR, -- led_external_connection.export + switches_external_connection_export => SW, -- sw_external_connection.export + + seven_segment_conduit_end_export(6+7*0 downto 7*0) => HEX0, + seven_segment_conduit_end_export(6+7*1 downto 7*1) => HEX1, + seven_segment_conduit_end_export(6+7*2 downto 7*2) => HEX2, + seven_segment_conduit_end_export(6+7*3 downto 7*3) => HEX3, + seven_segment_conduit_end_export(6+7*4 downto 7*4) => HEX4, + seven_segment_conduit_end_export(6+7*5 downto 7*5) => HEX5, + + hmi_subsystemhdc1000_hdcrdy_interrupt => RH_TEMP_DRDY_n, -- hdc1000_0_hdcrdy.interrupt + hmi_subsystemhdc1000_i2c_0_i2c_serial_sda_in => hdc1000_i2c_serial_sda_in, -- hdc1000_i2c_0_i2c_serial.sda_in + hmi_subsystemhdc1000_i2c_0_i2c_serial_scl_in => hdc1000_i2c_serial_scl_in, -- .scl_in + hmi_subsystemhdc1000_i2c_0_i2c_serial_sda_oe => hdc1000_i2c_serial_sda_oe, -- .sda_oe + hmi_subsystemhdc1000_i2c_0_i2c_serial_scl_oe => hdc1000_i2c_serial_scl_oe, -- .scl_oe + + hmi_subsystemapds9301_apdsinterrupt_irq_n => LSENSOR_INT, -- hmi_subsystemapds9301_apdsinterrupt.irq_n + hmi_subsystemapds9301_i2c_sda_in => apds9301_i2c_serial_sda_in, -- hmi_subsystemapds9301_i2c_0_i2c_serial.scl_in + hmi_subsystemapds9301_i2c_scl_in => apds9301_i2c_serial_scl_in, -- .scl_oe + hmi_subsystemapds9301_i2c_sda_oe => apds9301_i2c_serial_sda_oe, -- .sda_in + hmi_subsystemapds9301_i2c_scl_oe => apds9301_i2c_serial_scl_oe, + + hmi_subsystemmpu9250_spi_miso => MPU_AD0_SDO, -- hmi_subsystemmpu9250_spi_0_external.MISO + hmi_subsystemmpu9250_spi_mosi => MPU_SDA_SDI, -- .MOSI + hmi_subsystemmpu9250_spi_sclk => MPU_SCL_SCLK, -- .SCLK + hmi_subsystemmpu9250_spi_ss_n => MPU_CS_n, -- .SS_n + hmi_subsystemmpu9250_mpuint_irq_n => MPU_INT, -- hmi_subsystemmpu9250_mpuint.irq_n + + hmi_infrared_ir_tx_o_conduit => IRDA_TXD, + hmi_infrared_ir_rx_o_conduit => ir_rx_mirror, + hmi_infrared_ir_rx_i_conduit => IRDA_RXD + ); + + key_sync : process( CLOCK_50, HPS_H2F_RST, SW(0) ) + begin + if (HPS_H2F_RST AND SW(0)) = '0' then + key_reset_sync <= (others => '0'); + elsif rising_edge(CLOCK_50) then + key_reset_sync(sync_levels) <= '1'; + key_reset_sync(sync_levels-1 downto 0) <= key_reset_sync(sync_levels downto 1); + end if; + end process; -- key_sync + + hdc1000_i2c_io : component i2c_io_buf + port map ( + datain => (others => '0'), + oe(1) => hdc1000_i2c_serial_scl_oe, + oe(0) => hdc1000_i2c_serial_sda_oe, + dataout(1) => hdc1000_i2c_serial_scl_in, + dataout(0) => hdc1000_i2c_serial_sda_in, + dataio(1) => RH_TEMP_I2C_SCL, + dataio(0) => RH_TEMP_I2C_SDA); + + apds9301_i2c_io : component i2c_io_buf + port map ( + datain => (others => '0'), + oe(1) => apds9301_i2c_serial_scl_oe, + oe(0) => apds9301_i2c_serial_sda_oe, + dataout(1) => apds9301_i2c_serial_scl_in, + dataout(0) => apds9301_i2c_serial_sda_in, + dataio(1) => LSENSOR_SCL, + dataio(0) => LSENSOR_SDA); + + LEDR(0) <= HPS_H2F_RST AND key_reset_sync(0); + LEDR(1) <= ir_rx_mirror; + LEDR(LEDR'high downto 2) <= (others => '0'); + + GPIO_0( 0) <= RH_TEMP_DRDY_n; + GPIO_0( 1) <= RH_TEMP_I2C_SCL; + GPIO_0( 2) <= RH_TEMP_I2C_SDA; + + GPIO_0( 4) <= LSENSOR_INT; + GPIO_0( 5) <= LSENSOR_SCL; + GPIO_0( 6) <= LSENSOR_SDA; + + GPIO_0(10) <= MPU_SCL_SCLK; + GPIO_0(11) <= MPU_CS_n; + GPIO_0(12) <= MPU_INT; + GPIO_0(14) <= MPU_AD0_SDO; + GPIO_0(15) <= MPU_SDA_SDI; + +END ARCHITECTURE; From f79ebf7bedc99ef6ef4ba3f4644a04782e06adf4 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 21:06:48 +0100 Subject: [PATCH 10/41] fix minor synthesis errors --- hdl/components/infrared/infrared.vhd | 5 +++-- hdl/top.vhd | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index 846564e..6a90d3e 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -99,7 +99,8 @@ begin -- architecture rtl -- Outputs ------------------------------------------------------------------------------ - ir_rx_o <= ir_rx(ir_rx'high); + ir_rx_o <= ir_rx(ir_rx'high); -- mirror rx signal (for debug only) + ir_tx_o <= ir_rx(ir_rx'high); -- mirror rx signal (until tx is implemented) avs_s0_readdata <= std_logic_vector(ram_readdata); done_recording_irq_o <= recording_stopped; @@ -143,7 +144,7 @@ begin -- architecture rtl rst_n_i => rst_n_i, enable_i => falling, overflow_o => recording_stopped, - count_o => timestamp); + count_o => open); ------------------------------------------------------------------------------ -- Registers diff --git a/hdl/top.vhd b/hdl/top.vhd index 6923cbe..98848be 100644 --- a/hdl/top.vhd +++ b/hdl/top.vhd @@ -21,7 +21,7 @@ PORT( -- //////////// Infrared Interface ////////// IRDA_RXD : in std_logic; - IRDA_TXD : in std_logic; + IRDA_TXD : out std_logic; ---------HPS Connections--------------- HPS_CONV_USB_N : inout std_logic; From 08a0f4818ef70425e37e2bd8718678b525c45c5a Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 21:07:03 +0100 Subject: [PATCH 11/41] add vhdltool-config.yaml file --- hdl/vhdltool-config.yaml | 57 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 hdl/vhdltool-config.yaml diff --git a/hdl/vhdltool-config.yaml b/hdl/vhdltool-config.yaml new file mode 100644 index 0000000..fc7a391 --- /dev/null +++ b/hdl/vhdltool-config.yaml @@ -0,0 +1,57 @@ +#Define your project's libraries and source files here. +#This section is compulsory. +Libraries: + #The name of the library. + - name: work + #The paths where the source files for this library can be found. Use "**" to match arbitrarily nested directories. + paths: + - ".vhd" + + + - name: hardware_lib2 + paths: + - "hardware_lib2/**/*.vhd" + - "hardware_lib2/**/*.vhdl" + + + #Point to the IEEE standard libraries + - name: ieee + paths: + - "/home/awesome-vhdl-dev/ieee/*.vhd" + - "/home/awesome-vhdl-dev/ieee/*.vhdl" + +#Enable/disable typechecking +TypeCheck: True + +#Enable/disable check-as-you-type +CheckOnChange: True + +#Linter rule configuration. +#Rules can be enabled or disabled. +#Rules also have a severity. It may be one of Info, Warning, Critical or Error. +Lint: + #Threshold, below which messages are not displayed. + Threshold: Warning + + #Long form rule configuration. Both enabled/disabled status and severity can be configured this way. + DeclaredNotAssigned: + enabled: True + severity: Warning #Default severity Warning + + #Short form. Only enabled/disabled status can be specified. Severity is the default for the rule. + DeclaredNotRead: True #Default severity Warning + ReadNotAssigned: True #Default severity Critical + SensitivityListCheck: True #Default severity Warning + ExtraSensitivityListCheck: True #Default severity Warning + DuplicateSensitivity: True #Default severity Warning + LatchCheck: True #Default severity Critical + VariableNotRead: True #Default severity Warning + VariableNotWritten: True #Default severity Warning + PortNotRead: True #Default severity Warning + PortNotWritten: True #Default severity Critical + NoPrimaryUnit: True #Default severity Warning + DuplicateLibraryImport: True #Default severity Warning + DuplicatePackageUsage: True #Default severity Warning + DeprecatedPackages: True #Default severity Warning + ImplicitLibraries: True #Default severity Warning + DisconnectedPorts: True #Default severity Critical From b7553268fde8130297528326eb94f467b7b4be47 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Tue, 18 Feb 2020 21:12:09 +0100 Subject: [PATCH 12/41] move the yaml file --- hdl/vhdltool-config.yaml => vhdltool-config.yaml | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) rename hdl/vhdltool-config.yaml => vhdltool-config.yaml (86%) diff --git a/hdl/vhdltool-config.yaml b/vhdltool-config.yaml similarity index 86% rename from hdl/vhdltool-config.yaml rename to vhdltool-config.yaml index fc7a391..8f4db44 100644 --- a/hdl/vhdltool-config.yaml +++ b/vhdltool-config.yaml @@ -5,20 +5,7 @@ Libraries: - name: work #The paths where the source files for this library can be found. Use "**" to match arbitrarily nested directories. paths: - - ".vhd" - - - - name: hardware_lib2 - paths: - - "hardware_lib2/**/*.vhd" - - "hardware_lib2/**/*.vhdl" - - - #Point to the IEEE standard libraries - - name: ieee - paths: - - "/home/awesome-vhdl-dev/ieee/*.vhd" - - "/home/awesome-vhdl-dev/ieee/*.vhdl" + - "**/infrared/*.vhd" #Enable/disable typechecking TypeCheck: True From 916d588d55aca0cf414ff50c729d63766a921ec1 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Wed, 19 Feb 2020 11:32:43 +0100 Subject: [PATCH 13/41] fix width error --- hdl/components/infrared/infrared.vhd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index 6a90d3e..c9fdcb8 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -128,7 +128,7 @@ begin -- architecture rtl timestamp_counter_inst : entity work.counter generic map ( - counter_width_g => 31) + counter_width_g => 32) port map ( clk_i => clk_i, rst_n_i => rst_n_i, From b771e30cfd60f831fb0dacc058106912d3af9e55 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Wed, 19 Feb 2020 12:28:37 +0100 Subject: [PATCH 14/41] hook up irq to shared irq line --- hdl/HPSPlatform.qsys | 15 ++++++---- hdl/components/infrared/infrared_hw.tcl | 38 ++++++++++++++++--------- hdl/ip/subsystemHMI.qsys | 11 +++---- 3 files changed, 39 insertions(+), 25 deletions(-) diff --git a/hdl/HPSPlatform.qsys b/hdl/HPSPlatform.qsys index 6454af1..3237d7e 100644 --- a/hdl/HPSPlatform.qsys +++ b/hdl/HPSPlatform.qsys @@ -312,11 +312,7 @@ internal="hmi.infrared_ir_tx_o" type="conduit" dir="end" /> - + - + @@ -1076,6 +1072,13 @@ start="clk_0.clk" end="hmi.subsystemmpu9250_clk" /> + + + + - + Date: Wed, 19 Feb 2020 14:27:56 +0100 Subject: [PATCH 15/41] implement a control register interface --- hdl/components/infrared/infrared.vhd | 34 ++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index c9fdcb8..c5c9228 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -73,6 +73,7 @@ architecture rtl of infrared is type ram_t is array(0 to 255) of timestamp_t; signal ram_data : ram_t := (others => (others => '0')); signal ram_readdata : timestamp_t := (others => '0'); + signal ctrl_readdata : timestamp_t := (others => '0'); signal addr : unsigned(7 downto 0) := (others => '0'); signal ir_rx : std_ulogic_vector(1 downto 0); @@ -90,6 +91,8 @@ architecture rtl of infrared is signal falling : std_ulogic; signal recording_stopped : std_ulogic; signal timestamp : timestamp_t; + signal ctrl_access : std_ulogic; + signal irq_active : std_ulogic; --! @} @@ -101,7 +104,8 @@ begin -- architecture rtl ir_rx_o <= ir_rx(ir_rx'high); -- mirror rx signal (for debug only) ir_tx_o <= ir_rx(ir_rx'high); -- mirror rx signal (until tx is implemented) - avs_s0_readdata <= std_logic_vector(ram_readdata); + avs_s0_readdata <= std_logic_vector(ram_readdata) when ctrl_access = '0' + else ctrl_readdata; done_recording_irq_o <= recording_stopped; ----------------------------------------------------------------------------- @@ -111,6 +115,7 @@ begin -- architecture rtl next_ir_rx <= ir_rx(ir_rx'high-1 downto ir_rx'low) & ir_rx_sync; rising <= '1' when ir_rx(1)='0' and ir_rx(0)='1' else '0'; falling <= '1' when ir_rx(1)='1' and ir_rx(0)='0' else '0'; + ctrl_access <= '1' when avs_s0_address > ram_t'length-1 else '0'; ----------------------------------------------------------------------------- -- Instantiations @@ -155,6 +160,7 @@ begin -- architecture rtl begin addr <= to_unsigned(0, addr'length); store_timestamp <= '0'; + irq_active <= '0'; end procedure reset; begin -- process strobe if rst_n_i = '0' then @@ -168,6 +174,7 @@ begin -- architecture rtl addr <= addr + 1; store_timestamp <= '1'; elsif recording_stopped = '1' then + irq_active <= '1'; addr <= (others => '0'); end if; end if; @@ -181,9 +188,32 @@ begin -- architecture rtl end if; if avs_s0_read = '1' then - ram_readdata <= ram_data(to_integer(unsigned(avs_s0_address))); + ram_readdata <= ram_data(to_integer(unsigned(avs_s0_address(addr'range)))); end if; end if; end process ram; + ctrl_interface : process (clk_i) is + procedure reset is + begin + end procedure reset; + begin -- process ctrl_interface + if rst_n_i = '0' then + reset; + elsif rising_edge(clk_i) then + if avs_s0_read = '1' then + -- addresses higher 255 + case (to_integer(unsigned(avs_s0_address(avs_s0_address'high downto addr'high+1)))) is + when 0 => -- magic number + ctrl_readdata <= x"ABCD1234"; + when 1 => -- read and clear irq status + ctrl_readdata <= irq_active; + irq_active <= '0'; + when others => + ctrl_readdata <= x"DEADBEEF"; + end case; + end if; + end if; + end process ctrl_interface; + end architecture rtl; From 3a76deb523ac2622ea99fc8113b9aefbd05a62d8 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Wed, 19 Feb 2020 15:13:17 +0100 Subject: [PATCH 16/41] more magic number regs --- hdl/components/infrared/infrared.vhd | 35 +++++++++++++++------ hdl/components/infrared/modelsim_compile.sh | 3 ++ 2 files changed, 29 insertions(+), 9 deletions(-) create mode 100755 hdl/components/infrared/modelsim_compile.sh diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index c5c9228..59f566c 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -27,7 +27,7 @@ entity infrared is --! @} --! @name Avalon MM Bus --! @{ - avs_s0_address : in std_logic_vector(7 downto 0); + avs_s0_address : in std_logic_vector(10 downto 0); avs_s0_read : in std_logic; avs_s0_readdata : out std_logic_vector(31 downto 0); avs_s0_write : in std_logic; @@ -71,13 +71,16 @@ architecture rtl of infrared is subtype timestamp_t is unsigned(31 downto 0); type ram_t is array(0 to 255) of timestamp_t; + signal ram_data : ram_t := (others => (others => '0')); signal ram_readdata : timestamp_t := (others => '0'); signal ctrl_readdata : timestamp_t := (others => '0'); signal addr : unsigned(7 downto 0) := (others => '0'); - signal ir_rx : std_ulogic_vector(1 downto 0); - signal store_timestamp : std_ulogic; + signal ir_rx : std_ulogic_vector(1 downto 0) := (others => '0'); + signal store_timestamp : std_ulogic := '0'; + signal irq_active : std_ulogic := '0'; + signal irq_reset : std_ulogic := '0'; --! @} ----------------------------------------------------------------------------- @@ -92,7 +95,6 @@ architecture rtl of infrared is signal recording_stopped : std_ulogic; signal timestamp : timestamp_t; signal ctrl_access : std_ulogic; - signal irq_active : std_ulogic; --! @} @@ -105,7 +107,7 @@ begin -- architecture rtl ir_rx_o <= ir_rx(ir_rx'high); -- mirror rx signal (for debug only) ir_tx_o <= ir_rx(ir_rx'high); -- mirror rx signal (until tx is implemented) avs_s0_readdata <= std_logic_vector(ram_readdata) when ctrl_access = '0' - else ctrl_readdata; + else std_logic_vector(ctrl_readdata); done_recording_irq_o <= recording_stopped; ----------------------------------------------------------------------------- @@ -115,7 +117,7 @@ begin -- architecture rtl next_ir_rx <= ir_rx(ir_rx'high-1 downto ir_rx'low) & ir_rx_sync; rising <= '1' when ir_rx(1)='0' and ir_rx(0)='1' else '0'; falling <= '1' when ir_rx(1)='1' and ir_rx(0)='0' else '0'; - ctrl_access <= '1' when avs_s0_address > ram_t'length-1 else '0'; + ctrl_access <= '1' when to_integer(unsigned(avs_s0_address)) > ram_t'length-1 else '0'; ----------------------------------------------------------------------------- -- Instantiations @@ -177,6 +179,9 @@ begin -- architecture rtl irq_active <= '1'; addr <= (others => '0'); end if; + if irq_reset = '1' then + irq_active <= '0'; + end if; end if; end process regs; @@ -196,19 +201,31 @@ begin -- architecture rtl ctrl_interface : process (clk_i) is procedure reset is begin + ctrl_readdata <= (others => '0'); + irq_reset <= '0'; end procedure reset; begin -- process ctrl_interface if rst_n_i = '0' then reset; elsif rising_edge(clk_i) then if avs_s0_read = '1' then + -- Defaults + ctrl_readdata <= (others => '0'); + irq_reset <= '0'; + -- addresses higher 255 case (to_integer(unsigned(avs_s0_address(avs_s0_address'high downto addr'high+1)))) is when 0 => -- magic number ctrl_readdata <= x"ABCD1234"; - when 1 => -- read and clear irq status - ctrl_readdata <= irq_active; - irq_active <= '0'; + when 1 => -- magic number + ctrl_readdata <= x"11111111"; + when 2 => -- magic number + ctrl_readdata <= x"22222222"; + when 3 => -- magic number + ctrl_readdata <= x"33333333"; + when 4 => -- read and clear irq status + ctrl_readdata(0) <= irq_active; + irq_reset <= '1'; when others => ctrl_readdata <= x"DEADBEEF"; end case; diff --git a/hdl/components/infrared/modelsim_compile.sh b/hdl/components/infrared/modelsim_compile.sh new file mode 100755 index 0000000..9be7554 --- /dev/null +++ b/hdl/components/infrared/modelsim_compile.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +vsim -do comp.do -c From 00632fec3335f9eeb42bd3f318cf106e8b48b5ea Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Wed, 19 Feb 2020 23:12:48 +0100 Subject: [PATCH 17/41] update comments to signal --- drivers/mpu9250/mpu9250.c | 2 +- user/event_sensors/mpu9250.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/mpu9250/mpu9250.c b/drivers/mpu9250/mpu9250.c index 45e278d..879451d 100644 --- a/drivers/mpu9250/mpu9250.c +++ b/drivers/mpu9250/mpu9250.c @@ -26,7 +26,7 @@ #define DRIVER_NAME "mpu9250" -#define SIGNAL_EVENT 10 // User space has to listen for this event number +#define SIGNAL_EVENT 10 // User space has to listen for this event number (SIGUSR1) #define NUM_BYTE_SENSOR_DATA (3 * 3 * sizeof(uint16_t)) #define NUM_BYTE_TIMESTAMP (2 * sizeof(uint32_t)) diff --git a/user/event_sensors/mpu9250.cpp b/user/event_sensors/mpu9250.cpp index ae8e8c0..82f64fa 100644 --- a/user/event_sensors/mpu9250.cpp +++ b/user/event_sensors/mpu9250.cpp @@ -41,7 +41,7 @@ using namespace std::placeholders; /* Event specific defines */ -#define EVENT_SIGNAL_NR 10 +#define EVENT_SIGNAL_NR 10 // (SIGUSR1) #define EVENT_PACKETS 1024 From f9f752d6e483bfb28316acafd15a1648730a1409 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Wed, 19 Feb 2020 23:12:57 +0100 Subject: [PATCH 18/41] add infrared driver --- drivers/infrared/Makefile | 23 +++ drivers/infrared/infrared.c | 292 ++++++++++++++++++++++++++++++++++++ 2 files changed, 315 insertions(+) create mode 100644 drivers/infrared/Makefile create mode 100644 drivers/infrared/infrared.c diff --git a/drivers/infrared/Makefile b/drivers/infrared/Makefile new file mode 100644 index 0000000..86562b6 --- /dev/null +++ b/drivers/infrared/Makefile @@ -0,0 +1,23 @@ +modulename := infrared + +obj-m += $(modulename).o + + +all: + $(MAKE) -C $(KERNEL_SRC) M=$(PWD) + +modules_install: + $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules_install + +clean: + rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c + rm -f Module.markers Module.symvers modules.order + rm -rf .tmp_versions Modules.symvers + +deploy: all + scp $(modulename).ko "$(DEPLOYSSH):$(DEPLOYSSHPATH)/$(modulename).ko" + ssh $(DEPLOYSSH) "rmmod $(modulename)"; + ssh $(DEPLOYSSH) "insmod $(DEPLOYSSHPATH)/$(modulename).ko"; + + +.PHONY: all clean deploy diff --git a/drivers/infrared/infrared.c b/drivers/infrared/infrared.c new file mode 100644 index 0000000..b154581 --- /dev/null +++ b/drivers/infrared/infrared.c @@ -0,0 +1,292 @@ +/* + * Terasic DE1-SoC Sensor Driver for Infrared (IR) Sensor + * + * Copyright (C) 2020 Michael Wurm + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DRIVER_NAME "infrared" + +#define SIGNAL_EVENT 12 // User space has to listen for this event number (SIGUSR2) + +#define NUM_BYTE_TIMESTAMP_DATA (256 * sizeof(uint32_t)) +#define NUM_BYTE_MAGIC_NRS (4 * sizeof(uint32_t)) +#define NUM_BYTE_IRQS_ACTIVE (sizeof(uint32_t)) + +#define SIZEOF_DATA_T (NUM_BYTE_TIMESTAMP_DATA + \ + NUM_BYTE_MAGIC_NRS + \ + NUM_BYTE_IRQS_ACTIVE) + +#define MEM_OFFSET_DATA_MAGIC_NR0 (256 + 0x0) +#define MEM_OFFSET_DATA_MAGIC_NR1 (256 + 0x4) +#define MEM_OFFSET_DATA_MAGIC_NR2 (256 + 0x8) +#define MEM_OFFSET_DATA_MAGIC_NR3 (256 + 0xC) +#define MEM_OFFSET_DATA_IRQ (256 + 0x10) + +/* IO Control (IOCTL) */ +#define IOC_MODE_POLLING 0 +#define IOC_MODE_BUFFER 1 +#define IOC_SET_PID 2 +#define IOC_SET_THRESHOLD 3 +#define IOC_CMD_SET_READ_POLLING _IO(4711, IOC_MODE_POLLING) +#define IOC_CMD_SET_READ_BUFFER _IO(4711, IOC_MODE_BUFFER) +#define IOC_CMD_SET_PID _IO(4711, IOC_SET_PID) +#define IOC_CMD_SET_THRESHOLD _IOW(4711, IOC_SET_THRESHOLD, uint32_t *) + +typedef struct +{ + uint32_t timestamp[256]; + uint32_t magic_number[4]; +} __attribute__((packed)) buffer_t; + +struct data +{ + void *regs; + buffer_t buffer_data; + uint32_t pid; + uint32_t mode; + uint32_t size; + uint32_t irq_nr; + uint32_t irq_count; + uint32_t irqs_active; + struct miscdevice misc; +}; + +static irqreturn_t irq_handler(int nr, void *data_ptr) +{ + struct data *dev = data_ptr; + struct siginfo info; + struct task_struct *t; + + pr_info("Interrupt occured\n"); + + /* Determine which interrupt occured */ + dev->irqs_active = ioread32(dev->regs + MEM_OFFSET_DATA_IRQ); + + if (dev->irqs_active == 0x1) + { + dev->irq_count++; + pr_info("Received buffer 0 interrupt [Occured %i times so far.]\n", dev->irq_count); + } + else + { + /* Another device asserted the shared interrupt line */ + return IRQ_NONE; + } + + /* -------- TEMPORARY ----------------------------------------- */ + return IRQ_HANDLED; + /* -------- TEMPORARY ----------------------------------------- */ + + /* Send signal to user space */ + t = pid_task(find_vpid(dev->pid), PIDTYPE_PID); + if (t == NULL) + { + printk(KERN_ERR "A Task with PID %i does not exist.\n", dev->pid); + return IRQ_HANDLED; + } + + memset(&info, 0, sizeof(struct siginfo)); + info.si_signo = SIGNAL_EVENT; + info.si_code = SI_QUEUE; + info.si_int = 4711; + + send_sig_info(SIGNAL_EVENT, &info, t); + + return IRQ_HANDLED; +} + +/* + * @brief This function gets executed on fread. + */ +static int dev_read(struct file *filep, char *buf, size_t count, + loff_t *offp) +{ + struct data *dev = container_of(filep->private_data, + struct data, misc); + + if (SIZEOF_DATA_T != sizeof(dev->buffer_data)) + { + printk(KERN_ERR "Data struct buffer_t is not allocated as expected.\n"); + return -ENOEXEC; + } + + /* check out of bound access */ + if ((*offp < 0) || (*offp >= SIZEOF_DATA_T)) + return 0; + + /* limit number of readable bytes to maximum which is still possible */ + if ((*offp + count) > SIZEOF_DATA_T) + count = SIZEOF_DATA_T - *offp; + + dev->buffer_data.magic_number[0] = ioread32(dev->regs + MEM_OFFSET_DATA_MAGIC_NR0); + dev->buffer_data.magic_number[1] = ioread32(dev->regs + MEM_OFFSET_DATA_MAGIC_NR1); + dev->buffer_data.magic_number[2] = ioread32(dev->regs + MEM_OFFSET_DATA_MAGIC_NR2); + dev->buffer_data.magic_number[3] = ioread32(dev->regs + MEM_OFFSET_DATA_MAGIC_NR3); + + pr_info("magic nr 0: 0x%x", dev->buffer_data.magic_number[0]); + pr_info("magic nr 1: 0x%x", dev->buffer_data.magic_number[1]); + pr_info("magic nr 2: 0x%x", dev->buffer_data.magic_number[2]); + pr_info("magic nr 3: 0x%x", dev->buffer_data.magic_number[3]); + + /* copy data from kernel space buffer into user space */ + if (count > 0) + count = count - copy_to_user(buf, (char *)&dev->buffer_data + *offp, count); + + *offp += count; + + return count; +} + +/* + * @brief This function gets executed on ioctl. + */ +static long dev_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) +{ + struct data *dev = container_of(filep->private_data, struct data, misc); + uint32_t threshold; + uint32_t tmp; + + switch (cmd) + { + case IOC_CMD_SET_READ_POLLING: + pr_info("dev_ioctl: Set cmd to 'read polling'.\n"); + dev->mode = IOC_MODE_POLLING; + break; + case IOC_CMD_SET_READ_BUFFER: + pr_info("dev_ioctl: Set cmd to 'read buffer'.\n"); + dev->mode = IOC_MODE_BUFFER; + break; + case IOC_CMD_SET_PID: + /* Get the PID of the currently executing process. + * The `current` variable is defined in linux/sched/signal.h */ + dev->pid = task_pid_nr(current); + pr_info("dev_ioctl: Set current PID to %i.\n", dev->pid); + /* Enable buffer 0 again (it's disabled internally on every interrupt to keep the data valid) */ + // iowrite32(0x1, dev->regs + MEM_OFFSET_BUF_CTRL_STATUS); + + break; + case IOC_CMD_SET_THRESHOLD: + tmp = copy_from_user(&threshold, (uint32_t *)arg, sizeof(threshold)); + pr_info("dev_ioctl: Set acceleration threshold for shock detection to %i.\n", threshold); + // iowrite32(threshold, dev->regs + MEM_OFFSET_SHOCK_THRESHOLD); + break; + default: + /* it seems like ioctl is also called for all invocations of fread with cmd 0x5041 (TCGETS) */ + // pr_info("dev_ioctl: Unknown cmd (%u). Exit.\n", cmd); + break; + } + return 0; +} + +static const struct file_operations dev_fops = { + .owner = THIS_MODULE, + .read = dev_read, + .unlocked_ioctl = dev_ioctl}; + +static int dev_probe(struct platform_device *pdev) +{ + struct data *dev; + struct resource *io; + int retval; + + /* Allocate memory for private data */ + dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); + if (dev == NULL) + return -ENOMEM; + platform_set_drvdata(pdev, dev); + + /* Get resources */ + io = platform_get_resource(pdev, IORESOURCE_MEM, 0); + dev->regs = devm_ioremap_resource(&pdev->dev, io); + if (IS_ERR(dev->regs)) + return PTR_ERR(dev->regs); + + dev->size = io->end - io->start + 1; + dev->misc.name = DRIVER_NAME; + dev->misc.minor = MISC_DYNAMIC_MINOR; + dev->misc.fops = &dev_fops; + dev->misc.parent = &pdev->dev; + retval = misc_register(&dev->misc); + if (retval) + { + dev_err(&pdev->dev, "Register misc device failed!\n"); + return retval; + } + + /* Get interrupt */ + dev->irq_nr = platform_get_irq(pdev, 0); + retval = devm_request_irq(&pdev->dev, dev->irq_nr, &irq_handler, + IRQF_SHARED, dev_name(&pdev->dev), dev); + if (retval != 0) + { + dev_err(&pdev->dev, "Request interrupt failed!\n"); + return retval; + } + + /* Enable interrupt generation in FPGA device */ + // iowrite32(0x3, dev->regs + MEM_OFFSET_BUF_IEN); + /* Enable buffer 0 */ + // iowrite32(0x1, dev->regs + MEM_OFFSET_BUF_CTRL_STATUS); + + dev_info(&pdev->dev, "Infrared (IR) sensor driver loaded!"); + + return 0; +} + +static int dev_remove(struct platform_device *pdev) +{ + struct data *dev = platform_get_drvdata(pdev); + + /* Disable interrupt generation in FPGA device */ + // iowrite32(0x0, dev->regs + MEM_OFFSET_BUF_IEN); + devm_free_irq(&pdev->dev, dev->irq_nr, dev); + + misc_deregister(&dev->misc); + platform_set_drvdata(pdev, NULL); + + return 0; +} + +static const struct of_device_id dev_of_match[] = { + { + .compatible = "wur,infrared-1.0", + }, + {}, +}; +MODULE_DEVICE_TABLE(of, dev_of_match); + +static struct platform_driver dev_driver = { + .driver = { + .name = DRIVER_NAME, + .owner = THIS_MODULE, + .of_match_table = of_match_ptr(dev_of_match), + }, + .probe = dev_probe, + .remove = dev_remove, +}; + +module_platform_driver(dev_driver); + +MODULE_AUTHOR("M.Wurm"); +MODULE_DESCRIPTION("Altera/Terasic Infrared (IR) sensor driver"); +MODULE_LICENSE("GPL v2"); From e94301d57aa2bdf4057d06bdbe42058a0bc82a1f Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Thu, 20 Feb 2020 14:41:19 +0100 Subject: [PATCH 19/41] add testbench --- drivers/infrared/infrared.c | 7 +- hdl/components/infrared/comp.do | 3 +- hdl/components/infrared/comp_sim.do | 21 ++++ hdl/components/infrared/infrared.vhd | 20 ++-- hdl/components/infrared/infrared_hw.tcl | 12 ++- hdl/components/infrared/modelsim_compile.sh | 3 +- hdl/components/infrared/tb_infrared.vhd | 106 ++++++++++++++++++++ hdl/components/infrared/wave.do | 66 ++++++++++++ 8 files changed, 219 insertions(+), 19 deletions(-) create mode 100644 hdl/components/infrared/comp_sim.do create mode 100644 hdl/components/infrared/tb_infrared.vhd create mode 100644 hdl/components/infrared/wave.do diff --git a/drivers/infrared/infrared.c b/drivers/infrared/infrared.c index b154581..0574074 100644 --- a/drivers/infrared/infrared.c +++ b/drivers/infrared/infrared.c @@ -33,8 +33,7 @@ #define NUM_BYTE_IRQS_ACTIVE (sizeof(uint32_t)) #define SIZEOF_DATA_T (NUM_BYTE_TIMESTAMP_DATA + \ - NUM_BYTE_MAGIC_NRS + \ - NUM_BYTE_IRQS_ACTIVE) + NUM_BYTE_MAGIC_NRS) #define MEM_OFFSET_DATA_MAGIC_NR0 (256 + 0x0) #define MEM_OFFSET_DATA_MAGIC_NR1 (256 + 0x4) @@ -77,7 +76,7 @@ static irqreturn_t irq_handler(int nr, void *data_ptr) struct siginfo info; struct task_struct *t; - pr_info("Interrupt occured\n"); + pr_info("INFRARED Interrupt occured\n"); /* Determine which interrupt occured */ dev->irqs_active = ioread32(dev->regs + MEM_OFFSET_DATA_IRQ); @@ -85,7 +84,7 @@ static irqreturn_t irq_handler(int nr, void *data_ptr) if (dev->irqs_active == 0x1) { dev->irq_count++; - pr_info("Received buffer 0 interrupt [Occured %i times so far.]\n", dev->irq_count); + pr_info("INFRARED Received interrupt [Occured %i times so far.]\n", dev->irq_count); } else { diff --git a/hdl/components/infrared/comp.do b/hdl/components/infrared/comp.do index 41abef2..3cc6ab3 100644 --- a/hdl/components/infrared/comp.do +++ b/hdl/components/infrared/comp.do @@ -17,5 +17,4 @@ myvcom counter.vhd myvcom sync.vhd myvcom sync_single.vhd myvcom infrared.vhd - -quit +myvcom tb_infrared.vhd diff --git a/hdl/components/infrared/comp_sim.do b/hdl/components/infrared/comp_sim.do new file mode 100644 index 0000000..3c2f7d2 --- /dev/null +++ b/hdl/components/infrared/comp_sim.do @@ -0,0 +1,21 @@ +#----------------------------------*-tcl-*- +do comp.do + +echo "Sim: load design" +set unit tb_infrared +vsim -novopt -wlfdeleteonquit \ + work.${unit}(Bhv) + +set tb ${unit} +set dut ${tb}/DUT + +echo "Sim: load wave-file(s)" +catch {do wave.do} + +echo "Sim: log signals" +log -r /* + +echo "Sim: run ..." +run 30 us + +catch {do wave-restore.do} diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index 59f566c..cc29e59 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -76,7 +76,7 @@ architecture rtl of infrared is signal ram_readdata : timestamp_t := (others => '0'); signal ctrl_readdata : timestamp_t := (others => '0'); - signal addr : unsigned(7 downto 0) := (others => '0'); + signal store_addr : unsigned(7 downto 0) := (others => '0'); signal ir_rx : std_ulogic_vector(1 downto 0) := (others => '0'); signal store_timestamp : std_ulogic := '0'; signal irq_active : std_ulogic := '0'; @@ -95,6 +95,7 @@ architecture rtl of infrared is signal recording_stopped : std_ulogic; signal timestamp : timestamp_t; signal ctrl_access : std_ulogic; + signal end_of_sequence : std_ulogic; --! @} @@ -118,6 +119,7 @@ begin -- architecture rtl rising <= '1' when ir_rx(1)='0' and ir_rx(0)='1' else '0'; falling <= '1' when ir_rx(1)='1' and ir_rx(0)='0' else '0'; ctrl_access <= '1' when to_integer(unsigned(avs_s0_address)) > ram_t'length-1 else '0'; + end_of_sequence <= '1' when to_integer(store_addr) > 0 and ir_rx(1) = '1' else '0'; ----------------------------------------------------------------------------- -- Instantiations @@ -145,11 +147,11 @@ begin -- architecture rtl stop_counter_inst : entity work.counter generic map ( - counter_width_g => 25) -- 2^25 steps @ 100MHz => 0.3355 sec + counter_width_g => 10) -- 2^25 steps @ 50MHz => 0.6711 sec port map ( clk_i => clk_i, rst_n_i => rst_n_i, - enable_i => falling, + enable_i => end_of_sequence, overflow_o => recording_stopped, count_o => open); @@ -160,7 +162,7 @@ begin -- architecture rtl regs : process (clk_i, rst_n_i) is procedure reset is begin - addr <= to_unsigned(0, addr'length); + store_addr <= to_unsigned(0, store_addr'length); store_timestamp <= '0'; irq_active <= '0'; end procedure reset; @@ -173,11 +175,11 @@ begin -- architecture rtl store_timestamp <= '0'; if rising = '1' or falling = '1' then - addr <= addr + 1; + store_addr <= store_addr + 1; store_timestamp <= '1'; elsif recording_stopped = '1' then irq_active <= '1'; - addr <= (others => '0'); + store_addr <= (others => '0'); end if; if irq_reset = '1' then irq_active <= '0'; @@ -189,11 +191,11 @@ begin -- architecture rtl begin if rising_edge(clk_i) then if store_timestamp = '1' then - ram_data(to_integer(addr)) <= timestamp; + ram_data(to_integer(store_addr)) <= timestamp; end if; if avs_s0_read = '1' then - ram_readdata <= ram_data(to_integer(unsigned(avs_s0_address(addr'range)))); + ram_readdata <= ram_data(to_integer(unsigned(avs_s0_address(store_addr'range)))); end if; end if; end process ram; @@ -214,7 +216,7 @@ begin -- architecture rtl irq_reset <= '0'; -- addresses higher 255 - case (to_integer(unsigned(avs_s0_address(avs_s0_address'high downto addr'high+1)))) is + case (to_integer(unsigned(avs_s0_address(avs_s0_address'high downto store_addr'high+1)))) is when 0 => -- magic number ctrl_readdata <= x"ABCD1234"; when 1 => -- magic number diff --git a/hdl/components/infrared/infrared_hw.tcl b/hdl/components/infrared/infrared_hw.tcl index 085076d..cb13d59 100644 --- a/hdl/components/infrared/infrared_hw.tcl +++ b/hdl/components/infrared/infrared_hw.tcl @@ -1,11 +1,11 @@ # TCL File Generated by Component Editor 19.1 -# Wed Feb 19 11:57:18 CET 2020 +# Thu Feb 20 13:30:47 CET 2020 # DO NOT MODIFY # # infrared "infrared" v1.0 -# Michael Wurm 2020.02.19.11:57:18 +# Michael Wurm 2020.02.20.13:30:47 # Infrared Recorder/Transmitter # @@ -43,6 +43,13 @@ add_fileset_file counter.vhd VHDL PATH counter.vhd add_fileset_file sync_single.vhd VHDL PATH sync_single.vhd add_fileset_file infrared.vhd VHDL PATH infrared.vhd TOP_LEVEL_FILE +add_fileset SIM_VHDL SIM_VHDL "" "" +set_fileset_property SIM_VHDL ENABLE_RELATIVE_INCLUDE_PATHS false +set_fileset_property SIM_VHDL ENABLE_FILE_OVERWRITE_MODE true +add_fileset_file counter.vhd VHDL PATH counter.vhd +add_fileset_file sync_single.vhd VHDL PATH sync_single.vhd +add_fileset_file infrared.vhd VHDL PATH infrared.vhd + # # parameters @@ -147,7 +154,6 @@ set_interface_property done_recording_irq SVD_ADDRESS_GROUP "" add_interface_port done_recording_irq done_recording_irq_o irq Output 1 - # # connection point ir_rx_i # diff --git a/hdl/components/infrared/modelsim_compile.sh b/hdl/components/infrared/modelsim_compile.sh index 9be7554..df54e73 100755 --- a/hdl/components/infrared/modelsim_compile.sh +++ b/hdl/components/infrared/modelsim_compile.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash -vsim -do comp.do -c +#vsim -do comp.do -c +vsim -do comp_sim.do diff --git a/hdl/components/infrared/tb_infrared.vhd b/hdl/components/infrared/tb_infrared.vhd new file mode 100644 index 0000000..1489cac --- /dev/null +++ b/hdl/components/infrared/tb_infrared.vhd @@ -0,0 +1,106 @@ + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +-- 0 -> upper 16 bit: humidity, lower 16 bit: temperature +-- 1 -> lower word of timestamp +-- 2 -> upper word of timestamp + +entity tb_infrared is +end entity tb_infrared; + +architecture bhv of tb_infrared is + signal avs_s0_address : std_logic_vector(10 downto 0) := (others => '0'); -- avs_s0.address + signal avs_s0_read : std_logic := '0'; -- .read + signal avs_s0_readdata : std_logic_vector(31 downto 0); -- .readdata + signal avs_s0_write : std_logic := '0'; -- .write + signal avs_s0_writedata : std_logic_vector(31 downto 0) := (others => '0'); -- .writedata + signal clk : std_logic := '0'; -- clock.clk + signal nRst : std_logic := '0'; -- + signal ir_rx : std_logic := '0'; -- + signal ir_tx : std_logic; + signal irq : std_logic; + signal ir_rx_mirror : std_logic; + + constant clk_cycle_duration_c : time := 1 sec / 50E6; -- 50 MHz + constant reset_duration_c : time := 20 * clk_cycle_duration_c; + +begin + + nRst <= '1' after reset_duration_c; + clk <= not clk after clk_cycle_duration_c / 2; + + DUT : entity work.infrared + port map ( + clk_i => clk, + rst_n_i => nRst, + avs_s0_address => avs_s0_address, + avs_s0_read => avs_s0_read, + avs_s0_readdata => avs_s0_readdata, + avs_s0_write => avs_s0_write, + avs_s0_writedata => avs_s0_writedata, + ir_rx_i => ir_rx, + ir_tx_o => ir_tx, + done_recording_irq_o => irq, + ir_rx_o => ir_rx_mirror); + + test_proc : process + begin + wait for reset_duration_c + 5 ns; + ir_rx_input : for i in 0 to 10 loop + ir_rx <= not ir_rx; + wait for 100 ns; + end loop; + wait; + end process test_proc; + + -- test_proc : process + -- begin + -- ir_rx_i <= '1'; + -- mpuInt <= '1'; + -- wait for 700 ns; + -- wait until clk = '0'; + + -- reg_loop1 : for i in 0 to 10 loop + -- avs_s0_address <= std_logic_vector(to_unsigned(i, avs_s0_address'length)); + -- avs_s0_read <= '1'; + + -- wait until clk <= '1'; + -- wait until clk <= '0'; + -- end loop ; -- reg_loop + + -- avs_s0_address <= X"0"; + -- avs_s0_read <= '0'; + + -- wait for 100 ns; + -- wait until clk = '0'; + + -- mpuInt <= '0'; + -- avm_m0_readdata <= X"0000DEAD"; + + -- wait until clk = '1'; + -- wait until clk = '0'; + -- wait until clk = '1'; + -- wait until clk = '0'; + + -- mpuInt <= '1'; + + -- wait for 500 ns; + -- wait until clk = '0'; + + -- reg_loop2 : for i in 0 to 10 loop + -- avs_s0_address <= std_logic_vector(to_unsigned(i, avs_s0_address'length)); + -- avs_s0_read <= '1'; + + -- wait until clk <= '1'; + -- wait until clk <= '0'; + -- end loop ; -- reg_loop + + -- avs_s0_address <= X"0"; + -- avs_s0_read <= '0'; + + -- wait; + -- end process; -- test_proc + +end architecture bhv; -- of new_component diff --git a/hdl/components/infrared/wave.do b/hdl/components/infrared/wave.do new file mode 100644 index 0000000..90bdb00 --- /dev/null +++ b/hdl/components/infrared/wave.do @@ -0,0 +1,66 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate /tb_infrared/avs_s0_address +add wave -noupdate /tb_infrared/avs_s0_read +add wave -noupdate /tb_infrared/avs_s0_readdata +add wave -noupdate /tb_infrared/avs_s0_write +add wave -noupdate /tb_infrared/avs_s0_writedata +add wave -noupdate /tb_infrared/clk +add wave -noupdate /tb_infrared/nRst +add wave -noupdate /tb_infrared/ir_rx +add wave -noupdate /tb_infrared/ir_tx +add wave -noupdate /tb_infrared/irq +add wave -noupdate /tb_infrared/ir_rx_mirror +add wave -noupdate -divider stop_counter +add wave -noupdate /tb_infrared/DUT/stop_counter_inst/clk_i +add wave -noupdate /tb_infrared/DUT/stop_counter_inst/rst_n_i +add wave -noupdate /tb_infrared/DUT/stop_counter_inst/enable_i +add wave -noupdate /tb_infrared/DUT/stop_counter_inst/overflow_o +add wave -noupdate /tb_infrared/DUT/stop_counter_inst/count_o +add wave -noupdate /tb_infrared/DUT/stop_counter_inst/count +add wave -noupdate /tb_infrared/DUT/stop_counter_inst/overflow +add wave -noupdate -divider DUT +add wave -noupdate /tb_infrared/DUT/clk_i +add wave -noupdate /tb_infrared/DUT/rst_n_i +add wave -noupdate /tb_infrared/DUT/avs_s0_address +add wave -noupdate /tb_infrared/DUT/avs_s0_read +add wave -noupdate /tb_infrared/DUT/avs_s0_readdata +add wave -noupdate /tb_infrared/DUT/avs_s0_write +add wave -noupdate /tb_infrared/DUT/avs_s0_writedata +add wave -noupdate /tb_infrared/DUT/avs_s0_waitrequest +add wave -noupdate /tb_infrared/DUT/ir_rx_i +add wave -noupdate /tb_infrared/DUT/ir_tx_o +add wave -noupdate /tb_infrared/DUT/done_recording_irq_o +add wave -noupdate /tb_infrared/DUT/ir_rx_o +add wave -noupdate /tb_infrared/DUT/ram_readdata +add wave -noupdate /tb_infrared/DUT/ctrl_readdata +add wave -noupdate -expand -subitemconfig {/tb_infrared/DUT/ir_rx(1) {-color Magenta -height 16}} /tb_infrared/DUT/ir_rx +add wave -noupdate /tb_infrared/DUT/store_timestamp +add wave -noupdate /tb_infrared/DUT/irq_active +add wave -noupdate /tb_infrared/DUT/irq_reset +add wave -noupdate /tb_infrared/DUT/ir_rx_sync +add wave -noupdate /tb_infrared/DUT/next_ir_rx +add wave -noupdate /tb_infrared/DUT/rising +add wave -noupdate /tb_infrared/DUT/falling +add wave -noupdate /tb_infrared/DUT/recording_stopped +add wave -noupdate -radix decimal /tb_infrared/DUT/timestamp +add wave -noupdate /tb_infrared/DUT/ctrl_access +add wave -noupdate -radix decimal -childformat {{/tb_infrared/DUT/ram_data(0) -radix decimal} {/tb_infrared/DUT/ram_data(1) -radix decimal} {/tb_infrared/DUT/ram_data(2) -radix decimal} {/tb_infrared/DUT/ram_data(3) -radix decimal} {/tb_infrared/DUT/ram_data(4) -radix decimal} {/tb_infrared/DUT/ram_data(5) -radix decimal} {/tb_infrared/DUT/ram_data(6) -radix decimal} {/tb_infrared/DUT/ram_data(7) -radix decimal} {/tb_infrared/DUT/ram_data(8) -radix decimal} {/tb_infrared/DUT/ram_data(9) -radix decimal} {/tb_infrared/DUT/ram_data(10) -radix decimal} {/tb_infrared/DUT/ram_data(11) -radix decimal} {/tb_infrared/DUT/ram_data(12) -radix decimal} {/tb_infrared/DUT/ram_data(13) -radix decimal} {/tb_infrared/DUT/ram_data(14) -radix decimal} {/tb_infrared/DUT/ram_data(15) -radix decimal} {/tb_infrared/DUT/ram_data(16) -radix decimal} {/tb_infrared/DUT/ram_data(17) -radix decimal} {/tb_infrared/DUT/ram_data(18) -radix decimal} {/tb_infrared/DUT/ram_data(19) -radix decimal} {/tb_infrared/DUT/ram_data(20) -radix decimal} {/tb_infrared/DUT/ram_data(21) -radix decimal} {/tb_infrared/DUT/ram_data(22) -radix decimal} {/tb_infrared/DUT/ram_data(23) -radix decimal} {/tb_infrared/DUT/ram_data(24) -radix decimal} {/tb_infrared/DUT/ram_data(25) -radix decimal} {/tb_infrared/DUT/ram_data(26) -radix decimal} {/tb_infrared/DUT/ram_data(27) -radix decimal} {/tb_infrared/DUT/ram_data(28) -radix decimal} {/tb_infrared/DUT/ram_data(29) -radix decimal} {/tb_infrared/DUT/ram_data(30) -radix decimal} {/tb_infrared/DUT/ram_data(31) -radix decimal} {/tb_infrared/DUT/ram_data(32) -radix decimal} {/tb_infrared/DUT/ram_data(33) -radix decimal} {/tb_infrared/DUT/ram_data(34) -radix decimal} {/tb_infrared/DUT/ram_data(35) -radix decimal} {/tb_infrared/DUT/ram_data(36) -radix decimal} {/tb_infrared/DUT/ram_data(37) -radix decimal} {/tb_infrared/DUT/ram_data(38) -radix decimal} {/tb_infrared/DUT/ram_data(39) -radix decimal} {/tb_infrared/DUT/ram_data(40) -radix decimal} {/tb_infrared/DUT/ram_data(41) -radix decimal} {/tb_infrared/DUT/ram_data(42) -radix decimal} {/tb_infrared/DUT/ram_data(43) -radix decimal} {/tb_infrared/DUT/ram_data(44) -radix decimal} {/tb_infrared/DUT/ram_data(45) -radix decimal} {/tb_infrared/DUT/ram_data(46) -radix decimal} {/tb_infrared/DUT/ram_data(47) -radix decimal} {/tb_infrared/DUT/ram_data(48) -radix decimal} {/tb_infrared/DUT/ram_data(49) -radix decimal} {/tb_infrared/DUT/ram_data(50) -radix decimal} {/tb_infrared/DUT/ram_data(51) -radix decimal} {/tb_infrared/DUT/ram_data(52) -radix decimal} {/tb_infrared/DUT/ram_data(53) -radix decimal} {/tb_infrared/DUT/ram_data(54) -radix decimal} {/tb_infrared/DUT/ram_data(55) -radix decimal} {/tb_infrared/DUT/ram_data(56) -radix decimal} {/tb_infrared/DUT/ram_data(57) -radix decimal} {/tb_infrared/DUT/ram_data(58) -radix decimal} {/tb_infrared/DUT/ram_data(59) -radix decimal} {/tb_infrared/DUT/ram_data(60) -radix decimal} {/tb_infrared/DUT/ram_data(61) -radix decimal} {/tb_infrared/DUT/ram_data(62) -radix decimal} {/tb_infrared/DUT/ram_data(63) -radix decimal} {/tb_infrared/DUT/ram_data(64) -radix decimal} {/tb_infrared/DUT/ram_data(65) -radix decimal} {/tb_infrared/DUT/ram_data(66) -radix decimal} {/tb_infrared/DUT/ram_data(67) -radix decimal} {/tb_infrared/DUT/ram_data(68) -radix decimal} {/tb_infrared/DUT/ram_data(69) -radix decimal} {/tb_infrared/DUT/ram_data(70) -radix decimal} {/tb_infrared/DUT/ram_data(71) -radix decimal} {/tb_infrared/DUT/ram_data(72) -radix decimal} {/tb_infrared/DUT/ram_data(73) -radix decimal} {/tb_infrared/DUT/ram_data(74) -radix decimal} {/tb_infrared/DUT/ram_data(75) -radix decimal} {/tb_infrared/DUT/ram_data(76) -radix decimal} {/tb_infrared/DUT/ram_data(77) -radix decimal} {/tb_infrared/DUT/ram_data(78) -radix decimal} {/tb_infrared/DUT/ram_data(79) -radix decimal} {/tb_infrared/DUT/ram_data(80) -radix decimal} {/tb_infrared/DUT/ram_data(81) -radix decimal} {/tb_infrared/DUT/ram_data(82) -radix decimal} {/tb_infrared/DUT/ram_data(83) -radix decimal} {/tb_infrared/DUT/ram_data(84) -radix decimal} {/tb_infrared/DUT/ram_data(85) -radix decimal} {/tb_infrared/DUT/ram_data(86) -radix decimal} {/tb_infrared/DUT/ram_data(87) -radix decimal} {/tb_infrared/DUT/ram_data(88) -radix decimal} {/tb_infrared/DUT/ram_data(89) -radix decimal} {/tb_infrared/DUT/ram_data(90) -radix decimal} {/tb_infrared/DUT/ram_data(91) -radix decimal} {/tb_infrared/DUT/ram_data(92) -radix decimal} {/tb_infrared/DUT/ram_data(93) -radix decimal} {/tb_infrared/DUT/ram_data(94) -radix decimal} {/tb_infrared/DUT/ram_data(95) -radix decimal} {/tb_infrared/DUT/ram_data(96) -radix decimal} {/tb_infrared/DUT/ram_data(97) -radix decimal} {/tb_infrared/DUT/ram_data(98) -radix decimal} {/tb_infrared/DUT/ram_data(99) -radix decimal} {/tb_infrared/DUT/ram_data(100) -radix decimal} {/tb_infrared/DUT/ram_data(101) -radix decimal} {/tb_infrared/DUT/ram_data(102) -radix decimal} {/tb_infrared/DUT/ram_data(103) -radix decimal} {/tb_infrared/DUT/ram_data(104) -radix decimal} {/tb_infrared/DUT/ram_data(105) -radix decimal} {/tb_infrared/DUT/ram_data(106) -radix decimal} {/tb_infrared/DUT/ram_data(107) -radix decimal} {/tb_infrared/DUT/ram_data(108) -radix decimal} {/tb_infrared/DUT/ram_data(109) -radix decimal} {/tb_infrared/DUT/ram_data(110) -radix decimal} {/tb_infrared/DUT/ram_data(111) -radix decimal} {/tb_infrared/DUT/ram_data(112) -radix decimal} {/tb_infrared/DUT/ram_data(113) -radix decimal} {/tb_infrared/DUT/ram_data(114) -radix decimal} {/tb_infrared/DUT/ram_data(115) -radix decimal} {/tb_infrared/DUT/ram_data(116) -radix decimal} {/tb_infrared/DUT/ram_data(117) -radix decimal} {/tb_infrared/DUT/ram_data(118) -radix decimal} {/tb_infrared/DUT/ram_data(119) -radix decimal} {/tb_infrared/DUT/ram_data(120) -radix decimal} {/tb_infrared/DUT/ram_data(121) -radix decimal} {/tb_infrared/DUT/ram_data(122) -radix decimal} {/tb_infrared/DUT/ram_data(123) -radix decimal} {/tb_infrared/DUT/ram_data(124) -radix decimal} {/tb_infrared/DUT/ram_data(125) -radix decimal} {/tb_infrared/DUT/ram_data(126) -radix decimal} {/tb_infrared/DUT/ram_data(127) -radix decimal} {/tb_infrared/DUT/ram_data(128) -radix decimal} {/tb_infrared/DUT/ram_data(129) -radix decimal} {/tb_infrared/DUT/ram_data(130) -radix decimal} {/tb_infrared/DUT/ram_data(131) -radix decimal} {/tb_infrared/DUT/ram_data(132) -radix decimal} {/tb_infrared/DUT/ram_data(133) -radix decimal} {/tb_infrared/DUT/ram_data(134) -radix decimal} {/tb_infrared/DUT/ram_data(135) -radix decimal} {/tb_infrared/DUT/ram_data(136) -radix decimal} {/tb_infrared/DUT/ram_data(137) -radix decimal} {/tb_infrared/DUT/ram_data(138) -radix decimal} {/tb_infrared/DUT/ram_data(139) -radix decimal} {/tb_infrared/DUT/ram_data(140) -radix decimal} {/tb_infrared/DUT/ram_data(141) -radix decimal} {/tb_infrared/DUT/ram_data(142) -radix decimal} {/tb_infrared/DUT/ram_data(143) -radix decimal} {/tb_infrared/DUT/ram_data(144) -radix decimal} {/tb_infrared/DUT/ram_data(145) -radix decimal} {/tb_infrared/DUT/ram_data(146) -radix decimal} {/tb_infrared/DUT/ram_data(147) -radix decimal} {/tb_infrared/DUT/ram_data(148) -radix decimal} {/tb_infrared/DUT/ram_data(149) -radix decimal} {/tb_infrared/DUT/ram_data(150) -radix decimal} {/tb_infrared/DUT/ram_data(151) -radix decimal} {/tb_infrared/DUT/ram_data(152) -radix decimal} {/tb_infrared/DUT/ram_data(153) -radix decimal} {/tb_infrared/DUT/ram_data(154) -radix decimal} {/tb_infrared/DUT/ram_data(155) -radix decimal} {/tb_infrared/DUT/ram_data(156) -radix decimal} {/tb_infrared/DUT/ram_data(157) -radix decimal} {/tb_infrared/DUT/ram_data(158) -radix decimal} {/tb_infrared/DUT/ram_data(159) -radix decimal} {/tb_infrared/DUT/ram_data(160) -radix decimal} {/tb_infrared/DUT/ram_data(161) -radix decimal} {/tb_infrared/DUT/ram_data(162) -radix decimal} {/tb_infrared/DUT/ram_data(163) -radix decimal} {/tb_infrared/DUT/ram_data(164) -radix decimal} {/tb_infrared/DUT/ram_data(165) -radix decimal} {/tb_infrared/DUT/ram_data(166) -radix decimal} {/tb_infrared/DUT/ram_data(167) -radix decimal} {/tb_infrared/DUT/ram_data(168) -radix decimal} {/tb_infrared/DUT/ram_data(169) -radix decimal} {/tb_infrared/DUT/ram_data(170) -radix decimal} {/tb_infrared/DUT/ram_data(171) -radix decimal} {/tb_infrared/DUT/ram_data(172) -radix decimal} {/tb_infrared/DUT/ram_data(173) -radix decimal} {/tb_infrared/DUT/ram_data(174) -radix decimal} {/tb_infrared/DUT/ram_data(175) -radix decimal} {/tb_infrared/DUT/ram_data(176) -radix decimal} {/tb_infrared/DUT/ram_data(177) -radix decimal} {/tb_infrared/DUT/ram_data(178) -radix decimal} {/tb_infrared/DUT/ram_data(179) -radix decimal} {/tb_infrared/DUT/ram_data(180) -radix decimal} {/tb_infrared/DUT/ram_data(181) -radix decimal} {/tb_infrared/DUT/ram_data(182) -radix decimal} {/tb_infrared/DUT/ram_data(183) -radix decimal} {/tb_infrared/DUT/ram_data(184) -radix decimal} {/tb_infrared/DUT/ram_data(185) -radix decimal} {/tb_infrared/DUT/ram_data(186) -radix decimal} {/tb_infrared/DUT/ram_data(187) -radix decimal} {/tb_infrared/DUT/ram_data(188) -radix decimal} {/tb_infrared/DUT/ram_data(189) -radix decimal} {/tb_infrared/DUT/ram_data(190) -radix decimal} {/tb_infrared/DUT/ram_data(191) -radix decimal} {/tb_infrared/DUT/ram_data(192) -radix decimal} {/tb_infrared/DUT/ram_data(193) -radix decimal} {/tb_infrared/DUT/ram_data(194) -radix decimal} {/tb_infrared/DUT/ram_data(195) -radix decimal} {/tb_infrared/DUT/ram_data(196) -radix decimal} {/tb_infrared/DUT/ram_data(197) -radix decimal} {/tb_infrared/DUT/ram_data(198) -radix decimal} {/tb_infrared/DUT/ram_data(199) -radix decimal} {/tb_infrared/DUT/ram_data(200) -radix decimal} {/tb_infrared/DUT/ram_data(201) -radix decimal} {/tb_infrared/DUT/ram_data(202) -radix decimal} {/tb_infrared/DUT/ram_data(203) -radix decimal} {/tb_infrared/DUT/ram_data(204) -radix decimal} {/tb_infrared/DUT/ram_data(205) -radix decimal} {/tb_infrared/DUT/ram_data(206) -radix decimal} {/tb_infrared/DUT/ram_data(207) -radix decimal} {/tb_infrared/DUT/ram_data(208) -radix decimal} {/tb_infrared/DUT/ram_data(209) -radix decimal} {/tb_infrared/DUT/ram_data(210) -radix decimal} {/tb_infrared/DUT/ram_data(211) -radix decimal} {/tb_infrared/DUT/ram_data(212) -radix decimal} {/tb_infrared/DUT/ram_data(213) -radix decimal} {/tb_infrared/DUT/ram_data(214) -radix decimal} {/tb_infrared/DUT/ram_data(215) -radix decimal} {/tb_infrared/DUT/ram_data(216) -radix decimal} {/tb_infrared/DUT/ram_data(217) -radix decimal} {/tb_infrared/DUT/ram_data(218) -radix decimal} {/tb_infrared/DUT/ram_data(219) -radix decimal} {/tb_infrared/DUT/ram_data(220) -radix decimal} {/tb_infrared/DUT/ram_data(221) -radix decimal} {/tb_infrared/DUT/ram_data(222) -radix decimal} {/tb_infrared/DUT/ram_data(223) -radix decimal} {/tb_infrared/DUT/ram_data(224) -radix decimal} {/tb_infrared/DUT/ram_data(225) -radix decimal} {/tb_infrared/DUT/ram_data(226) -radix decimal} {/tb_infrared/DUT/ram_data(227) -radix decimal} {/tb_infrared/DUT/ram_data(228) -radix decimal} {/tb_infrared/DUT/ram_data(229) -radix decimal} {/tb_infrared/DUT/ram_data(230) -radix decimal} {/tb_infrared/DUT/ram_data(231) -radix decimal} {/tb_infrared/DUT/ram_data(232) -radix decimal} {/tb_infrared/DUT/ram_data(233) -radix decimal} {/tb_infrared/DUT/ram_data(234) -radix decimal} {/tb_infrared/DUT/ram_data(235) -radix decimal} {/tb_infrared/DUT/ram_data(236) -radix decimal} {/tb_infrared/DUT/ram_data(237) -radix decimal} {/tb_infrared/DUT/ram_data(238) -radix decimal} {/tb_infrared/DUT/ram_data(239) -radix decimal} {/tb_infrared/DUT/ram_data(240) -radix decimal} {/tb_infrared/DUT/ram_data(241) -radix decimal} {/tb_infrared/DUT/ram_data(242) -radix decimal} {/tb_infrared/DUT/ram_data(243) -radix decimal} {/tb_infrared/DUT/ram_data(244) -radix decimal} {/tb_infrared/DUT/ram_data(245) -radix decimal} {/tb_infrared/DUT/ram_data(246) -radix decimal} {/tb_infrared/DUT/ram_data(247) -radix decimal} {/tb_infrared/DUT/ram_data(248) -radix decimal} {/tb_infrared/DUT/ram_data(249) -radix decimal} {/tb_infrared/DUT/ram_data(250) -radix decimal} {/tb_infrared/DUT/ram_data(251) -radix decimal} {/tb_infrared/DUT/ram_data(252) -radix decimal} {/tb_infrared/DUT/ram_data(253) -radix decimal} {/tb_infrared/DUT/ram_data(254) -radix decimal} {/tb_infrared/DUT/ram_data(255) -radix decimal}} -expand -subitemconfig {/tb_infrared/DUT/ram_data(0) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(1) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(2) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(3) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(4) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(5) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(6) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(7) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(8) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(9) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(10) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(11) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(12) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(13) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(14) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(15) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(16) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(17) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(18) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(19) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(20) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(21) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(22) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(23) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(24) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(25) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(26) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(27) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(28) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(29) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(30) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(31) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(32) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(33) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(34) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(35) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(36) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(37) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(38) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(39) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(40) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(41) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(42) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(43) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(44) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(45) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(46) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(47) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(48) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(49) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(50) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(51) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(52) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(53) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(54) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(55) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(56) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(57) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(58) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(59) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(60) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(61) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(62) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(63) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(64) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(65) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(66) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(67) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(68) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(69) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(70) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(71) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(72) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(73) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(74) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(75) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(76) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(77) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(78) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(79) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(80) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(81) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(82) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(83) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(84) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(85) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(86) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(87) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(88) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(89) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(90) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(91) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(92) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(93) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(94) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(95) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(96) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(97) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(98) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(99) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(100) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(101) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(102) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(103) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(104) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(105) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(106) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(107) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(108) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(109) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(110) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(111) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(112) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(113) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(114) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(115) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(116) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(117) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(118) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(119) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(120) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(121) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(122) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(123) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(124) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(125) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(126) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(127) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(128) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(129) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(130) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(131) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(132) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(133) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(134) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(135) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(136) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(137) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(138) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(139) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(140) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(141) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(142) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(143) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(144) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(145) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(146) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(147) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(148) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(149) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(150) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(151) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(152) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(153) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(154) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(155) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(156) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(157) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(158) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(159) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(160) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(161) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(162) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(163) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(164) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(165) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(166) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(167) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(168) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(169) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(170) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(171) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(172) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(173) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(174) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(175) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(176) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(177) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(178) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(179) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(180) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(181) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(182) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(183) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(184) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(185) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(186) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(187) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(188) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(189) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(190) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(191) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(192) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(193) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(194) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(195) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(196) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(197) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(198) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(199) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(200) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(201) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(202) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(203) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(204) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(205) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(206) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(207) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(208) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(209) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(210) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(211) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(212) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(213) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(214) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(215) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(216) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(217) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(218) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(219) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(220) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(221) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(222) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(223) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(224) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(225) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(226) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(227) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(228) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(229) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(230) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(231) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(232) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(233) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(234) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(235) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(236) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(237) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(238) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(239) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(240) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(241) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(242) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(243) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(244) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(245) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(246) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(247) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(248) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(249) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(250) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(251) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(252) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(253) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(254) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(255) {-height 16 -radix decimal}} /tb_infrared/DUT/ram_data +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {1530000 ps} 0} {{Cursor 2} {1550000 ps} 0} +quietly wave cursor active 2 +configure wave -namecolwidth 324 +configure wave -valuecolwidth 164 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {1436953 ps} {1683047 ps} From 021a98ce4e670426ab77057da9cd697fe2010c6b Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Thu, 20 Feb 2020 15:12:02 +0100 Subject: [PATCH 20/41] more testbench stuff --- hdl/components/infrared/counter.vhd | 14 ++++++++++++-- hdl/components/infrared/tb_infrared.vhd | 10 ++++++++++ hdl/components/infrared/wave.do | 16 ++++++++++++---- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/hdl/components/infrared/counter.vhd b/hdl/components/infrared/counter.vhd index c2d6677..3f694da 100644 --- a/hdl/components/infrared/counter.vhd +++ b/hdl/components/infrared/counter.vhd @@ -16,7 +16,7 @@ use ieee.numeric_std.all; entity counter is generic ( - counter_width_g : natural := 31); + counter_width_g : natural := 32); port ( --! @name Clocks and resets --! @{ @@ -43,6 +43,16 @@ end entity counter; --! RTL implementation of counter architecture rtl of counter is + + ----------------------------------------------------------------------------- + --! @name Types and Constants + ----------------------------------------------------------------------------- + --! @{ + + constant max_count_c : unsigned(count_o'range) := (others => '1'); + + --! @} + ----------------------------------------------------------------------------- --! @name Internal Registers ----------------------------------------------------------------------------- @@ -94,7 +104,7 @@ begin -- architecture rtl reset; else count <= count + 1; - if count = 2**count'length-1 then + if count = max_count_c then overflow <= '1'; end if; end if; diff --git a/hdl/components/infrared/tb_infrared.vhd b/hdl/components/infrared/tb_infrared.vhd index 1489cac..afa8536 100644 --- a/hdl/components/infrared/tb_infrared.vhd +++ b/hdl/components/infrared/tb_infrared.vhd @@ -48,10 +48,20 @@ begin test_proc : process begin wait for reset_duration_c + 5 ns; + + -- Generate infrared input signal ir_rx_input : for i in 0 to 10 loop ir_rx <= not ir_rx; wait for 100 ns; end loop; + + -- Wait for interrupt generation (end of recieved IR sequence) + wait until irq = '1'; + report "(MWURM) IRQ occured (end of received IR sequence)." severity note; + + + + wait; end process test_proc; diff --git a/hdl/components/infrared/wave.do b/hdl/components/infrared/wave.do index 90bdb00..cdcd56d 100644 --- a/hdl/components/infrared/wave.do +++ b/hdl/components/infrared/wave.do @@ -45,11 +45,19 @@ add wave -noupdate /tb_infrared/DUT/falling add wave -noupdate /tb_infrared/DUT/recording_stopped add wave -noupdate -radix decimal /tb_infrared/DUT/timestamp add wave -noupdate /tb_infrared/DUT/ctrl_access -add wave -noupdate -radix decimal -childformat {{/tb_infrared/DUT/ram_data(0) -radix decimal} {/tb_infrared/DUT/ram_data(1) -radix decimal} {/tb_infrared/DUT/ram_data(2) -radix decimal} {/tb_infrared/DUT/ram_data(3) -radix decimal} {/tb_infrared/DUT/ram_data(4) -radix decimal} {/tb_infrared/DUT/ram_data(5) -radix decimal} {/tb_infrared/DUT/ram_data(6) -radix decimal} {/tb_infrared/DUT/ram_data(7) -radix decimal} {/tb_infrared/DUT/ram_data(8) -radix decimal} {/tb_infrared/DUT/ram_data(9) -radix decimal} {/tb_infrared/DUT/ram_data(10) -radix decimal} {/tb_infrared/DUT/ram_data(11) -radix decimal} {/tb_infrared/DUT/ram_data(12) -radix decimal} {/tb_infrared/DUT/ram_data(13) -radix decimal} {/tb_infrared/DUT/ram_data(14) -radix decimal} {/tb_infrared/DUT/ram_data(15) -radix decimal} {/tb_infrared/DUT/ram_data(16) -radix decimal} {/tb_infrared/DUT/ram_data(17) -radix decimal} {/tb_infrared/DUT/ram_data(18) -radix decimal} {/tb_infrared/DUT/ram_data(19) -radix decimal} {/tb_infrared/DUT/ram_data(20) -radix decimal} {/tb_infrared/DUT/ram_data(21) -radix decimal} {/tb_infrared/DUT/ram_data(22) -radix decimal} {/tb_infrared/DUT/ram_data(23) -radix decimal} {/tb_infrared/DUT/ram_data(24) -radix decimal} {/tb_infrared/DUT/ram_data(25) -radix decimal} {/tb_infrared/DUT/ram_data(26) -radix decimal} {/tb_infrared/DUT/ram_data(27) -radix decimal} {/tb_infrared/DUT/ram_data(28) -radix decimal} {/tb_infrared/DUT/ram_data(29) -radix decimal} {/tb_infrared/DUT/ram_data(30) -radix decimal} {/tb_infrared/DUT/ram_data(31) -radix decimal} {/tb_infrared/DUT/ram_data(32) -radix decimal} {/tb_infrared/DUT/ram_data(33) -radix decimal} {/tb_infrared/DUT/ram_data(34) -radix decimal} {/tb_infrared/DUT/ram_data(35) -radix decimal} {/tb_infrared/DUT/ram_data(36) -radix decimal} {/tb_infrared/DUT/ram_data(37) -radix decimal} {/tb_infrared/DUT/ram_data(38) -radix decimal} {/tb_infrared/DUT/ram_data(39) -radix decimal} {/tb_infrared/DUT/ram_data(40) -radix decimal} {/tb_infrared/DUT/ram_data(41) -radix decimal} {/tb_infrared/DUT/ram_data(42) -radix decimal} {/tb_infrared/DUT/ram_data(43) -radix decimal} {/tb_infrared/DUT/ram_data(44) -radix decimal} {/tb_infrared/DUT/ram_data(45) -radix decimal} {/tb_infrared/DUT/ram_data(46) -radix decimal} {/tb_infrared/DUT/ram_data(47) -radix decimal} {/tb_infrared/DUT/ram_data(48) -radix decimal} {/tb_infrared/DUT/ram_data(49) -radix decimal} {/tb_infrared/DUT/ram_data(50) -radix decimal} {/tb_infrared/DUT/ram_data(51) -radix decimal} {/tb_infrared/DUT/ram_data(52) -radix decimal} {/tb_infrared/DUT/ram_data(53) -radix decimal} {/tb_infrared/DUT/ram_data(54) -radix decimal} {/tb_infrared/DUT/ram_data(55) -radix decimal} {/tb_infrared/DUT/ram_data(56) -radix decimal} {/tb_infrared/DUT/ram_data(57) -radix decimal} {/tb_infrared/DUT/ram_data(58) -radix decimal} {/tb_infrared/DUT/ram_data(59) -radix decimal} {/tb_infrared/DUT/ram_data(60) -radix decimal} {/tb_infrared/DUT/ram_data(61) -radix decimal} {/tb_infrared/DUT/ram_data(62) -radix decimal} {/tb_infrared/DUT/ram_data(63) -radix decimal} {/tb_infrared/DUT/ram_data(64) -radix decimal} {/tb_infrared/DUT/ram_data(65) -radix decimal} {/tb_infrared/DUT/ram_data(66) -radix decimal} {/tb_infrared/DUT/ram_data(67) -radix decimal} {/tb_infrared/DUT/ram_data(68) -radix decimal} {/tb_infrared/DUT/ram_data(69) -radix decimal} {/tb_infrared/DUT/ram_data(70) -radix decimal} {/tb_infrared/DUT/ram_data(71) -radix decimal} {/tb_infrared/DUT/ram_data(72) -radix decimal} {/tb_infrared/DUT/ram_data(73) -radix decimal} {/tb_infrared/DUT/ram_data(74) -radix decimal} {/tb_infrared/DUT/ram_data(75) -radix decimal} {/tb_infrared/DUT/ram_data(76) -radix decimal} {/tb_infrared/DUT/ram_data(77) -radix decimal} {/tb_infrared/DUT/ram_data(78) -radix decimal} {/tb_infrared/DUT/ram_data(79) -radix decimal} {/tb_infrared/DUT/ram_data(80) -radix decimal} {/tb_infrared/DUT/ram_data(81) -radix decimal} {/tb_infrared/DUT/ram_data(82) -radix decimal} {/tb_infrared/DUT/ram_data(83) -radix decimal} {/tb_infrared/DUT/ram_data(84) -radix decimal} {/tb_infrared/DUT/ram_data(85) -radix decimal} {/tb_infrared/DUT/ram_data(86) -radix decimal} {/tb_infrared/DUT/ram_data(87) -radix decimal} {/tb_infrared/DUT/ram_data(88) -radix decimal} {/tb_infrared/DUT/ram_data(89) -radix decimal} {/tb_infrared/DUT/ram_data(90) -radix decimal} {/tb_infrared/DUT/ram_data(91) -radix decimal} {/tb_infrared/DUT/ram_data(92) -radix decimal} {/tb_infrared/DUT/ram_data(93) -radix decimal} {/tb_infrared/DUT/ram_data(94) -radix decimal} {/tb_infrared/DUT/ram_data(95) -radix decimal} {/tb_infrared/DUT/ram_data(96) -radix decimal} {/tb_infrared/DUT/ram_data(97) -radix decimal} {/tb_infrared/DUT/ram_data(98) -radix decimal} {/tb_infrared/DUT/ram_data(99) -radix decimal} {/tb_infrared/DUT/ram_data(100) -radix decimal} {/tb_infrared/DUT/ram_data(101) -radix decimal} {/tb_infrared/DUT/ram_data(102) -radix decimal} {/tb_infrared/DUT/ram_data(103) -radix decimal} {/tb_infrared/DUT/ram_data(104) -radix decimal} {/tb_infrared/DUT/ram_data(105) -radix decimal} {/tb_infrared/DUT/ram_data(106) -radix decimal} {/tb_infrared/DUT/ram_data(107) -radix decimal} {/tb_infrared/DUT/ram_data(108) -radix decimal} {/tb_infrared/DUT/ram_data(109) -radix decimal} {/tb_infrared/DUT/ram_data(110) -radix decimal} {/tb_infrared/DUT/ram_data(111) -radix decimal} {/tb_infrared/DUT/ram_data(112) -radix decimal} {/tb_infrared/DUT/ram_data(113) -radix decimal} {/tb_infrared/DUT/ram_data(114) -radix decimal} {/tb_infrared/DUT/ram_data(115) -radix decimal} {/tb_infrared/DUT/ram_data(116) -radix decimal} {/tb_infrared/DUT/ram_data(117) -radix decimal} {/tb_infrared/DUT/ram_data(118) -radix decimal} {/tb_infrared/DUT/ram_data(119) -radix decimal} {/tb_infrared/DUT/ram_data(120) -radix decimal} {/tb_infrared/DUT/ram_data(121) -radix decimal} {/tb_infrared/DUT/ram_data(122) -radix decimal} {/tb_infrared/DUT/ram_data(123) -radix decimal} {/tb_infrared/DUT/ram_data(124) -radix decimal} {/tb_infrared/DUT/ram_data(125) -radix decimal} {/tb_infrared/DUT/ram_data(126) -radix decimal} {/tb_infrared/DUT/ram_data(127) -radix decimal} {/tb_infrared/DUT/ram_data(128) -radix decimal} {/tb_infrared/DUT/ram_data(129) -radix decimal} {/tb_infrared/DUT/ram_data(130) -radix decimal} {/tb_infrared/DUT/ram_data(131) -radix decimal} {/tb_infrared/DUT/ram_data(132) -radix decimal} {/tb_infrared/DUT/ram_data(133) -radix decimal} {/tb_infrared/DUT/ram_data(134) -radix decimal} {/tb_infrared/DUT/ram_data(135) -radix decimal} {/tb_infrared/DUT/ram_data(136) -radix decimal} {/tb_infrared/DUT/ram_data(137) -radix decimal} {/tb_infrared/DUT/ram_data(138) -radix decimal} {/tb_infrared/DUT/ram_data(139) -radix decimal} {/tb_infrared/DUT/ram_data(140) -radix decimal} {/tb_infrared/DUT/ram_data(141) -radix decimal} {/tb_infrared/DUT/ram_data(142) -radix decimal} {/tb_infrared/DUT/ram_data(143) -radix decimal} {/tb_infrared/DUT/ram_data(144) -radix decimal} {/tb_infrared/DUT/ram_data(145) -radix decimal} {/tb_infrared/DUT/ram_data(146) -radix decimal} {/tb_infrared/DUT/ram_data(147) -radix decimal} {/tb_infrared/DUT/ram_data(148) -radix decimal} {/tb_infrared/DUT/ram_data(149) -radix decimal} {/tb_infrared/DUT/ram_data(150) -radix decimal} {/tb_infrared/DUT/ram_data(151) -radix decimal} {/tb_infrared/DUT/ram_data(152) -radix decimal} {/tb_infrared/DUT/ram_data(153) -radix decimal} {/tb_infrared/DUT/ram_data(154) -radix decimal} {/tb_infrared/DUT/ram_data(155) -radix decimal} {/tb_infrared/DUT/ram_data(156) -radix decimal} {/tb_infrared/DUT/ram_data(157) -radix decimal} {/tb_infrared/DUT/ram_data(158) -radix decimal} {/tb_infrared/DUT/ram_data(159) -radix decimal} {/tb_infrared/DUT/ram_data(160) -radix decimal} {/tb_infrared/DUT/ram_data(161) -radix decimal} {/tb_infrared/DUT/ram_data(162) -radix decimal} {/tb_infrared/DUT/ram_data(163) -radix decimal} {/tb_infrared/DUT/ram_data(164) -radix decimal} {/tb_infrared/DUT/ram_data(165) -radix decimal} {/tb_infrared/DUT/ram_data(166) -radix decimal} {/tb_infrared/DUT/ram_data(167) -radix decimal} {/tb_infrared/DUT/ram_data(168) -radix decimal} {/tb_infrared/DUT/ram_data(169) -radix decimal} {/tb_infrared/DUT/ram_data(170) -radix decimal} {/tb_infrared/DUT/ram_data(171) -radix decimal} {/tb_infrared/DUT/ram_data(172) -radix decimal} {/tb_infrared/DUT/ram_data(173) -radix decimal} {/tb_infrared/DUT/ram_data(174) -radix decimal} {/tb_infrared/DUT/ram_data(175) -radix decimal} {/tb_infrared/DUT/ram_data(176) -radix decimal} {/tb_infrared/DUT/ram_data(177) -radix decimal} {/tb_infrared/DUT/ram_data(178) -radix decimal} {/tb_infrared/DUT/ram_data(179) -radix decimal} {/tb_infrared/DUT/ram_data(180) -radix decimal} {/tb_infrared/DUT/ram_data(181) -radix decimal} {/tb_infrared/DUT/ram_data(182) -radix decimal} {/tb_infrared/DUT/ram_data(183) -radix decimal} {/tb_infrared/DUT/ram_data(184) -radix decimal} {/tb_infrared/DUT/ram_data(185) -radix decimal} {/tb_infrared/DUT/ram_data(186) -radix decimal} {/tb_infrared/DUT/ram_data(187) -radix decimal} {/tb_infrared/DUT/ram_data(188) -radix decimal} {/tb_infrared/DUT/ram_data(189) -radix decimal} {/tb_infrared/DUT/ram_data(190) -radix decimal} {/tb_infrared/DUT/ram_data(191) -radix decimal} {/tb_infrared/DUT/ram_data(192) -radix decimal} {/tb_infrared/DUT/ram_data(193) -radix decimal} {/tb_infrared/DUT/ram_data(194) -radix decimal} {/tb_infrared/DUT/ram_data(195) -radix decimal} {/tb_infrared/DUT/ram_data(196) -radix decimal} {/tb_infrared/DUT/ram_data(197) -radix decimal} {/tb_infrared/DUT/ram_data(198) -radix decimal} {/tb_infrared/DUT/ram_data(199) -radix decimal} {/tb_infrared/DUT/ram_data(200) -radix decimal} {/tb_infrared/DUT/ram_data(201) -radix decimal} {/tb_infrared/DUT/ram_data(202) -radix decimal} {/tb_infrared/DUT/ram_data(203) -radix decimal} {/tb_infrared/DUT/ram_data(204) -radix decimal} {/tb_infrared/DUT/ram_data(205) -radix decimal} {/tb_infrared/DUT/ram_data(206) -radix decimal} {/tb_infrared/DUT/ram_data(207) -radix decimal} {/tb_infrared/DUT/ram_data(208) -radix decimal} {/tb_infrared/DUT/ram_data(209) -radix decimal} {/tb_infrared/DUT/ram_data(210) -radix decimal} {/tb_infrared/DUT/ram_data(211) -radix decimal} {/tb_infrared/DUT/ram_data(212) -radix decimal} {/tb_infrared/DUT/ram_data(213) -radix decimal} {/tb_infrared/DUT/ram_data(214) -radix decimal} {/tb_infrared/DUT/ram_data(215) -radix decimal} {/tb_infrared/DUT/ram_data(216) -radix decimal} {/tb_infrared/DUT/ram_data(217) -radix decimal} {/tb_infrared/DUT/ram_data(218) -radix decimal} {/tb_infrared/DUT/ram_data(219) -radix decimal} {/tb_infrared/DUT/ram_data(220) -radix decimal} {/tb_infrared/DUT/ram_data(221) -radix decimal} {/tb_infrared/DUT/ram_data(222) -radix decimal} {/tb_infrared/DUT/ram_data(223) -radix decimal} {/tb_infrared/DUT/ram_data(224) -radix decimal} {/tb_infrared/DUT/ram_data(225) -radix decimal} {/tb_infrared/DUT/ram_data(226) -radix decimal} {/tb_infrared/DUT/ram_data(227) -radix decimal} {/tb_infrared/DUT/ram_data(228) -radix decimal} {/tb_infrared/DUT/ram_data(229) -radix decimal} {/tb_infrared/DUT/ram_data(230) -radix decimal} {/tb_infrared/DUT/ram_data(231) -radix decimal} {/tb_infrared/DUT/ram_data(232) -radix decimal} {/tb_infrared/DUT/ram_data(233) -radix decimal} {/tb_infrared/DUT/ram_data(234) -radix decimal} {/tb_infrared/DUT/ram_data(235) -radix decimal} {/tb_infrared/DUT/ram_data(236) -radix decimal} {/tb_infrared/DUT/ram_data(237) -radix decimal} {/tb_infrared/DUT/ram_data(238) -radix decimal} {/tb_infrared/DUT/ram_data(239) -radix decimal} {/tb_infrared/DUT/ram_data(240) -radix decimal} {/tb_infrared/DUT/ram_data(241) -radix decimal} {/tb_infrared/DUT/ram_data(242) -radix decimal} {/tb_infrared/DUT/ram_data(243) -radix decimal} {/tb_infrared/DUT/ram_data(244) -radix decimal} {/tb_infrared/DUT/ram_data(245) -radix decimal} {/tb_infrared/DUT/ram_data(246) -radix decimal} {/tb_infrared/DUT/ram_data(247) -radix decimal} {/tb_infrared/DUT/ram_data(248) -radix decimal} {/tb_infrared/DUT/ram_data(249) -radix decimal} {/tb_infrared/DUT/ram_data(250) -radix decimal} {/tb_infrared/DUT/ram_data(251) -radix decimal} {/tb_infrared/DUT/ram_data(252) -radix decimal} {/tb_infrared/DUT/ram_data(253) -radix decimal} {/tb_infrared/DUT/ram_data(254) -radix decimal} {/tb_infrared/DUT/ram_data(255) -radix decimal}} -expand -subitemconfig {/tb_infrared/DUT/ram_data(0) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(1) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(2) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(3) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(4) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(5) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(6) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(7) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(8) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(9) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(10) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(11) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(12) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(13) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(14) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(15) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(16) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(17) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(18) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(19) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(20) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(21) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(22) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(23) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(24) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(25) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(26) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(27) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(28) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(29) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(30) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(31) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(32) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(33) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(34) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(35) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(36) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(37) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(38) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(39) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(40) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(41) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(42) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(43) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(44) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(45) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(46) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(47) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(48) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(49) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(50) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(51) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(52) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(53) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(54) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(55) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(56) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(57) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(58) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(59) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(60) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(61) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(62) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(63) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(64) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(65) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(66) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(67) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(68) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(69) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(70) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(71) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(72) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(73) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(74) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(75) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(76) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(77) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(78) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(79) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(80) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(81) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(82) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(83) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(84) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(85) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(86) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(87) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(88) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(89) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(90) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(91) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(92) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(93) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(94) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(95) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(96) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(97) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(98) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(99) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(100) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(101) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(102) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(103) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(104) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(105) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(106) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(107) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(108) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(109) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(110) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(111) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(112) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(113) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(114) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(115) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(116) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(117) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(118) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(119) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(120) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(121) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(122) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(123) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(124) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(125) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(126) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(127) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(128) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(129) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(130) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(131) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(132) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(133) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(134) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(135) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(136) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(137) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(138) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(139) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(140) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(141) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(142) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(143) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(144) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(145) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(146) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(147) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(148) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(149) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(150) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(151) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(152) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(153) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(154) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(155) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(156) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(157) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(158) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(159) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(160) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(161) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(162) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(163) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(164) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(165) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(166) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(167) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(168) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(169) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(170) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(171) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(172) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(173) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(174) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(175) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(176) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(177) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(178) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(179) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(180) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(181) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(182) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(183) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(184) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(185) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(186) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(187) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(188) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(189) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(190) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(191) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(192) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(193) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(194) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(195) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(196) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(197) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(198) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(199) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(200) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(201) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(202) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(203) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(204) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(205) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(206) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(207) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(208) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(209) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(210) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(211) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(212) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(213) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(214) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(215) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(216) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(217) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(218) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(219) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(220) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(221) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(222) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(223) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(224) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(225) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(226) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(227) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(228) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(229) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(230) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(231) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(232) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(233) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(234) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(235) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(236) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(237) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(238) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(239) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(240) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(241) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(242) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(243) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(244) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(245) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(246) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(247) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(248) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(249) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(250) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(251) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(252) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(253) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(254) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(255) {-height 16 -radix decimal}} /tb_infrared/DUT/ram_data +add wave -noupdate -radix decimal -childformat {{/tb_infrared/DUT/ram_data(0) -radix decimal} {/tb_infrared/DUT/ram_data(1) -radix decimal} {/tb_infrared/DUT/ram_data(2) -radix decimal} {/tb_infrared/DUT/ram_data(3) -radix decimal} {/tb_infrared/DUT/ram_data(4) -radix decimal} {/tb_infrared/DUT/ram_data(5) -radix decimal} {/tb_infrared/DUT/ram_data(6) -radix decimal} {/tb_infrared/DUT/ram_data(7) -radix decimal} {/tb_infrared/DUT/ram_data(8) -radix decimal} {/tb_infrared/DUT/ram_data(9) -radix decimal} {/tb_infrared/DUT/ram_data(10) -radix decimal} {/tb_infrared/DUT/ram_data(11) -radix decimal} {/tb_infrared/DUT/ram_data(12) -radix decimal} {/tb_infrared/DUT/ram_data(13) -radix decimal} {/tb_infrared/DUT/ram_data(14) -radix decimal} {/tb_infrared/DUT/ram_data(15) -radix decimal} {/tb_infrared/DUT/ram_data(16) -radix decimal} {/tb_infrared/DUT/ram_data(17) -radix decimal} {/tb_infrared/DUT/ram_data(18) -radix decimal} {/tb_infrared/DUT/ram_data(19) -radix decimal} {/tb_infrared/DUT/ram_data(20) -radix decimal} {/tb_infrared/DUT/ram_data(21) -radix decimal} {/tb_infrared/DUT/ram_data(22) -radix decimal} {/tb_infrared/DUT/ram_data(23) -radix decimal} {/tb_infrared/DUT/ram_data(24) -radix decimal} {/tb_infrared/DUT/ram_data(25) -radix decimal} {/tb_infrared/DUT/ram_data(26) -radix decimal} {/tb_infrared/DUT/ram_data(27) -radix decimal} {/tb_infrared/DUT/ram_data(28) -radix decimal} {/tb_infrared/DUT/ram_data(29) -radix decimal} {/tb_infrared/DUT/ram_data(30) -radix decimal} {/tb_infrared/DUT/ram_data(31) -radix decimal} {/tb_infrared/DUT/ram_data(32) -radix decimal} {/tb_infrared/DUT/ram_data(33) -radix decimal} {/tb_infrared/DUT/ram_data(34) -radix decimal} {/tb_infrared/DUT/ram_data(35) -radix decimal} {/tb_infrared/DUT/ram_data(36) -radix decimal} {/tb_infrared/DUT/ram_data(37) -radix decimal} {/tb_infrared/DUT/ram_data(38) -radix decimal} {/tb_infrared/DUT/ram_data(39) -radix decimal} {/tb_infrared/DUT/ram_data(40) -radix decimal} {/tb_infrared/DUT/ram_data(41) -radix decimal} {/tb_infrared/DUT/ram_data(42) -radix decimal} {/tb_infrared/DUT/ram_data(43) -radix decimal} {/tb_infrared/DUT/ram_data(44) -radix decimal} {/tb_infrared/DUT/ram_data(45) -radix decimal} {/tb_infrared/DUT/ram_data(46) -radix decimal} {/tb_infrared/DUT/ram_data(47) -radix decimal} {/tb_infrared/DUT/ram_data(48) -radix decimal} {/tb_infrared/DUT/ram_data(49) -radix decimal} {/tb_infrared/DUT/ram_data(50) -radix decimal} {/tb_infrared/DUT/ram_data(51) -radix decimal} {/tb_infrared/DUT/ram_data(52) -radix decimal} {/tb_infrared/DUT/ram_data(53) -radix decimal} {/tb_infrared/DUT/ram_data(54) -radix decimal} {/tb_infrared/DUT/ram_data(55) -radix decimal} {/tb_infrared/DUT/ram_data(56) -radix decimal} {/tb_infrared/DUT/ram_data(57) -radix decimal} {/tb_infrared/DUT/ram_data(58) -radix decimal} {/tb_infrared/DUT/ram_data(59) -radix decimal} {/tb_infrared/DUT/ram_data(60) -radix decimal} {/tb_infrared/DUT/ram_data(61) -radix decimal} {/tb_infrared/DUT/ram_data(62) -radix decimal} {/tb_infrared/DUT/ram_data(63) -radix decimal} {/tb_infrared/DUT/ram_data(64) -radix decimal} {/tb_infrared/DUT/ram_data(65) -radix decimal} {/tb_infrared/DUT/ram_data(66) -radix decimal} {/tb_infrared/DUT/ram_data(67) -radix decimal} {/tb_infrared/DUT/ram_data(68) -radix decimal} {/tb_infrared/DUT/ram_data(69) -radix decimal} {/tb_infrared/DUT/ram_data(70) -radix decimal} {/tb_infrared/DUT/ram_data(71) -radix decimal} {/tb_infrared/DUT/ram_data(72) -radix decimal} {/tb_infrared/DUT/ram_data(73) -radix decimal} {/tb_infrared/DUT/ram_data(74) -radix decimal} {/tb_infrared/DUT/ram_data(75) -radix decimal} {/tb_infrared/DUT/ram_data(76) -radix decimal} {/tb_infrared/DUT/ram_data(77) -radix decimal} {/tb_infrared/DUT/ram_data(78) -radix decimal} {/tb_infrared/DUT/ram_data(79) -radix decimal} {/tb_infrared/DUT/ram_data(80) -radix decimal} {/tb_infrared/DUT/ram_data(81) -radix decimal} {/tb_infrared/DUT/ram_data(82) -radix decimal} {/tb_infrared/DUT/ram_data(83) -radix decimal} {/tb_infrared/DUT/ram_data(84) -radix decimal} {/tb_infrared/DUT/ram_data(85) -radix decimal} {/tb_infrared/DUT/ram_data(86) -radix decimal} {/tb_infrared/DUT/ram_data(87) -radix decimal} {/tb_infrared/DUT/ram_data(88) -radix decimal} {/tb_infrared/DUT/ram_data(89) -radix decimal} {/tb_infrared/DUT/ram_data(90) -radix decimal} {/tb_infrared/DUT/ram_data(91) -radix decimal} {/tb_infrared/DUT/ram_data(92) -radix decimal} {/tb_infrared/DUT/ram_data(93) -radix decimal} {/tb_infrared/DUT/ram_data(94) -radix decimal} {/tb_infrared/DUT/ram_data(95) -radix decimal} {/tb_infrared/DUT/ram_data(96) -radix decimal} {/tb_infrared/DUT/ram_data(97) -radix decimal} {/tb_infrared/DUT/ram_data(98) -radix decimal} {/tb_infrared/DUT/ram_data(99) -radix decimal} {/tb_infrared/DUT/ram_data(100) -radix decimal} {/tb_infrared/DUT/ram_data(101) -radix decimal} {/tb_infrared/DUT/ram_data(102) -radix decimal} {/tb_infrared/DUT/ram_data(103) -radix decimal} {/tb_infrared/DUT/ram_data(104) -radix decimal} {/tb_infrared/DUT/ram_data(105) -radix decimal} {/tb_infrared/DUT/ram_data(106) -radix decimal} {/tb_infrared/DUT/ram_data(107) -radix decimal} {/tb_infrared/DUT/ram_data(108) -radix decimal} {/tb_infrared/DUT/ram_data(109) -radix decimal} {/tb_infrared/DUT/ram_data(110) -radix decimal} {/tb_infrared/DUT/ram_data(111) -radix decimal} {/tb_infrared/DUT/ram_data(112) -radix decimal} {/tb_infrared/DUT/ram_data(113) -radix decimal} {/tb_infrared/DUT/ram_data(114) -radix decimal} {/tb_infrared/DUT/ram_data(115) -radix decimal} {/tb_infrared/DUT/ram_data(116) -radix decimal} {/tb_infrared/DUT/ram_data(117) -radix decimal} {/tb_infrared/DUT/ram_data(118) -radix decimal} {/tb_infrared/DUT/ram_data(119) -radix decimal} {/tb_infrared/DUT/ram_data(120) -radix decimal} {/tb_infrared/DUT/ram_data(121) -radix decimal} {/tb_infrared/DUT/ram_data(122) -radix decimal} {/tb_infrared/DUT/ram_data(123) -radix decimal} {/tb_infrared/DUT/ram_data(124) -radix decimal} {/tb_infrared/DUT/ram_data(125) -radix decimal} {/tb_infrared/DUT/ram_data(126) -radix decimal} {/tb_infrared/DUT/ram_data(127) -radix decimal} {/tb_infrared/DUT/ram_data(128) -radix decimal} {/tb_infrared/DUT/ram_data(129) -radix decimal} {/tb_infrared/DUT/ram_data(130) -radix decimal} {/tb_infrared/DUT/ram_data(131) -radix decimal} {/tb_infrared/DUT/ram_data(132) -radix decimal} {/tb_infrared/DUT/ram_data(133) -radix decimal} {/tb_infrared/DUT/ram_data(134) -radix decimal} {/tb_infrared/DUT/ram_data(135) -radix decimal} {/tb_infrared/DUT/ram_data(136) -radix decimal} {/tb_infrared/DUT/ram_data(137) -radix decimal} {/tb_infrared/DUT/ram_data(138) -radix decimal} {/tb_infrared/DUT/ram_data(139) -radix decimal} {/tb_infrared/DUT/ram_data(140) -radix decimal} {/tb_infrared/DUT/ram_data(141) -radix decimal} {/tb_infrared/DUT/ram_data(142) -radix decimal} {/tb_infrared/DUT/ram_data(143) -radix decimal} {/tb_infrared/DUT/ram_data(144) -radix decimal} {/tb_infrared/DUT/ram_data(145) -radix decimal} {/tb_infrared/DUT/ram_data(146) -radix decimal} {/tb_infrared/DUT/ram_data(147) -radix decimal} {/tb_infrared/DUT/ram_data(148) -radix decimal} {/tb_infrared/DUT/ram_data(149) -radix decimal} {/tb_infrared/DUT/ram_data(150) -radix decimal} {/tb_infrared/DUT/ram_data(151) -radix decimal} {/tb_infrared/DUT/ram_data(152) -radix decimal} {/tb_infrared/DUT/ram_data(153) -radix decimal} {/tb_infrared/DUT/ram_data(154) -radix decimal} {/tb_infrared/DUT/ram_data(155) -radix decimal} {/tb_infrared/DUT/ram_data(156) -radix decimal} {/tb_infrared/DUT/ram_data(157) -radix decimal} {/tb_infrared/DUT/ram_data(158) -radix decimal} {/tb_infrared/DUT/ram_data(159) -radix decimal} {/tb_infrared/DUT/ram_data(160) -radix decimal} {/tb_infrared/DUT/ram_data(161) -radix decimal} {/tb_infrared/DUT/ram_data(162) -radix decimal} {/tb_infrared/DUT/ram_data(163) -radix decimal} {/tb_infrared/DUT/ram_data(164) -radix decimal} {/tb_infrared/DUT/ram_data(165) -radix decimal} {/tb_infrared/DUT/ram_data(166) -radix decimal} {/tb_infrared/DUT/ram_data(167) -radix decimal} {/tb_infrared/DUT/ram_data(168) -radix decimal} {/tb_infrared/DUT/ram_data(169) -radix decimal} {/tb_infrared/DUT/ram_data(170) -radix decimal} {/tb_infrared/DUT/ram_data(171) -radix decimal} {/tb_infrared/DUT/ram_data(172) -radix decimal} {/tb_infrared/DUT/ram_data(173) -radix decimal} {/tb_infrared/DUT/ram_data(174) -radix decimal} {/tb_infrared/DUT/ram_data(175) -radix decimal} {/tb_infrared/DUT/ram_data(176) -radix decimal} {/tb_infrared/DUT/ram_data(177) -radix decimal} {/tb_infrared/DUT/ram_data(178) -radix decimal} {/tb_infrared/DUT/ram_data(179) -radix decimal} {/tb_infrared/DUT/ram_data(180) -radix decimal} {/tb_infrared/DUT/ram_data(181) -radix decimal} {/tb_infrared/DUT/ram_data(182) -radix decimal} {/tb_infrared/DUT/ram_data(183) -radix decimal} {/tb_infrared/DUT/ram_data(184) -radix decimal} {/tb_infrared/DUT/ram_data(185) -radix decimal} {/tb_infrared/DUT/ram_data(186) -radix decimal} {/tb_infrared/DUT/ram_data(187) -radix decimal} {/tb_infrared/DUT/ram_data(188) -radix decimal} {/tb_infrared/DUT/ram_data(189) -radix decimal} {/tb_infrared/DUT/ram_data(190) -radix decimal} {/tb_infrared/DUT/ram_data(191) -radix decimal} {/tb_infrared/DUT/ram_data(192) -radix decimal} {/tb_infrared/DUT/ram_data(193) -radix decimal} {/tb_infrared/DUT/ram_data(194) -radix decimal} {/tb_infrared/DUT/ram_data(195) -radix decimal} {/tb_infrared/DUT/ram_data(196) -radix decimal} {/tb_infrared/DUT/ram_data(197) -radix decimal} {/tb_infrared/DUT/ram_data(198) -radix decimal} {/tb_infrared/DUT/ram_data(199) -radix decimal} {/tb_infrared/DUT/ram_data(200) -radix decimal} {/tb_infrared/DUT/ram_data(201) -radix decimal} {/tb_infrared/DUT/ram_data(202) -radix decimal} {/tb_infrared/DUT/ram_data(203) -radix decimal} {/tb_infrared/DUT/ram_data(204) -radix decimal} {/tb_infrared/DUT/ram_data(205) -radix decimal} {/tb_infrared/DUT/ram_data(206) -radix decimal} {/tb_infrared/DUT/ram_data(207) -radix decimal} {/tb_infrared/DUT/ram_data(208) -radix decimal} {/tb_infrared/DUT/ram_data(209) -radix decimal} {/tb_infrared/DUT/ram_data(210) -radix decimal} {/tb_infrared/DUT/ram_data(211) -radix decimal} {/tb_infrared/DUT/ram_data(212) -radix decimal} {/tb_infrared/DUT/ram_data(213) -radix decimal} {/tb_infrared/DUT/ram_data(214) -radix decimal} {/tb_infrared/DUT/ram_data(215) -radix decimal} {/tb_infrared/DUT/ram_data(216) -radix decimal} {/tb_infrared/DUT/ram_data(217) -radix decimal} {/tb_infrared/DUT/ram_data(218) -radix decimal} {/tb_infrared/DUT/ram_data(219) -radix decimal} {/tb_infrared/DUT/ram_data(220) -radix decimal} {/tb_infrared/DUT/ram_data(221) -radix decimal} {/tb_infrared/DUT/ram_data(222) -radix decimal} {/tb_infrared/DUT/ram_data(223) -radix decimal} {/tb_infrared/DUT/ram_data(224) -radix decimal} {/tb_infrared/DUT/ram_data(225) -radix decimal} {/tb_infrared/DUT/ram_data(226) -radix decimal} {/tb_infrared/DUT/ram_data(227) -radix decimal} {/tb_infrared/DUT/ram_data(228) -radix decimal} {/tb_infrared/DUT/ram_data(229) -radix decimal} {/tb_infrared/DUT/ram_data(230) -radix decimal} {/tb_infrared/DUT/ram_data(231) -radix decimal} {/tb_infrared/DUT/ram_data(232) -radix decimal} {/tb_infrared/DUT/ram_data(233) -radix decimal} {/tb_infrared/DUT/ram_data(234) -radix decimal} {/tb_infrared/DUT/ram_data(235) -radix decimal} {/tb_infrared/DUT/ram_data(236) -radix decimal} {/tb_infrared/DUT/ram_data(237) -radix decimal} {/tb_infrared/DUT/ram_data(238) -radix decimal} {/tb_infrared/DUT/ram_data(239) -radix decimal} {/tb_infrared/DUT/ram_data(240) -radix decimal} {/tb_infrared/DUT/ram_data(241) -radix decimal} {/tb_infrared/DUT/ram_data(242) -radix decimal} {/tb_infrared/DUT/ram_data(243) -radix decimal} {/tb_infrared/DUT/ram_data(244) -radix decimal} {/tb_infrared/DUT/ram_data(245) -radix decimal} {/tb_infrared/DUT/ram_data(246) -radix decimal} {/tb_infrared/DUT/ram_data(247) -radix decimal} {/tb_infrared/DUT/ram_data(248) -radix decimal} {/tb_infrared/DUT/ram_data(249) -radix decimal} {/tb_infrared/DUT/ram_data(250) -radix decimal} {/tb_infrared/DUT/ram_data(251) -radix decimal} {/tb_infrared/DUT/ram_data(252) -radix decimal} {/tb_infrared/DUT/ram_data(253) -radix decimal} {/tb_infrared/DUT/ram_data(254) -radix decimal} {/tb_infrared/DUT/ram_data(255) -radix decimal}} -subitemconfig {/tb_infrared/DUT/ram_data(0) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(1) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(2) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(3) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(4) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(5) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(6) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(7) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(8) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(9) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(10) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(11) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(12) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(13) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(14) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(15) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(16) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(17) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(18) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(19) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(20) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(21) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(22) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(23) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(24) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(25) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(26) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(27) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(28) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(29) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(30) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(31) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(32) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(33) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(34) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(35) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(36) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(37) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(38) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(39) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(40) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(41) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(42) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(43) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(44) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(45) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(46) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(47) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(48) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(49) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(50) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(51) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(52) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(53) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(54) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(55) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(56) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(57) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(58) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(59) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(60) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(61) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(62) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(63) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(64) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(65) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(66) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(67) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(68) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(69) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(70) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(71) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(72) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(73) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(74) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(75) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(76) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(77) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(78) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(79) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(80) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(81) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(82) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(83) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(84) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(85) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(86) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(87) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(88) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(89) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(90) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(91) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(92) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(93) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(94) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(95) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(96) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(97) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(98) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(99) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(100) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(101) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(102) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(103) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(104) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(105) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(106) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(107) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(108) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(109) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(110) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(111) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(112) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(113) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(114) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(115) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(116) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(117) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(118) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(119) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(120) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(121) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(122) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(123) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(124) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(125) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(126) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(127) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(128) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(129) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(130) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(131) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(132) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(133) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(134) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(135) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(136) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(137) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(138) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(139) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(140) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(141) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(142) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(143) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(144) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(145) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(146) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(147) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(148) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(149) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(150) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(151) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(152) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(153) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(154) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(155) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(156) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(157) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(158) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(159) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(160) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(161) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(162) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(163) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(164) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(165) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(166) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(167) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(168) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(169) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(170) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(171) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(172) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(173) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(174) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(175) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(176) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(177) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(178) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(179) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(180) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(181) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(182) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(183) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(184) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(185) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(186) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(187) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(188) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(189) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(190) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(191) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(192) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(193) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(194) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(195) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(196) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(197) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(198) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(199) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(200) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(201) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(202) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(203) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(204) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(205) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(206) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(207) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(208) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(209) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(210) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(211) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(212) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(213) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(214) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(215) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(216) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(217) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(218) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(219) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(220) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(221) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(222) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(223) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(224) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(225) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(226) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(227) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(228) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(229) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(230) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(231) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(232) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(233) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(234) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(235) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(236) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(237) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(238) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(239) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(240) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(241) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(242) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(243) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(244) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(245) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(246) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(247) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(248) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(249) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(250) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(251) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(252) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(253) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(254) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(255) {-height 16 -radix decimal}} /tb_infrared/DUT/ram_data +add wave -noupdate -divider timestamp_counter +add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/clk_i +add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/rst_n_i +add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/enable_i +add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/overflow_o +add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count_o +add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count +add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/overflow TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 1} {1530000 ps} 0} {{Cursor 2} {1550000 ps} 0} +WaveRestoreCursors {{Cursor 1} {1530000 ps} 0} {{Cursor 2} {241876 ps} 0} quietly wave cursor active 2 -configure wave -namecolwidth 324 +configure wave -namecolwidth 415 configure wave -valuecolwidth 164 configure wave -justifyvalue left configure wave -signalnamewidth 0 @@ -63,4 +71,4 @@ configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits ns update -WaveRestoreZoom {1436953 ps} {1683047 ps} +WaveRestoreZoom {0 ps} {31500 ns} From 90aa106d2548e2ef8cb8b264f18ecf308fd52326 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Thu, 20 Feb 2020 15:16:30 +0100 Subject: [PATCH 21/41] std_ulogic --- hdl/components/infrared/counter.vhd | 4 ++-- hdl/components/infrared/strobe_gen.vhd | 4 ++-- hdl/components/infrared/sync.vhd | 4 ++-- hdl/components/infrared/sync_single.vhd | 4 ++-- hdl/components/infrared/tb_infrared.vhd | 3 ++- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/hdl/components/infrared/counter.vhd b/hdl/components/infrared/counter.vhd index 3f694da..d13a626 100644 --- a/hdl/components/infrared/counter.vhd +++ b/hdl/components/infrared/counter.vhd @@ -22,9 +22,9 @@ entity counter is --! @{ --! System clock - clk_i : in std_logic; + clk_i : in std_ulogic; --! Asynchronous reset - rst_n_i : in std_logic; + rst_n_i : in std_ulogic; --! @} --! @name Control and status signals diff --git a/hdl/components/infrared/strobe_gen.vhd b/hdl/components/infrared/strobe_gen.vhd index 8c26822..004bf7e 100644 --- a/hdl/components/infrared/strobe_gen.vhd +++ b/hdl/components/infrared/strobe_gen.vhd @@ -27,9 +27,9 @@ entity strobe_gen is --! @{ --! System clock - clk_i : in std_logic; + clk_i : in std_ulogic; --! Asynchronous reset - rst_n_i : in std_logic; + rst_n_i : in std_ulogic; --! @} --! @name Strobe signals diff --git a/hdl/components/infrared/sync.vhd b/hdl/components/infrared/sync.vhd index 2caec00..b1a5245 100644 --- a/hdl/components/infrared/sync.vhd +++ b/hdl/components/infrared/sync.vhd @@ -22,9 +22,9 @@ entity sync is --! @{ --! System clock - clk_i : in std_logic; + clk_i : in std_ulogic; --! Asynchronous reset - rst_n_i : in std_logic; + rst_n_i : in std_ulogic; --! @} --! @name Sync signals diff --git a/hdl/components/infrared/sync_single.vhd b/hdl/components/infrared/sync_single.vhd index d43a07a..f3e76d5 100644 --- a/hdl/components/infrared/sync_single.vhd +++ b/hdl/components/infrared/sync_single.vhd @@ -21,9 +21,9 @@ entity sync_single is --! @{ --! System clock - clk_i : in std_logic; + clk_i : in std_ulogic; --! Asynchronous reset - rst_n_i : in std_logic; + rst_n_i : in std_ulogic; --! @} --! @name Sync signals diff --git a/hdl/components/infrared/tb_infrared.vhd b/hdl/components/infrared/tb_infrared.vhd index afa8536..6b2548f 100644 --- a/hdl/components/infrared/tb_infrared.vhd +++ b/hdl/components/infrared/tb_infrared.vhd @@ -11,6 +11,7 @@ entity tb_infrared is end entity tb_infrared; architecture bhv of tb_infrared is + signal avs_s0_address : std_logic_vector(10 downto 0) := (others => '0'); -- avs_s0.address signal avs_s0_read : std_logic := '0'; -- .read signal avs_s0_readdata : std_logic_vector(31 downto 0); -- .readdata @@ -26,7 +27,7 @@ architecture bhv of tb_infrared is constant clk_cycle_duration_c : time := 1 sec / 50E6; -- 50 MHz constant reset_duration_c : time := 20 * clk_cycle_duration_c; -begin +begin -- architecture bhv nRst <= '1' after reset_duration_c; clk <= not clk after clk_cycle_duration_c / 2; From fea3291aaf4610b0ba3afbc69c8aa46f7cc1f673 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Thu, 20 Feb 2020 15:48:16 +0100 Subject: [PATCH 22/41] fix irq; testbench --- hdl/components/infrared/infrared.vhd | 2 +- hdl/components/infrared/tb_infrared.vhd | 11 +++++++++-- hdl/components/infrared/wave.do | 6 +++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index cc29e59..a15a959 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -109,7 +109,7 @@ begin -- architecture rtl ir_tx_o <= ir_rx(ir_rx'high); -- mirror rx signal (until tx is implemented) avs_s0_readdata <= std_logic_vector(ram_readdata) when ctrl_access = '0' else std_logic_vector(ctrl_readdata); - done_recording_irq_o <= recording_stopped; + done_recording_irq_o <= irq_active; ----------------------------------------------------------------------------- -- Signal Assignments diff --git a/hdl/components/infrared/tb_infrared.vhd b/hdl/components/infrared/tb_infrared.vhd index 6b2548f..f8bd423 100644 --- a/hdl/components/infrared/tb_infrared.vhd +++ b/hdl/components/infrared/tb_infrared.vhd @@ -53,15 +53,22 @@ begin -- architecture bhv -- Generate infrared input signal ir_rx_input : for i in 0 to 10 loop ir_rx <= not ir_rx; - wait for 100 ns; + wait for 10 * clk_cycle_duration_c; end loop; -- Wait for interrupt generation (end of recieved IR sequence) wait until irq = '1'; report "(MWURM) IRQ occured (end of received IR sequence)." severity note; + wait for 10 * clk_cycle_duration_c; + -- Read data (magic numbers only) + read_magic_numbers : for i in 256 to 266 loop + avs_s0_address <= std_logic_vector(to_unsigned(i, avs_s0_address'length)); + avs_s0_read <= '1'; - + wait until clk <= '1'; + wait until clk <= '0'; + end loop read_magic_numbers; wait; end process test_proc; diff --git a/hdl/components/infrared/wave.do b/hdl/components/infrared/wave.do index cdcd56d..db30af2 100644 --- a/hdl/components/infrared/wave.do +++ b/hdl/components/infrared/wave.do @@ -9,7 +9,7 @@ add wave -noupdate /tb_infrared/clk add wave -noupdate /tb_infrared/nRst add wave -noupdate /tb_infrared/ir_rx add wave -noupdate /tb_infrared/ir_tx -add wave -noupdate /tb_infrared/irq +add wave -noupdate -color Magenta /tb_infrared/irq add wave -noupdate /tb_infrared/ir_rx_mirror add wave -noupdate -divider stop_counter add wave -noupdate /tb_infrared/DUT/stop_counter_inst/clk_i @@ -55,8 +55,8 @@ add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count_o add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/overflow TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 1} {1530000 ps} 0} {{Cursor 2} {241876 ps} 0} -quietly wave cursor active 2 +WaveRestoreCursors {{Cursor 1} {21970000 ps} 0} {{Cursor 2} {241876 ps} 0} +quietly wave cursor active 1 configure wave -namecolwidth 415 configure wave -valuecolwidth 164 configure wave -justifyvalue left From 1ea255f55b45b1990d178188ca6daadfc259f29a Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Fri, 21 Feb 2020 13:07:57 +0100 Subject: [PATCH 23/41] split into ctrl_addr --- hdl/components/infrared/infrared.vhd | 28 +++++++++++++------------ hdl/components/infrared/tb_infrared.vhd | 2 ++ hdl/components/infrared/wave.do | 22 ++++++++++--------- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index a15a959..2857292 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -76,7 +76,7 @@ architecture rtl of infrared is signal ram_readdata : timestamp_t := (others => '0'); signal ctrl_readdata : timestamp_t := (others => '0'); - signal store_addr : unsigned(7 downto 0) := (others => '0'); + signal ram_addr : unsigned(7 downto 0) := (others => '0'); signal ir_rx : std_ulogic_vector(1 downto 0) := (others => '0'); signal store_timestamp : std_ulogic := '0'; signal irq_active : std_ulogic := '0'; @@ -96,6 +96,7 @@ architecture rtl of infrared is signal timestamp : timestamp_t; signal ctrl_access : std_ulogic; signal end_of_sequence : std_ulogic; + signal ctrl_addr : unsigned(avs_s0_address'high downto ram_addr'high+1); --! @} @@ -119,7 +120,8 @@ begin -- architecture rtl rising <= '1' when ir_rx(1)='0' and ir_rx(0)='1' else '0'; falling <= '1' when ir_rx(1)='1' and ir_rx(0)='0' else '0'; ctrl_access <= '1' when to_integer(unsigned(avs_s0_address)) > ram_t'length-1 else '0'; - end_of_sequence <= '1' when to_integer(store_addr) > 0 and ir_rx(1) = '1' else '0'; + end_of_sequence <= '1' when to_integer(ram_addr) > 0 and ir_rx(1) = '1' else '0'; + ctrl_addr <= unsigned(avs_s0_address(ctrl_addr'range)); ----------------------------------------------------------------------------- -- Instantiations @@ -162,7 +164,7 @@ begin -- architecture rtl regs : process (clk_i, rst_n_i) is procedure reset is begin - store_addr <= to_unsigned(0, store_addr'length); + ram_addr <= to_unsigned(0, ram_addr'length); store_timestamp <= '0'; irq_active <= '0'; end procedure reset; @@ -175,11 +177,11 @@ begin -- architecture rtl store_timestamp <= '0'; if rising = '1' or falling = '1' then - store_addr <= store_addr + 1; + ram_addr <= ram_addr + 1; store_timestamp <= '1'; elsif recording_stopped = '1' then irq_active <= '1'; - store_addr <= (others => '0'); + ram_addr <= (others => '0'); end if; if irq_reset = '1' then irq_active <= '0'; @@ -191,11 +193,11 @@ begin -- architecture rtl begin if rising_edge(clk_i) then if store_timestamp = '1' then - ram_data(to_integer(store_addr)) <= timestamp; + ram_data(to_integer(ram_addr)) <= timestamp; end if; if avs_s0_read = '1' then - ram_readdata <= ram_data(to_integer(unsigned(avs_s0_address(store_addr'range)))); + ram_readdata <= ram_data(to_integer(unsigned(avs_s0_address(ram_addr'range)))); end if; end if; end process ram; @@ -216,16 +218,16 @@ begin -- architecture rtl irq_reset <= '0'; -- addresses higher 255 - case (to_integer(unsigned(avs_s0_address(avs_s0_address'high downto store_addr'high+1)))) is - when 0 => -- magic number - ctrl_readdata <= x"ABCD1234"; + case (to_integer(ctrl_addr)) is when 1 => -- magic number - ctrl_readdata <= x"11111111"; + ctrl_readdata <= x"ABCD1234"; when 2 => -- magic number - ctrl_readdata <= x"22222222"; + ctrl_readdata <= x"10101010"; when 3 => -- magic number + ctrl_readdata <= x"22222222"; + when 4 => -- magic number ctrl_readdata <= x"33333333"; - when 4 => -- read and clear irq status + when 5 => -- read and clear irq status ctrl_readdata(0) <= irq_active; irq_reset <= '1'; when others => diff --git a/hdl/components/infrared/tb_infrared.vhd b/hdl/components/infrared/tb_infrared.vhd index f8bd423..e264b7a 100644 --- a/hdl/components/infrared/tb_infrared.vhd +++ b/hdl/components/infrared/tb_infrared.vhd @@ -68,6 +68,8 @@ begin -- architecture bhv wait until clk <= '1'; wait until clk <= '0'; + wait until clk <= '1'; + wait until clk <= '0'; end loop read_magic_numbers; wait; diff --git a/hdl/components/infrared/wave.do b/hdl/components/infrared/wave.do index db30af2..0e7823d 100644 --- a/hdl/components/infrared/wave.do +++ b/hdl/components/infrared/wave.do @@ -1,8 +1,8 @@ onerror {resume} quietly WaveActivateNextPane {} 0 -add wave -noupdate /tb_infrared/avs_s0_address +add wave -noupdate -radix decimal /tb_infrared/avs_s0_address add wave -noupdate /tb_infrared/avs_s0_read -add wave -noupdate /tb_infrared/avs_s0_readdata +add wave -noupdate -radix hexadecimal /tb_infrared/avs_s0_readdata add wave -noupdate /tb_infrared/avs_s0_write add wave -noupdate /tb_infrared/avs_s0_writedata add wave -noupdate /tb_infrared/clk @@ -22,7 +22,10 @@ add wave -noupdate /tb_infrared/DUT/stop_counter_inst/overflow add wave -noupdate -divider DUT add wave -noupdate /tb_infrared/DUT/clk_i add wave -noupdate /tb_infrared/DUT/rst_n_i -add wave -noupdate /tb_infrared/DUT/avs_s0_address +add wave -noupdate -radix decimal /tb_infrared/DUT/avs_s0_address +add wave -noupdate -radix decimal /tb_infrared/DUT/ram_addr +add wave -noupdate -radix decimal /tb_infrared/DUT/ctrl_addr +add wave -noupdate /tb_infrared/DUT/ctrl_access add wave -noupdate /tb_infrared/DUT/avs_s0_read add wave -noupdate /tb_infrared/DUT/avs_s0_readdata add wave -noupdate /tb_infrared/DUT/avs_s0_write @@ -32,8 +35,8 @@ add wave -noupdate /tb_infrared/DUT/ir_rx_i add wave -noupdate /tb_infrared/DUT/ir_tx_o add wave -noupdate /tb_infrared/DUT/done_recording_irq_o add wave -noupdate /tb_infrared/DUT/ir_rx_o -add wave -noupdate /tb_infrared/DUT/ram_readdata -add wave -noupdate /tb_infrared/DUT/ctrl_readdata +add wave -noupdate -radix decimal /tb_infrared/DUT/ram_readdata +add wave -noupdate -radix hexadecimal /tb_infrared/DUT/ctrl_readdata add wave -noupdate -expand -subitemconfig {/tb_infrared/DUT/ir_rx(1) {-color Magenta -height 16}} /tb_infrared/DUT/ir_rx add wave -noupdate /tb_infrared/DUT/store_timestamp add wave -noupdate /tb_infrared/DUT/irq_active @@ -44,8 +47,7 @@ add wave -noupdate /tb_infrared/DUT/rising add wave -noupdate /tb_infrared/DUT/falling add wave -noupdate /tb_infrared/DUT/recording_stopped add wave -noupdate -radix decimal /tb_infrared/DUT/timestamp -add wave -noupdate /tb_infrared/DUT/ctrl_access -add wave -noupdate -radix decimal -childformat {{/tb_infrared/DUT/ram_data(0) -radix decimal} {/tb_infrared/DUT/ram_data(1) -radix decimal} {/tb_infrared/DUT/ram_data(2) -radix decimal} {/tb_infrared/DUT/ram_data(3) -radix decimal} {/tb_infrared/DUT/ram_data(4) -radix decimal} {/tb_infrared/DUT/ram_data(5) -radix decimal} {/tb_infrared/DUT/ram_data(6) -radix decimal} {/tb_infrared/DUT/ram_data(7) -radix decimal} {/tb_infrared/DUT/ram_data(8) -radix decimal} {/tb_infrared/DUT/ram_data(9) -radix decimal} {/tb_infrared/DUT/ram_data(10) -radix decimal} {/tb_infrared/DUT/ram_data(11) -radix decimal} {/tb_infrared/DUT/ram_data(12) -radix decimal} {/tb_infrared/DUT/ram_data(13) -radix decimal} {/tb_infrared/DUT/ram_data(14) -radix decimal} {/tb_infrared/DUT/ram_data(15) -radix decimal} {/tb_infrared/DUT/ram_data(16) -radix decimal} {/tb_infrared/DUT/ram_data(17) -radix decimal} {/tb_infrared/DUT/ram_data(18) -radix decimal} {/tb_infrared/DUT/ram_data(19) -radix decimal} {/tb_infrared/DUT/ram_data(20) -radix decimal} {/tb_infrared/DUT/ram_data(21) -radix decimal} {/tb_infrared/DUT/ram_data(22) -radix decimal} {/tb_infrared/DUT/ram_data(23) -radix decimal} {/tb_infrared/DUT/ram_data(24) -radix decimal} {/tb_infrared/DUT/ram_data(25) -radix decimal} {/tb_infrared/DUT/ram_data(26) -radix decimal} {/tb_infrared/DUT/ram_data(27) -radix decimal} {/tb_infrared/DUT/ram_data(28) -radix decimal} {/tb_infrared/DUT/ram_data(29) -radix decimal} {/tb_infrared/DUT/ram_data(30) -radix decimal} {/tb_infrared/DUT/ram_data(31) -radix decimal} {/tb_infrared/DUT/ram_data(32) -radix decimal} {/tb_infrared/DUT/ram_data(33) -radix decimal} {/tb_infrared/DUT/ram_data(34) -radix decimal} {/tb_infrared/DUT/ram_data(35) -radix decimal} {/tb_infrared/DUT/ram_data(36) -radix decimal} {/tb_infrared/DUT/ram_data(37) -radix decimal} {/tb_infrared/DUT/ram_data(38) -radix decimal} {/tb_infrared/DUT/ram_data(39) -radix decimal} {/tb_infrared/DUT/ram_data(40) -radix decimal} {/tb_infrared/DUT/ram_data(41) -radix decimal} {/tb_infrared/DUT/ram_data(42) -radix decimal} {/tb_infrared/DUT/ram_data(43) -radix decimal} {/tb_infrared/DUT/ram_data(44) -radix decimal} {/tb_infrared/DUT/ram_data(45) -radix decimal} {/tb_infrared/DUT/ram_data(46) -radix decimal} {/tb_infrared/DUT/ram_data(47) -radix decimal} {/tb_infrared/DUT/ram_data(48) -radix decimal} {/tb_infrared/DUT/ram_data(49) -radix decimal} {/tb_infrared/DUT/ram_data(50) -radix decimal} {/tb_infrared/DUT/ram_data(51) -radix decimal} {/tb_infrared/DUT/ram_data(52) -radix decimal} {/tb_infrared/DUT/ram_data(53) -radix decimal} {/tb_infrared/DUT/ram_data(54) -radix decimal} {/tb_infrared/DUT/ram_data(55) -radix decimal} {/tb_infrared/DUT/ram_data(56) -radix decimal} {/tb_infrared/DUT/ram_data(57) -radix decimal} {/tb_infrared/DUT/ram_data(58) -radix decimal} {/tb_infrared/DUT/ram_data(59) -radix decimal} {/tb_infrared/DUT/ram_data(60) -radix decimal} {/tb_infrared/DUT/ram_data(61) -radix decimal} {/tb_infrared/DUT/ram_data(62) -radix decimal} {/tb_infrared/DUT/ram_data(63) -radix decimal} {/tb_infrared/DUT/ram_data(64) -radix decimal} {/tb_infrared/DUT/ram_data(65) -radix decimal} {/tb_infrared/DUT/ram_data(66) -radix decimal} {/tb_infrared/DUT/ram_data(67) -radix decimal} {/tb_infrared/DUT/ram_data(68) -radix decimal} {/tb_infrared/DUT/ram_data(69) -radix decimal} {/tb_infrared/DUT/ram_data(70) -radix decimal} {/tb_infrared/DUT/ram_data(71) -radix decimal} {/tb_infrared/DUT/ram_data(72) -radix decimal} {/tb_infrared/DUT/ram_data(73) -radix decimal} {/tb_infrared/DUT/ram_data(74) -radix decimal} {/tb_infrared/DUT/ram_data(75) -radix decimal} {/tb_infrared/DUT/ram_data(76) -radix decimal} {/tb_infrared/DUT/ram_data(77) -radix decimal} {/tb_infrared/DUT/ram_data(78) -radix decimal} {/tb_infrared/DUT/ram_data(79) -radix decimal} {/tb_infrared/DUT/ram_data(80) -radix decimal} {/tb_infrared/DUT/ram_data(81) -radix decimal} {/tb_infrared/DUT/ram_data(82) -radix decimal} {/tb_infrared/DUT/ram_data(83) -radix decimal} {/tb_infrared/DUT/ram_data(84) -radix decimal} {/tb_infrared/DUT/ram_data(85) -radix decimal} {/tb_infrared/DUT/ram_data(86) -radix decimal} {/tb_infrared/DUT/ram_data(87) -radix decimal} {/tb_infrared/DUT/ram_data(88) -radix decimal} {/tb_infrared/DUT/ram_data(89) -radix decimal} {/tb_infrared/DUT/ram_data(90) -radix decimal} {/tb_infrared/DUT/ram_data(91) -radix decimal} {/tb_infrared/DUT/ram_data(92) -radix decimal} {/tb_infrared/DUT/ram_data(93) -radix decimal} {/tb_infrared/DUT/ram_data(94) -radix decimal} {/tb_infrared/DUT/ram_data(95) -radix decimal} {/tb_infrared/DUT/ram_data(96) -radix decimal} {/tb_infrared/DUT/ram_data(97) -radix decimal} {/tb_infrared/DUT/ram_data(98) -radix decimal} {/tb_infrared/DUT/ram_data(99) -radix decimal} {/tb_infrared/DUT/ram_data(100) -radix decimal} {/tb_infrared/DUT/ram_data(101) -radix decimal} {/tb_infrared/DUT/ram_data(102) -radix decimal} {/tb_infrared/DUT/ram_data(103) -radix decimal} {/tb_infrared/DUT/ram_data(104) -radix decimal} {/tb_infrared/DUT/ram_data(105) -radix decimal} {/tb_infrared/DUT/ram_data(106) -radix decimal} {/tb_infrared/DUT/ram_data(107) -radix decimal} {/tb_infrared/DUT/ram_data(108) -radix decimal} {/tb_infrared/DUT/ram_data(109) -radix decimal} {/tb_infrared/DUT/ram_data(110) -radix decimal} {/tb_infrared/DUT/ram_data(111) -radix decimal} {/tb_infrared/DUT/ram_data(112) -radix decimal} {/tb_infrared/DUT/ram_data(113) -radix decimal} {/tb_infrared/DUT/ram_data(114) -radix decimal} {/tb_infrared/DUT/ram_data(115) -radix decimal} {/tb_infrared/DUT/ram_data(116) -radix decimal} {/tb_infrared/DUT/ram_data(117) -radix decimal} {/tb_infrared/DUT/ram_data(118) -radix decimal} {/tb_infrared/DUT/ram_data(119) -radix decimal} {/tb_infrared/DUT/ram_data(120) -radix decimal} {/tb_infrared/DUT/ram_data(121) -radix decimal} {/tb_infrared/DUT/ram_data(122) -radix decimal} {/tb_infrared/DUT/ram_data(123) -radix decimal} {/tb_infrared/DUT/ram_data(124) -radix decimal} {/tb_infrared/DUT/ram_data(125) -radix decimal} {/tb_infrared/DUT/ram_data(126) -radix decimal} {/tb_infrared/DUT/ram_data(127) -radix decimal} {/tb_infrared/DUT/ram_data(128) -radix decimal} {/tb_infrared/DUT/ram_data(129) -radix decimal} {/tb_infrared/DUT/ram_data(130) -radix decimal} {/tb_infrared/DUT/ram_data(131) -radix decimal} {/tb_infrared/DUT/ram_data(132) -radix decimal} {/tb_infrared/DUT/ram_data(133) -radix decimal} {/tb_infrared/DUT/ram_data(134) -radix decimal} {/tb_infrared/DUT/ram_data(135) -radix decimal} {/tb_infrared/DUT/ram_data(136) -radix decimal} {/tb_infrared/DUT/ram_data(137) -radix decimal} {/tb_infrared/DUT/ram_data(138) -radix decimal} {/tb_infrared/DUT/ram_data(139) -radix decimal} {/tb_infrared/DUT/ram_data(140) -radix decimal} {/tb_infrared/DUT/ram_data(141) -radix decimal} {/tb_infrared/DUT/ram_data(142) -radix decimal} {/tb_infrared/DUT/ram_data(143) -radix decimal} {/tb_infrared/DUT/ram_data(144) -radix decimal} {/tb_infrared/DUT/ram_data(145) -radix decimal} {/tb_infrared/DUT/ram_data(146) -radix decimal} {/tb_infrared/DUT/ram_data(147) -radix decimal} {/tb_infrared/DUT/ram_data(148) -radix decimal} {/tb_infrared/DUT/ram_data(149) -radix decimal} {/tb_infrared/DUT/ram_data(150) -radix decimal} {/tb_infrared/DUT/ram_data(151) -radix decimal} {/tb_infrared/DUT/ram_data(152) -radix decimal} {/tb_infrared/DUT/ram_data(153) -radix decimal} {/tb_infrared/DUT/ram_data(154) -radix decimal} {/tb_infrared/DUT/ram_data(155) -radix decimal} {/tb_infrared/DUT/ram_data(156) -radix decimal} {/tb_infrared/DUT/ram_data(157) -radix decimal} {/tb_infrared/DUT/ram_data(158) -radix decimal} {/tb_infrared/DUT/ram_data(159) -radix decimal} {/tb_infrared/DUT/ram_data(160) -radix decimal} {/tb_infrared/DUT/ram_data(161) -radix decimal} {/tb_infrared/DUT/ram_data(162) -radix decimal} {/tb_infrared/DUT/ram_data(163) -radix decimal} {/tb_infrared/DUT/ram_data(164) -radix decimal} {/tb_infrared/DUT/ram_data(165) -radix decimal} {/tb_infrared/DUT/ram_data(166) -radix decimal} {/tb_infrared/DUT/ram_data(167) -radix decimal} {/tb_infrared/DUT/ram_data(168) -radix decimal} {/tb_infrared/DUT/ram_data(169) -radix decimal} {/tb_infrared/DUT/ram_data(170) -radix decimal} {/tb_infrared/DUT/ram_data(171) -radix decimal} {/tb_infrared/DUT/ram_data(172) -radix decimal} {/tb_infrared/DUT/ram_data(173) -radix decimal} {/tb_infrared/DUT/ram_data(174) -radix decimal} {/tb_infrared/DUT/ram_data(175) -radix decimal} {/tb_infrared/DUT/ram_data(176) -radix decimal} {/tb_infrared/DUT/ram_data(177) -radix decimal} {/tb_infrared/DUT/ram_data(178) -radix decimal} {/tb_infrared/DUT/ram_data(179) -radix decimal} {/tb_infrared/DUT/ram_data(180) -radix decimal} {/tb_infrared/DUT/ram_data(181) -radix decimal} {/tb_infrared/DUT/ram_data(182) -radix decimal} {/tb_infrared/DUT/ram_data(183) -radix decimal} {/tb_infrared/DUT/ram_data(184) -radix decimal} {/tb_infrared/DUT/ram_data(185) -radix decimal} {/tb_infrared/DUT/ram_data(186) -radix decimal} {/tb_infrared/DUT/ram_data(187) -radix decimal} {/tb_infrared/DUT/ram_data(188) -radix decimal} {/tb_infrared/DUT/ram_data(189) -radix decimal} {/tb_infrared/DUT/ram_data(190) -radix decimal} {/tb_infrared/DUT/ram_data(191) -radix decimal} {/tb_infrared/DUT/ram_data(192) -radix decimal} {/tb_infrared/DUT/ram_data(193) -radix decimal} {/tb_infrared/DUT/ram_data(194) -radix decimal} {/tb_infrared/DUT/ram_data(195) -radix decimal} {/tb_infrared/DUT/ram_data(196) -radix decimal} {/tb_infrared/DUT/ram_data(197) -radix decimal} {/tb_infrared/DUT/ram_data(198) -radix decimal} {/tb_infrared/DUT/ram_data(199) -radix decimal} {/tb_infrared/DUT/ram_data(200) -radix decimal} {/tb_infrared/DUT/ram_data(201) -radix decimal} {/tb_infrared/DUT/ram_data(202) -radix decimal} {/tb_infrared/DUT/ram_data(203) -radix decimal} {/tb_infrared/DUT/ram_data(204) -radix decimal} {/tb_infrared/DUT/ram_data(205) -radix decimal} {/tb_infrared/DUT/ram_data(206) -radix decimal} {/tb_infrared/DUT/ram_data(207) -radix decimal} {/tb_infrared/DUT/ram_data(208) -radix decimal} {/tb_infrared/DUT/ram_data(209) -radix decimal} {/tb_infrared/DUT/ram_data(210) -radix decimal} {/tb_infrared/DUT/ram_data(211) -radix decimal} {/tb_infrared/DUT/ram_data(212) -radix decimal} {/tb_infrared/DUT/ram_data(213) -radix decimal} {/tb_infrared/DUT/ram_data(214) -radix decimal} {/tb_infrared/DUT/ram_data(215) -radix decimal} {/tb_infrared/DUT/ram_data(216) -radix decimal} {/tb_infrared/DUT/ram_data(217) -radix decimal} {/tb_infrared/DUT/ram_data(218) -radix decimal} {/tb_infrared/DUT/ram_data(219) -radix decimal} {/tb_infrared/DUT/ram_data(220) -radix decimal} {/tb_infrared/DUT/ram_data(221) -radix decimal} {/tb_infrared/DUT/ram_data(222) -radix decimal} {/tb_infrared/DUT/ram_data(223) -radix decimal} {/tb_infrared/DUT/ram_data(224) -radix decimal} {/tb_infrared/DUT/ram_data(225) -radix decimal} {/tb_infrared/DUT/ram_data(226) -radix decimal} {/tb_infrared/DUT/ram_data(227) -radix decimal} {/tb_infrared/DUT/ram_data(228) -radix decimal} {/tb_infrared/DUT/ram_data(229) -radix decimal} {/tb_infrared/DUT/ram_data(230) -radix decimal} {/tb_infrared/DUT/ram_data(231) -radix decimal} {/tb_infrared/DUT/ram_data(232) -radix decimal} {/tb_infrared/DUT/ram_data(233) -radix decimal} {/tb_infrared/DUT/ram_data(234) -radix decimal} {/tb_infrared/DUT/ram_data(235) -radix decimal} {/tb_infrared/DUT/ram_data(236) -radix decimal} {/tb_infrared/DUT/ram_data(237) -radix decimal} {/tb_infrared/DUT/ram_data(238) -radix decimal} {/tb_infrared/DUT/ram_data(239) -radix decimal} {/tb_infrared/DUT/ram_data(240) -radix decimal} {/tb_infrared/DUT/ram_data(241) -radix decimal} {/tb_infrared/DUT/ram_data(242) -radix decimal} {/tb_infrared/DUT/ram_data(243) -radix decimal} {/tb_infrared/DUT/ram_data(244) -radix decimal} {/tb_infrared/DUT/ram_data(245) -radix decimal} {/tb_infrared/DUT/ram_data(246) -radix decimal} {/tb_infrared/DUT/ram_data(247) -radix decimal} {/tb_infrared/DUT/ram_data(248) -radix decimal} {/tb_infrared/DUT/ram_data(249) -radix decimal} {/tb_infrared/DUT/ram_data(250) -radix decimal} {/tb_infrared/DUT/ram_data(251) -radix decimal} {/tb_infrared/DUT/ram_data(252) -radix decimal} {/tb_infrared/DUT/ram_data(253) -radix decimal} {/tb_infrared/DUT/ram_data(254) -radix decimal} {/tb_infrared/DUT/ram_data(255) -radix decimal}} -subitemconfig {/tb_infrared/DUT/ram_data(0) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(1) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(2) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(3) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(4) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(5) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(6) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(7) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(8) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(9) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(10) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(11) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(12) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(13) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(14) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(15) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(16) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(17) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(18) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(19) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(20) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(21) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(22) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(23) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(24) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(25) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(26) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(27) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(28) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(29) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(30) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(31) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(32) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(33) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(34) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(35) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(36) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(37) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(38) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(39) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(40) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(41) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(42) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(43) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(44) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(45) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(46) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(47) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(48) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(49) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(50) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(51) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(52) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(53) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(54) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(55) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(56) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(57) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(58) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(59) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(60) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(61) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(62) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(63) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(64) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(65) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(66) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(67) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(68) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(69) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(70) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(71) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(72) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(73) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(74) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(75) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(76) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(77) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(78) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(79) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(80) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(81) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(82) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(83) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(84) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(85) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(86) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(87) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(88) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(89) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(90) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(91) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(92) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(93) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(94) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(95) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(96) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(97) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(98) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(99) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(100) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(101) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(102) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(103) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(104) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(105) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(106) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(107) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(108) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(109) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(110) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(111) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(112) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(113) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(114) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(115) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(116) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(117) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(118) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(119) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(120) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(121) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(122) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(123) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(124) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(125) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(126) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(127) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(128) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(129) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(130) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(131) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(132) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(133) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(134) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(135) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(136) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(137) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(138) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(139) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(140) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(141) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(142) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(143) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(144) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(145) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(146) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(147) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(148) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(149) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(150) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(151) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(152) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(153) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(154) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(155) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(156) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(157) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(158) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(159) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(160) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(161) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(162) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(163) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(164) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(165) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(166) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(167) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(168) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(169) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(170) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(171) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(172) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(173) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(174) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(175) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(176) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(177) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(178) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(179) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(180) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(181) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(182) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(183) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(184) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(185) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(186) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(187) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(188) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(189) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(190) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(191) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(192) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(193) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(194) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(195) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(196) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(197) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(198) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(199) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(200) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(201) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(202) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(203) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(204) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(205) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(206) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(207) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(208) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(209) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(210) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(211) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(212) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(213) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(214) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(215) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(216) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(217) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(218) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(219) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(220) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(221) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(222) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(223) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(224) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(225) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(226) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(227) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(228) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(229) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(230) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(231) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(232) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(233) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(234) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(235) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(236) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(237) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(238) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(239) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(240) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(241) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(242) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(243) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(244) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(245) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(246) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(247) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(248) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(249) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(250) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(251) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(252) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(253) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(254) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(255) {-height 16 -radix decimal}} /tb_infrared/DUT/ram_data +add wave -noupdate -radix decimal -childformat {{/tb_infrared/DUT/ram_data(0) -radix decimal} {/tb_infrared/DUT/ram_data(1) -radix decimal} {/tb_infrared/DUT/ram_data(2) -radix decimal} {/tb_infrared/DUT/ram_data(3) -radix decimal} {/tb_infrared/DUT/ram_data(4) -radix decimal} {/tb_infrared/DUT/ram_data(5) -radix decimal} {/tb_infrared/DUT/ram_data(6) -radix decimal} {/tb_infrared/DUT/ram_data(7) -radix decimal} {/tb_infrared/DUT/ram_data(8) -radix decimal} {/tb_infrared/DUT/ram_data(9) -radix decimal} {/tb_infrared/DUT/ram_data(10) -radix decimal} {/tb_infrared/DUT/ram_data(11) -radix decimal} {/tb_infrared/DUT/ram_data(12) -radix decimal} {/tb_infrared/DUT/ram_data(13) -radix decimal} {/tb_infrared/DUT/ram_data(14) -radix decimal} {/tb_infrared/DUT/ram_data(15) -radix decimal} {/tb_infrared/DUT/ram_data(16) -radix decimal} {/tb_infrared/DUT/ram_data(17) -radix decimal} {/tb_infrared/DUT/ram_data(18) -radix decimal} {/tb_infrared/DUT/ram_data(19) -radix decimal} {/tb_infrared/DUT/ram_data(20) -radix decimal} {/tb_infrared/DUT/ram_data(21) -radix decimal} {/tb_infrared/DUT/ram_data(22) -radix decimal} {/tb_infrared/DUT/ram_data(23) -radix decimal} {/tb_infrared/DUT/ram_data(24) -radix decimal} {/tb_infrared/DUT/ram_data(25) -radix decimal} {/tb_infrared/DUT/ram_data(26) -radix decimal} {/tb_infrared/DUT/ram_data(27) -radix decimal} {/tb_infrared/DUT/ram_data(28) -radix decimal} {/tb_infrared/DUT/ram_data(29) -radix decimal} {/tb_infrared/DUT/ram_data(30) -radix decimal} {/tb_infrared/DUT/ram_data(31) -radix decimal} {/tb_infrared/DUT/ram_data(32) -radix decimal} {/tb_infrared/DUT/ram_data(33) -radix decimal} {/tb_infrared/DUT/ram_data(34) -radix decimal} {/tb_infrared/DUT/ram_data(35) -radix decimal} {/tb_infrared/DUT/ram_data(36) -radix decimal} {/tb_infrared/DUT/ram_data(37) -radix decimal} {/tb_infrared/DUT/ram_data(38) -radix decimal} {/tb_infrared/DUT/ram_data(39) -radix decimal} {/tb_infrared/DUT/ram_data(40) -radix decimal} {/tb_infrared/DUT/ram_data(41) -radix decimal} {/tb_infrared/DUT/ram_data(42) -radix decimal} {/tb_infrared/DUT/ram_data(43) -radix decimal} {/tb_infrared/DUT/ram_data(44) -radix decimal} {/tb_infrared/DUT/ram_data(45) -radix decimal} {/tb_infrared/DUT/ram_data(46) -radix decimal} {/tb_infrared/DUT/ram_data(47) -radix decimal} {/tb_infrared/DUT/ram_data(48) -radix decimal} {/tb_infrared/DUT/ram_data(49) -radix decimal} {/tb_infrared/DUT/ram_data(50) -radix decimal} {/tb_infrared/DUT/ram_data(51) -radix decimal} {/tb_infrared/DUT/ram_data(52) -radix decimal} {/tb_infrared/DUT/ram_data(53) -radix decimal} {/tb_infrared/DUT/ram_data(54) -radix decimal} {/tb_infrared/DUT/ram_data(55) -radix decimal} {/tb_infrared/DUT/ram_data(56) -radix decimal} {/tb_infrared/DUT/ram_data(57) -radix decimal} {/tb_infrared/DUT/ram_data(58) -radix decimal} {/tb_infrared/DUT/ram_data(59) -radix decimal} {/tb_infrared/DUT/ram_data(60) -radix decimal} {/tb_infrared/DUT/ram_data(61) -radix decimal} {/tb_infrared/DUT/ram_data(62) -radix decimal} {/tb_infrared/DUT/ram_data(63) -radix decimal} {/tb_infrared/DUT/ram_data(64) -radix decimal} {/tb_infrared/DUT/ram_data(65) -radix decimal} {/tb_infrared/DUT/ram_data(66) -radix decimal} {/tb_infrared/DUT/ram_data(67) -radix decimal} {/tb_infrared/DUT/ram_data(68) -radix decimal} {/tb_infrared/DUT/ram_data(69) -radix decimal} {/tb_infrared/DUT/ram_data(70) -radix decimal} {/tb_infrared/DUT/ram_data(71) -radix decimal} {/tb_infrared/DUT/ram_data(72) -radix decimal} {/tb_infrared/DUT/ram_data(73) -radix decimal} {/tb_infrared/DUT/ram_data(74) -radix decimal} {/tb_infrared/DUT/ram_data(75) -radix decimal} {/tb_infrared/DUT/ram_data(76) -radix decimal} {/tb_infrared/DUT/ram_data(77) -radix decimal} {/tb_infrared/DUT/ram_data(78) -radix decimal} {/tb_infrared/DUT/ram_data(79) -radix decimal} {/tb_infrared/DUT/ram_data(80) -radix decimal} {/tb_infrared/DUT/ram_data(81) -radix decimal} {/tb_infrared/DUT/ram_data(82) -radix decimal} {/tb_infrared/DUT/ram_data(83) -radix decimal} {/tb_infrared/DUT/ram_data(84) -radix decimal} {/tb_infrared/DUT/ram_data(85) -radix decimal} {/tb_infrared/DUT/ram_data(86) -radix decimal} {/tb_infrared/DUT/ram_data(87) -radix decimal} {/tb_infrared/DUT/ram_data(88) -radix decimal} {/tb_infrared/DUT/ram_data(89) -radix decimal} {/tb_infrared/DUT/ram_data(90) -radix decimal} {/tb_infrared/DUT/ram_data(91) -radix decimal} {/tb_infrared/DUT/ram_data(92) -radix decimal} {/tb_infrared/DUT/ram_data(93) -radix decimal} {/tb_infrared/DUT/ram_data(94) -radix decimal} {/tb_infrared/DUT/ram_data(95) -radix decimal} {/tb_infrared/DUT/ram_data(96) -radix decimal} {/tb_infrared/DUT/ram_data(97) -radix decimal} {/tb_infrared/DUT/ram_data(98) -radix decimal} {/tb_infrared/DUT/ram_data(99) -radix decimal} {/tb_infrared/DUT/ram_data(100) -radix decimal} {/tb_infrared/DUT/ram_data(101) -radix decimal} {/tb_infrared/DUT/ram_data(102) -radix decimal} {/tb_infrared/DUT/ram_data(103) -radix decimal} {/tb_infrared/DUT/ram_data(104) -radix decimal} {/tb_infrared/DUT/ram_data(105) -radix decimal} {/tb_infrared/DUT/ram_data(106) -radix decimal} {/tb_infrared/DUT/ram_data(107) -radix decimal} {/tb_infrared/DUT/ram_data(108) -radix decimal} {/tb_infrared/DUT/ram_data(109) -radix decimal} {/tb_infrared/DUT/ram_data(110) -radix decimal} {/tb_infrared/DUT/ram_data(111) -radix decimal} {/tb_infrared/DUT/ram_data(112) -radix decimal} {/tb_infrared/DUT/ram_data(113) -radix decimal} {/tb_infrared/DUT/ram_data(114) -radix decimal} {/tb_infrared/DUT/ram_data(115) -radix decimal} {/tb_infrared/DUT/ram_data(116) -radix decimal} {/tb_infrared/DUT/ram_data(117) -radix decimal} {/tb_infrared/DUT/ram_data(118) -radix decimal} {/tb_infrared/DUT/ram_data(119) -radix decimal} {/tb_infrared/DUT/ram_data(120) -radix decimal} {/tb_infrared/DUT/ram_data(121) -radix decimal} {/tb_infrared/DUT/ram_data(122) -radix decimal} {/tb_infrared/DUT/ram_data(123) -radix decimal} {/tb_infrared/DUT/ram_data(124) -radix decimal} {/tb_infrared/DUT/ram_data(125) -radix decimal} {/tb_infrared/DUT/ram_data(126) -radix decimal} {/tb_infrared/DUT/ram_data(127) -radix decimal} {/tb_infrared/DUT/ram_data(128) -radix decimal} {/tb_infrared/DUT/ram_data(129) -radix decimal} {/tb_infrared/DUT/ram_data(130) -radix decimal} {/tb_infrared/DUT/ram_data(131) -radix decimal} {/tb_infrared/DUT/ram_data(132) -radix decimal} {/tb_infrared/DUT/ram_data(133) -radix decimal} {/tb_infrared/DUT/ram_data(134) -radix decimal} {/tb_infrared/DUT/ram_data(135) -radix decimal} {/tb_infrared/DUT/ram_data(136) -radix decimal} {/tb_infrared/DUT/ram_data(137) -radix decimal} {/tb_infrared/DUT/ram_data(138) -radix decimal} {/tb_infrared/DUT/ram_data(139) -radix decimal} {/tb_infrared/DUT/ram_data(140) -radix decimal} {/tb_infrared/DUT/ram_data(141) -radix decimal} {/tb_infrared/DUT/ram_data(142) -radix decimal} {/tb_infrared/DUT/ram_data(143) -radix decimal} {/tb_infrared/DUT/ram_data(144) -radix decimal} {/tb_infrared/DUT/ram_data(145) -radix decimal} {/tb_infrared/DUT/ram_data(146) -radix decimal} {/tb_infrared/DUT/ram_data(147) -radix decimal} {/tb_infrared/DUT/ram_data(148) -radix decimal} {/tb_infrared/DUT/ram_data(149) -radix decimal} {/tb_infrared/DUT/ram_data(150) -radix decimal} {/tb_infrared/DUT/ram_data(151) -radix decimal} {/tb_infrared/DUT/ram_data(152) -radix decimal} {/tb_infrared/DUT/ram_data(153) -radix decimal} {/tb_infrared/DUT/ram_data(154) -radix decimal} {/tb_infrared/DUT/ram_data(155) -radix decimal} {/tb_infrared/DUT/ram_data(156) -radix decimal} {/tb_infrared/DUT/ram_data(157) -radix decimal} {/tb_infrared/DUT/ram_data(158) -radix decimal} {/tb_infrared/DUT/ram_data(159) -radix decimal} {/tb_infrared/DUT/ram_data(160) -radix decimal} {/tb_infrared/DUT/ram_data(161) -radix decimal} {/tb_infrared/DUT/ram_data(162) -radix decimal} {/tb_infrared/DUT/ram_data(163) -radix decimal} {/tb_infrared/DUT/ram_data(164) -radix decimal} {/tb_infrared/DUT/ram_data(165) -radix decimal} {/tb_infrared/DUT/ram_data(166) -radix decimal} {/tb_infrared/DUT/ram_data(167) -radix decimal} {/tb_infrared/DUT/ram_data(168) -radix decimal} {/tb_infrared/DUT/ram_data(169) -radix decimal} {/tb_infrared/DUT/ram_data(170) -radix decimal} {/tb_infrared/DUT/ram_data(171) -radix decimal} {/tb_infrared/DUT/ram_data(172) -radix decimal} {/tb_infrared/DUT/ram_data(173) -radix decimal} {/tb_infrared/DUT/ram_data(174) -radix decimal} {/tb_infrared/DUT/ram_data(175) -radix decimal} {/tb_infrared/DUT/ram_data(176) -radix decimal} {/tb_infrared/DUT/ram_data(177) -radix decimal} {/tb_infrared/DUT/ram_data(178) -radix decimal} {/tb_infrared/DUT/ram_data(179) -radix decimal} {/tb_infrared/DUT/ram_data(180) -radix decimal} {/tb_infrared/DUT/ram_data(181) -radix decimal} {/tb_infrared/DUT/ram_data(182) -radix decimal} {/tb_infrared/DUT/ram_data(183) -radix decimal} {/tb_infrared/DUT/ram_data(184) -radix decimal} {/tb_infrared/DUT/ram_data(185) -radix decimal} {/tb_infrared/DUT/ram_data(186) -radix decimal} {/tb_infrared/DUT/ram_data(187) -radix decimal} {/tb_infrared/DUT/ram_data(188) -radix decimal} {/tb_infrared/DUT/ram_data(189) -radix decimal} {/tb_infrared/DUT/ram_data(190) -radix decimal} {/tb_infrared/DUT/ram_data(191) -radix decimal} {/tb_infrared/DUT/ram_data(192) -radix decimal} {/tb_infrared/DUT/ram_data(193) -radix decimal} {/tb_infrared/DUT/ram_data(194) -radix decimal} {/tb_infrared/DUT/ram_data(195) -radix decimal} {/tb_infrared/DUT/ram_data(196) -radix decimal} {/tb_infrared/DUT/ram_data(197) -radix decimal} {/tb_infrared/DUT/ram_data(198) -radix decimal} {/tb_infrared/DUT/ram_data(199) -radix decimal} {/tb_infrared/DUT/ram_data(200) -radix decimal} {/tb_infrared/DUT/ram_data(201) -radix decimal} {/tb_infrared/DUT/ram_data(202) -radix decimal} {/tb_infrared/DUT/ram_data(203) -radix decimal} {/tb_infrared/DUT/ram_data(204) -radix decimal} {/tb_infrared/DUT/ram_data(205) -radix decimal} {/tb_infrared/DUT/ram_data(206) -radix decimal} {/tb_infrared/DUT/ram_data(207) -radix decimal} {/tb_infrared/DUT/ram_data(208) -radix decimal} {/tb_infrared/DUT/ram_data(209) -radix decimal} {/tb_infrared/DUT/ram_data(210) -radix decimal} {/tb_infrared/DUT/ram_data(211) -radix decimal} {/tb_infrared/DUT/ram_data(212) -radix decimal} {/tb_infrared/DUT/ram_data(213) -radix decimal} {/tb_infrared/DUT/ram_data(214) -radix decimal} {/tb_infrared/DUT/ram_data(215) -radix decimal} {/tb_infrared/DUT/ram_data(216) -radix decimal} {/tb_infrared/DUT/ram_data(217) -radix decimal} {/tb_infrared/DUT/ram_data(218) -radix decimal} {/tb_infrared/DUT/ram_data(219) -radix decimal} {/tb_infrared/DUT/ram_data(220) -radix decimal} {/tb_infrared/DUT/ram_data(221) -radix decimal} {/tb_infrared/DUT/ram_data(222) -radix decimal} {/tb_infrared/DUT/ram_data(223) -radix decimal} {/tb_infrared/DUT/ram_data(224) -radix decimal} {/tb_infrared/DUT/ram_data(225) -radix decimal} {/tb_infrared/DUT/ram_data(226) -radix decimal} {/tb_infrared/DUT/ram_data(227) -radix decimal} {/tb_infrared/DUT/ram_data(228) -radix decimal} {/tb_infrared/DUT/ram_data(229) -radix decimal} {/tb_infrared/DUT/ram_data(230) -radix decimal} {/tb_infrared/DUT/ram_data(231) -radix decimal} {/tb_infrared/DUT/ram_data(232) -radix decimal} {/tb_infrared/DUT/ram_data(233) -radix decimal} {/tb_infrared/DUT/ram_data(234) -radix decimal} {/tb_infrared/DUT/ram_data(235) -radix decimal} {/tb_infrared/DUT/ram_data(236) -radix decimal} {/tb_infrared/DUT/ram_data(237) -radix decimal} {/tb_infrared/DUT/ram_data(238) -radix decimal} {/tb_infrared/DUT/ram_data(239) -radix decimal} {/tb_infrared/DUT/ram_data(240) -radix decimal} {/tb_infrared/DUT/ram_data(241) -radix decimal} {/tb_infrared/DUT/ram_data(242) -radix decimal} {/tb_infrared/DUT/ram_data(243) -radix decimal} {/tb_infrared/DUT/ram_data(244) -radix decimal} {/tb_infrared/DUT/ram_data(245) -radix decimal} {/tb_infrared/DUT/ram_data(246) -radix decimal} {/tb_infrared/DUT/ram_data(247) -radix decimal} {/tb_infrared/DUT/ram_data(248) -radix decimal} {/tb_infrared/DUT/ram_data(249) -radix decimal} {/tb_infrared/DUT/ram_data(250) -radix decimal} {/tb_infrared/DUT/ram_data(251) -radix decimal} {/tb_infrared/DUT/ram_data(252) -radix decimal} {/tb_infrared/DUT/ram_data(253) -radix decimal} {/tb_infrared/DUT/ram_data(254) -radix decimal} {/tb_infrared/DUT/ram_data(255) -radix decimal}} -expand -subitemconfig {/tb_infrared/DUT/ram_data(0) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(1) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(2) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(3) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(4) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(5) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(6) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(7) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(8) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(9) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(10) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(11) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(12) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(13) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(14) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(15) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(16) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(17) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(18) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(19) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(20) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(21) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(22) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(23) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(24) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(25) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(26) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(27) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(28) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(29) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(30) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(31) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(32) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(33) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(34) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(35) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(36) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(37) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(38) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(39) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(40) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(41) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(42) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(43) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(44) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(45) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(46) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(47) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(48) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(49) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(50) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(51) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(52) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(53) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(54) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(55) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(56) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(57) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(58) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(59) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(60) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(61) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(62) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(63) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(64) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(65) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(66) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(67) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(68) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(69) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(70) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(71) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(72) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(73) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(74) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(75) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(76) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(77) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(78) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(79) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(80) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(81) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(82) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(83) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(84) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(85) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(86) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(87) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(88) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(89) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(90) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(91) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(92) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(93) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(94) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(95) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(96) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(97) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(98) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(99) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(100) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(101) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(102) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(103) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(104) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(105) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(106) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(107) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(108) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(109) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(110) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(111) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(112) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(113) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(114) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(115) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(116) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(117) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(118) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(119) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(120) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(121) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(122) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(123) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(124) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(125) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(126) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(127) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(128) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(129) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(130) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(131) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(132) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(133) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(134) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(135) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(136) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(137) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(138) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(139) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(140) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(141) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(142) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(143) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(144) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(145) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(146) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(147) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(148) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(149) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(150) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(151) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(152) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(153) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(154) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(155) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(156) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(157) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(158) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(159) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(160) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(161) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(162) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(163) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(164) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(165) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(166) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(167) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(168) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(169) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(170) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(171) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(172) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(173) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(174) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(175) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(176) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(177) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(178) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(179) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(180) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(181) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(182) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(183) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(184) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(185) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(186) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(187) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(188) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(189) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(190) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(191) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(192) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(193) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(194) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(195) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(196) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(197) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(198) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(199) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(200) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(201) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(202) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(203) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(204) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(205) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(206) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(207) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(208) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(209) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(210) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(211) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(212) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(213) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(214) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(215) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(216) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(217) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(218) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(219) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(220) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(221) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(222) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(223) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(224) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(225) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(226) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(227) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(228) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(229) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(230) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(231) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(232) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(233) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(234) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(235) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(236) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(237) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(238) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(239) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(240) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(241) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(242) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(243) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(244) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(245) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(246) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(247) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(248) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(249) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(250) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(251) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(252) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(253) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(254) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(255) {-height 16 -radix decimal}} /tb_infrared/DUT/ram_data add wave -noupdate -divider timestamp_counter add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/clk_i add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/rst_n_i @@ -55,9 +57,9 @@ add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count_o add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/overflow TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 1} {21970000 ps} 0} {{Cursor 2} {241876 ps} 0} +WaveRestoreCursors {{Cursor 1} {23170000 ps} 0} {{Cursor 2} {470000 ps} 0} quietly wave cursor active 1 -configure wave -namecolwidth 415 +configure wave -namecolwidth 324 configure wave -valuecolwidth 164 configure wave -justifyvalue left configure wave -signalnamewidth 0 @@ -71,4 +73,4 @@ configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits ns update -WaveRestoreZoom {0 ps} {31500 ns} +WaveRestoreZoom {23059202 ps} {23340798 ps} From dbc449946734d7f74ee12bb93fbe0c766037240e Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Fri, 21 Feb 2020 18:27:29 +0100 Subject: [PATCH 24/41] fix addresses; tb read all regs --- hdl/components/infrared/infrared.vhd | 14 +++++++------- hdl/components/infrared/tb_infrared.vhd | 19 ++++++++++++++++--- hdl/components/infrared/wave.do | 4 ++-- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index 2857292..7837dc7 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -217,17 +217,17 @@ begin -- architecture rtl ctrl_readdata <= (others => '0'); irq_reset <= '0'; - -- addresses higher 255 - case (to_integer(ctrl_addr)) is - when 1 => -- magic number + -- addresses lower 255 are reserved for RAM + case (to_integer(unsigned(avs_s0_address))) is + when 256 => -- magic number ctrl_readdata <= x"ABCD1234"; - when 2 => -- magic number + when 257 => -- magic number ctrl_readdata <= x"10101010"; - when 3 => -- magic number + when 258 => -- magic number ctrl_readdata <= x"22222222"; - when 4 => -- magic number + when 259 => -- magic number ctrl_readdata <= x"33333333"; - when 5 => -- read and clear irq status + when 260 => -- read and clear irq status ctrl_readdata(0) <= irq_active; irq_reset <= '1'; when others => diff --git a/hdl/components/infrared/tb_infrared.vhd b/hdl/components/infrared/tb_infrared.vhd index e264b7a..2da9dbe 100644 --- a/hdl/components/infrared/tb_infrared.vhd +++ b/hdl/components/infrared/tb_infrared.vhd @@ -61,8 +61,8 @@ begin -- architecture bhv report "(MWURM) IRQ occured (end of received IR sequence)." severity note; wait for 10 * clk_cycle_duration_c; - -- Read data (magic numbers only) - read_magic_numbers : for i in 256 to 266 loop + -- Read data (RAM) + read_ram_data : for i in 0 to 255 loop avs_s0_address <= std_logic_vector(to_unsigned(i, avs_s0_address'length)); avs_s0_read <= '1'; @@ -70,7 +70,20 @@ begin -- architecture bhv wait until clk <= '0'; wait until clk <= '1'; wait until clk <= '0'; - end loop read_magic_numbers; + end loop read_ram_data; + + wait for 20 * clk_cycle_duration_c; + + -- Read data (control and status registers) + read_ctrl_status_data : for i in 256 to 266 loop + avs_s0_address <= std_logic_vector(to_unsigned(i, avs_s0_address'length)); + avs_s0_read <= '1'; + + wait until clk <= '1'; + wait until clk <= '0'; + wait until clk <= '1'; + wait until clk <= '0'; + end loop read_ctrl_status_data; wait; end process test_proc; diff --git a/hdl/components/infrared/wave.do b/hdl/components/infrared/wave.do index 0e7823d..c2bb6a3 100644 --- a/hdl/components/infrared/wave.do +++ b/hdl/components/infrared/wave.do @@ -57,7 +57,7 @@ add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count_o add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/overflow TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 1} {23170000 ps} 0} {{Cursor 2} {470000 ps} 0} +WaveRestoreCursors {{Cursor 1} {34010000 ps} 0} {{Cursor 2} {470000 ps} 0} quietly wave cursor active 1 configure wave -namecolwidth 324 configure wave -valuecolwidth 164 @@ -73,4 +73,4 @@ configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits ns update -WaveRestoreZoom {23059202 ps} {23340798 ps} +WaveRestoreZoom {0 ps} {36120 ns} From 03982613a1f16a93fad7140d9f808f67d541e4de Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Mon, 24 Feb 2020 07:48:47 +0100 Subject: [PATCH 25/41] extend sim time --- hdl/components/infrared/comp_sim.do | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdl/components/infrared/comp_sim.do b/hdl/components/infrared/comp_sim.do index 3c2f7d2..4bdd6bd 100644 --- a/hdl/components/infrared/comp_sim.do +++ b/hdl/components/infrared/comp_sim.do @@ -16,6 +16,6 @@ echo "Sim: log signals" log -r /* echo "Sim: run ..." -run 30 us +run 45 us catch {do wave-restore.do} From 918dc420110f32684ff0ccc050eedfb2e59f8afb Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Mon, 24 Feb 2020 10:29:12 +0100 Subject: [PATCH 26/41] fix interrupt generation --- hdl/components/infrared/comp_sim.do | 3 ++- hdl/components/infrared/infrared.vhd | 2 +- hdl/components/infrared/tb_infrared.vhd | 7 +++++++ hdl/components/infrared/wave.do | 9 +++++---- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/hdl/components/infrared/comp_sim.do b/hdl/components/infrared/comp_sim.do index 4bdd6bd..0bd20f5 100644 --- a/hdl/components/infrared/comp_sim.do +++ b/hdl/components/infrared/comp_sim.do @@ -4,7 +4,8 @@ do comp.do echo "Sim: load design" set unit tb_infrared vsim -novopt -wlfdeleteonquit \ - work.${unit}(Bhv) + work.${unit}(Bhv) \ + +nowarn3116 set tb ${unit} set dut ${tb}/DUT diff --git a/hdl/components/infrared/infrared.vhd b/hdl/components/infrared/infrared.vhd index 7837dc7..c91cba4 100644 --- a/hdl/components/infrared/infrared.vhd +++ b/hdl/components/infrared/infrared.vhd @@ -120,7 +120,7 @@ begin -- architecture rtl rising <= '1' when ir_rx(1)='0' and ir_rx(0)='1' else '0'; falling <= '1' when ir_rx(1)='1' and ir_rx(0)='0' else '0'; ctrl_access <= '1' when to_integer(unsigned(avs_s0_address)) > ram_t'length-1 else '0'; - end_of_sequence <= '1' when to_integer(ram_addr) > 0 and ir_rx(1) = '1' else '0'; + end_of_sequence <= '1' when to_integer(ram_addr) > 5 and ir_rx(1) = '1' else '0'; ctrl_addr <= unsigned(avs_s0_address(ctrl_addr'range)); ----------------------------------------------------------------------------- diff --git a/hdl/components/infrared/tb_infrared.vhd b/hdl/components/infrared/tb_infrared.vhd index 2da9dbe..6dacb80 100644 --- a/hdl/components/infrared/tb_infrared.vhd +++ b/hdl/components/infrared/tb_infrared.vhd @@ -50,12 +50,19 @@ begin -- architecture bhv begin wait for reset_duration_c + 5 ns; + -- Default sensor value (idle) + ir_rx <= '1'; + wait for 200 * clk_cycle_duration_c; + -- Generate infrared input signal ir_rx_input : for i in 0 to 10 loop ir_rx <= not ir_rx; wait for 10 * clk_cycle_duration_c; end loop; + -- Default sensor value (idle) + ir_rx <= '1'; + -- Wait for interrupt generation (end of recieved IR sequence) wait until irq = '1'; report "(MWURM) IRQ occured (end of received IR sequence)." severity note; diff --git a/hdl/components/infrared/wave.do b/hdl/components/infrared/wave.do index c2bb6a3..8c140cc 100644 --- a/hdl/components/infrared/wave.do +++ b/hdl/components/infrared/wave.do @@ -47,7 +47,8 @@ add wave -noupdate /tb_infrared/DUT/rising add wave -noupdate /tb_infrared/DUT/falling add wave -noupdate /tb_infrared/DUT/recording_stopped add wave -noupdate -radix decimal /tb_infrared/DUT/timestamp -add wave -noupdate -radix decimal -childformat {{/tb_infrared/DUT/ram_data(0) -radix decimal} {/tb_infrared/DUT/ram_data(1) -radix decimal} {/tb_infrared/DUT/ram_data(2) -radix decimal} {/tb_infrared/DUT/ram_data(3) -radix decimal} {/tb_infrared/DUT/ram_data(4) -radix decimal} {/tb_infrared/DUT/ram_data(5) -radix decimal} {/tb_infrared/DUT/ram_data(6) -radix decimal} {/tb_infrared/DUT/ram_data(7) -radix decimal} {/tb_infrared/DUT/ram_data(8) -radix decimal} {/tb_infrared/DUT/ram_data(9) -radix decimal} {/tb_infrared/DUT/ram_data(10) -radix decimal} {/tb_infrared/DUT/ram_data(11) -radix decimal} {/tb_infrared/DUT/ram_data(12) -radix decimal} {/tb_infrared/DUT/ram_data(13) -radix decimal} {/tb_infrared/DUT/ram_data(14) -radix decimal} {/tb_infrared/DUT/ram_data(15) -radix decimal} {/tb_infrared/DUT/ram_data(16) -radix decimal} {/tb_infrared/DUT/ram_data(17) -radix decimal} {/tb_infrared/DUT/ram_data(18) -radix decimal} {/tb_infrared/DUT/ram_data(19) -radix decimal} {/tb_infrared/DUT/ram_data(20) -radix decimal} {/tb_infrared/DUT/ram_data(21) -radix decimal} {/tb_infrared/DUT/ram_data(22) -radix decimal} {/tb_infrared/DUT/ram_data(23) -radix decimal} {/tb_infrared/DUT/ram_data(24) -radix decimal} {/tb_infrared/DUT/ram_data(25) -radix decimal} {/tb_infrared/DUT/ram_data(26) -radix decimal} {/tb_infrared/DUT/ram_data(27) -radix decimal} {/tb_infrared/DUT/ram_data(28) -radix decimal} {/tb_infrared/DUT/ram_data(29) -radix decimal} {/tb_infrared/DUT/ram_data(30) -radix decimal} {/tb_infrared/DUT/ram_data(31) -radix decimal} {/tb_infrared/DUT/ram_data(32) -radix decimal} {/tb_infrared/DUT/ram_data(33) -radix decimal} {/tb_infrared/DUT/ram_data(34) -radix decimal} {/tb_infrared/DUT/ram_data(35) -radix decimal} {/tb_infrared/DUT/ram_data(36) -radix decimal} {/tb_infrared/DUT/ram_data(37) -radix decimal} {/tb_infrared/DUT/ram_data(38) -radix decimal} {/tb_infrared/DUT/ram_data(39) -radix decimal} {/tb_infrared/DUT/ram_data(40) -radix decimal} {/tb_infrared/DUT/ram_data(41) -radix decimal} {/tb_infrared/DUT/ram_data(42) -radix decimal} {/tb_infrared/DUT/ram_data(43) -radix decimal} {/tb_infrared/DUT/ram_data(44) -radix decimal} {/tb_infrared/DUT/ram_data(45) -radix decimal} {/tb_infrared/DUT/ram_data(46) -radix decimal} {/tb_infrared/DUT/ram_data(47) -radix decimal} {/tb_infrared/DUT/ram_data(48) -radix decimal} {/tb_infrared/DUT/ram_data(49) -radix decimal} {/tb_infrared/DUT/ram_data(50) -radix decimal} {/tb_infrared/DUT/ram_data(51) -radix decimal} {/tb_infrared/DUT/ram_data(52) -radix decimal} {/tb_infrared/DUT/ram_data(53) -radix decimal} {/tb_infrared/DUT/ram_data(54) -radix decimal} {/tb_infrared/DUT/ram_data(55) -radix decimal} {/tb_infrared/DUT/ram_data(56) -radix decimal} {/tb_infrared/DUT/ram_data(57) -radix decimal} {/tb_infrared/DUT/ram_data(58) -radix decimal} {/tb_infrared/DUT/ram_data(59) -radix decimal} {/tb_infrared/DUT/ram_data(60) -radix decimal} {/tb_infrared/DUT/ram_data(61) -radix decimal} {/tb_infrared/DUT/ram_data(62) -radix decimal} {/tb_infrared/DUT/ram_data(63) -radix decimal} {/tb_infrared/DUT/ram_data(64) -radix decimal} {/tb_infrared/DUT/ram_data(65) -radix decimal} {/tb_infrared/DUT/ram_data(66) -radix decimal} {/tb_infrared/DUT/ram_data(67) -radix decimal} {/tb_infrared/DUT/ram_data(68) -radix decimal} {/tb_infrared/DUT/ram_data(69) -radix decimal} {/tb_infrared/DUT/ram_data(70) -radix decimal} {/tb_infrared/DUT/ram_data(71) -radix decimal} {/tb_infrared/DUT/ram_data(72) -radix decimal} {/tb_infrared/DUT/ram_data(73) -radix decimal} {/tb_infrared/DUT/ram_data(74) -radix decimal} {/tb_infrared/DUT/ram_data(75) -radix decimal} {/tb_infrared/DUT/ram_data(76) -radix decimal} {/tb_infrared/DUT/ram_data(77) -radix decimal} {/tb_infrared/DUT/ram_data(78) -radix decimal} {/tb_infrared/DUT/ram_data(79) -radix decimal} {/tb_infrared/DUT/ram_data(80) -radix decimal} {/tb_infrared/DUT/ram_data(81) -radix decimal} {/tb_infrared/DUT/ram_data(82) -radix decimal} {/tb_infrared/DUT/ram_data(83) -radix decimal} {/tb_infrared/DUT/ram_data(84) -radix decimal} {/tb_infrared/DUT/ram_data(85) -radix decimal} {/tb_infrared/DUT/ram_data(86) -radix decimal} {/tb_infrared/DUT/ram_data(87) -radix decimal} {/tb_infrared/DUT/ram_data(88) -radix decimal} {/tb_infrared/DUT/ram_data(89) -radix decimal} {/tb_infrared/DUT/ram_data(90) -radix decimal} {/tb_infrared/DUT/ram_data(91) -radix decimal} {/tb_infrared/DUT/ram_data(92) -radix decimal} {/tb_infrared/DUT/ram_data(93) -radix decimal} {/tb_infrared/DUT/ram_data(94) -radix decimal} {/tb_infrared/DUT/ram_data(95) -radix decimal} {/tb_infrared/DUT/ram_data(96) -radix decimal} {/tb_infrared/DUT/ram_data(97) -radix decimal} {/tb_infrared/DUT/ram_data(98) -radix decimal} {/tb_infrared/DUT/ram_data(99) -radix decimal} {/tb_infrared/DUT/ram_data(100) -radix decimal} {/tb_infrared/DUT/ram_data(101) -radix decimal} {/tb_infrared/DUT/ram_data(102) -radix decimal} {/tb_infrared/DUT/ram_data(103) -radix decimal} {/tb_infrared/DUT/ram_data(104) -radix decimal} {/tb_infrared/DUT/ram_data(105) -radix decimal} {/tb_infrared/DUT/ram_data(106) -radix decimal} {/tb_infrared/DUT/ram_data(107) -radix decimal} {/tb_infrared/DUT/ram_data(108) -radix decimal} {/tb_infrared/DUT/ram_data(109) -radix decimal} {/tb_infrared/DUT/ram_data(110) -radix decimal} {/tb_infrared/DUT/ram_data(111) -radix decimal} {/tb_infrared/DUT/ram_data(112) -radix decimal} {/tb_infrared/DUT/ram_data(113) -radix decimal} {/tb_infrared/DUT/ram_data(114) -radix decimal} {/tb_infrared/DUT/ram_data(115) -radix decimal} {/tb_infrared/DUT/ram_data(116) -radix decimal} {/tb_infrared/DUT/ram_data(117) -radix decimal} {/tb_infrared/DUT/ram_data(118) -radix decimal} {/tb_infrared/DUT/ram_data(119) -radix decimal} {/tb_infrared/DUT/ram_data(120) -radix decimal} {/tb_infrared/DUT/ram_data(121) -radix decimal} {/tb_infrared/DUT/ram_data(122) -radix decimal} {/tb_infrared/DUT/ram_data(123) -radix decimal} {/tb_infrared/DUT/ram_data(124) -radix decimal} {/tb_infrared/DUT/ram_data(125) -radix decimal} {/tb_infrared/DUT/ram_data(126) -radix decimal} {/tb_infrared/DUT/ram_data(127) -radix decimal} {/tb_infrared/DUT/ram_data(128) -radix decimal} {/tb_infrared/DUT/ram_data(129) -radix decimal} {/tb_infrared/DUT/ram_data(130) -radix decimal} {/tb_infrared/DUT/ram_data(131) -radix decimal} {/tb_infrared/DUT/ram_data(132) -radix decimal} {/tb_infrared/DUT/ram_data(133) -radix decimal} {/tb_infrared/DUT/ram_data(134) -radix decimal} {/tb_infrared/DUT/ram_data(135) -radix decimal} {/tb_infrared/DUT/ram_data(136) -radix decimal} {/tb_infrared/DUT/ram_data(137) -radix decimal} {/tb_infrared/DUT/ram_data(138) -radix decimal} {/tb_infrared/DUT/ram_data(139) -radix decimal} {/tb_infrared/DUT/ram_data(140) -radix decimal} {/tb_infrared/DUT/ram_data(141) -radix decimal} {/tb_infrared/DUT/ram_data(142) -radix decimal} {/tb_infrared/DUT/ram_data(143) -radix decimal} {/tb_infrared/DUT/ram_data(144) -radix decimal} {/tb_infrared/DUT/ram_data(145) -radix decimal} {/tb_infrared/DUT/ram_data(146) -radix decimal} {/tb_infrared/DUT/ram_data(147) -radix decimal} {/tb_infrared/DUT/ram_data(148) -radix decimal} {/tb_infrared/DUT/ram_data(149) -radix decimal} {/tb_infrared/DUT/ram_data(150) -radix decimal} {/tb_infrared/DUT/ram_data(151) -radix decimal} {/tb_infrared/DUT/ram_data(152) -radix decimal} {/tb_infrared/DUT/ram_data(153) -radix decimal} {/tb_infrared/DUT/ram_data(154) -radix decimal} {/tb_infrared/DUT/ram_data(155) -radix decimal} {/tb_infrared/DUT/ram_data(156) -radix decimal} {/tb_infrared/DUT/ram_data(157) -radix decimal} {/tb_infrared/DUT/ram_data(158) -radix decimal} {/tb_infrared/DUT/ram_data(159) -radix decimal} {/tb_infrared/DUT/ram_data(160) -radix decimal} {/tb_infrared/DUT/ram_data(161) -radix decimal} {/tb_infrared/DUT/ram_data(162) -radix decimal} {/tb_infrared/DUT/ram_data(163) -radix decimal} {/tb_infrared/DUT/ram_data(164) -radix decimal} {/tb_infrared/DUT/ram_data(165) -radix decimal} {/tb_infrared/DUT/ram_data(166) -radix decimal} {/tb_infrared/DUT/ram_data(167) -radix decimal} {/tb_infrared/DUT/ram_data(168) -radix decimal} {/tb_infrared/DUT/ram_data(169) -radix decimal} {/tb_infrared/DUT/ram_data(170) -radix decimal} {/tb_infrared/DUT/ram_data(171) -radix decimal} {/tb_infrared/DUT/ram_data(172) -radix decimal} {/tb_infrared/DUT/ram_data(173) -radix decimal} {/tb_infrared/DUT/ram_data(174) -radix decimal} {/tb_infrared/DUT/ram_data(175) -radix decimal} {/tb_infrared/DUT/ram_data(176) -radix decimal} {/tb_infrared/DUT/ram_data(177) -radix decimal} {/tb_infrared/DUT/ram_data(178) -radix decimal} {/tb_infrared/DUT/ram_data(179) -radix decimal} {/tb_infrared/DUT/ram_data(180) -radix decimal} {/tb_infrared/DUT/ram_data(181) -radix decimal} {/tb_infrared/DUT/ram_data(182) -radix decimal} {/tb_infrared/DUT/ram_data(183) -radix decimal} {/tb_infrared/DUT/ram_data(184) -radix decimal} {/tb_infrared/DUT/ram_data(185) -radix decimal} {/tb_infrared/DUT/ram_data(186) -radix decimal} {/tb_infrared/DUT/ram_data(187) -radix decimal} {/tb_infrared/DUT/ram_data(188) -radix decimal} {/tb_infrared/DUT/ram_data(189) -radix decimal} {/tb_infrared/DUT/ram_data(190) -radix decimal} {/tb_infrared/DUT/ram_data(191) -radix decimal} {/tb_infrared/DUT/ram_data(192) -radix decimal} {/tb_infrared/DUT/ram_data(193) -radix decimal} {/tb_infrared/DUT/ram_data(194) -radix decimal} {/tb_infrared/DUT/ram_data(195) -radix decimal} {/tb_infrared/DUT/ram_data(196) -radix decimal} {/tb_infrared/DUT/ram_data(197) -radix decimal} {/tb_infrared/DUT/ram_data(198) -radix decimal} {/tb_infrared/DUT/ram_data(199) -radix decimal} {/tb_infrared/DUT/ram_data(200) -radix decimal} {/tb_infrared/DUT/ram_data(201) -radix decimal} {/tb_infrared/DUT/ram_data(202) -radix decimal} {/tb_infrared/DUT/ram_data(203) -radix decimal} {/tb_infrared/DUT/ram_data(204) -radix decimal} {/tb_infrared/DUT/ram_data(205) -radix decimal} {/tb_infrared/DUT/ram_data(206) -radix decimal} {/tb_infrared/DUT/ram_data(207) -radix decimal} {/tb_infrared/DUT/ram_data(208) -radix decimal} {/tb_infrared/DUT/ram_data(209) -radix decimal} {/tb_infrared/DUT/ram_data(210) -radix decimal} {/tb_infrared/DUT/ram_data(211) -radix decimal} {/tb_infrared/DUT/ram_data(212) -radix decimal} {/tb_infrared/DUT/ram_data(213) -radix decimal} {/tb_infrared/DUT/ram_data(214) -radix decimal} {/tb_infrared/DUT/ram_data(215) -radix decimal} {/tb_infrared/DUT/ram_data(216) -radix decimal} {/tb_infrared/DUT/ram_data(217) -radix decimal} {/tb_infrared/DUT/ram_data(218) -radix decimal} {/tb_infrared/DUT/ram_data(219) -radix decimal} {/tb_infrared/DUT/ram_data(220) -radix decimal} {/tb_infrared/DUT/ram_data(221) -radix decimal} {/tb_infrared/DUT/ram_data(222) -radix decimal} {/tb_infrared/DUT/ram_data(223) -radix decimal} {/tb_infrared/DUT/ram_data(224) -radix decimal} {/tb_infrared/DUT/ram_data(225) -radix decimal} {/tb_infrared/DUT/ram_data(226) -radix decimal} {/tb_infrared/DUT/ram_data(227) -radix decimal} {/tb_infrared/DUT/ram_data(228) -radix decimal} {/tb_infrared/DUT/ram_data(229) -radix decimal} {/tb_infrared/DUT/ram_data(230) -radix decimal} {/tb_infrared/DUT/ram_data(231) -radix decimal} {/tb_infrared/DUT/ram_data(232) -radix decimal} {/tb_infrared/DUT/ram_data(233) -radix decimal} {/tb_infrared/DUT/ram_data(234) -radix decimal} {/tb_infrared/DUT/ram_data(235) -radix decimal} {/tb_infrared/DUT/ram_data(236) -radix decimal} {/tb_infrared/DUT/ram_data(237) -radix decimal} {/tb_infrared/DUT/ram_data(238) -radix decimal} {/tb_infrared/DUT/ram_data(239) -radix decimal} {/tb_infrared/DUT/ram_data(240) -radix decimal} {/tb_infrared/DUT/ram_data(241) -radix decimal} {/tb_infrared/DUT/ram_data(242) -radix decimal} {/tb_infrared/DUT/ram_data(243) -radix decimal} {/tb_infrared/DUT/ram_data(244) -radix decimal} {/tb_infrared/DUT/ram_data(245) -radix decimal} {/tb_infrared/DUT/ram_data(246) -radix decimal} {/tb_infrared/DUT/ram_data(247) -radix decimal} {/tb_infrared/DUT/ram_data(248) -radix decimal} {/tb_infrared/DUT/ram_data(249) -radix decimal} {/tb_infrared/DUT/ram_data(250) -radix decimal} {/tb_infrared/DUT/ram_data(251) -radix decimal} {/tb_infrared/DUT/ram_data(252) -radix decimal} {/tb_infrared/DUT/ram_data(253) -radix decimal} {/tb_infrared/DUT/ram_data(254) -radix decimal} {/tb_infrared/DUT/ram_data(255) -radix decimal}} -expand -subitemconfig {/tb_infrared/DUT/ram_data(0) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(1) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(2) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(3) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(4) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(5) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(6) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(7) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(8) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(9) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(10) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(11) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(12) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(13) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(14) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(15) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(16) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(17) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(18) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(19) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(20) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(21) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(22) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(23) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(24) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(25) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(26) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(27) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(28) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(29) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(30) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(31) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(32) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(33) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(34) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(35) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(36) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(37) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(38) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(39) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(40) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(41) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(42) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(43) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(44) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(45) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(46) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(47) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(48) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(49) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(50) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(51) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(52) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(53) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(54) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(55) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(56) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(57) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(58) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(59) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(60) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(61) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(62) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(63) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(64) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(65) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(66) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(67) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(68) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(69) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(70) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(71) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(72) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(73) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(74) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(75) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(76) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(77) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(78) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(79) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(80) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(81) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(82) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(83) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(84) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(85) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(86) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(87) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(88) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(89) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(90) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(91) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(92) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(93) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(94) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(95) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(96) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(97) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(98) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(99) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(100) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(101) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(102) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(103) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(104) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(105) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(106) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(107) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(108) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(109) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(110) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(111) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(112) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(113) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(114) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(115) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(116) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(117) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(118) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(119) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(120) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(121) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(122) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(123) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(124) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(125) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(126) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(127) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(128) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(129) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(130) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(131) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(132) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(133) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(134) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(135) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(136) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(137) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(138) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(139) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(140) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(141) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(142) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(143) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(144) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(145) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(146) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(147) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(148) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(149) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(150) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(151) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(152) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(153) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(154) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(155) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(156) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(157) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(158) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(159) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(160) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(161) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(162) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(163) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(164) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(165) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(166) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(167) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(168) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(169) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(170) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(171) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(172) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(173) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(174) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(175) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(176) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(177) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(178) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(179) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(180) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(181) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(182) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(183) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(184) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(185) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(186) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(187) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(188) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(189) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(190) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(191) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(192) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(193) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(194) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(195) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(196) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(197) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(198) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(199) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(200) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(201) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(202) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(203) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(204) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(205) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(206) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(207) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(208) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(209) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(210) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(211) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(212) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(213) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(214) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(215) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(216) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(217) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(218) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(219) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(220) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(221) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(222) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(223) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(224) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(225) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(226) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(227) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(228) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(229) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(230) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(231) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(232) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(233) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(234) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(235) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(236) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(237) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(238) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(239) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(240) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(241) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(242) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(243) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(244) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(245) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(246) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(247) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(248) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(249) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(250) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(251) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(252) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(253) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(254) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(255) {-height 16 -radix decimal}} /tb_infrared/DUT/ram_data +add wave -noupdate /tb_infrared/DUT/end_of_sequence +add wave -noupdate -radix decimal -childformat {{/tb_infrared/DUT/ram_data(0) -radix decimal} {/tb_infrared/DUT/ram_data(1) -radix decimal} {/tb_infrared/DUT/ram_data(2) -radix decimal} {/tb_infrared/DUT/ram_data(3) -radix decimal} {/tb_infrared/DUT/ram_data(4) -radix decimal} {/tb_infrared/DUT/ram_data(5) -radix decimal} {/tb_infrared/DUT/ram_data(6) -radix decimal} {/tb_infrared/DUT/ram_data(7) -radix decimal} {/tb_infrared/DUT/ram_data(8) -radix decimal} {/tb_infrared/DUT/ram_data(9) -radix decimal} {/tb_infrared/DUT/ram_data(10) -radix decimal} {/tb_infrared/DUT/ram_data(11) -radix decimal} {/tb_infrared/DUT/ram_data(12) -radix decimal} {/tb_infrared/DUT/ram_data(13) -radix decimal} {/tb_infrared/DUT/ram_data(14) -radix decimal} {/tb_infrared/DUT/ram_data(15) -radix decimal} {/tb_infrared/DUT/ram_data(16) -radix decimal} {/tb_infrared/DUT/ram_data(17) -radix decimal} {/tb_infrared/DUT/ram_data(18) -radix decimal} {/tb_infrared/DUT/ram_data(19) -radix decimal} {/tb_infrared/DUT/ram_data(20) -radix decimal} {/tb_infrared/DUT/ram_data(21) -radix decimal} {/tb_infrared/DUT/ram_data(22) -radix decimal} {/tb_infrared/DUT/ram_data(23) -radix decimal} {/tb_infrared/DUT/ram_data(24) -radix decimal} {/tb_infrared/DUT/ram_data(25) -radix decimal} {/tb_infrared/DUT/ram_data(26) -radix decimal} {/tb_infrared/DUT/ram_data(27) -radix decimal} {/tb_infrared/DUT/ram_data(28) -radix decimal} {/tb_infrared/DUT/ram_data(29) -radix decimal} {/tb_infrared/DUT/ram_data(30) -radix decimal} {/tb_infrared/DUT/ram_data(31) -radix decimal} {/tb_infrared/DUT/ram_data(32) -radix decimal} {/tb_infrared/DUT/ram_data(33) -radix decimal} {/tb_infrared/DUT/ram_data(34) -radix decimal} {/tb_infrared/DUT/ram_data(35) -radix decimal} {/tb_infrared/DUT/ram_data(36) -radix decimal} {/tb_infrared/DUT/ram_data(37) -radix decimal} {/tb_infrared/DUT/ram_data(38) -radix decimal} {/tb_infrared/DUT/ram_data(39) -radix decimal} {/tb_infrared/DUT/ram_data(40) -radix decimal} {/tb_infrared/DUT/ram_data(41) -radix decimal} {/tb_infrared/DUT/ram_data(42) -radix decimal} {/tb_infrared/DUT/ram_data(43) -radix decimal} {/tb_infrared/DUT/ram_data(44) -radix decimal} {/tb_infrared/DUT/ram_data(45) -radix decimal} {/tb_infrared/DUT/ram_data(46) -radix decimal} {/tb_infrared/DUT/ram_data(47) -radix decimal} {/tb_infrared/DUT/ram_data(48) -radix decimal} {/tb_infrared/DUT/ram_data(49) -radix decimal} {/tb_infrared/DUT/ram_data(50) -radix decimal} {/tb_infrared/DUT/ram_data(51) -radix decimal} {/tb_infrared/DUT/ram_data(52) -radix decimal} {/tb_infrared/DUT/ram_data(53) -radix decimal} {/tb_infrared/DUT/ram_data(54) -radix decimal} {/tb_infrared/DUT/ram_data(55) -radix decimal} {/tb_infrared/DUT/ram_data(56) -radix decimal} {/tb_infrared/DUT/ram_data(57) -radix decimal} {/tb_infrared/DUT/ram_data(58) -radix decimal} {/tb_infrared/DUT/ram_data(59) -radix decimal} {/tb_infrared/DUT/ram_data(60) -radix decimal} {/tb_infrared/DUT/ram_data(61) -radix decimal} {/tb_infrared/DUT/ram_data(62) -radix decimal} {/tb_infrared/DUT/ram_data(63) -radix decimal} {/tb_infrared/DUT/ram_data(64) -radix decimal} {/tb_infrared/DUT/ram_data(65) -radix decimal} {/tb_infrared/DUT/ram_data(66) -radix decimal} {/tb_infrared/DUT/ram_data(67) -radix decimal} {/tb_infrared/DUT/ram_data(68) -radix decimal} {/tb_infrared/DUT/ram_data(69) -radix decimal} {/tb_infrared/DUT/ram_data(70) -radix decimal} {/tb_infrared/DUT/ram_data(71) -radix decimal} {/tb_infrared/DUT/ram_data(72) -radix decimal} {/tb_infrared/DUT/ram_data(73) -radix decimal} {/tb_infrared/DUT/ram_data(74) -radix decimal} {/tb_infrared/DUT/ram_data(75) -radix decimal} {/tb_infrared/DUT/ram_data(76) -radix decimal} {/tb_infrared/DUT/ram_data(77) -radix decimal} {/tb_infrared/DUT/ram_data(78) -radix decimal} {/tb_infrared/DUT/ram_data(79) -radix decimal} {/tb_infrared/DUT/ram_data(80) -radix decimal} {/tb_infrared/DUT/ram_data(81) -radix decimal} {/tb_infrared/DUT/ram_data(82) -radix decimal} {/tb_infrared/DUT/ram_data(83) -radix decimal} {/tb_infrared/DUT/ram_data(84) -radix decimal} {/tb_infrared/DUT/ram_data(85) -radix decimal} {/tb_infrared/DUT/ram_data(86) -radix decimal} {/tb_infrared/DUT/ram_data(87) -radix decimal} {/tb_infrared/DUT/ram_data(88) -radix decimal} {/tb_infrared/DUT/ram_data(89) -radix decimal} {/tb_infrared/DUT/ram_data(90) -radix decimal} {/tb_infrared/DUT/ram_data(91) -radix decimal} {/tb_infrared/DUT/ram_data(92) -radix decimal} {/tb_infrared/DUT/ram_data(93) -radix decimal} {/tb_infrared/DUT/ram_data(94) -radix decimal} {/tb_infrared/DUT/ram_data(95) -radix decimal} {/tb_infrared/DUT/ram_data(96) -radix decimal} {/tb_infrared/DUT/ram_data(97) -radix decimal} {/tb_infrared/DUT/ram_data(98) -radix decimal} {/tb_infrared/DUT/ram_data(99) -radix decimal} {/tb_infrared/DUT/ram_data(100) -radix decimal} {/tb_infrared/DUT/ram_data(101) -radix decimal} {/tb_infrared/DUT/ram_data(102) -radix decimal} {/tb_infrared/DUT/ram_data(103) -radix decimal} {/tb_infrared/DUT/ram_data(104) -radix decimal} {/tb_infrared/DUT/ram_data(105) -radix decimal} {/tb_infrared/DUT/ram_data(106) -radix decimal} {/tb_infrared/DUT/ram_data(107) -radix decimal} {/tb_infrared/DUT/ram_data(108) -radix decimal} {/tb_infrared/DUT/ram_data(109) -radix decimal} {/tb_infrared/DUT/ram_data(110) -radix decimal} {/tb_infrared/DUT/ram_data(111) -radix decimal} {/tb_infrared/DUT/ram_data(112) -radix decimal} {/tb_infrared/DUT/ram_data(113) -radix decimal} {/tb_infrared/DUT/ram_data(114) -radix decimal} {/tb_infrared/DUT/ram_data(115) -radix decimal} {/tb_infrared/DUT/ram_data(116) -radix decimal} {/tb_infrared/DUT/ram_data(117) -radix decimal} {/tb_infrared/DUT/ram_data(118) -radix decimal} {/tb_infrared/DUT/ram_data(119) -radix decimal} {/tb_infrared/DUT/ram_data(120) -radix decimal} {/tb_infrared/DUT/ram_data(121) -radix decimal} {/tb_infrared/DUT/ram_data(122) -radix decimal} {/tb_infrared/DUT/ram_data(123) -radix decimal} {/tb_infrared/DUT/ram_data(124) -radix decimal} {/tb_infrared/DUT/ram_data(125) -radix decimal} {/tb_infrared/DUT/ram_data(126) -radix decimal} {/tb_infrared/DUT/ram_data(127) -radix decimal} {/tb_infrared/DUT/ram_data(128) -radix decimal} {/tb_infrared/DUT/ram_data(129) -radix decimal} {/tb_infrared/DUT/ram_data(130) -radix decimal} {/tb_infrared/DUT/ram_data(131) -radix decimal} {/tb_infrared/DUT/ram_data(132) -radix decimal} {/tb_infrared/DUT/ram_data(133) -radix decimal} {/tb_infrared/DUT/ram_data(134) -radix decimal} {/tb_infrared/DUT/ram_data(135) -radix decimal} {/tb_infrared/DUT/ram_data(136) -radix decimal} {/tb_infrared/DUT/ram_data(137) -radix decimal} {/tb_infrared/DUT/ram_data(138) -radix decimal} {/tb_infrared/DUT/ram_data(139) -radix decimal} {/tb_infrared/DUT/ram_data(140) -radix decimal} {/tb_infrared/DUT/ram_data(141) -radix decimal} {/tb_infrared/DUT/ram_data(142) -radix decimal} {/tb_infrared/DUT/ram_data(143) -radix decimal} {/tb_infrared/DUT/ram_data(144) -radix decimal} {/tb_infrared/DUT/ram_data(145) -radix decimal} {/tb_infrared/DUT/ram_data(146) -radix decimal} {/tb_infrared/DUT/ram_data(147) -radix decimal} {/tb_infrared/DUT/ram_data(148) -radix decimal} {/tb_infrared/DUT/ram_data(149) -radix decimal} {/tb_infrared/DUT/ram_data(150) -radix decimal} {/tb_infrared/DUT/ram_data(151) -radix decimal} {/tb_infrared/DUT/ram_data(152) -radix decimal} {/tb_infrared/DUT/ram_data(153) -radix decimal} {/tb_infrared/DUT/ram_data(154) -radix decimal} {/tb_infrared/DUT/ram_data(155) -radix decimal} {/tb_infrared/DUT/ram_data(156) -radix decimal} {/tb_infrared/DUT/ram_data(157) -radix decimal} {/tb_infrared/DUT/ram_data(158) -radix decimal} {/tb_infrared/DUT/ram_data(159) -radix decimal} {/tb_infrared/DUT/ram_data(160) -radix decimal} {/tb_infrared/DUT/ram_data(161) -radix decimal} {/tb_infrared/DUT/ram_data(162) -radix decimal} {/tb_infrared/DUT/ram_data(163) -radix decimal} {/tb_infrared/DUT/ram_data(164) -radix decimal} {/tb_infrared/DUT/ram_data(165) -radix decimal} {/tb_infrared/DUT/ram_data(166) -radix decimal} {/tb_infrared/DUT/ram_data(167) -radix decimal} {/tb_infrared/DUT/ram_data(168) -radix decimal} {/tb_infrared/DUT/ram_data(169) -radix decimal} {/tb_infrared/DUT/ram_data(170) -radix decimal} {/tb_infrared/DUT/ram_data(171) -radix decimal} {/tb_infrared/DUT/ram_data(172) -radix decimal} {/tb_infrared/DUT/ram_data(173) -radix decimal} {/tb_infrared/DUT/ram_data(174) -radix decimal} {/tb_infrared/DUT/ram_data(175) -radix decimal} {/tb_infrared/DUT/ram_data(176) -radix decimal} {/tb_infrared/DUT/ram_data(177) -radix decimal} {/tb_infrared/DUT/ram_data(178) -radix decimal} {/tb_infrared/DUT/ram_data(179) -radix decimal} {/tb_infrared/DUT/ram_data(180) -radix decimal} {/tb_infrared/DUT/ram_data(181) -radix decimal} {/tb_infrared/DUT/ram_data(182) -radix decimal} {/tb_infrared/DUT/ram_data(183) -radix decimal} {/tb_infrared/DUT/ram_data(184) -radix decimal} {/tb_infrared/DUT/ram_data(185) -radix decimal} {/tb_infrared/DUT/ram_data(186) -radix decimal} {/tb_infrared/DUT/ram_data(187) -radix decimal} {/tb_infrared/DUT/ram_data(188) -radix decimal} {/tb_infrared/DUT/ram_data(189) -radix decimal} {/tb_infrared/DUT/ram_data(190) -radix decimal} {/tb_infrared/DUT/ram_data(191) -radix decimal} {/tb_infrared/DUT/ram_data(192) -radix decimal} {/tb_infrared/DUT/ram_data(193) -radix decimal} {/tb_infrared/DUT/ram_data(194) -radix decimal} {/tb_infrared/DUT/ram_data(195) -radix decimal} {/tb_infrared/DUT/ram_data(196) -radix decimal} {/tb_infrared/DUT/ram_data(197) -radix decimal} {/tb_infrared/DUT/ram_data(198) -radix decimal} {/tb_infrared/DUT/ram_data(199) -radix decimal} {/tb_infrared/DUT/ram_data(200) -radix decimal} {/tb_infrared/DUT/ram_data(201) -radix decimal} {/tb_infrared/DUT/ram_data(202) -radix decimal} {/tb_infrared/DUT/ram_data(203) -radix decimal} {/tb_infrared/DUT/ram_data(204) -radix decimal} {/tb_infrared/DUT/ram_data(205) -radix decimal} {/tb_infrared/DUT/ram_data(206) -radix decimal} {/tb_infrared/DUT/ram_data(207) -radix decimal} {/tb_infrared/DUT/ram_data(208) -radix decimal} {/tb_infrared/DUT/ram_data(209) -radix decimal} {/tb_infrared/DUT/ram_data(210) -radix decimal} {/tb_infrared/DUT/ram_data(211) -radix decimal} {/tb_infrared/DUT/ram_data(212) -radix decimal} {/tb_infrared/DUT/ram_data(213) -radix decimal} {/tb_infrared/DUT/ram_data(214) -radix decimal} {/tb_infrared/DUT/ram_data(215) -radix decimal} {/tb_infrared/DUT/ram_data(216) -radix decimal} {/tb_infrared/DUT/ram_data(217) -radix decimal} {/tb_infrared/DUT/ram_data(218) -radix decimal} {/tb_infrared/DUT/ram_data(219) -radix decimal} {/tb_infrared/DUT/ram_data(220) -radix decimal} {/tb_infrared/DUT/ram_data(221) -radix decimal} {/tb_infrared/DUT/ram_data(222) -radix decimal} {/tb_infrared/DUT/ram_data(223) -radix decimal} {/tb_infrared/DUT/ram_data(224) -radix decimal} {/tb_infrared/DUT/ram_data(225) -radix decimal} {/tb_infrared/DUT/ram_data(226) -radix decimal} {/tb_infrared/DUT/ram_data(227) -radix decimal} {/tb_infrared/DUT/ram_data(228) -radix decimal} {/tb_infrared/DUT/ram_data(229) -radix decimal} {/tb_infrared/DUT/ram_data(230) -radix decimal} {/tb_infrared/DUT/ram_data(231) -radix decimal} {/tb_infrared/DUT/ram_data(232) -radix decimal} {/tb_infrared/DUT/ram_data(233) -radix decimal} {/tb_infrared/DUT/ram_data(234) -radix decimal} {/tb_infrared/DUT/ram_data(235) -radix decimal} {/tb_infrared/DUT/ram_data(236) -radix decimal} {/tb_infrared/DUT/ram_data(237) -radix decimal} {/tb_infrared/DUT/ram_data(238) -radix decimal} {/tb_infrared/DUT/ram_data(239) -radix decimal} {/tb_infrared/DUT/ram_data(240) -radix decimal} {/tb_infrared/DUT/ram_data(241) -radix decimal} {/tb_infrared/DUT/ram_data(242) -radix decimal} {/tb_infrared/DUT/ram_data(243) -radix decimal} {/tb_infrared/DUT/ram_data(244) -radix decimal} {/tb_infrared/DUT/ram_data(245) -radix decimal} {/tb_infrared/DUT/ram_data(246) -radix decimal} {/tb_infrared/DUT/ram_data(247) -radix decimal} {/tb_infrared/DUT/ram_data(248) -radix decimal} {/tb_infrared/DUT/ram_data(249) -radix decimal} {/tb_infrared/DUT/ram_data(250) -radix decimal} {/tb_infrared/DUT/ram_data(251) -radix decimal} {/tb_infrared/DUT/ram_data(252) -radix decimal} {/tb_infrared/DUT/ram_data(253) -radix decimal} {/tb_infrared/DUT/ram_data(254) -radix decimal} {/tb_infrared/DUT/ram_data(255) -radix decimal}} -subitemconfig {/tb_infrared/DUT/ram_data(0) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(1) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(2) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(3) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(4) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(5) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(6) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(7) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(8) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(9) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(10) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(11) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(12) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(13) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(14) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(15) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(16) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(17) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(18) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(19) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(20) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(21) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(22) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(23) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(24) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(25) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(26) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(27) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(28) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(29) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(30) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(31) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(32) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(33) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(34) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(35) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(36) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(37) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(38) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(39) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(40) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(41) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(42) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(43) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(44) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(45) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(46) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(47) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(48) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(49) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(50) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(51) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(52) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(53) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(54) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(55) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(56) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(57) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(58) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(59) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(60) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(61) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(62) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(63) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(64) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(65) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(66) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(67) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(68) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(69) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(70) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(71) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(72) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(73) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(74) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(75) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(76) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(77) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(78) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(79) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(80) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(81) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(82) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(83) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(84) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(85) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(86) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(87) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(88) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(89) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(90) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(91) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(92) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(93) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(94) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(95) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(96) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(97) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(98) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(99) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(100) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(101) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(102) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(103) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(104) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(105) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(106) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(107) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(108) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(109) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(110) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(111) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(112) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(113) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(114) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(115) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(116) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(117) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(118) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(119) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(120) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(121) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(122) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(123) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(124) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(125) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(126) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(127) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(128) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(129) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(130) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(131) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(132) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(133) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(134) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(135) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(136) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(137) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(138) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(139) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(140) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(141) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(142) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(143) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(144) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(145) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(146) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(147) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(148) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(149) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(150) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(151) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(152) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(153) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(154) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(155) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(156) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(157) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(158) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(159) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(160) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(161) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(162) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(163) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(164) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(165) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(166) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(167) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(168) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(169) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(170) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(171) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(172) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(173) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(174) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(175) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(176) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(177) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(178) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(179) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(180) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(181) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(182) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(183) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(184) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(185) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(186) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(187) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(188) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(189) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(190) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(191) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(192) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(193) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(194) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(195) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(196) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(197) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(198) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(199) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(200) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(201) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(202) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(203) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(204) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(205) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(206) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(207) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(208) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(209) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(210) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(211) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(212) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(213) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(214) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(215) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(216) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(217) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(218) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(219) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(220) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(221) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(222) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(223) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(224) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(225) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(226) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(227) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(228) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(229) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(230) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(231) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(232) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(233) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(234) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(235) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(236) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(237) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(238) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(239) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(240) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(241) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(242) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(243) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(244) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(245) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(246) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(247) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(248) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(249) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(250) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(251) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(252) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(253) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(254) {-height 16 -radix decimal} /tb_infrared/DUT/ram_data(255) {-height 16 -radix decimal}} /tb_infrared/DUT/ram_data add wave -noupdate -divider timestamp_counter add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/clk_i add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/rst_n_i @@ -57,8 +58,8 @@ add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count_o add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/count add wave -noupdate /tb_infrared/DUT/timestamp_counter_inst/overflow TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 1} {34010000 ps} 0} {{Cursor 2} {470000 ps} 0} -quietly wave cursor active 1 +WaveRestoreCursors {{Cursor 1} {18827662 ps} 0} {{Cursor 2} {1940544 ps} 0} +quietly wave cursor active 2 configure wave -namecolwidth 324 configure wave -valuecolwidth 164 configure wave -justifyvalue left @@ -73,4 +74,4 @@ configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits ns update -WaveRestoreZoom {0 ps} {36120 ns} +WaveRestoreZoom {0 ps} {47250 ns} From 7cd36c1e9c41c66bf70581147b644f6597dd9261 Mon Sep 17 00:00:00 2001 From: Michael Wurm Date: Mon, 24 Feb 2020 11:59:58 +0100 Subject: [PATCH 27/41] add user space infrared app --- drivers/infrared/infrared.c | 30 +++++------ user/infrared/Makefile | 28 +++++++++++ user/infrared/fpga.cpp | 39 +++++++++++++++ user/infrared/fpga.h | 11 ++++ user/infrared/infrared | Bin 0 -> 761488 bytes user/infrared/main.cpp | 97 ++++++++++++++++++++++++++++++++++++ 6 files changed, 191 insertions(+), 14 deletions(-) create mode 100644 user/infrared/Makefile create mode 100644 user/infrared/fpga.cpp create mode 100644 user/infrared/fpga.h create mode 100755 user/infrared/infrared create mode 100644 user/infrared/main.cpp diff --git a/drivers/infrared/infrared.c b/drivers/infrared/infrared.c index 0574074..85b603b 100644 --- a/drivers/infrared/infrared.c +++ b/drivers/infrared/infrared.c @@ -76,10 +76,11 @@ static irqreturn_t irq_handler(int nr, void *data_ptr) struct siginfo info; struct task_struct *t; - pr_info("INFRARED Interrupt occured\n"); + pr_info("INFRARED Interrupt occured.\n"); /* Determine which interrupt occured */ - dev->irqs_active = ioread32(dev->regs + MEM_OFFSET_DATA_IRQ); + // dev->irqs_active = ioread32(dev->regs + MEM_OFFSET_DATA_IRQ); + dev->irqs_active = 1; if (dev->irqs_active == 0x1) { @@ -89,6 +90,7 @@ static irqreturn_t irq_handler(int nr, void *data_ptr) else { /* Another device asserted the shared interrupt line */ + pr_info("INFRARED Shared interrupt wasn't me."); return IRQ_NONE; } @@ -97,21 +99,21 @@ static irqreturn_t irq_handler(int nr, void *data_ptr) /* -------- TEMPORARY ----------------------------------------- */ /* Send signal to user space */ - t = pid_task(find_vpid(dev->pid), PIDTYPE_PID); - if (t == NULL) - { - printk(KERN_ERR "A Task with PID %i does not exist.\n", dev->pid); - return IRQ_HANDLED; - } + // t = pid_task(find_vpid(dev->pid), PIDTYPE_PID); + // if (t == NULL) + // { + // printk(KERN_ERR "A Task with PID %i does not exist.\n", dev->pid); + // return IRQ_HANDLED; + // } - memset(&info, 0, sizeof(struct siginfo)); - info.si_signo = SIGNAL_EVENT; - info.si_code = SI_QUEUE; - info.si_int = 4711; + // memset(&info, 0, sizeof(struct siginfo)); + // info.si_signo = SIGNAL_EVENT; + // info.si_code = SI_QUEUE; + // info.si_int = 4711; - send_sig_info(SIGNAL_EVENT, &info, t); + // send_sig_info(SIGNAL_EVENT, &info, t); - return IRQ_HANDLED; + // return IRQ_HANDLED; } /* diff --git a/user/infrared/Makefile b/user/infrared/Makefile new file mode 100644 index 0000000..7099826 --- /dev/null +++ b/user/infrared/Makefile @@ -0,0 +1,28 @@ +APP_NAME=infrared + +CPPFLAGS=-Wall -Werror -pedantic -std=c++17 -O2 -g +# Attention: the lib diretory where the MQTT is installed into may not be in the LD path! +LDFLAGS=-lpaho-mqtt3a -lpaho-mqttpp3 -lfpgaregion -lpthread + +SOURCES=$(wildcard *.cpp) +OBJECTS=$(SOURCES:.cpp=.o) + + +all: $(APP_NAME) + +$(APP_NAME): $(OBJECTS) + $(CXX) $^ $(LDFLAGS) -o $@ + +%.o: %.cpp + $(CXX) -c $< $(CPPFLAGS) -o $@ + +clean: + rm -rf $(OBJECTS) + rm -rf $(APP_NAME) + +deploy: all + scp $(APP_NAME) $(DEPLOYSSH):$(DEPLOYSSHPATH)/$(APP_NAME) +# ssh $(DEPLOYSSH) $(DEPLOYSSHPATH)/$(APP_NAME) + + +.PHONY: all clean deploy diff --git a/user/infrared/fpga.cpp b/user/infrared/fpga.cpp new file mode 100644 index 0000000..f3a03c7 --- /dev/null +++ b/user/infrared/fpga.cpp @@ -0,0 +1,39 @@ +#include "fpga.h" + +#include + +#include +#include +#include + + +static std::mutex fpgaMutex; +static std::unique_ptr fpga; + + +static void ReconfigRequested() { + std::cout << "Reconfiguration in progres" << std::endl; + fpgaMutex.lock(); + fpga->Release(); + std::cout << "Reconfiguration requested" << std::endl; +} + +static void ReconfigDone() { + std::cout << "Reconfiguration done" << std::endl; + fpga->Acquire(); + fpgaMutex.unlock(); +} + + + + +void initFPGA(std::string name) { + fpga = std::make_unique(name, ReconfigRequested, ReconfigDone); + fpga->Acquire(); +} + + +std::lock_guard lockFPGA() { + assert(fpga); + return std::lock_guard(fpgaMutex); +} diff --git a/user/infrared/fpga.h b/user/infrared/fpga.h new file mode 100644 index 0000000..8f58db0 --- /dev/null +++ b/user/infrared/fpga.h @@ -0,0 +1,11 @@ +#ifndef FPGA_H +#define FPGA_H + +#include +#include + + +void initFPGA(std::string name); +std::lock_guard lockFPGA(); + +#endif diff --git a/user/infrared/infrared b/user/infrared/infrared new file mode 100755 index 0000000000000000000000000000000000000000..a48946566c0cff2b73f18228d14efa90e292a188 GIT binary patch literal 761488 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