]> jspc29.x-matter.uni-frankfurt.de Git - jtag_mvd.git/commitdiff
more changes to slow-control connection of memories
authorJan Michel <j.michel@gsi.de>
Mon, 5 Aug 2013 17:07:33 +0000 (19:07 +0200)
committerJan Michel <j.michel@gsi.de>
Mon, 5 Aug 2013 17:07:33 +0000 (19:07 +0200)
doku/doc_standalone.pdf
doku/jtag_chain_controller.tex
vhdl/code/jtag_cmd_m26c.vhd
vhdl/code/jtag_constants.vhd

index 23803975967e41995b3cb77ea39ff3a1af995743..0b24a23b18c667180d39cb3bb0ea2d1ea2e80aca 100644 (file)
Binary files a/doku/doc_standalone.pdf and b/doku/doc_standalone.pdf differ
index d238eff8e8561bad2ef5374925c3898efd41e1a9..88ebb8080fb0d5390fa203f87936f13881361cda 100644 (file)
@@ -158,10 +158,11 @@ Der Bus Handler akzeptiert 9-bit-Adressen. Die Adressen liegen damit zwischen 0x
 \begin{table}[H]
 \renewcommand{\arraystretch}{1.4} 
 \begin{tabular}{ll}
-Name & Bereich\\
-RAM  & 0x000 - 0x0FF\\
-DEBUG & 0x140 - 0x15F\\
-STATUS2 & 0x160 - 0x17F\\
+\textbf{Name} & \textbf{Bereich}\\
+RAM           & 0x000 - 0x0FF\\
+RAM read-back & 0x100 - 0x1FF \\
+Registers     & 0x200 - 0x2FF \\
+RAM errors    & 0x300 - 0x3FF\\
 \end{tabular} 
 \caption{Die Adressbereiche des JTAG-Chain-Controllers.}
 \label{table:trbnet_address_ranges}
@@ -174,7 +175,8 @@ Die höheren Adressbits werden über das im folgenden Abschitt zu findende Regis
 In der Standardeinstellung ist der Block für einen Sensor auch 256 32-bit Wörter (entspricht 8 kbit Speicherbereichen) groß.
 Die höherwertigen Adressbits geben in diesem Fall an, welcher Sensor ausgewählt ist.\footnote{Wenn die Speichergröße für einen Sensor 
 von 8 kbit abweichend gewählt wird, enthalten die 256 Wörter dieses Adressbereichs
-entweder mehr als einen Sensor-Block oder nur einen Teil eines Sensor-Blocks.}
+entweder mehr als einen Sensor-Block oder nur einen Teil eines Sensor-Blocks.} Gleiches gilt für
+das read-back RAM.
 
 
 Geschrieben werden kann nur, wenn der JTAG-Chain-Controller gestoppt ist (\texttt{m26cs\_stopped} = 1).
@@ -196,111 +198,74 @@ Eine Liste der Befehle, deren Code in \texttt{jtag\_constants.vhd} festgelegt is
 Tabelle \ref{table:trbnet_commands}.
 
 \begin{table}
+\footnotesize
 \renewcommand{\arraystretch}{1.4}
-\begin{tabular}{p{5cm}llp{9cm}}
-Name & Alt & Neu & Beschreibung\\
-SET\_NUMCHIPS\_CONFIGURED & 33 & 00 & Zahl der im RAM vorhandenen Sensor-Blöcke.\\
-SET\_JTAG\_CLOCK\_CYCLE\-\_LENGTH &  40 & 01 & setzt die Dauer des JTAG-Taktzyklus
+\begin{tabular}{p{4.5cm}lp{10cm}}
+\textbf{Name}  & \textbf{Addr} & \textbf{Beschreibung}\\
+SET\_NUMCHIPS\_CONFIGURED  & 00 & Zahl der im RAM vorhandenen Sensor-Blöcke.\\
+SET\_JTAG\_CLOCK\_CYCLE\-\_LENGTH  & 01 & setzt die Dauer des JTAG-Taktzyklus
 (\texttt{jtag\_clock\_cycle\_length} in Systemtakten).\\
-SET\_JTAG\_CLOCK\_TIME1 &42 & 02 & Setzt den Zeitpunkt der steigenden TCK-Taktflanke
+SET\_JTAG\_CLOCK\_TIME1  & 02 & Setzt den Zeitpunkt der steigenden TCK-Taktflanke
 (\texttt{jtag\_clock\_time1}) innerhalb des durch jtag\_clock\_cycle\_length gegebenen Bereichs.\\
-SET\_JTAG\_CLOCK\_TIME2 &44 & 03 & Setzt den Zeitpunkt der fallenden TCK-Taktflanke
+SET\_JTAG\_CLOCK\_TIME2  & 03 & Setzt den Zeitpunkt der fallenden TCK-Taktflanke
 (\texttt{jtag\_clock\_time2}) innerhalb des durch jtag\_clock\_cycle\_length gegebenen Bereichs.\\
-SET\_JTAG\_SAMPLE\_TIME1 &46 & 04 & Setzt den Zeitpunkt der ersten Abtastung des TDO\_IN-Signals
+SET\_JTAG\_SAMPLE\_TIME1  & 04 & Setzt den Zeitpunkt der ersten Abtastung des TDO\_IN-Signals
 (\texttt{jtag\_sample\_time1}).\\
-SET\_JTAG\_SAMPLE\_TIME2 &48 & 05 & Setzt den Zeitpunkt der zweiten Abtastung des TDO\_IN-Signals
+SET\_JTAG\_SAMPLE\_TIME2 & 05 & Setzt den Zeitpunkt der zweiten Abtastung des TDO\_IN-Signals
 (\texttt{jtag\_sample\_time2}).\\
-SET\_JTAG\_SAMPLE\_TIME3 &4a & 06 & Setzt den Zeitpunkt der dritten Abtastung des TDO\_IN-Signals
+SET\_JTAG\_SAMPLE\_TIME3 & 06 & Setzt den Zeitpunkt der dritten Abtastung des TDO\_IN-Signals
 (\texttt{jtag\_sample\_time3}).\\
-SET\_JTAG\_SET\_DATA\_TIME&4c & 07 & Setzt den Zeitpunkt für das Ändern der TMS und TDI-Ausgänge des
+SET\_JTAG\_SET\_DATA\_TIME & 07 & Setzt den Zeitpunkt für das Ändern der TMS und TDI-Ausgänge des
 FPGA
 (\texttt{set\_data\_time}).\\
-SET\_DELAY\_EXPECTED\-\_VALUES &67& 08 & Setze die Zahl der TCK-Takte, um die das TDO-Signal des
+SET\_DELAY\_EXPECT\-\_VALUES & 08 & Setze die Zahl der TCK-Takte, um die das TDO-Signal des
 letzten
 Sensors verzögert eintrifft (\texttt{jtag\_delay\_expvalues}, Wertebereich 0 - 3).\\
 \hline
-GET\_RUN\_COUNT &50& 10 & Liest den Wert des Durchlauf-Zählers, \texttt{run\_counter}.\\
-GET\_NUMCHIPS\_ACTIVE & 13& 11 & Liest die Anzahl nicht entfernter Sensoren.\\
-GET\_TRIGGER\_COUNT &14 & 12 & Liest die Zahl der \texttt{OFF\_SPILL\_IN}-Trigger.\\
-GET\_LAST\_NOT\_REMOVED & 1c & 13 & Nummer des letzten, nicht entfernten Sensors.\\
-GET\_CRC\_STATUS & 100 & 14 & Status flags of CRC check for 32 sensors.\\
+GET\_RUN\_COUNT & 10 & Liest den Wert des Durchlauf-Zählers, \texttt{run\_counter}.\\
+GET\_NUMCHIPS\_ACTIVE & 11 & Liest die Anzahl nicht entfernter Sensoren.\\
+GET\_TRIGGER\_COUNT & 12 & Liest die Zahl der \texttt{OFF\_SPILL\_IN}-Trigger.\\
+GET\_LAST\_NOT\_REMOVED & 13 & Nummer des letzten, nicht entfernten Sensors.\\
+GET\_CRC\_STATUS & 14 & Status flags of CRC check for 32 sensors.\\
 \hline
-START &    09 & 40 & Aktiviert das Warten auf den \texttt{OFF\_SPILL\_IN}-Trigger
+START  & 40 & Aktiviert das Warten auf den \texttt{OFF\_SPILL\_IN}-Trigger
 \texttt{jtag\_refresh\_active} = Bit 0, \texttt{jtag\_check1\_active} = Bit 1 (überspringen des
 Schreibens der Register)\\
-REMOVE\_SENSOR & 10 & 41 & Wenn gestoppt (\texttt{m26cs\_stopped} = 1), wird der im Datenregister
+REMOVE\_SENSOR & 41 & Wenn gestoppt (\texttt{m26cs\_stopped} = 1), wird der im Datenregister
 eingestellte Sensor als nicht in der Kette befindlich markiert. Bit 31 = 1: Sensor wird entfernt,
 Bit 31 = 0: Sensor wird hinzugefügt.\\
-SET\_CSOPTIONS &65& 42 & Setze Optionen (\texttt{m26csoptions}): bit 0  $\to$ Überspringe
+SET\_CSOPTIONS & 42 & Setze Optionen (\texttt{m26csoptions}): bit 0  $\to$ Überspringe
 \textbf{BYPASSREG\_TESTCHAIN}.\\
-RAM\_BASEADDR & 121 & 43 & Wählt einen Speicherbereich mit 256 32-bit Worten aus \textbf{ram1a}
+RAM\_BASEADDR & 43 & Wählt einen Speicherbereich mit 256 32-bit Worten aus \textbf{ram1a}
 aus. Diese Adresse entspricht der RAM-Adresse ohne die 8 niederwertigsten Bits. \\
 \hline
-SET\_BREAKPOINTS & 53 & 50 & Setzt \texttt{breakpoint\_active}, siehe VHDL-Code
+SET\_BREAKPOINTS & 50 & Setzt \texttt{breakpoint\_active}, siehe VHDL-Code
 \texttt{jtag\_cmd\_m26c.vhd} für Stellen, an denen die State-Machine angehalten wird.\\
-COPY\_TO\_STATUS2 &63& 51 & Das Kopieren von \textbf{ram3a} in \textbf{ram3b} wird nach Beenden des
+COPY\_TO\_STATUS2 & 51 & Das Kopieren von \textbf{ram3a} in \textbf{ram3b} wird nach Beenden des
 Durchlaufs aus Abb. \ref{fig:m26controller_simple} durchgeführt.\\
-COPY\_RAM1B1C\_SINGLE\-\_TRIGGER &64& 52 &  Setze den Trigger für das Kopieren von \textbf{ram1b}
+COPY\_RAM1B1C\_SINGLE\-\_TRIGGER & 52 &  Setze den Trigger für das Kopieren von \textbf{ram1b}
 nach
 \textbf{ram1c} (siehe Abschnitt MA:\ref{MA-rams_description}) auf bit 0  $\to$ read error, 1  $\to$
 write error, 2  $\to$ data changed, 3  $\to$ next run.\\
+GET\_M26CS\_STATE & 53 & Current status of the main state machine.\\
+GET\_RAM1C\_RUN\_COUNTER & 54 & Lese das Register \texttt{ram1c\_run\_counter}. Kopie
+des Registers \texttt{run\_counter}, zu dem Zeitpunkt, zu dem die Kopie \textbf{ram1c} von
+\textbf{ram1b} gemacht wurde.\\
+GET\_RAM1C\_CHAIN\_STATUS & 55 & Lese das Register \texttt{ram1c\_chain\_status}. 
+Kopie des Registers \texttt{chain\_status}, zu dem Zeitpunkt, zu dem die Kopie \textbf{ram1c} von
+\textbf{ram1b} gemacht wurde.\\
+GET\_RAM3B\_RUN\_COUNTER & 54 & Lese das Register \texttt{ram3b\_run\_counter}. Kopie
+des Registers \texttt{run\_counter}, zu dem Zeitpunkt, zu dem die Kopie \textbf{ram3b} von
+\textbf{ram3a} gemacht wurde.\\
+GET\_RAM3B\_CHAIN\_STATUS & 55 & Lese das Register \texttt{ram3b\_chain\_status}.
+Kopie des Registers \texttt{chain\_status}, zu dem Zeitpunkt, zu dem die Kopie \textbf{ram3b} von
+\textbf{ram3a} gemacht wurde.\\
 \end{tabular}
 \caption{Befehle für den JTAG-Chain-Controller, die per TrbNet geschickt werden können.}
 \label{table:trbnet_commands}
 \end{table}
 
 
-
-\subsubsection{DEBUG-Adressen}
-Im DEBUG-Adressraum 0x140-0x15F liegen die in Tabelle \ref{table:debug_addrs} angegebenen Register.
-
-\begin{table}
-\renewcommand{\arraystretch}{1.4} 
-\begin{tabular}{p{3.5cm}lp{8cm}}
-Name & Adresse & Beschreibung\\
-TEST & 0x140 & Lesen/Schreiben des Test-Registers \texttt{debug\_test}.\\
-M26CS\_STATE & 0x141 & Lese den binär kodierten Zustand des Durchlaufs aus Abb. \ref{fig:m26controller_simple}, der im Register \texttt{debug\_m26cs\_state} gespeichert ist. Siehe \texttt{jtag\_cmd\_m26c.vhd}.\\
-TRIGGER\_COUNT & 0x145 & Lese das Register \texttt{debug\_trigger\_counter} aus, das so lange jeden Systemtakt inkrementiert wird, wie \texttt{OFF\_SPILL\_IN} gesetzt ist.\\
-VERSION & 0x146 & Lese beim Kompilieren festgelegte Versionsnummer aus.\\
-RAM1BADDR & 0x147 & Setze die Addresse für den Zugriff auf \textbf{ram1b}.\\
-RAM1B\_DATA & 0x148 & Lese 32-bit Wort aus \textbf{ram1b} bei Adresse aus dem \texttt{RAM1BADDR}-Register.\\
-RAM1CADDR & 0x149 & Setze die Addresse für den Zugriff auf \textbf{ram1c}.\\
-RAM1C\_DATA & 0x14A &  Lese 32-bit Wort aus \textbf{ram1c} bei Adresse aus dem \texttt{RAM1CADDR}-Register.\\
-RAM1C\_RUN\-\_COUNTER & 0x14B & Lese das Register \texttt{ram1c\_run\_counter}. Dies ist eine Kopie des Registers \texttt{run\_counter}, zu dem Zeitpunkt, zu dem die Kopie \textbf{ram1c} von \textbf{ram1b} gemacht wurde.\\
-RAM1C\_CHAIN\-\_STATUS & 0x14C & Lese das Register \texttt{ram1c\_chain\_status}. Dies ist eine Kopie des Registers \texttt{chain\_status}, zu dem Zeitpunkt, zu dem die Kopie \textbf{ram1c} von \textbf{ram1b} gemacht wurde.\\
-DEBUGTDO\-\_SAMPLES & 0x14D & Datenausgang des \texttt{fifo32bit\_debugtdo}-FIFOs. In dieser Version ist dieses FIFO deaktivert. \\
-DEBUGTDO\-\_GETFIFOSTATUS & 0x14E & Status des \texttt{fifo32bit\_debugtdo}-FIFO: bit 0 $\to$ voll, bit 1 $\to$ leer, bit 2 $\to$ Überlauf, bit 3 $\to$ Unterlauf.\\
-DEBUGTDO\-\_TIMEOUT & 0x14F & Setze Register \texttt{debugtdo\_timeout}: Die Zeit in Systemtakten, die nach dem Start des Durchlaufs aus Abb. \ref{fig:m26controller_simple}  gewartet wird, bis der \texttt{fifo32bit\_debugtdo}-FIFO befüllt wird.\\
-DEBUGTDO\-\_ACTIVATE & 0x150 & Wenn in dieses Register als unterstes Bit eine 1 geschrieben wird, wird der \texttt{fifo32bit\_debugtdo}-FIFO jeden Takt beffüllt, wenn seit dem Start des Durchlaufs die im \texttt{debugtdo\_timeout}-Register angegebene Zeit vergangen ist.\\
-DEBUGTDO\-\_CONTROLFIFO & 0x151 & Kontrolle des \texttt{fifo32bit\_debugtdo}-FIFOs: bit 0 $\to$ ein 32 bit Wort auslesen, bit 4 $\to$ FIFO Reset \\
-\end{tabular}
-\caption{Register im DEBUG-Adressbereich.}
-\label{table:debug_addrs}
-\end{table}
-\subsubsection{STATUS2-Adressen}
-\label{section_status2_adresses}
-Im STATUS2-Adressraum 0x160-0x17F liegen die in Tabelle \ref{table:status2_addrs} angegebenen Register. Sie dienen der
-konsistenten Abfrage der Fehlerzähler. Dazu wird mit dem Befehl COPY\_TO\_STATUS2 eine Kopie von \textbf{ram3a} 
-in \textbf{ram3b} angefordert. Wenn die Kopie fertig ist, was über das UPDATING-Register abfragbar ist, kann über 
-setzen des RAM3B\_BASEADDR-Registers die Kopie \textbf{ram3b} über die Register im Bereich von RAM3B\_BEGIN bis RAM3B\_END  ausgelesen werden.
-Wenn das Auslesen abgeschlossen ist, kann eine neue Kopie angefordert werden. 
-
-\begin{table}
-\renewcommand{\arraystretch}{1.4} 
-\begin{tabular}{p{3.5cm}lp{8cm}}
-Name & Adresse & Beschreibung\\
-TRIGGERCOUNTER\-\_COPY & 0x160 & Nummer des letzten Durchlaufs (\texttt{run\_counter}) zum Zeitpunkt der Kopie.\\
-CHAIN\_STATUS\-\_COPY  & 0x161 & Kopie des \texttt{chain\_status}: bit 0 $\to$ Kette unterbrochen (per \textbf{bypassreg\_testchain} getestet), 
-bits 1,2 $\to$ reserved, bits 3+MAX\_NUMCHIPS\_PLUS\_ONE\_LD-1 downto 3: Länge der Kette, ermittelt per \textbf{bypassreg\_testchain}.\\
-UPDATING & 0x162 & bit 0 $\to$ Kopieren von \textbf{ram3a} nach \textbf{ram3b} noch nicht fertig.\\
-RAM3B\_BASEADDR & 0x163 & Setzt die höheren Adressbits von ram3b.\\
-STARTED    & 0x164 & bit 0 $\to$ aktueller Wert von \texttt{jtag\_refresh\_active}.\\
-RAM3B\_BEGIN- RAM3B\_END & 0x170 - 0x17F & 16 32-bit Wörter mit den unteren Adressbits 0-F und höheren Adressbits wie durch das Register RAM3B\_BASEADDR gesetzt. \textbf{ram3b} (Kopie von \textbf{ram3a}) kann über diese Register ausgelesen werden. Für den Inhalt siehe Abschnitt \ref{abschnitt_ram3}.
-\end{tabular}
-\caption{Register im STATUS2-Adressbereich.}
-\label{table:status2_addrs}
-\end{table}
-
 \clearpage
 \subsection{RAM-Layout von ram3a/b (Zählerstände)}
 \label{abschnitt_ram3}
index bb40b665ecb5e5f54a07213d3b422e8dec74ad3f..c0a1becda06f20fba671ba729e3bc676b2b1b62f 100644 (file)
@@ -246,32 +246,11 @@ signal bus2_ram_ack_in  : std_logic;
 signal bus2_ram_nack_in : std_logic;
 signal ram1a_read_delay, ram1a_read_delay2 : std_logic;
 
-signal bus2_status2_addr_out : std_logic_vector(15 downto 0);
-signal bus2_status2_data_out : std_logic_vector(31 downto 0);
-signal bus2_status2_read_enable_out : std_logic;
-signal bus2_status2_write_enable_out : std_logic;
-signal bus2_status2_data_in : std_logic_vector(31 downto 0);
-signal bus2_status2_ack_in : std_logic;
-signal bus2_status2_nack_in : std_logic;
-
-signal bus2_status2_read_ram3b : std_logic;
-signal buf_bus2_status2_read_ram3b : std_logic;
-
 signal status2_run_counter, status2_run_counter_next : unsigned(31 downto 0);
 
 signal status2_chain_status, status2_chain_status_next : std_logic_vector(3+MAX_NUMCHIPS_PLUS_ONE_LD-1 downto 0);
 signal status2_copy_finished: std_logic;
 
---signal bus2_debug_addr_out : std_logic_vector(4 downto 0);
-signal bus2_debug_addr_out         : std_logic_vector(15 downto 0);
-signal bus2_debug_data_out         : std_logic_vector(31 downto 0);
-signal bus2_debug_read_enable_out  : std_logic;
-signal bus2_debug_write_enable_out : std_logic;
-signal bus2_debug_data_in          : std_logic_vector(31 downto 0);
-signal bus2_debug_ack_in           : std_logic;
-signal bus2_debug_nack_in          : std_logic;
-signal bus2_debug_no_more_data_in  : std_logic;
-signal bus2_debug_unknown_addr_in  : std_logic;
 
 -- monitoring
 --signal read_mon_write_out : std_logic;
@@ -463,21 +442,21 @@ type CPR1BC_STATE_TYPE is (CPR1BC_IDLE, CPR1BC_COPY_BEGIN, CPR1BC_COPY_WAIT);
 signal cpr1bc_state, cpr1bc_state_next : CPR1BC_STATE_TYPE;
 
 -- DEBUGTDO fifo and control signals
-signal  tdodebugsamples : std_logic_vector(31 downto 0);
-signal debugtdo_rd_en : std_logic;
-signal debugtdo_wr_en : std_logic;
-signal debugtdo_dout : std_logic_vector(31 downto 0);
-signal debugtdo_empty : std_logic;
-signal debugtdo_full : std_logic;
-signal debugtdo_overflow : std_logic;
-signal debugtdo_underflow : std_logic;
-signal resetdebugtdo_toffifo : std_logic;
-signal resetdebugtdo_strobe : std_logic;
-signal debugtdo_activate_strobe : std_logic;
-signal debugtdo_active : std_logic;
-signal debugtdo_timeout : std_logic_vector(31 downto 0);
-signal debugtdo_counter : std_logic_vector(31 downto 0);
-signal debugtdo_ran : std_logic;
+-- signal  tdodebugsamples : std_logic_vector(31 downto 0);
+-- signal debugtdo_rd_en : std_logic;
+-- signal debugtdo_wr_en : std_logic;
+-- signal debugtdo_dout : std_logic_vector(31 downto 0);
+-- signal debugtdo_empty : std_logic;
+-- signal debugtdo_full : std_logic;
+-- signal debugtdo_overflow : std_logic;
+-- signal debugtdo_underflow : std_logic;
+-- signal resetdebugtdo_toffifo : std_logic;
+-- signal resetdebugtdo_strobe : std_logic;
+-- signal debugtdo_activate_strobe : std_logic;
+-- signal debugtdo_active : std_logic;
+-- signal debugtdo_timeout : std_logic_vector(31 downto 0);
+-- signal debugtdo_counter : std_logic_vector(31 downto 0);
+-- signal debugtdo_ran : std_logic;
 
 signal crc_error_on_last_check, crc_error_on_last_check_next : std_logic;
 signal last_run_successful, last_run_successful_next : std_logic;
@@ -524,22 +503,43 @@ signal bus_command_write   : std_logic;
 signal bus_command_read    : std_logic;
 signal bus_command_retry   : std_logic;
 
+signal bus_ram3b_ack       : std_logic;
+signal bus_ram3b_ack_next  : std_logic;
+signal bus_ram3b_ack_next2 : std_logic;
+signal bus_ram3b_addr      : std_logic_vector(15 downto 0);
+signal bus_ram3b_data_in   : std_logic_vector(31 downto 0);
+signal bus_ram3b_nack      : std_logic;
+signal bus_ram3b_read      : std_logic;
+signal bus_ram3b_unkwn     : std_logic;
+signal bus_ram3b_write     : std_logic;
+
+signal bus_ram1c_ack       : std_logic;
+signal bus_ram1c_ack_next  : std_logic;
+signal bus_ram1c_ack_next2 : std_logic;
+signal bus_ram1c_addr      : std_logic_vector(15 downto 0);
+signal bus_ram1c_data_in   : std_logic_vector(31 downto 0);
+signal bus_ram1c_nack      : std_logic;
+signal bus_ram1c_read      : std_logic;
+signal bus_ram1c_unkwn     : std_logic;
+signal bus_ram1c_write     : std_logic;
+
+
 begin
 
 jtag_bypassreg_enable_jtag_clock  <=  '0';
 
 
-resetdebugtdo_toffifo <= resetdebugtdo_strobe OR RESET_IN;
-debugtdo_wr_en <= '1' when debugtdo_active = '1' and debugtdo_timeout <= debugtdo_counter else '0';
+-- resetdebugtdo_toffifo <= resetdebugtdo_strobe OR RESET_IN;
+-- debugtdo_wr_en <= '1' when debugtdo_active = '1' and debugtdo_timeout <= debugtdo_counter else '0';
 
-tdodebugsamples(31) <= begin_jtag_bitcalc;
-tdodebugsamples(30) <= jtag_clock_pulse1;
-tdodebugsamples(29) <= jtag_clock_pulse2;
-tdodebugsamples(28) <= jtag_sample_pulse1;
-tdodebugsamples(27) <= jtag_sample_pulse2;
-tdodebugsamples(26) <= jtag_sample_pulse3;
-tdodebugsamples(25) <= jtag_set_data_pulse;
-tdodebugsamples(1) <= JTAG_TDO_IN;
+-- tdodebugsamples(31) <= begin_jtag_bitcalc;
+-- tdodebugsamples(30) <= jtag_clock_pulse1;
+-- tdodebugsamples(29) <= jtag_clock_pulse2;
+-- tdodebugsamples(28) <= jtag_sample_pulse1;
+-- tdodebugsamples(27) <= jtag_sample_pulse2;
+-- tdodebugsamples(26) <= jtag_sample_pulse3;
+-- tdodebugsamples(25) <= jtag_set_data_pulse;
+-- tdodebugsamples(1) <= JTAG_TDO_IN;
 
 RUN_COUNTER_OUT <= std_logic_vector(run_counter);
 STARTED_OUT  <= jtag_refresh_active;
@@ -554,8 +554,8 @@ REQUEST_RESET_OUT <= request_reset;
 the_bus_handler : trb_net16_regio_bus_handler
   generic map(
     PORT_NUMBER => 4,
-    PORT_ADDRESSES => (0 => x"0000", 1 => x"0140", 2 => x"0160", 3 => x"0200", others => (others => '0')),
-    PORT_ADDR_MASK => (0 => 8,       1 => 5,       2 => 5,       3 => 8,       others => 0)
+    PORT_ADDRESSES => (0 => x"0000", 1 => x"0100", 2 => x"0200", 3 => x"0300", others => (others => '0')),
+    PORT_ADDR_MASK => (0 => 8,       1 => 8,       2 => 8,       3 => 8,       others => 0)
     )
   port map(
     CLK                    => CLK_IN,
@@ -573,43 +573,43 @@ the_bus_handler : trb_net16_regio_bus_handler
     DAT_UNKNOWN_ADDR_OUT   => BUS_UNKNOWN_ADDR_OUT, -- noone here to answer your request
 
     BUS_ADDR_OUT(0*16+15 downto 0*16) => bus2_ram_addr_out,
-    BUS_ADDR_OUT(1*16+15 downto 1*16) => bus2_debug_addr_out,
-    BUS_ADDR_OUT(2*16+15 downto 2*16) => bus2_status2_addr_out,
-    BUS_ADDR_OUT(3*16+15 downto 3*16) => bus_command_addr,
+    BUS_ADDR_OUT(1*16+15 downto 1*16) => bus_ram1c_addr,
+    BUS_ADDR_OUT(2*16+15 downto 2*16) => bus_command_addr,
+    BUS_ADDR_OUT(3*16+15 downto 3*16) => bus_ram3b_addr,
     BUS_DATA_OUT(0*32+31 downto 0*32) => bus2_ram_data_out,
-    BUS_DATA_OUT(1*32+31 downto 1*32) => bus2_debug_data_out,
-    BUS_DATA_OUT(2*32+31 downto 2*32) => bus2_status2_data_out,
-    BUS_DATA_OUT(3*32+31 downto 3*32) => bus_command_data_out,
+    BUS_DATA_OUT(1*32+31 downto 1*32) => open,
+    BUS_DATA_OUT(2*32+31 downto 2*32) => bus_command_data_out,
+    BUS_DATA_OUT(3*32+31 downto 3*32) => open,
     BUS_READ_ENABLE_OUT(0)            => bus2_ram_read_enable_out,
-    BUS_READ_ENABLE_OUT(1)            => bus2_debug_read_enable_out,
-    BUS_READ_ENABLE_OUT(2)            => bus2_status2_read_enable_out,
-    BUS_READ_ENABLE_OUT(3)            => bus_command_read,
-    BUS_WRITE_ENABLE_OUT(0)              => bus2_ram_write_enable_out,
-    BUS_WRITE_ENABLE_OUT(1)              => bus2_debug_write_enable_out,
-    BUS_WRITE_ENABLE_OUT(2)              => bus2_status2_write_enable_out,
-    BUS_WRITE_ENABLE_OUT(3)              => bus_command_write,
-    BUS_TIMEOUT_OUT                      => open,
+    BUS_READ_ENABLE_OUT(1)            => bus_ram1c_read,
+    BUS_READ_ENABLE_OUT(2)            => bus_command_read,
+    BUS_READ_ENABLE_OUT(3)            => bus_ram3b_read,
+    BUS_WRITE_ENABLE_OUT(0)           => bus2_ram_write_enable_out,
+    BUS_WRITE_ENABLE_OUT(1)           => bus_ram1c_write,
+    BUS_WRITE_ENABLE_OUT(2)           => bus_command_write,
+    BUS_WRITE_ENABLE_OUT(3)           => bus_ram3b_write,
+    BUS_TIMEOUT_OUT                   => open,
 
     BUS_DATA_IN(0*32+31 downto 0*32)  => bus2_ram_data_in,
-    BUS_DATA_IN(1*32+31 downto 1*32)  => bus2_debug_data_in,
-    BUS_DATA_IN(2*32+31 downto 2*32)  => bus2_status2_data_in,
-    BUS_DATA_IN(3*32+31 downto 3*32)  => bus_command_data_in,
+    BUS_DATA_IN(1*32+31 downto 1*32)  => bus_ram1c_data_in,
+    BUS_DATA_IN(2*32+31 downto 2*32)  => bus_command_data_in,
+    BUS_DATA_IN(3*32+31 downto 3*32)  => bus_ram3b_data_in,
     BUS_DATAREADY_IN(0)               => bus2_ram_ack_in,
-    BUS_DATAREADY_IN(1)               => bus2_debug_ack_in,
-    BUS_DATAREADY_IN(2)               => bus2_status2_ack_in,
-    BUS_DATAREADY_IN(3)               => bus_command_ack,
+    BUS_DATAREADY_IN(1)               => bus_ram1c_ack,
+    BUS_DATAREADY_IN(2)               => bus_command_ack,
+    BUS_DATAREADY_IN(3)               => bus_ram3b_ack,
     BUS_WRITE_ACK_IN(0)               => bus2_ram_ack_in,
-    BUS_WRITE_ACK_IN(1)               => bus2_debug_ack_in,
-    BUS_WRITE_ACK_IN(2)               => bus2_status2_ack_in,
-    BUS_WRITE_ACK_IN(3)               => bus_command_ack,
+    BUS_WRITE_ACK_IN(1)               => '0',
+    BUS_WRITE_ACK_IN(2)               => bus_command_ack,
+    BUS_WRITE_ACK_IN(3)               => '0',
     BUS_NO_MORE_DATA_IN(0)            => bus2_ram_nack_in,
-    BUS_NO_MORE_DATA_IN(1)            => '0',
+    BUS_NO_MORE_DATA_IN(1)            => bus_ram1c_nack,
     BUS_NO_MORE_DATA_IN(2)            => '0',
-    BUS_NO_MORE_DATA_IN(3)            => '0',
-    BUS_UNKNOWN_ADDR_IN(0)               => '0',
-    BUS_UNKNOWN_ADDR_IN(1)               => bus2_debug_nack_in,
-    BUS_UNKNOWN_ADDR_IN(2)               => bus2_status2_nack_in,
-    BUS_UNKNOWN_ADDR_IN(3)               => bus_command_retry
+    BUS_NO_MORE_DATA_IN(3)            => bus_ram3b_nack,
+    BUS_UNKNOWN_ADDR_IN(0)            => '0',
+    BUS_UNKNOWN_ADDR_IN(1)            => bus_ram1c_unkwn,
+    BUS_UNKNOWN_ADDR_IN(2)            => bus_command_retry,
+    BUS_UNKNOWN_ADDR_IN(3)            => bus_ram3b_unkwn
     );
 
 
@@ -1260,7 +1260,6 @@ m26cs_stopped <= '1' when m26cs_state = M26CSS_STOPPED else '0';
 
 jtag_sample_pulse3_d1_next <= jtag_sample_pulse3;
 
-ram3b_a2 <= ram3b_a2_base_addr & ram3b_a2_rel_addr; -- hope this is the right order (base_addr should be the MSBs)
 
 SEQUENTIAL : process (CLK_IN)
 begin
@@ -2048,7 +2047,17 @@ BUS2_COMMAND_RW : process begin
       when M26C_CMD_GET_CRC_STATUS =>
         bus_command_data_in(MAX_NUMCHIPS - 1 downto 0) <= crc_status_register(MAX_NUMCHIPS - 1 downto 0);      
       when M26C_CMD_SET_RAMBASE =>
-        bus_command_data_in(MAX_NUMCHIPS_LD-1 downto 0) <= ram1a_a1_base_addr;        
+        bus_command_data_in(MAX_NUMCHIPS_LD-1 downto 0) <= ram1a_a1_base_addr;
+      when M26C_CMD_GET_M26CS_STATE =>
+        bus_command_data_in(7 downto 0)  <= debug_m26cs_state;
+      when M26C_CMD_GET_RAM1C_RUN_COUNTER =>
+        bus_command_data_in <= std_logic_vector(ram1c_run_counter);
+      when M26C_CMD_GET_RAM1C_CHAIN_STATUS =>
+        bus_command_data_in(3+MAX_NUMCHIPS_PLUS_ONE_LD-1 downto 0) <= ram1c_chain_status;
+      when M26C_CMD_GET_RAM3B_RUN_COUNTER =>
+        bus_command_data_in <= std_logic_vector(status2_run_counter);
+      when M26C_CMD_GET_RAM3B_CHAIN_STATUS =>
+        bus_command_data_in(3+MAX_NUMCHIPS_PLUS_ONE_LD-1 downto 0) <= status2_chain_status;        
       when M26C_CMD_SET_CSOPTIONS =>
         bus_command_data_in(0 downto 0)  <= m26csoptions(0 downto 0); -- bit 0 => skip bypassreg chaintest
       when M26C_CMD_SET_DELAY_EXPECTED_VALUES =>
@@ -2120,126 +2129,60 @@ end process;
 
 
 
-BUS2_DEBUG_R : process begin
+PROC_READ_1C : process begin
   wait until rising_edge(CLK_IN);
-  bus2_debug_ack_in  <= '0';
-  bus2_debug_nack_in <= '0';
-  bus2_debug_data_in <= (others => '0');
+  bus_ram1c_ack         <= '0';
+  bus_ram1c_nack        <= '0';
+  bus_ram1c_unkwn       <= '0';
+  bus_ram1c_ack_next    <= '0';
+  bus_ram1c_ack_next2   <= '0';
   
-  debugtdo_activate_strobe <= '0';
-  debugtdo_rd_en           <= '0';
-  resetdebugtdo_strobe     <= '0';
-  
-  if bus2_debug_write_enable_out = '1' then
-    bus2_debug_ack_in  <= '1';
-    bus2_debug_nack_in <= '0';
-    case bus2_debug_addr_out(4 downto 0) is
-      when ADDR_DEBUG_TEST =>
-        debug_test <= bus2_debug_data_out;
-      when ADDR_DEBUG_RAM1BADDR =>
-        ram1b_a2 <= bus2_debug_data_out(RAM_JTAG_REGISTERS_DEPTH-1 downto 0);
-      when ADDR_DEBUG_RAM1CADDR =>
-        ram1c_a2 <= bus2_debug_data_out(RAM_JTAG_REGISTERS_DEPTH-1 downto 0);
-      when ADDR_DEBUG_DEBUGTDO_TIMEOUT =>
-        debugtdo_timeout <= bus2_debug_data_out(31 downto 0);
-      when ADDR_DEBUG_DEBUGTDO_ACTIVATE =>
-        debugtdo_activate_strobe <= bus2_debug_data_out(0);
-      when ADDR_DEBUG_DEBUGTDO_CONTROLFIFO =>
-        debugtdo_rd_en        <= bus2_debug_data_out(0);
-        resetdebugtdo_strobe  <= bus2_debug_data_out(4);
-      when others =>
-        bus2_debug_ack_in  <= '0';
-        bus2_debug_nack_in <= '1';
-    end case;
-    
-  elsif bus2_debug_read_enable_out = '1' then
-    bus2_debug_ack_in  <= '1';
-    bus2_debug_nack_in <= '0';
-    case bus2_debug_addr_out(4 downto 0) is
-      when ADDR_DEBUG_TEST =>
-        bus2_debug_data_in <= debug_test;
-      when ADDR_DEBUG_M26CS_STATE =>
-        bus2_debug_data_in(7 downto 0) <= debug_m26cs_state;
-      when ADDR_DEBUG_TRIGGER_COUNT =>
-        bus2_debug_data_in <= std_logic_vector(debug_trigger_counter);
-      when ADDR_DEBUG_VERSION =>
-        bus2_debug_data_in <= std_logic_vector(to_unsigned(VERSION_NUMBER_TIME,32));
-      when ADDR_DEBUG_RAM1B_DATA =>
-        bus2_debug_data_in <= ram1b_dout2;
-      when ADDR_DEBUG_RAM1C_DATA =>
-        bus2_debug_data_in <= ram1c_dout2;
-      when ADDR_DEBUG_RAM1C_RUN_COUNTER =>
-        bus2_debug_data_in <= std_logic_vector(ram1c_run_counter);
-      when ADDR_DEBUG_RAM1C_CHAIN_STATUS =>
-        bus2_debug_data_in(3+MAX_NUMCHIPS_PLUS_ONE_LD-1 downto 0) <= ram1c_chain_status;
-      when ADDR_DEBUG_DEBUGTDO_SAMPLES =>
-        bus2_debug_data_in(31 downto 0) <= debugtdo_dout;
-      when ADDR_DEBUG_DEBUGTDO_GETFIFOSTATUS =>
-        bus2_debug_data_in(0) <= debugtdo_full;
-        bus2_debug_data_in(1) <= debugtdo_empty;
-        bus2_debug_data_in(2) <= debugtdo_overflow;
-        bus2_debug_data_in(3) <= debugtdo_underflow;
-      when ADDR_DEBUG_DEBUGTDO_TIMEOUT =>
-        bus2_debug_data_in(31 downto 0) <= debugtdo_timeout;
-      when ADDR_DEBUG_WRONCE_COUNT =>
-        bus2_debug_data_in(COUNTER_WIDTHS-1 downto 0) <= std_logic_vector(write_once_count);
-      when others =>
-        bus2_debug_ack_in  <= '0';
-        bus2_debug_nack_in <= '1';
-    end case;
+  if bus_ram1c_read = '1' then
+    if status2_copy_finished = '1' then
+      bus_ram1c_ack_next<= '1';
+      ram1c_a2          <= ram1a_a1_base_addr & bus_ram1c_addr(7 downto 0);
+    else
+      bus_ram1c_nack    <= '1';
+    end if;
+  elsif bus_ram1c_write = '1' then
+    bus_ram1c_unkwn     <= '1';
+  elsif bus_ram1c_ack_next = '1' then
+    bus_ram1c_ack_next2 <= '1';
+  elsif bus_ram1c_ack_next2 = '1' then
+    bus_ram1c_data_in   <= ram1c_dout2;
+    bus_ram1c_ack       <= '1';
   end if;
 end process;
 
 
-BUS2_STATUS2_R : process begin
+
+PROC_READ_3B : process begin
   wait until rising_edge(CLK_IN);
-  bus2_status2_data_in        <= (others => '0');
-  bus2_status2_ack_in         <= '0';
-  bus2_status2_nack_in        <= '0';
-  bus2_status2_read_ram3b     <= '0';
-  buf_bus2_status2_read_ram3b <= bus2_status2_read_ram3b;
+  bus_ram3b_ack         <= '0';
+  bus_ram3b_nack        <= '0';
+  bus_ram3b_unkwn       <= '0';
+  bus_ram3b_ack_next    <= '0';
+  bus_ram3b_ack_next2   <= '0';
   
-  if(buf_bus2_status2_read_ram3b = '1') then
-    bus2_status2_data_in <= ram3b_dout2;
-    bus2_status2_ack_in  <= '1';
-  end if;
-  if(bus2_status2_read_enable_out='1') then
-    -- STATUS register layout: 8 bits/chip 
-    -- first 32 bits : CRC status
-    -- bits i*32+31 downto i*32: bits 0: JTAG_ERROR, 1: WRITE_ERROR, 2: WRITE_ERROR2, 3: READ_ERROR, 4: READ_ERROR2, 
-    --                                5: DATA_CHANGED, 6: reserved, 7: reserved 
-    if(bus2_status2_addr_out(4) = '1') then -- ram3b
-      ram3b_a2_rel_addr       <= bus2_status2_addr_out(3 downto 0);
-      bus2_status2_read_ram3b <= '1';
-    else
-      bus2_status2_ack_in <= '1';
-      case bus2_status2_addr_out(4 downto 0) is
-        when ADDR_STATUS2_TRIGGERCOUNTER_COPY =>
-          bus2_status2_data_in <= std_logic_vector(status2_run_counter);
-        when ADDR_STATUS2_CHAIN_STATUS_COPY =>
-          bus2_status2_data_in(3+MAX_NUMCHIPS_PLUS_ONE_LD-1 downto 0) <= status2_chain_status;
-        when ADDR_STATUS2_UPDATING =>
-          bus2_status2_data_in(0) <= not status2_copy_finished;
-        when ADDR_STATUS2_RAM3B_BASEADDR =>
-          bus2_status2_data_in(RAM_ERROR_COUNTS_DEPTH-4 -1 downto 0) <= ram3b_a2_base_addr;
-        when ADDR_STATUS2_STARTED =>
-          bus2_status2_data_in(0) <= jtag_refresh_active;
-        when others =>
-          bus2_status2_ack_in <= '0';
-          bus2_status2_nack_in <= '1';
-      end case;
-    end if;
-  end if;
-  if(bus2_status2_write_enable_out='1') then
-    if(bus2_status2_addr_out(4 downto 0) = ADDR_STATUS2_RAM3B_BASEADDR) then
-      ram3b_a2_base_addr   <= bus2_status2_data_out(RAM_ERROR_COUNTS_DEPTH-4 -1 downto 0);
-      bus2_status2_ack_in  <= '1';
+  if bus_ram3b_read = '1' then
+    if status2_copy_finished = '1' then
+      bus_ram3b_ack_next<= '1';
+      ram3b_a2          <= '0' & bus_ram3b_addr(7 downto 0);
     else
-      bus2_status2_nack_in <= '1';
+      bus_ram3b_nack    <= '1';
     end if;
+  elsif bus_ram3b_write = '1' then
+    bus_ram3b_unkwn     <= '1';
+  elsif bus_ram3b_ack_next = '1' then
+    bus_ram3b_ack_next2 <= '1';
+  elsif bus_ram3b_ack_next2 = '1' then
+    bus_ram3b_data_in   <= ram3b_dout2;
+    bus_ram3b_ack       <= '1';
   end if;
 end process;
 
+
+
 debug_m26cs_state_process : process begin
   wait until rising_edge(CLK_IN);
   case m26cs_state is
@@ -2289,31 +2232,31 @@ end process;
 IDLE_OUT <= idle_out_signal;
 
 
-ALL_debugtdo : process( CLK_IN) 
-begin
-  if(rising_edge(CLK_IN)) then
-    if(RESET_IN= '1') then
-      debugtdo_counter <= (others => '0');
-      debugtdo_active <= '0';
-      debugtdo_ran <= '0';
-    else
-      -- COUNTER
-      debugtdo_counter <= std_logic_vector(unsigned(debugtdo_counter) + 1);
-      -- reset counter in idle/stopped states => counter times the elapsed time since start of m26cs state machine
-      -- also clear debugtdo_active
-      if(m26cs_state = M26CSS_WAIT_FOR_TRIGGER or m26cs_state = M26CSS_STOPPED) then
-        debugtdo_counter <=  (others => '0');
-        if(debugtdo_ran = '1') then
-          debugtdo_active <= '0';
-        end if;
-        debugtdo_ran <= '0';
-      else
-        debugtdo_ran <= '1';
-      end if;
-      if(debugtdo_activate_strobe = '1') then
-        debugtdo_active <= '1';
-      end if;
-    end if;
-  end if;
-end process;
+-- ALL_debugtdo : process( CLK_IN) 
+-- begin
+--   if(rising_edge(CLK_IN)) then
+--     if(RESET_IN= '1') then
+--       debugtdo_counter <= (others => '0');
+--       debugtdo_active <= '0';
+--       debugtdo_ran <= '0';
+--     else
+--       -- COUNTER
+--       debugtdo_counter <= std_logic_vector(unsigned(debugtdo_counter) + 1);
+--       -- reset counter in idle/stopped states => counter times the elapsed time since start of m26cs state machine
+--       -- also clear debugtdo_active
+--       if(m26cs_state = M26CSS_WAIT_FOR_TRIGGER or m26cs_state = M26CSS_STOPPED) then
+--         debugtdo_counter <=  (others => '0');
+--         if(debugtdo_ran = '1') then
+--           debugtdo_active <= '0';
+--         end if;
+--         debugtdo_ran <= '0';
+--       else
+--         debugtdo_ran <= '1';
+--       end if;
+--       if(debugtdo_activate_strobe = '1') then
+--         debugtdo_active <= '1';
+--       end if;
+--     end if;
+--   end if;
+-- end process;
 end architecture;
index f27b318b22aed7931f39a6fe8f580e1ec4ed714d..03805eb5780aaeab6333df070fec6aa592c0cf93 100644 (file)
@@ -14,12 +14,6 @@ constant CMD_UPDATE_DR : std_logic_vector (3 downto 0) := x"6";
 constant CMD_RESET_JTAG : std_logic_vector (3 downto 0) := x"7";
 constant CMD_READ_TDO   : std_logic_vector (3 downto 0) := x"8";
 
-constant M26C_CMD_START                            : std_logic_vector (7 downto 0) := x"40";
-constant M26C_CMD_REMOVE_SENSOR                    : std_logic_vector (7 downto 0) := x"41";
-constant M26C_CMD_GET_NUMCHIPS_ACTIVE              : std_logic_vector (7 downto 0) := x"11";
-constant M26C_CMD_GET_TRIGGER_COUNT                : std_logic_vector (7 downto 0) := x"12";
-constant M26C_CMD_GET_LAST_NOT_REMOVED             : std_logic_vector (7 downto 0) := x"13";
-constant M26C_CMD_GET_CRC_STATUS                   : std_logic_vector (7 downto 0) := x"14";
 constant M26C_CMD_SET_NUMCHIPS_CONFIGURED          : std_logic_vector (7 downto 0) := x"00";
 constant M26C_CMD_SET_JTAG_CLOCK_CYCLE_LENGTH      : std_logic_vector (7 downto 0) := x"01";
 constant M26C_CMD_SET_JTAG_CLOCK_TIME1             : std_logic_vector (7 downto 0) := x"02";
@@ -28,13 +22,24 @@ constant M26C_CMD_SET_JTAG_SAMPLE_TIME1            : std_logic_vector (7 downto
 constant M26C_CMD_SET_JTAG_SAMPLE_TIME2            : std_logic_vector (7 downto 0) := x"05";
 constant M26C_CMD_SET_JTAG_SAMPLE_TIME3            : std_logic_vector (7 downto 0) := x"06";
 constant M26C_CMD_SET_JTAG_SET_DATA_TIME           : std_logic_vector (7 downto 0) := x"07";
+constant M26C_CMD_SET_DELAY_EXPECTED_VALUES        : std_logic_vector (7 downto 0) := x"08"; -- bits 1 downto 0 as unsigned number of TCK clocks expected values are delayed
 constant M26C_CMD_GET_RUN_COUNT                    : std_logic_vector (7 downto 0) := x"10";
+constant M26C_CMD_GET_NUMCHIPS_ACTIVE              : std_logic_vector (7 downto 0) := x"11";
+constant M26C_CMD_GET_TRIGGER_COUNT                : std_logic_vector (7 downto 0) := x"12";
+constant M26C_CMD_GET_LAST_NOT_REMOVED             : std_logic_vector (7 downto 0) := x"13";
+constant M26C_CMD_GET_CRC_STATUS                   : std_logic_vector (7 downto 0) := x"14";
+constant M26C_CMD_START                            : std_logic_vector (7 downto 0) := x"40";
+constant M26C_CMD_REMOVE_SENSOR                    : std_logic_vector (7 downto 0) := x"41";
+constant M26C_CMD_SET_CSOPTIONS                    : std_logic_vector (7 downto 0) := x"42"; -- bit 0 => skip BYPASS CHAINTEST
+constant M26C_CMD_SET_RAMBASE                      : std_logic_vector (7 downto 0) := x"43"; -- bit 0 => skip BYPASS CHAINTEST
 constant M26C_CMD_SET_BREAKPOINTS                  : std_logic_vector (7 downto 0) := x"50";
 constant M26C_CMD_COPY_TO_STATUS2                  : std_logic_vector (7 downto 0) := x"51";
 constant M26C_CMD_COPY_RAM1B1C_SINGLE_TRIGGER      : std_logic_vector (7 downto 0) := x"52"; -- trigger on: bit 0 => read error, 1 => write error, 2 => data changed
-constant M26C_CMD_SET_CSOPTIONS                    : std_logic_vector (7 downto 0) := x"42"; -- bit 0 => skip BYPASS CHAINTEST
-constant M26C_CMD_SET_RAMBASE                      : std_logic_vector (7 downto 0) := x"43"; -- bit 0 => skip BYPASS CHAINTEST
-constant M26C_CMD_SET_DELAY_EXPECTED_VALUES        : std_logic_vector (7 downto 0) := x"08"; -- bits 1 downto 0 as unsigned number of TCK clocks expected values are delayed
+constant M26C_CMD_GET_M26CS_STATE                  : std_logic_vector (7 downto 0) := x"53";
+constant M26C_CMD_GET_RAM1C_RUN_COUNTER            : std_logic_vector (7 downto 0) := x"54";
+constant M26C_CMD_GET_RAM1C_CHAIN_STATUS           : std_logic_vector (7 downto 0) := x"55";
+constant M26C_CMD_GET_RAM3B_RUN_COUNTER            : std_logic_vector (7 downto 0) := x"56";
+constant M26C_CMD_GET_RAM3B_CHAIN_STATUS           : std_logic_vector (7 downto 0) := x"57";
 
 -- 0xb100 - 0xb2ff
 -- RAM:               0xb000 - 0xb0ff