From 58bb06a57380188db6bacf376d040dca93082280 Mon Sep 17 00:00:00 2001 From: hadeshyp Date: Thu, 11 Mar 2010 18:12:05 +0000 Subject: [PATCH] *** empty log message *** --- main.tex | 12 +-- regio.png | Bin 0 -> 52458 bytes slowcontrol.tex | 237 +++++++++++++++++++++++++++++++++--------------- software.tex | 6 +- 4 files changed, 175 insertions(+), 80 deletions(-) create mode 100755 regio.png diff --git a/main.tex b/main.tex index 16092d1..7b9f754 100755 --- a/main.tex +++ b/main.tex @@ -64,17 +64,17 @@ \usepackage{remreset} \makeatletter\@removefromreset{footnote}{chapter}\makeatother -\lstset{ %language = VHDL, +\lstset{ language = VHDL, numbers =left, stepnumber =1, frame =single, captionpos=b, breaklines=true - % basicstyle=\footnotesize, - %identifierstyle=\footnotesize, - stringstyle=\footnotesize, - numberstyle=\footnotesize, - fontadjust=true} + basicstyle=\small, + identifierstyle=\small, + stringstyle=\small, + numberstyle=\small, + fontadjust=false} \begin{document} \newcounter{line} diff --git a/regio.png b/regio.png new file mode 100755 index 0000000000000000000000000000000000000000..5965fa7f1809b7fdb34bce67d6c7d4bacb8a80d4 GIT binary patch literal 52458 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 E0itq8Jpcdz literal 0 HcmV?d00001 diff --git a/slowcontrol.tex b/slowcontrol.tex index 2894a44..f7f6817 100755 --- a/slowcontrol.tex +++ b/slowcontrol.tex @@ -1,6 +1,60 @@ -The slowcontrol endpoint (``RegIO'') allows to read and write data from and to the endpoints. For this purpose it uses 16 bit wide addresses and 32 bit wide data words along with read/write strobe signals for all operations. +\label{RegIO} +The RegIO component handles all data received on the slow control channel. Its structure is depicted in figure \ref{fig:regio}. It provides status registers that are common for all boards, user defineable +status and control registers, and stores information about the hardware. As already mentioned, these common registers are needed to provide a universal monitoring tool for all parts of the detector. + +Each register has one 16Bit address assigned as shown in Table~\ref{regioaddressmap}. +Each address corresponds to one 32 Bit register or data word. + +To access all registers and other information, a simple command structure is +defined. The protocol is quite simple: For each access a 64 bit data word +is sent as shown in Table~\ref{RegIO:protocol}. The \netname{dtype} of the +packets carries the desired operation, followed by the first 16 bit word with +the register address and, in case of a write access, 32 bits of data. +Altogether there are four different operations implemented: Single and multiple reads and writes from +or to the same (or ascending) address. The multiple access is only supported on the internal +data port and can be used to read data from a FIFO. + +\begin{figure} + \centering + \includegraphics[scale=.8]{regio.png} + \caption[Register read / write controller]{Implementation of the +register read / write and address controllers. Data received from the +application interface is interpreted by a central controller that access +various registers as requested. An address controller manages the network +addresses and the board ID.} + \label{fig:regio} +\end{figure} + + +\begin{table} +\begin{center} + \begin{tabular}[c]{|c|c|c|c|c|c|} + \hline + \textsc{Dtype} & \textsc{Description} & F0 & F1 & F2 & F3 \\ + \hline\hline + 8 & read register & address & 0 & 0 & reserved\\ + 9 & write register & address & data(31..16) & data(15..0) & reserved \\ + A & read multiple & address & config* & 0 & reserved \\ + B & write multiple & address & config* & 0 & reserved \\ + & & 0 & data(31..16) & data(15..0) & reserved \\ + F & network administration & \multicolumn{4}{c|}{see +section about addresses} \\ + \hline + \end{tabular} + \caption{[Register read/write protocol]Register read/write protocol. The config word for multiple accesses has the highest bit selecting between fixed (0) addresses and ascending (1) addresses. The lower 15 bit on the read operation select the maximum number of read accesses to be made. A multiple write always consists of one starting word containing address and mode followed by an arbitrary number of data packets.} + \label{RegIO:protocol} +\end{center} +\end{table} + + +Internally it also has logic to readout the 1-wire temperature logic and to assign network addresses. Other features include a global timer and configurable easy-to-use status and control registers. Additional, more complex logic can be connected to the internal data bus. + + + + + + -Internally it also has logic to readout the 1-wire temperature logic and to assign network addresses. Other features include a global timer and configurable easy-to-use status and control registers. Additional, more complex logic can be connected to an internal data bus. @@ -23,21 +77,23 @@ Common_Stat_Reg_Strobe(std_comstatreg-1 downto 0) Common_Ctrl_Reg_Strobe(std_comctrlreg-1 downto 0) Stat_Reg_Strobe(2**(num_stat_regs)-1 downto 0) Ctrl_Reg_Strobe(2**(num_ctrl_regs)-1 downto 0) -\end{lstlisting} +\end{lstlisting} -\paragraph{Onewire} +\paragraph{Onewire} The temperature sensor on each board is connected to the following ports. In case no temperature sensor is connected directly, the generic setting \genericname{Regio\_Use\_1wire\_Interface} has to be set accordingly. \begin{description} - \item[Regio\_Onewire\_Inout] Direct connection to a 1-wire temperature sensor - \item[Regio\_Onewire\_Monitor\_Out] Outputs a copy of the signals on the 1-wire bus. Used to transport information to another FPGA. - \item[Regio\_Onewire\_Monitor\_In] The corresponding input to monitor traffic on a 1-wire bus if no sensor is connected directly to the fpga. + \item[\portname{Regio\_Onewire\_Inout}] Direct connection to a 1-wire temperature sensor + \item[\portname{Regio\_Onewire\_Monitor\_Out}] Outputs a copy of the signals on the 1-wire bus. Used to transport information to another FPGA. + \item[\portname{Regio\_Onewire\_Monitor\_In}] The corresponding input to monitor traffic on a 1-wire bus if no sensor is connected directly to the fpga. \end{description} \paragraph{Timers} +The timers give a rough information on the current time. The global time can be set using normal slow control accesses. That means, it has an inherent ambiguity of about 200 ns plus a drift of up to 20ppm compared to other boards. The additional timer ticks can be used to simplify other parts of the logic, e.g. as clock enable signal for slowly running parts of the design. + \begin{description} \item[\portname{Global\_Time\_Out}] The global time measured in microseconds. This time will be synchronized on all boards from time to time to keep descrepancies between the boards low. E.g. used for marking debugging and status information. \item[\portname{Local\_Time\_Out}] The local time is used to measure in the sub-microsecond range. It counts with the internal clock frequency (standard: 100 MHz) and is reset each microsecond. @@ -55,7 +111,7 @@ An access cycle on the internal data bus consists of two actions: First, RegIO s \item[\portname{Regio\_Addr\_Out}] (16 bit) address port. Address is valid when either of \portname{read\_enable} and \portname{write\_enable} is high. \item[\portname{Regio\_Read\_Enable\_Out}] Read enable strobe. \item[\portname{Regio\_Write\_Enable\_Out}] Write enable strobe. - \item[\portname{Regio\_Data\_Out}] (32 bit) Data output of regIO, input to the user. Valid when \portname{write\_enable} is high. + \item[\portname{Regio\_Data\_Out}] (32 bit) Data output of regIO, input to the user. Valid when \portname{write\_enable} is high. \item[\portname{Regio\_Data\_In}] (32 bit) Data input to regIO, output from the user. Valid when \portname{dataready\_in} is high. \item[\portname{Regio\_Dataready\_In}] User signal to show that \portname{data\_in} is valid. May only be used after a strobe on \portname{read\_enable}. \item[\portname{Regio\_No\_More\_Data\_In}] User signal. After a read strobe: User has no more data to read from this address. After a write strobe: User is not able to handle more data on this address now. @@ -72,78 +128,74 @@ An access cycle on the internal data bus consists of two actions: First, RegIO s \item[\portname{Regio\_Init\_Ctrl\_Regs}] The initial value of all control registers. This generic has a fixed size of 8x32 bits \item[\portname{Regio\_Use\_Dat\_Port}] Selects to have an internal data port to connect own registers to in the address space above 0x0100 \item[\portname{Regio\_Use\_1wire\_Interface}] Set to \constname{c\_Yes} means a temperature sensor is connected, \constname{c\_\-Mon\-itor} means there is a 1-wire data stream sent by another FPGA, \constname{c\_No} means temperature and unique id are written using some user supplied logic. -\end{description} + \item[\portname{Use\_Dat\_Port}] The internal data port can be switched off if not in use. Hence, all accesses to addresses above 0x100 will be automatically answered by RegIO. + \item[\portname{Init\_Address}] The network address the board is given initially. (note: does not work using Synplify under Linux) + \item[\portname{Init\_Endpoint\_Id}] The endpoint ID. On boards with two or more FPGAs this is usually the FPGA number according to the boards schematics. Boards with only one FPGA use 1 here. Basic Rule: Each FPGA connected to the same temperature sensore has to have a different endpoint ID to be indentifieable. + \item[\portname{Compile\_Time}] The UNIX timestamp when the design has been compiled. Must be set by hand or using our standard compile script. + \item[\portname{Hardware\_Version}] These 32bit give information about the type of hardware. The upper 16 bit are defined in table \ref{HardwareInformation}, the lower 16 bits are free to use. -\subsection{RegIo Bus Handler} -If you want to connect several registers or function blocks to the internal data bus, you can use the RegIO Bus Handler. This special entity (\filename{trb\_net16\_regio\_bus\_handler}) simplifies to generate several address sub-spaces on the internal data bus. It is configured using three generic values as shown in this listing: +\end{description} -\lstset { caption ={Configuration of RegIO Bus Handler}} -\begin{lstlisting} -The_Regio_Bus_Handler : trb_net16_regio_bus_handler - generic map( - Port_Number => 2, - Port_Addresses => (0=>x"A000", 1=>x"8000", others=>x"0000"), - Port_Addr_Mask => (0=>8, 1=>6, others=>0) - ) -\end{lstlisting} -This setting introduces two address spaces: One starting at 0xA000 with a size of 2**8 addresses, i.e. from 0xA000 to 0xA0FF, and one starting at 0x8000 with 2**6 addresses, i.e. from 0x8000 to 0x803F. + +\subsection{RegIo Bus Handler} +If you want to connect several registers or function blocks to the internal data bus, you can use the RegIO Bus Handler. This special entity (\filename{trb\_net16\_regio\_bus\_handler}) simplifies to generate several address sub-spaces on the internal data bus. It is configured using three generic values as shown in the listing below. These settings introduce two address spaces: One starting at 0xA000 with a size of 2**8 addresses, i.e. from 0xA000 to 0xA0FF, and one starting at 0x8000 with 2**6 addresses, i.e. from 0x8000 to 0x803F. The behaviour on the data busses is identical to the original RegIO interface. Connecting to the different address spaces can be done in a convenient form as shown in the following piece of code: \lstset { caption ={Excerpt from the regio\_bus\_handler used in MDC OEP.}} \begin{lstlisting} - THE_REGIO_BUS_HANDLER : trb_net16_regio_bus_handler - generic map( - PORT_NUMBER => 6, - PORT_ADDRESSES => - (0 => x"A000", 1 => x"8000", others => x"0000"), - PORT_ADDR_MASK => - (0 => 8, 1 => 6, others => 0) - ) - port map( - clk => clk_100, - reset => reset_internal, - --I/O to RegIO - dat_addr_in => regio_addr_out, - dat_data_in => regio_data_out, - dat_data_out => regio_data_in, - dat_read_enable_in => regio_read_enable_out, - dat_write_enable_in => regio_write_enable_out, - dat_timeout_in => regio_timeout_out, - dat_dataready_out => regio_dataready_in, - dat_write_ack_out => regio_write_ack_in, - dat_no_more_data_out => regio_no_more_data_in, - dat_unknown_addr_out => regio_unknown_addr_in, - --Bus Handler (Threshold memory) - bus_read_enable_out(0) => thresh_mem_read, - bus_write_enable_out(0) => thresh_mem_write, - bus_data_out(0*32+15 downto 0*32) => thresh_mem_data, - bus_data_out(0*32+31 downto 0*32+16)=> open, - bus_addr_out(0*16+8 downto 0*16) => thresh_mem_addr, - bus_addr_out(0*16+15 downto 0*16+9) => open, - bus_timeout_out(0) => open, - bus_data_in(0*32+15 downto 0*32) => thresh_mem_data_out, - bus_data_in(0*32+31 downto 0*32+16) => x"0000", - bus_dataready_in(0) => last_reg_regio_read, - bus_write_ack_in(0) => reg_regio_write, - bus_no_more_data_in(0) => '0', - bus_unknown_addr_in(0) => '0', - --Bus Handler (ADC) - bus_read_enable_out(1) => adc_read, - bus_write_enable_out(1) => adc_write, - bus_data_out(1*32+31 downto 1*32) => adc_data_in, - bus_addr_out(1*16+5 downto 1*16) => adc_addr, - bus_addr_out(1*16+15 downto 1*16+6) => open, - bus_timeout_out(1) => adc_timeout, - bus_data_in(1*32+31 downto 1*32) => adc_data_out, - bus_dataready_in(1) => adc_dataready, - bus_write_ack_in(1) => adc_write_ack, - bus_no_more_data_in(1) => adc_no_more_data, - bus_unknown_addr_in(1) => adc_unknown_addr, - [...] -\end{lstlisting} +THE_REGIO_BUS_HANDLER : trb_net16_regio_bus_handler +generic map( + PORT_NUMBER => 6, + PORT_ADDRESSES => + (0 => x"A000", 1 => x"8000", others => x"0000"), + PORT_ADDR_MASK => + (0 => 8, 1 => 6, others => 0) + ) +port map( + clk => clk_100, + reset => reset_internal, +--I/O to RegIO + dat_addr_in => regio_addr_out, + dat_data_in => regio_data_out, + dat_data_out => regio_data_in, + dat_read_enable_in => regio_read_enable_out, + dat_write_enable_in => regio_write_enable_out, + dat_timeout_in => regio_timeout_out, + dat_dataready_out => regio_dataready_in, + dat_write_ack_out => regio_write_ack_in, + dat_no_more_data_out => regio_no_more_data_in, + dat_unknown_addr_out => regio_unknown_addr_in, +--Bus Handler (Threshold memory) + bus_read_enable_out(0) => thresh_mem_read, + bus_write_enable_out(0) => thresh_mem_write, + bus_data_out(0*32+15 downto 0*32) => thresh_mem_data, + bus_data_out(0*32+31 downto 0*32+16)=> open, + bus_addr_out(0*16+8 downto 0*16) => thresh_mem_addr, + bus_addr_out(0*16+15 downto 0*16+9) => open, + bus_timeout_out(0) => open, + bus_data_in(0*32+15 downto 0*32) => thresh_mem_data_out, + bus_data_in(0*32+31 downto 0*32+16) => x"0000", + bus_dataready_in(0) => last_reg_regio_read, + bus_write_ack_in(0) => reg_regio_write, + bus_no_more_data_in(0) => '0', + bus_unknown_addr_in(0) => '0', +--Bus Handler (ADC) + bus_read_enable_out(1) => adc_read, + bus_write_enable_out(1) => adc_write, + bus_data_out(1*32+31 downto 1*32) => adc_data_in, + bus_addr_out(1*16+5 downto 1*16) => adc_addr, + bus_addr_out(1*16+15 downto 1*16+6) => open, + bus_timeout_out(1) => adc_timeout, + bus_data_in(1*32+31 downto 1*32) => adc_data_out, + bus_dataready_in(1) => adc_dataready, + bus_write_ack_in(1) => adc_write_ack, + bus_no_more_data_in(1) => adc_no_more_data, + bus_unknown_addr_in(1) => adc_unknown_addr, + [...] +\end{lstlisting} @@ -235,3 +287,46 @@ The first common control register consists of strobe signals for dummy timing tr \label{CommonCtrlReg0} \end{center} \end{table} + +\paragraph{Hardware Information (0x42)} +This register holds information about the type of hardware. The upper 16 bit define the hardware type, the lower 16 bit are kept free to mark minor differences in the hardware setup such as optional patch wires used in the design. Design variants can also be marked using these bits. Their definition is given in the section dealing with detector specific features. The upper 16 bit are defined in table \ref{HardwareInformation} + +\begin{table}[htbp] +\begin{center} +\begin{tabularx}{\textwidth}{|c|X|} +\hline +\textbf{Value (hex)} & \textbf{Description} \\ +\hline +\hline +1110 & MDC AddOn version 1 FPGA 1 \\ +1120 & MDC AddOn version 1 FPGA 2 \\ +1130 & MDC AddOn version 1 FPGA 3 \\ +1210 & MDC AddOn version 2 FPGA 1 -- 4\\ +1250 & MDC AddOn version 2 FPGA 5 \\ +2100 & MDC OEP version 1 \\ +2200 & MDC OEP version 2 \\ +2300 & MDC OEP version 3 \\ +3100 & RICH ADCM version 1 \\ +3200 & RICH ADCM version 2 \\ +3300 & RICH ADCM version 3 \\ +4100 & Shower AddOn version 1 \\ +4210 & Shower AddOn version 2 FPGA 1 \\ +4220 & Shower AddOn version 2 FPGA 2 \\ +4230 & Shower AddOn version 2 FPGA 3 \\ +5100 & CTS AddOn FPGA 1 \\ +5200 & CTS AddOn FPGA 2 \\ +6100 & Hub AddOn version 1 \\ +6210 & Hub AddOn version 2 FPGA 1 \\ +6220 & Hub AddOn version 2 FPGA 2 without GbE\\ +6221 & Hub AddOn version 2 FPGA 2 with GbE\\ +7300 & PEXOR version 3 \\ +8000 & TRB (purpose not defined)\\ +8100 & TOF TRB \\ +8200 & Start/Veto TRB \\ +8300 & RPC TRB \\ +\hline +\end{tabularx} +\caption{Upper 16 bit in register 0x42 marking the hardware the design is belonging to. The value can be set by a generic value of the TrbNet endpoint. The lower 16bit are not globally defined.} +\label{HardwareInformation} +\end{center} +\end{table} diff --git a/software.tex b/software.tex index 26d933b..be1f30e 100755 --- a/software.tex +++ b/software.tex @@ -22,7 +22,7 @@ Currently, there are three main software tools for accessing TrbNet: trbcmd, trb Placeholders are defined as follows: \begin{description} \item[\$addr] TrbNet address, 16bit long, preceded by \verb|ax| prefix in the form, example: \verb|ax1234| or system name (\$system) - \item[\$channel] A value identifying a TrbNet channel. Usually either 0,1 or 3. + \item[\$channel] A value identifying a TrbNet channel. Usually either 0,1 or 3. Verbose names trigger, ipu, control can also be used. \item[\$read] A keyword, one of \verb|read| and \verb|get| \item[\$port] A value identifying one port of a hub. Usually a number between 0 and 12. \item[\$select] A keyword, one of \verb|select|, \verb|set| and \verb|switch| @@ -105,8 +105,8 @@ Gives back information about hub ports on which a timeout occured. Standard outp Example output: \verb|Timeout on hub f123 channel 0 port 7| \\ The raw option gives the same information but as one 32bit value per channel and board with one bit set for each port with a timeout. -\paragraph*{\$read hub packets} optional: \verb|$addr|, \verb|raw|, \verb|port $port| \\ -Reads the amount of packets received on IPU and slow control channel on the given hub and port or for all ports if now port number is given. The raw option outputs one 32bit number, lower 16bit are the packet counter on IPU, upper 16 bit are the packet counter on the slow control channel. +\paragraph*{\$read hub packets channel \$channel} optional: \verb|$addr|, \verb|raw|, \verb|port $port| \\ +Reads the amount of packets received on IPU and slow control channel on the given hub and port or for all ports if no port number is given. The raw option outputs one 32bit number for each channel. \paragraph*{\$read hub waiting (channel \$channel)?} optional: \verb|$addr|, \verb|raw| \\ Shows all ports and channels on the addressed hubs that are currently waiting for a reply (more precisely: waiting for a TRM in the reply channel). Although channel can be chosen freely, the value read on channel 3 is accurate, but all connected channels will always be marked as waiting. This is the case since there actually is a transfer going on - namely this request itself. If no channel is selected, information from all channels 0 and 1 is shown. The output is either in plain text (standard) or in raw format. -- 2.43.0