<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pct.wiki.uib.no/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wac002</id>
	<title>pCT - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://pct.wiki.uib.no/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wac002"/>
	<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/Special:Contributions/Wac002"/>
	<updated>2026-05-05T00:20:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Client_benchmark.cpp&amp;diff=779</id>
		<title>Client benchmark.cpp</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Client_benchmark.cpp&amp;diff=779"/>
		<updated>2020-09-17T21:49:11Z</updated>

		<summary type="html">&lt;p&gt;Wac002: Created page with &amp;quot; &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt; #include &amp;lt;errno.h&amp;gt; #include &amp;lt;netdb.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;sys/socket.h&amp;gt; #include &amp;lt;unistd.h&amp;gt;  #include &amp;lt;chrono&amp;gt; #incl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
#include &amp;lt;netdb.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;chrono&amp;gt;&lt;br /&gt;
#include &amp;lt;cstring&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;thread&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]) {&lt;br /&gt;
  int s;&lt;br /&gt;
  unsigned short port;&lt;br /&gt;
  struct sockaddr_in server;&lt;br /&gt;
  struct hostent *hp;&lt;br /&gt;
  char buf[4096];&lt;br /&gt;
&lt;br /&gt;
  // if (argc != 3) {&lt;br /&gt;
  //  printf(&amp;quot;Usage: %s &amp;lt;host address&amp;gt; &amp;lt;port&amp;gt; \n&amp;quot;, argv[0]);&lt;br /&gt;
  //  exit(1);&lt;br /&gt;
  //}&lt;br /&gt;
  port = htons(atoi(argv[2]));&lt;br /&gt;
&lt;br /&gt;
  /* Create a datagram socket in the internet domain and use the&lt;br /&gt;
   * default protocol (UDP).&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
  if ((s = socket(AF_INET, SOCK_DGRAM, 0)) &amp;lt; 0) {&lt;br /&gt;
    perror(&amp;quot;socket()&amp;quot;);&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
  struct timeval tv;&lt;br /&gt;
  tv.tv_sec = 0;&lt;br /&gt;
  tv.tv_usec = 2000;&lt;br /&gt;
  if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &amp;amp;tv, sizeof(tv)) &amp;lt; 0) {&lt;br /&gt;
    perror(&amp;quot;Error setting timeout&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  // printf(tvStart.tv_sec);&lt;br /&gt;
  /* Set up the server name */&lt;br /&gt;
  server.sin_family = AF_INET; /* Internet Domain    */&lt;br /&gt;
  server.sin_port = port;      /* Server Port        */&lt;br /&gt;
  std::string ip = &amp;quot;192.168.2.20&amp;quot;;&lt;br /&gt;
  hp = gethostbyname(ip.c_str());&lt;br /&gt;
  if (hp == 0) perror(&amp;quot;Unknown host&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  bcopy((char *)hp-&amp;gt;h_addr, (char *)&amp;amp;server.sin_addr, hp-&amp;gt;h_length);&lt;br /&gt;
&lt;br /&gt;
  char msg[] = {0x20, 0xFF, 0xFF, 0x8};  // Send command no ack, request&lt;br /&gt;
  /* Send the message in buf to the server */&lt;br /&gt;
  unsigned int slen = sizeof(struct sockaddr_in);&lt;br /&gt;
&lt;br /&gt;
  struct timeval tval;&lt;br /&gt;
  int rslt;&lt;br /&gt;
  int packNum = 65535;&lt;br /&gt;
&lt;br /&gt;
  std::chrono::high_resolution_clock nowTimePoint2;&lt;br /&gt;
&lt;br /&gt;
  auto statSize = 10;&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;start\n&amp;quot;;&lt;br /&gt;
  auto recvdBytes = 0;&lt;br /&gt;
  auto timeouts = 0;&lt;br /&gt;
  msg[0] = 0x60;&lt;br /&gt;
  if (sendto(s, msg, (sizeof(msg)), 0, (struct sockaddr *)&amp;amp;server,&lt;br /&gt;
             sizeof(server)) &amp;lt; 0) {&lt;br /&gt;
    perror(&amp;quot;sendto()&amp;quot;);&lt;br /&gt;
    exit(2);&lt;br /&gt;
  }&lt;br /&gt;
  std::this_thread::sleep_for(std::chrono::milliseconds(100));&lt;br /&gt;
&lt;br /&gt;
  for (size_t l = 2480; l &amp;lt;= 4080; l += 100) {&lt;br /&gt;
    timeouts = 0;&lt;br /&gt;
    msg[3] = (l / 16);&lt;br /&gt;
    // printf(&amp;quot;%hhX&amp;quot;, msg[3]);&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; (l / 16) * 16 &amp;lt;&amp;lt; &#039;,&#039;;&lt;br /&gt;
&lt;br /&gt;
    for (size_t i = 0; i &amp;lt; statSize; i++) {&lt;br /&gt;
      msg[0] = 0x20;&lt;br /&gt;
      auto start = std::chrono::time_point_cast&amp;lt;std::chrono::nanoseconds&amp;gt;(&lt;br /&gt;
          nowTimePoint2.now());&lt;br /&gt;
      if (sendto(s, msg, (sizeof(msg)), 0, (struct sockaddr *)&amp;amp;server,&lt;br /&gt;
                 sizeof(server)) &amp;lt; 0) {&lt;br /&gt;
        perror(&amp;quot;sendto()&amp;quot;);&lt;br /&gt;
        exit(2);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t j = 0; j &amp;lt; packNum; j++) {&lt;br /&gt;
        recvdBytes =&lt;br /&gt;
            recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr *)&amp;amp;server, &amp;amp;slen);&lt;br /&gt;
        if (recvdBytes &amp;lt;= 0) {&lt;br /&gt;
          // std::cout &amp;lt;&amp;lt; &amp;quot;ERROR IN RECV\n&amp;quot;;&lt;br /&gt;
          timeouts++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      auto stop = std::chrono::time_point_cast&amp;lt;std::chrono::nanoseconds&amp;gt;(&lt;br /&gt;
          nowTimePoint2.now());&lt;br /&gt;
      auto duration = stop - start;&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; timeouts &amp;lt;&amp;lt; &#039;,&#039;;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; static_cast&amp;lt;unsigned int&amp;gt;(&lt;br /&gt;
                       (packNum * 1000.f * 1000.f * 1000.f) / duration.count() *&lt;br /&gt;
                       1.f)&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;&amp;lt; &#039;,&#039;;&lt;br /&gt;
      msg[0] = 0x60;&lt;br /&gt;
      if (sendto(s, msg, (sizeof(msg)), 0, (struct sockaddr *)&amp;amp;server,&lt;br /&gt;
                 sizeof(server)) &amp;lt; 0) {&lt;br /&gt;
        perror(&amp;quot;sendto()&amp;quot;);&lt;br /&gt;
        exit(2);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &#039;\n&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Deallocate the socket */&lt;br /&gt;
  close(s);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=778</id>
		<title>Control &amp; Readout Software Documentation and Howto&#039;s</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=778"/>
		<updated>2020-09-17T21:48:15Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
*[[Media:Requirements.pdf | Requirements]]&lt;br /&gt;
*[[Building Boost | Building Boost]]&lt;br /&gt;
*[[Building IPBus Software | Building IPBus Software]]&lt;br /&gt;
*[[Building ROOT | Building ROOT]]&lt;br /&gt;
*[[Building pct-online software | Building pct-online software]]&lt;br /&gt;
*[[Using IPbus | Using IPbus]]&lt;br /&gt;
*[[Running pDTPClient | Running pDTPClient]]&lt;br /&gt;
*[[Running pRUParser | Running pRUParser]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
The test software communicates with the readout unit and the ALPIDE via a series of registers. Once the test is initiated, a communication link with the readout unit will be set up. The register values specified in the test will set up the readout board and the ALPIDE. Data is then transferred from the ALPIDE to the readout unit via a firefly cable and offload from the readout unit is done via a 10 Gb high speed link. &lt;br /&gt;
The data is transferred to the the pRU parser, which is responsible for debugging and writing the data to a .root format. This data can then be analyzed to verify the results of the test in question.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ALPIDE Registers ===&lt;br /&gt;
Alpide Registers are registers that can be set on the ALPIDE chip. &lt;br /&gt;
&lt;br /&gt;
This includes configuration registers to specify masking, pusling, strobe generation and configuration of the electrical part on the ALPIDE.    &lt;br /&gt;
&lt;br /&gt;
Specification on registers can be found in the ALPIDE manual&lt;br /&gt;
&lt;br /&gt;
=== Readout Unit Registers ===&lt;br /&gt;
Readout unit registers are registers that can be set on the readout board.&lt;br /&gt;
&lt;br /&gt;
This includes offload, triggering, global regs, alpide control and monitoring of different register via alpide data &lt;br /&gt;
&lt;br /&gt;
Specifications on registers can be found in their respective modules&lt;br /&gt;
&lt;br /&gt;
== Test examples ==&lt;br /&gt;
&lt;br /&gt;
*[[Media:Digital Scan.pdf | Digital Scan]]&lt;br /&gt;
*[[Media:Analog Scan.pdf | Analog Scan]]&lt;br /&gt;
*[[Media:Threshold Scan.pdf | Threshold Scan]]&lt;br /&gt;
*[[Media:Single Event.pdf | Single Event]]&lt;br /&gt;
&lt;br /&gt;
== Module Registers ==&lt;br /&gt;
*[[Media:Alpide control.pdf | Alpide control]]&lt;br /&gt;
*[[Media:Alpide data.pdf | Alpide data]]&lt;br /&gt;
*[[Media:Global regs.pdf | Global regs]]&lt;br /&gt;
*[[Media:Trigger manager.pdf | Trigger manager]]&lt;br /&gt;
*[[Media:Offload.pdf | Offload]]&lt;br /&gt;
&lt;br /&gt;
== ALPIDE Manual ==&lt;br /&gt;
*[[Media:ALPIDEmanual_v0_3.pdf | Alpide manual]]&lt;br /&gt;
&lt;br /&gt;
== .root format ==&lt;br /&gt;
* readout unit id&lt;br /&gt;
* stave id&lt;br /&gt;
* chip id&lt;br /&gt;
* frame id&lt;br /&gt;
* abs time (120 Mhz clock)&lt;br /&gt;
* bunch counter (40 Mhz clock)&lt;br /&gt;
* xy (hit coordinate)&lt;br /&gt;
&lt;br /&gt;
== Network Stack Tuning Guide ==&lt;br /&gt;
Disclaimer: This guide applies to the Linux distribution CentOS and the Intel X710-DA2 network card using the User Datagram Protocol (UDP). (There might be some small variations with other distributions and other network cards).&lt;br /&gt;
=== Intel X710-DA2 Considerations ===&lt;br /&gt;
The X710-DA2 needs to be installed in a 8.0 GT/s, x8 lanes PCIe slot, additionally the card needs to be on its own PCI-E bus (many physical PCI-E slots share the same bus)[https://www.intel.com/content/www/us/en/support/articles/000005811/network-and-io/ethernet-products.html]. To determine what PCIe slots your motherboard has, please refer to the documentation provided by the manufacturer of your hardware.&lt;br /&gt;
 &lt;br /&gt;
* To identify which bus your card is installed in and that it is alone on that bus on run the command: &lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo lshw -numeric&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Network card ring buffer ====&lt;br /&gt;
There is an HW buffer on the card itself, this buffer can be viewed with the command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -g &amp;lt;interface name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and adjusted to the maximum size with the command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -G &amp;lt;interace name&amp;gt; rx 4096&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CentOS Considerations ===&lt;br /&gt;
* To list the relevant network settings in the kernel use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo sysctl -a | grep net.ipv4 and sudo sysctl -a | grep net.core&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Identifying possible bottlenecks ===&lt;br /&gt;
* To list network statistics from the network card(s) use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -S &amp;lt;interface name&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
* To list UDP drops realtime every second use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ netstat -sune 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* To view package drops directly in the kernel use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo dropwatch -l kas&amp;lt;/code&amp;gt; and write start&lt;br /&gt;
&lt;br /&gt;
=== Benchmarking the system ===&lt;br /&gt;
To run a benchmark on you fast the system is you can either set the test registers with test data via the DCS(IPBus) or a custom firmware can be obtained from the [https://git.app.uib.no/pct/pDTP pDTP repo] under CI/CD -&amp;gt; Pipelines -&amp;gt; Artifacts NOTE: This requires using Vivado to upload the firmware to the VCU118 board. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test code for a simple C++ client can be found here: [[client_benchmark.cpp]]. (Rename file type to CPP)&lt;br /&gt;
This client will send a stream request to hardware for 65535 packages, 15 times in the package size range from 2480 to 4080&lt;br /&gt;
&lt;br /&gt;
To build:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ g++ -O2 -Wno-narrowing client_benchmark.cpp -o client_executable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./client_executable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=777</id>
		<title>Control &amp; Readout Software Documentation and Howto&#039;s</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=777"/>
		<updated>2020-09-17T21:19:05Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
*[[Media:Requirements.pdf | Requirements]]&lt;br /&gt;
*[[Building Boost | Building Boost]]&lt;br /&gt;
*[[Building IPBus Software | Building IPBus Software]]&lt;br /&gt;
*[[Building ROOT | Building ROOT]]&lt;br /&gt;
*[[Building pct-online software | Building pct-online software]]&lt;br /&gt;
*[[Using IPbus | Using IPbus]]&lt;br /&gt;
*[[Running pDTPClient | Running pDTPClient]]&lt;br /&gt;
*[[Running pRUParser | Running pRUParser]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
The test software communicates with the readout unit and the ALPIDE via a series of registers. Once the test is initiated, a communication link with the readout unit will be set up. The register values specified in the test will set up the readout board and the ALPIDE. Data is then transferred from the ALPIDE to the readout unit via a firefly cable and offload from the readout unit is done via a 10 Gb high speed link. &lt;br /&gt;
The data is transferred to the the pRU parser, which is responsible for debugging and writing the data to a .root format. This data can then be analyzed to verify the results of the test in question.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ALPIDE Registers ===&lt;br /&gt;
Alpide Registers are registers that can be set on the ALPIDE chip. &lt;br /&gt;
&lt;br /&gt;
This includes configuration registers to specify masking, pusling, strobe generation and configuration of the electrical part on the ALPIDE.    &lt;br /&gt;
&lt;br /&gt;
Specification on registers can be found in the ALPIDE manual&lt;br /&gt;
&lt;br /&gt;
=== Readout Unit Registers ===&lt;br /&gt;
Readout unit registers are registers that can be set on the readout board.&lt;br /&gt;
&lt;br /&gt;
This includes offload, triggering, global regs, alpide control and monitoring of different register via alpide data &lt;br /&gt;
&lt;br /&gt;
Specifications on registers can be found in their respective modules&lt;br /&gt;
&lt;br /&gt;
== Test examples ==&lt;br /&gt;
&lt;br /&gt;
*[[Media:Digital Scan.pdf | Digital Scan]]&lt;br /&gt;
*[[Media:Analog Scan.pdf | Analog Scan]]&lt;br /&gt;
*[[Media:Threshold Scan.pdf | Threshold Scan]]&lt;br /&gt;
*[[Media:Single Event.pdf | Single Event]]&lt;br /&gt;
&lt;br /&gt;
== Module Registers ==&lt;br /&gt;
*[[Media:Alpide control.pdf | Alpide control]]&lt;br /&gt;
*[[Media:Alpide data.pdf | Alpide data]]&lt;br /&gt;
*[[Media:Global regs.pdf | Global regs]]&lt;br /&gt;
*[[Media:Trigger manager.pdf | Trigger manager]]&lt;br /&gt;
*[[Media:Offload.pdf | Offload]]&lt;br /&gt;
&lt;br /&gt;
== ALPIDE Manual ==&lt;br /&gt;
*[[Media:ALPIDEmanual_v0_3.pdf | Alpide manual]]&lt;br /&gt;
&lt;br /&gt;
== .root format ==&lt;br /&gt;
* readout unit id&lt;br /&gt;
* stave id&lt;br /&gt;
* chip id&lt;br /&gt;
* frame id&lt;br /&gt;
* abs time (120 Mhz clock)&lt;br /&gt;
* bunch counter (40 Mhz clock)&lt;br /&gt;
* xy (hit coordinate)&lt;br /&gt;
&lt;br /&gt;
== Network Stack Tuning Guide ==&lt;br /&gt;
Disclaimer: This guide applies to the Linux distribution CentOS and the Intel X710-DA2 network card using the User Datagram Protocol (UDP). (There might be some small variations with other distributions and other network cards).&lt;br /&gt;
=== Intel X710-DA2 Considerations ===&lt;br /&gt;
The X710-DA2 needs to be installed in a 8.0 GT/s, x8 lanes PCIe slot, additionally the card needs to be on its own PCI-E bus (many physical PCI-E slots share the same bus)[https://www.intel.com/content/www/us/en/support/articles/000005811/network-and-io/ethernet-products.html]. To determine what PCIe slots your motherboard has, please refer to the documentation provided by the manufacturer of your hardware.&lt;br /&gt;
 &lt;br /&gt;
* To identify which bus your card is installed in and that it is alone on that bus on run the command: &lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo lshw -numeric&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Network card ring buffer ====&lt;br /&gt;
There is an HW buffer on the card itself, this buffer can be viewed with the command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -g &amp;lt;interface name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and adjusted to the maximum size with the command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -G &amp;lt;interace name&amp;gt; rx 4096&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CentOS Considerations ===&lt;br /&gt;
* To list the relevant network settings in the kernel use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo sysctl -a | grep net.ipv4 and sudo sysctl -a | grep net.core&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Identifying possible bottlenecks ===&lt;br /&gt;
* To list network statistics from the network card(s) use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -S &amp;lt;interface name&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
* To list UDP drops realtime every second use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ netstat -sune 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* To view package drops directly in the kernel use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo dropwatch -l kas&amp;lt;/code&amp;gt; and write start&lt;br /&gt;
&lt;br /&gt;
=== Benchmarking the system ===&lt;br /&gt;
To run a benchmark on you fast the system is you can either set the test registers with test data via the DCS(IPBus) or a custom firmware can be obtained from the [https://git.app.uib.no/pct/pDTP pDTP repo] under CI/CD -&amp;gt; Pipelines -&amp;gt; Artifacts NOTE: This requires using Vivado to upload the firmware to the VCU118 board.&lt;br /&gt;
Test code for a simple C++ client can be found here: [[File:client_benchmark.txt]]. (Rename file type to CPP)&lt;br /&gt;
&lt;br /&gt;
To build:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ g++ -O2 -Wno-narrowing client_benchmark.cpp -o client_executable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./client_executable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=776</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=776"/>
		<updated>2020-09-17T20:29:04Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP.&lt;br /&gt;
pDTP has three main modes; Request read (RQR), a single packet from 1 byte to 4080 bytes. Request stream (RQS), a single packet up to 65535 packets. And request full stream (RQFS). For more in-depth details about pDTP see: &lt;br /&gt;
[[Media:PDTP.pdf | pDTP spesification]]&lt;br /&gt;
&lt;br /&gt;
If the file writer is enabled the client will produce time and date stamped file that in a binary format.&lt;br /&gt;
&lt;br /&gt;
== Simplified diagram of offload chain ==&lt;br /&gt;
[[File:offload-system.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== Optimal configuration ==&lt;br /&gt;
Due to the RUs ability to max out the 10Gbit link with small package sizes (high burst) and the Linux kernels inability to process large amounts of packages, an optimal configuration is advised.&lt;br /&gt;
&lt;br /&gt;
There is also a consideration to be made with the size of the queue between the pDTPClient and the file writer/parser. &lt;br /&gt;
&lt;br /&gt;
The config file in the next section is a good starting point on an optimal configuration.&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
The config file exists to load the diffrent settings of the client in a easy manner.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#Config file for the settings to the pDTPClient&lt;br /&gt;
#IP adress to the PRU&lt;br /&gt;
IP = 192.168.100.200&lt;br /&gt;
#IP = 127.0.0.1&lt;br /&gt;
#PORT 30000 for data and 29070 for loopback&lt;br /&gt;
PORT = 30000&lt;br /&gt;
#Size of request stream 1 to 65535&lt;br /&gt;
SSIZE = 10&lt;br /&gt;
#Size of packet, 1 to 4080&lt;br /&gt;
PSIZE = 4080&lt;br /&gt;
#Start mode: RQT, RQR, RQS, RQFS, GS, ABRT&lt;br /&gt;
MODE = RQS&lt;br /&gt;
#Time to run the client in seconds: 0 for disable.&lt;br /&gt;
RTIME = 0&lt;br /&gt;
#UDP recv timeout in microsecounds, 0 to disable&lt;br /&gt;
UDPTIMEO = 4&lt;br /&gt;
#Request a certain number of words, then stop the client, 0 to disable&lt;br /&gt;
NUMREQ = 0&lt;br /&gt;
#Set the verbosity for log messsages to console&lt;br /&gt;
VERB = 2&lt;br /&gt;
#Set the size of the SPSC queue&lt;br /&gt;
SPSCSIZE = 10000&lt;br /&gt;
#Poll PRU, yes = 1, no = 0&lt;br /&gt;
POLL = 1&lt;br /&gt;
#FileWriter Enable = 1, Disable = 0&lt;br /&gt;
ENABLEFILE = 1&lt;br /&gt;
#How to handle the buffer fill level, 0 = no RQS,RQFS, 1 = RQS, no RQFS or&lt;br /&gt;
#2 = RQS and RQFS.&lt;br /&gt;
SMODE = 0&lt;br /&gt;
#Set no wait flag&lt;br /&gt;
NOWAIT = 0&lt;br /&gt;
#Set maximize flag&lt;br /&gt;
MAXIMIZE = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting the client ==&lt;br /&gt;
The client can be run with the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./pDTPClient --config &amp;lt;location/config.conf&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using a hardware emulator ==&lt;br /&gt;
The hardware emulator can be obtained from the [https://git.app.uib.no/pct/pDTP pDTP repo]&lt;br /&gt;
&lt;br /&gt;
=== Starting the emulator ===&lt;br /&gt;
Load server with only constant data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 server_emulator.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Load a file with data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 server_emulator.py -f &amp;lt;FILENAME&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Increase verbosity (prints all debug messages to console. Note that these can be viewed in debug.log as well):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 server_emulator.py -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adapt the config file ===&lt;br /&gt;
You can adapt the config file to use  &amp;lt;code&amp;gt;IP = localhost&amp;lt;/code&amp;gt; to connect to the emulator when it is running.&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=775</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=775"/>
		<updated>2020-09-17T20:26:56Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP.&lt;br /&gt;
pDTP has three main modes; Request read (RQR), a single packet from 1 byte to 4080 bytes. Request stream (RQS), a single packet up to 65535 packets. And request full stream (RQFS). For more in-depth details about pDTP see: &lt;br /&gt;
[[Media:PDTP.pdf | pDTP spesification]]&lt;br /&gt;
&lt;br /&gt;
If the file writer is enabled the client will produce time and date stamped file that in a binary format.&lt;br /&gt;
&lt;br /&gt;
== Simplified diagram of offload chain ==&lt;br /&gt;
[[File:offload-system.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== Optimal configuration ==&lt;br /&gt;
Due to the RUs ability to max out the 10Gbit link with small package sizes (high burst) and the Linux kernels inability to process large amounts of packages, an optimal configuration is advised.&lt;br /&gt;
&lt;br /&gt;
There is also a consideration to be made with the size of the queue between the pDTPClient and the file writer/parser. &lt;br /&gt;
&lt;br /&gt;
The config file in the next section is a good starting point on an optimal configuration.&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
The config file exists to load the diffrent settings of the client in a easy manner.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#Config file for the settings to the pDTPClient&lt;br /&gt;
#IP adress to the PRU&lt;br /&gt;
IP = 192.168.100.200&lt;br /&gt;
#IP = 127.0.0.1&lt;br /&gt;
#PORT 30000 for data and 29070 for loopback&lt;br /&gt;
PORT = 30000&lt;br /&gt;
#Size of request stream 1 to 65535&lt;br /&gt;
SSIZE = 10&lt;br /&gt;
#Size of packet, 1 to 4080&lt;br /&gt;
PSIZE = 4080&lt;br /&gt;
#Start mode: RQT, RQR, RQS, RQFS, GS, ABRT&lt;br /&gt;
MODE = RQS&lt;br /&gt;
#Time to run client in seconds: 0 for disable.&lt;br /&gt;
RTIME = 0&lt;br /&gt;
#UDP recv timeout in microsecounds, 0 to disable&lt;br /&gt;
UDPTIMEO = 4&lt;br /&gt;
#Request a certain number of words, then stop the client, 0 to disable&lt;br /&gt;
NUMREQ = 0&lt;br /&gt;
#Set the verbosity for log messsages to console&lt;br /&gt;
VERB = 2&lt;br /&gt;
#Set the size of the SPSC queue&lt;br /&gt;
SPSCSIZE = 10000&lt;br /&gt;
#Poll PRU, yes = 1, no = 0&lt;br /&gt;
POLL = 1&lt;br /&gt;
#FileWriter Enable = 1, Disable = 0&lt;br /&gt;
ENABLEFILE = 1&lt;br /&gt;
#How to handle the buffer fill level, 0 = no RQS,RQFS, 1 = RQS, no RQFS or&lt;br /&gt;
#2 = RQS and RQFS.&lt;br /&gt;
SMODE = 0&lt;br /&gt;
#Set no wait flag&lt;br /&gt;
NOWAIT = 0&lt;br /&gt;
#Set maximize flag&lt;br /&gt;
MAXIMIZE = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting the client ==&lt;br /&gt;
The client can be run with the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./pDTPClient --config &amp;lt;location/config.conf&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using a hardware emulator ==&lt;br /&gt;
The hardware emulator can be obtained from the [https://git.app.uib.no/pct/pDTP pDTP repo]&lt;br /&gt;
&lt;br /&gt;
=== Starting the emulator ===&lt;br /&gt;
Load server with only constant data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 server_emulator.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Load a file with data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 server_emulator.py -f &amp;lt;FILENAME&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Increase verbosity (prints all debug messages to console. Note that these can be viewed in debug.log as well):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 server_emulator.py -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adapt the config file ===&lt;br /&gt;
You can adapt the config file to use localhost to connect to the emulator when it is running.&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=774</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=774"/>
		<updated>2020-09-09T14:10:21Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
[[File:ipbus-conect6.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smart Dummy Hardware ==&lt;br /&gt;
To be able to read values from registers, a custom DummyHardwareUdp.exe can be built from this repository:&lt;br /&gt;
[https://github.com/norscope/ipbus-software/tree/smartdummy IPbus Custom Repo]&lt;br /&gt;
NOTE: Remember to switch to the smartdummy branch.&lt;br /&gt;
&lt;br /&gt;
This adds a file reader in the DummyHardware.cpp that reads a file in the directory of the executable, the file is called register-values.txt, an example file can be found here: [[:Media:register-values.txt | Example file]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How to Build on Ubuntu 20.04 LTS ===&lt;br /&gt;
==== Requierd packages ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install git g++ make erlang python3 python-is-python3 libboost1.71-all-dev libpugixml-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Building ==== &lt;br /&gt;
In the directory where the repository have been downloaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ sudo make install prefix=/home/user/ipbus-install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Adding paths to envirorment ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ export LD_LIBRARY_PATH=/home/user/ipbus-install/lib:$LD_LIBRARY_PATH&lt;br /&gt;
$ export PYTHONPATH=/home/user/software-dev/ipbus-install/lib/python3.8/site-packages:$PYTHONPATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Running the hardware emulator ==== &lt;br /&gt;
Change directory to ipbus-install/bin/uhal/tests&lt;br /&gt;
NOTE: Make sure the register-values.txt file is present in this folder. Filename is in all lowercase.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./DummyHardwareUdp.exe -p 50001 -v 2 -V&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Testing the emulator ====&lt;br /&gt;
From the production_test repo, in the folder tests_vcu118 run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ python test_ipbus_emulator.py &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should output 0xfeedbeef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=File:Register-values.txt&amp;diff=773</id>
		<title>File:Register-values.txt</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=File:Register-values.txt&amp;diff=773"/>
		<updated>2020-09-09T14:06:15Z</updated>

		<summary type="html">&lt;p&gt;Wac002: Wac002 uploaded a new version of File:Register-values.txt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=772</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=772"/>
		<updated>2020-09-09T13:55:36Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
[[File:ipbus-conect6.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smart Dummy Hardware ==&lt;br /&gt;
To be able to read values from registers, a custom DummyHardwareUdp.exe can be built from this repository:&lt;br /&gt;
[https://github.com/norscope/ipbus-software/tree/smartdummy IPbus Custom Repo]&lt;br /&gt;
NOTE: Remember to switch to the smartdummy branch.&lt;br /&gt;
&lt;br /&gt;
This adds a file reader in the DummyHardware.cpp that reads a file in the directory of the executable, the file is called register-values.txt, an example file can be found here: [[:Media:register-values.txt | Example file]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How to Build on Ubuntu 20.04 LTS ===&lt;br /&gt;
==== REQUIRED PACKAGES ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install git g++ make erlang python3 python-is-python3 libboost1.71-all-dev libpugixml-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== BUILDING ==== &lt;br /&gt;
In the directory where the repository have been downloaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ sudo make install prefix=/home/user/ipbus-install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== ADDING PATHS TO ENVIRORMENT ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ export LD_LIBRARY_PATH=/home/user/ipbus-install/lib:$LD_LIBRARY_PATH&lt;br /&gt;
$ export PYTHONPATH=/home/user/software-dev/ipbus-install/lib/python3.8/site-packages:$PYTHONPATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RUNNING THE EMULATOR ==== &lt;br /&gt;
Change directory to ipbus-install/bin/uhal/tests&lt;br /&gt;
NOTE: Make sure the register-values.txt file is present in this folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./DummyHardwareUdp.exe -p 50001 -v 2 -V&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=771</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=771"/>
		<updated>2020-09-08T10:17:07Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
[[File:ipbus-conect6.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smart Dummy Hardware ==&lt;br /&gt;
To be able to read values from registers, a custom DummyHardwareUdp.exe can be built from this repository:&lt;br /&gt;
[https://github.com/norscope/ipbus-software/tree/smartdummy IPbus Custom Repo]&lt;br /&gt;
&lt;br /&gt;
NB! If IPBus is built inside the repo folder. It is important to add LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path-to-folder/ipbus-software/uhal/tests/lib/:/path-to-folder/ipbus-software/uhal/log/lib/:/path-to-folder/ipbus-software/uhal/uhal/lib/:/path-to-folder/ipbus-software/uhal/grammars/lib/&lt;br /&gt;
&lt;br /&gt;
This adds a file reader in the DummyHardware.cpp that reads a file in the directory of the executable, the file is called register-values.txt, an example file can be found here: [[:Media:register-values.txt | Example file]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=770</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=770"/>
		<updated>2020-09-08T09:44:39Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
[[File:ipbus-conect6.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smart Dummy Hardware ==&lt;br /&gt;
To be able to read values from registers, a custom DummyHardwareUdp.exe can be built from this repository:&lt;br /&gt;
[https://github.com/norscope/ipbus-software/tree/smartdummy IPbus Custom Repo]&lt;br /&gt;
&lt;br /&gt;
NB! If IPBus is built inside the repo folder. It is important to add LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path-to-folder/ipbus-software/uhal/tests/lib/:/path-to-folder/ipbus-software/uhal/log/lib/:/path-to-folder/ipbus-software/uhal/uhal/lib/:/path-to-folder/ipbus-software/uhal/grammars/lib/&lt;br /&gt;
This adds a file reader in the DummyHardware.cpp that reads a file in the directory of the executable, the file is called register-values.txt, an example file can be found here: [[:Media:register-values.txt | Example file]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=File:Register-values.txt&amp;diff=769</id>
		<title>File:Register-values.txt</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=File:Register-values.txt&amp;diff=769"/>
		<updated>2020-09-08T08:16:28Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=768</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=768"/>
		<updated>2020-09-08T08:15:11Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
[[File:ipbus-conect6.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smart Dummy Hardware ==&lt;br /&gt;
To be able to read values from registers, a custom DummyHardwareUdp.exe can be built from this repository:&lt;br /&gt;
[https://github.com/norscope/ipbus-software/tree/smartdummy IPbus Custom Repo]&lt;br /&gt;
&lt;br /&gt;
This adds a file reader in the DummyHardware.cpp that reads a file in the directory of the executable, the file is called register-values.txt, an example file can be found here: [[:Media:register-values.txt | Example file]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=767</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=767"/>
		<updated>2020-09-08T08:09:54Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
[[File:ipbus-conect6.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smart Dummy Hardware ==&lt;br /&gt;
To be able to read values from registers, a custom DummyHardwareUdp.exe can be built from this repository:&lt;br /&gt;
[https://github.com/norscope/ipbus-software/tree/smartdummy IPbus Custom Repo]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=766</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=766"/>
		<updated>2020-09-08T08:09:03Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
[[File:ipbus-conect6.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smart Dummy Hardware ==&lt;br /&gt;
To be able to read values from registers, a custom DummyHardwareUdp.exe can be built from this repository:&lt;br /&gt;
[https://github.com/norscope/ipbus-software/tree/smartdummy]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=755</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=755"/>
		<updated>2020-06-23T09:36:34Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
[[File:ipbus-conect6.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect6.png&amp;diff=754</id>
		<title>File:Ipbus-conect6.png</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect6.png&amp;diff=754"/>
		<updated>2020-06-23T09:35:02Z</updated>

		<summary type="html">&lt;p&gt;Wac002: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=753</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=753"/>
		<updated>2020-06-23T09:32:27Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
&lt;br /&gt;
[[File:ipbus-conect5.png|10px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect5.png&amp;diff=752</id>
		<title>File:Ipbus-conect5.png</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect5.png&amp;diff=752"/>
		<updated>2020-06-23T09:31:54Z</updated>

		<summary type="html">&lt;p&gt;Wac002: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=751</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=751"/>
		<updated>2020-06-22T10:24:17Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registers on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
&lt;br /&gt;
[[File:ipbus-conect2.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=750</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=750"/>
		<updated>2020-06-22T10:23:44Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registries on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
&lt;br /&gt;
[[File:ipbus-conect2.png|750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registers present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect2.png&amp;diff=749</id>
		<title>File:Ipbus-conect2.png</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect2.png&amp;diff=749"/>
		<updated>2020-06-22T10:22:41Z</updated>

		<summary type="html">&lt;p&gt;Wac002: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect.png&amp;diff=748</id>
		<title>File:Ipbus-conect.png</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect.png&amp;diff=748"/>
		<updated>2020-06-22T10:20:50Z</updated>

		<summary type="html">&lt;p&gt;Wac002: Wac002 uploaded a new version of File:Ipbus-conect.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=747</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=747"/>
		<updated>2020-06-22T07:59:08Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registries on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
&lt;br /&gt;
[[File:ipbus-conect.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registries present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect.png&amp;diff=746</id>
		<title>File:Ipbus-conect.png</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=File:Ipbus-conect.png&amp;diff=746"/>
		<updated>2020-06-22T07:57:44Z</updated>

		<summary type="html">&lt;p&gt;Wac002: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=745</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=745"/>
		<updated>2020-06-21T15:24:19Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registries on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registries present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the register files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=744</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=744"/>
		<updated>2020-06-21T15:23:31Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registries on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file (pRU-connections.xml), this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registries present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the registers&#039; files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=743</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=743"/>
		<updated>2020-06-21T15:21:29Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registries on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file pRU-connections.xml, this file contains the address and port of the RU, for information on the content of the connection file please see the [[:Media:PRU Ethernet Configurations.pdf | pRU Ethernet Configurations]] document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registries present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the registers&#039; files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=742</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=742"/>
		<updated>2020-06-21T15:19:39Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registries on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file pRU-connections.xml, this file contains the address and port of the RU, for information on the content of the connection file please see the pRU Ethernet Configuration document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registries present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the registers&#039; files MUST match the firmware version!&lt;br /&gt;
&lt;br /&gt;
== Additonal information ==&lt;br /&gt;
For more information, please consult the IPbus wiki at: [https://ipbus.web.cern.ch/ipbus/doc/user/html/software/uhalQuickTutorial.html IPbus wiki]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=741</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=741"/>
		<updated>2020-06-21T15:17:58Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registries on the readout unit (RU). The software on the host computer uses the Hardware Access Library (uHAL) to send the commands to the RU. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file pRU-connections.xml, this file contains the address and port of the RU, for information on the content of the connection file please see the pRU Ethernet Configuration document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registries present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus branch under the BSP folder.&lt;br /&gt;
&lt;br /&gt;
WARNING: To prevent undefined behavior the registers&#039; files MUST match the firmware version!&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=740</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=740"/>
		<updated>2020-06-21T15:03:26Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol that uses UDP/IP to send values into the registries on the readout unit (RU). Hardware Access Library (uHAL) is used on the host computer to send the commands. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
There is a main connection file pRU-connections.xml, this file contains the address and port of the RU, for information on the content of the connection file please see the pRU Ethernet Configuration document.&lt;br /&gt;
&lt;br /&gt;
Following there is a Module registers file (module-address.xml), this file contains a table with all the registries present in the RU.&lt;br /&gt;
&lt;br /&gt;
Finally, there are files for each register&lt;br /&gt;
* global_regs.xml&lt;br /&gt;
* trigger_manager.xml&lt;br /&gt;
* offload.xml&lt;br /&gt;
* alpide_control.xml&lt;br /&gt;
* alpide_data.xml&lt;br /&gt;
&lt;br /&gt;
PTB-specific Module R&lt;br /&gt;
&lt;br /&gt;
As of the writing of this page, these files can be found on the production_test repository in the ipbus fork under the BSP folder.&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=739</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=739"/>
		<updated>2020-06-21T14:12:05Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
IPbus is a control protocol is used to send values into the registries on the readout unit using the Hardware Access Library (uHAL)&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=738</id>
		<title>Using IPbus</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Using_IPbus&amp;diff=738"/>
		<updated>2020-06-21T14:07:07Z</updated>

		<summary type="html">&lt;p&gt;Wac002: Created page with &amp;quot;Main Page -&amp;gt; Control &amp;amp; Readout Software Documentation and Howto&amp;#039;s -&amp;gt; Using IPbus&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Using IPbus]]&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=737</id>
		<title>Control &amp; Readout Software Documentation and Howto&#039;s</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=737"/>
		<updated>2020-06-21T14:06:05Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
*[[Media:Requirements.pdf | Requirements]]&lt;br /&gt;
*[[Building Boost | Building Boost]]&lt;br /&gt;
*[[Building IPBus Software | Building IPBus Software]]&lt;br /&gt;
*[[Building ROOT | Building ROOT]]&lt;br /&gt;
*[[Building pct-online software | Building pct-online software]]&lt;br /&gt;
*[[Using IPbus | Using IPbus]]&lt;br /&gt;
*[[Running pDTPClient | Running pDTPClient]]&lt;br /&gt;
*[[Running pRUParser | Running pRUParser]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
The test software communicates with the readout unit and the ALPIDE via a series of registers. Once the test is initiated, a communication link with the readout unit will be set up. The register values specified in the test will set up the readout board and the ALPIDE. Data is then transferred from the ALPIDE to the readout unit via a firefly cable and offload from the readout unit is done via a 10 Gb high speed link. &lt;br /&gt;
The data is transferred to the the pRU parser, which is responsible for debugging and writing the data to a .root format. This data can then be analyzed to verify the results of the test in question.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ALPIDE Registers ===&lt;br /&gt;
Alpide Registers are registers that can be set on the ALPIDE chip. &lt;br /&gt;
&lt;br /&gt;
This includes configuration registers to specify masking, pusling, strobe generation and configuration of the electrical part on the ALPIDE.    &lt;br /&gt;
&lt;br /&gt;
Specification on registers can be found in the ALPIDE manual&lt;br /&gt;
&lt;br /&gt;
=== Readout Unit Registers ===&lt;br /&gt;
Readout unit registers are registers that can be set on the readout board.&lt;br /&gt;
&lt;br /&gt;
This includes offload, triggering, global regs, alpide control and monitoring of different register via alpide data &lt;br /&gt;
&lt;br /&gt;
Specifications on registers can be found in their respective modules&lt;br /&gt;
&lt;br /&gt;
== Test examples ==&lt;br /&gt;
&lt;br /&gt;
*[[Media:Digital Scan.pdf | Digital Scan]]&lt;br /&gt;
*[[Media:Analog Scan.pdf | Analog Scan]]&lt;br /&gt;
*[[Media:Threshold Scan.pdf | Threshold Scan]]&lt;br /&gt;
*[[Media:Single Event.pdf | Single Event]]&lt;br /&gt;
&lt;br /&gt;
== Module Registers ==&lt;br /&gt;
*[[Media:Alpide control.pdf | Alpide control]]&lt;br /&gt;
*[[Media:Alpide data.pdf | Alpide data]]&lt;br /&gt;
*[[Media:Global regs.pdf | Global regs]]&lt;br /&gt;
*[[Media:Trigger manager.pdf | Trigger manager]]&lt;br /&gt;
*[[Media:Offload.pdf | Offload]]&lt;br /&gt;
&lt;br /&gt;
== ALPIDE Manual ==&lt;br /&gt;
*[[Media:ALPIDEmanual_v0_3.pdf | Alpide manual]]&lt;br /&gt;
&lt;br /&gt;
== .root format ==&lt;br /&gt;
* readout unit id&lt;br /&gt;
* stave id&lt;br /&gt;
* chip id&lt;br /&gt;
* frame id&lt;br /&gt;
* abs time (120 Mhz clock)&lt;br /&gt;
* bunch counter (40 Mhz clock)&lt;br /&gt;
* xy (hit coordinate)&lt;br /&gt;
&lt;br /&gt;
== Network Stack Tuning Guide ==&lt;br /&gt;
Disclaimer: This guide applies to the Linux distribution CentOS and the Intel X710-DA2 network card using the User Datagram Protocol (UDP). (There might be some small variations with other distributions and other network cards).&lt;br /&gt;
=== Intel X710-DA2 Considerations ===&lt;br /&gt;
The X710-DA2 needs to be installed in a 8.0 GT/s, x8 lanes PCIe slot, additionally the card needs to be on its own PCI-E bus (many physical PCI-E slots share the same bus)[https://www.intel.com/content/www/us/en/support/articles/000005811/network-and-io/ethernet-products.html]. To determine what PCIe slots your motherboard has, please refer to the documentation provided by the manufacturer of your hardware.&lt;br /&gt;
 &lt;br /&gt;
* To identify which bus your card is installed in and that it is alone on that bus on run the command: &lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo lshw -numeric&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Network card ring buffer ====&lt;br /&gt;
There is an HW buffer on the card itself, this buffer can be viewed with the command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -g &amp;lt;interface name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and adjusted to the maximum size with the command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -G &amp;lt;interace name&amp;gt; rx 4096&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CentOS Considerations ===&lt;br /&gt;
* To list the relevant network settings in the kernel use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo sysctl -a | grep net.ipv4 and sudo sysctl -a | grep net.core&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Identifying possible bottlenecks ===&lt;br /&gt;
* To list network statistics from the network card(s) use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -S &amp;lt;interface name&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
* To list UDP drops realtime every second use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ netstat -sune 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* To view package drops directly in the kernel use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo dropwatch -l kas&amp;lt;/code&amp;gt; and write start&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=684</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=684"/>
		<updated>2020-02-04T14:27:57Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP.&lt;br /&gt;
pDTP has three main modes; Request read (RQR), a single packet from 1 byte to 4080 bytes. Request stream (RQS), a single packet up to 65535 packets. And request full stream (RQFS). For more in-depth details about pDTP see: &lt;br /&gt;
[[Media:PDTP.pdf | pDTP spesification]]&lt;br /&gt;
&lt;br /&gt;
If the file writer is enabled the client will produce time and date stamped file that in a binary format.&lt;br /&gt;
&lt;br /&gt;
== Simplified diagram of offload chain ==&lt;br /&gt;
[[File:offload-system.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== Optimal configuration ==&lt;br /&gt;
Due to the RUs ability to max out the 10Gbit link with small package sizes (high burst) and the Linux kernels inability to process large amounts of packages, an optimal configuration is advised.&lt;br /&gt;
&lt;br /&gt;
There is also a consideration to be made with the size of the queue between the pDTPClient and the file writer/parser. &lt;br /&gt;
&lt;br /&gt;
The config file in the next section is a good starting point on an optimal configuration.&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
The config file exists to load the diffrent settings of the client in a easy manner.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#Config file for the settings to the pDTPClient&lt;br /&gt;
#IP adress to the PRU&lt;br /&gt;
IP = 192.168.100.200&lt;br /&gt;
#IP = 127.0.0.1&lt;br /&gt;
#PORT 30000 for data and 29070 for loopback&lt;br /&gt;
PORT = 30000&lt;br /&gt;
#Size of request stream 1 to 65535&lt;br /&gt;
SSIZE = 10&lt;br /&gt;
#Size of packet, 1 to 4080&lt;br /&gt;
PSIZE = 4080&lt;br /&gt;
#Start mode: RQT, RQR, RQS, RQFS, GS, ABRT&lt;br /&gt;
MODE = RQS&lt;br /&gt;
#Time to run client in seconds: 0 for disable.&lt;br /&gt;
RTIME = 0&lt;br /&gt;
#UDP recv timeout in microsecounds, 0 to disable&lt;br /&gt;
UDPTIMEO = 4&lt;br /&gt;
#Request a certain number of words, then stop the client, 0 to disable&lt;br /&gt;
NUMREQ = 0&lt;br /&gt;
#Set the verbosity for log messsages to console&lt;br /&gt;
VERB = 2&lt;br /&gt;
#Set the size of the SPSC queue&lt;br /&gt;
SPSCSIZE = 10000&lt;br /&gt;
#Poll PRU, yes = 1, no = 0&lt;br /&gt;
POLL = 1&lt;br /&gt;
#FileWriter Enable = 1, Disable = 0&lt;br /&gt;
ENABLEFILE = 1&lt;br /&gt;
#How to handle the buffer fill level, 0 = no RQS,RQFS, 1 = RQS, no RQFS or&lt;br /&gt;
#2 = RQS and RQFS.&lt;br /&gt;
SMODE = 0&lt;br /&gt;
#Set no wait flag&lt;br /&gt;
NOWAIT = 0&lt;br /&gt;
#Set maximize flag&lt;br /&gt;
MAXIMIZE = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting the client ==&lt;br /&gt;
The client can be run with the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./pDTPClient --config &amp;lt;location/config.conf&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=683</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=683"/>
		<updated>2020-02-04T14:27:14Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP.&lt;br /&gt;
pDTP has three main modes; Request read (RQR), a single packet from 1 byte to 4080 bytes. Request stream (RQS), a single packet up to 65535 packets. And request full stream (RQFS). For more in-depth details about pDTP see: &lt;br /&gt;
[[Media:PDTP.pdf | pDTP spesification]]&lt;br /&gt;
&lt;br /&gt;
If the file writer is enabled the client will produce time and date stamped file that in a binary format.&lt;br /&gt;
&lt;br /&gt;
== Simplified diagram of offload chain ==&lt;br /&gt;
[[File:offload-system.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== Optimal configuration ==&lt;br /&gt;
Due to the RUs ability to max out the 10Gbit link with small package sizes (high burst) and the Linux kernels inability to process large amounts of packages, an optimal configuration is advised.&lt;br /&gt;
&lt;br /&gt;
There is also a consideration to be made with the size of the queue between the pDTPClient and the file writer/parser. &lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
The config file exists to load the diffrent settings of the client in a easy manner.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#Config file for the settings to the pDTPClient&lt;br /&gt;
#IP adress to the PRU&lt;br /&gt;
IP = 192.168.100.200&lt;br /&gt;
#IP = 127.0.0.1&lt;br /&gt;
#PORT 30000 for data and 29070 for loopback&lt;br /&gt;
PORT = 30000&lt;br /&gt;
#Size of request stream 1 to 65535&lt;br /&gt;
SSIZE = 10&lt;br /&gt;
#Size of packet, 1 to 4080&lt;br /&gt;
PSIZE = 4080&lt;br /&gt;
#Start mode: RQT, RQR, RQS, RQFS, GS, ABRT&lt;br /&gt;
MODE = RQS&lt;br /&gt;
#Time to run client in seconds: 0 for disable.&lt;br /&gt;
RTIME = 0&lt;br /&gt;
#UDP recv timeout in microsecounds, 0 to disable&lt;br /&gt;
UDPTIMEO = 4&lt;br /&gt;
#Request a certain number of words, then stop the client, 0 to disable&lt;br /&gt;
NUMREQ = 0&lt;br /&gt;
#Set the verbosity for log messsages to console&lt;br /&gt;
VERB = 2&lt;br /&gt;
#Set the size of the SPSC queue&lt;br /&gt;
SPSCSIZE = 10000&lt;br /&gt;
#Poll PRU, yes = 1, no = 0&lt;br /&gt;
POLL = 1&lt;br /&gt;
#FileWriter Enable = 1, Disable = 0&lt;br /&gt;
ENABLEFILE = 1&lt;br /&gt;
#How to handle the buffer fill level, 0 = no RQS,RQFS, 1 = RQS, no RQFS or&lt;br /&gt;
#2 = RQS and RQFS.&lt;br /&gt;
SMODE = 0&lt;br /&gt;
#Set no wait flag&lt;br /&gt;
NOWAIT = 0&lt;br /&gt;
#Set maximize flag&lt;br /&gt;
MAXIMIZE = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting the client ==&lt;br /&gt;
The client can be run with the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./pDTPClient --config &amp;lt;location/config.conf&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=682</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=682"/>
		<updated>2020-02-04T14:19:27Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP.&lt;br /&gt;
pDTP has three main modes; Request read (RQR), a single packet from 1 byte to 4080 bytes. Request stream (RQS), a single packet up to 65535 packets. And request full stream (RQFS). For more in-depth details about pDTP see: &lt;br /&gt;
[[Media:PDTP.pdf | pDTP spesification]]&lt;br /&gt;
&lt;br /&gt;
If the file writer is enabled the client will produce time and date stamped file that in a binary format.&lt;br /&gt;
&lt;br /&gt;
== Simplified diagram of offload chain ==&lt;br /&gt;
[[File:offload-system.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== Optimal configuration ==&lt;br /&gt;
Due to the RUs ability to max out the 10Gbit link with small package sizes (high burst) and the Linux kernels inability to process large amounts of packages, and optimal configuration is advised.&lt;br /&gt;
&lt;br /&gt;
There is also a consideration to be made with the size of the queue between the pDTPClient and the file writer/parser. &lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
The config file exists to load the diffrent settings of the client in a easy manner.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#Config file for the settings to the pDTPClient&lt;br /&gt;
#IP adress to the PRU&lt;br /&gt;
IP = 192.168.100.200&lt;br /&gt;
#IP = 127.0.0.1&lt;br /&gt;
#PORT 30000 for data and 29070 for loopback&lt;br /&gt;
PORT = 30000&lt;br /&gt;
#Size of request stream 1 to 65535&lt;br /&gt;
SSIZE = 10&lt;br /&gt;
#Size of packet, 1 to 4080&lt;br /&gt;
PSIZE = 4080&lt;br /&gt;
#Start mode: RQT, RQR, RQS, RQFS, GS, ABRT&lt;br /&gt;
MODE = RQS&lt;br /&gt;
#Time to run client in seconds: 0 for disable.&lt;br /&gt;
RTIME = 0&lt;br /&gt;
#UDP recv timeout in microsecounds, 0 to disable&lt;br /&gt;
UDPTIMEO = 4&lt;br /&gt;
#Request a certain number of words, then stop the client, 0 to disable&lt;br /&gt;
NUMREQ = 0&lt;br /&gt;
#Set the verbosity for log messsages to console&lt;br /&gt;
VERB = 2&lt;br /&gt;
#Set the size of the SPSC queue&lt;br /&gt;
SPSCSIZE = 10000&lt;br /&gt;
#Poll PRU, yes = 1, no = 0&lt;br /&gt;
POLL = 1&lt;br /&gt;
#FileWriter Enable = 1, Disable = 0&lt;br /&gt;
ENABLEFILE = 1&lt;br /&gt;
#How to handle the buffer fill level, 0 = no RQS,RQFS, 1 = RQS, no RQFS or&lt;br /&gt;
#2 = RQS and RQFS.&lt;br /&gt;
SMODE = 0&lt;br /&gt;
#Set no wait flag&lt;br /&gt;
NOWAIT = 0&lt;br /&gt;
#Set maximize flag&lt;br /&gt;
MAXIMIZE = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting the client ==&lt;br /&gt;
The client can be run with the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./pDTPClient --config &amp;lt;location/config.conf&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=681</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=681"/>
		<updated>2020-02-04T08:30:59Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP.&lt;br /&gt;
pDTP has three main modes; Request read (RQR), a single packet from 1 byte to 4080 bytes. Request stream (RQS), a single packet up to 65535 packets. And request full stream (RQFS). For more in-depth details about pDTP see: &lt;br /&gt;
[[Media:PDTP.pdf | pDTP spesification]]&lt;br /&gt;
&lt;br /&gt;
If the file writer is enabled the client will produce time and date stamped file that in a binary format.&lt;br /&gt;
&lt;br /&gt;
== Simplified diagram of offload chain ==&lt;br /&gt;
[[File:offload-system.png|750px]]&lt;br /&gt;
== Optimal configuration ==&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
The config file exists to load the diffrent settings of the client in a easy manner.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#Config file for the settings to the pDTPClient&lt;br /&gt;
#IP adress to the PRU&lt;br /&gt;
IP = 192.168.100.200&lt;br /&gt;
#IP = 127.0.0.1&lt;br /&gt;
#PORT 30000 for data and 29070 for loopback&lt;br /&gt;
PORT = 30000&lt;br /&gt;
#Size of request stream 1 to 65535&lt;br /&gt;
SSIZE = 10&lt;br /&gt;
#Size of packet, 1 to 4080&lt;br /&gt;
PSIZE = 4080&lt;br /&gt;
#Start mode: RQT, RQR, RQS, RQFS, GS, ABRT&lt;br /&gt;
MODE = RQS&lt;br /&gt;
#Time to run client in seconds: 0 for disable.&lt;br /&gt;
RTIME = 0&lt;br /&gt;
#UDP recv timeout in microsecounds, 0 to disable&lt;br /&gt;
UDPTIMEO = 4&lt;br /&gt;
#Request a certain number of words, then stop the client, 0 to disable&lt;br /&gt;
NUMREQ = 0&lt;br /&gt;
#Set the verbosity for log messsages to console&lt;br /&gt;
VERB = 2&lt;br /&gt;
#Set the size of the SPSC queue&lt;br /&gt;
SPSCSIZE = 10000&lt;br /&gt;
#Poll PRU, yes = 1, no = 0&lt;br /&gt;
POLL = 1&lt;br /&gt;
#FileWriter Enable = 1, Disable = 0&lt;br /&gt;
ENABLEFILE = 1&lt;br /&gt;
#How to handle the buffer fill level, 0 = no RQS,RQFS, 1 = RQS, no RQFS or&lt;br /&gt;
#2 = RQS and RQFS.&lt;br /&gt;
SMODE = 0&lt;br /&gt;
#Set no wait flag&lt;br /&gt;
NOWAIT = 0&lt;br /&gt;
#Set maximize flag&lt;br /&gt;
MAXIMIZE = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting the client ==&lt;br /&gt;
The client can be run with the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./pDTPClient --config &amp;lt;location/config.conf&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=File:Offload-system.png&amp;diff=677</id>
		<title>File:Offload-system.png</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=File:Offload-system.png&amp;diff=677"/>
		<updated>2020-02-04T08:06:49Z</updated>

		<summary type="html">&lt;p&gt;Wac002: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=676</id>
		<title>Control &amp; Readout Software Documentation and Howto&#039;s</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=676"/>
		<updated>2020-02-04T07:50:04Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
*[[Media:Requirements.pdf | Requirements]]&lt;br /&gt;
*[[Building Boost | Building Boost]]&lt;br /&gt;
*[[Building IPBus Software | Building IPBus Software]]&lt;br /&gt;
*[[Building ROOT | Building ROOT]]&lt;br /&gt;
*[[Building pct-online software | Building pct-online software]]&lt;br /&gt;
*[[Running pDTPClient | Running pDTPClient]]&lt;br /&gt;
*[[Running pRUParser | Running pRUParser]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
The test software communicates with the readout unit and the ALPIDE via a series of registers. Once the test is initiated, a communication link with the readout unit will be set up. The register values specified in the test will set up the readout board and the ALPIDE. Data is then transferred from the ALPIDE to the readout unit via a firefly cable and offload from the readout unit is done via a 10 Gb high speed link. &lt;br /&gt;
The data is transferred to the the pRU parser, which is responsible for debugging and writing the data to a .root format. This data can then be analyzed to verify the results of the test in question.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ALPIDE Registers ===&lt;br /&gt;
Alpide Registers are registers that can be set on the ALPIDE chip. &lt;br /&gt;
&lt;br /&gt;
This includes configuration registers to specify masking, pusling, strobe generation and configuration of the electrical part on the ALPIDE.    &lt;br /&gt;
&lt;br /&gt;
Specification on registers can be found in the ALPIDE manual&lt;br /&gt;
&lt;br /&gt;
=== Readout Unit Registers ===&lt;br /&gt;
Readout unit registers are registers that can be set on the readout board.&lt;br /&gt;
&lt;br /&gt;
This includes offload, triggering, global regs, alpide control and monitoring of different register via alpide data &lt;br /&gt;
&lt;br /&gt;
Specifications on registers can be found in their respective modules&lt;br /&gt;
&lt;br /&gt;
== Test examples ==&lt;br /&gt;
&lt;br /&gt;
*[[Media:Digital Scan.pdf | Digital Scan]]&lt;br /&gt;
*[[Media:Analog Scan.pdf | Analog Scan]]&lt;br /&gt;
*[[Media:Threshold Scan.pdf | Threshold Scan]]&lt;br /&gt;
*[[Media:Single Event.pdf | Single Event]]&lt;br /&gt;
&lt;br /&gt;
== Module Registers ==&lt;br /&gt;
*[[Media:Alpide control.pdf | Alpide control]]&lt;br /&gt;
*[[Media:Alpide data.pdf | Alpide data]]&lt;br /&gt;
*[[Media:Global regs.pdf | Global regs]]&lt;br /&gt;
*[[Media:Trigger manager.pdf | Trigger manager]]&lt;br /&gt;
*[[Media:Offload.pdf | Offload]]&lt;br /&gt;
&lt;br /&gt;
== ALPIDE Manual ==&lt;br /&gt;
*[[Media:ALPIDEmanual_v0_3.pdf | Alpide manual]]&lt;br /&gt;
&lt;br /&gt;
== .root format ==&lt;br /&gt;
* readout unit id&lt;br /&gt;
* stave id&lt;br /&gt;
* chip id&lt;br /&gt;
* frame id&lt;br /&gt;
* abs time (120 Mhz clock)&lt;br /&gt;
* bunch counter (40 Mhz clock)&lt;br /&gt;
* xy (hit coordinate)&lt;br /&gt;
&lt;br /&gt;
== Network Stack Tuning Guide ==&lt;br /&gt;
Disclaimer: This guide applies to the Linux distribution CentOS and the Intel X710-DA2 network card using the User Datagram Protocol (UDP). (There might be some small variations with other distributions and other network cards).&lt;br /&gt;
=== Intel X710-DA2 Considerations ===&lt;br /&gt;
The X710-DA2 needs to be installed in a 8.0 GT/s, x8 lanes PCIe slot, additionally the card needs to be on its own PCI-E bus (many physical PCI-E slots share the same bus)[https://www.intel.com/content/www/us/en/support/articles/000005811/network-and-io/ethernet-products.html]. To determine what PCIe slots your motherboard has, please refer to the documentation provided by the manufacturer of your hardware.&lt;br /&gt;
 &lt;br /&gt;
* To identify which bus your card is installed in and that it is alone on that bus on run the command: &lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo lshw -numeric&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Network card ring buffer ====&lt;br /&gt;
There is an HW buffer on the card itself, this buffer can be viewed with the command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -g &amp;lt;interface name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and adjusted to the maximum size with the command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -G &amp;lt;interace name&amp;gt; rx 4096&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CentOS Considerations ===&lt;br /&gt;
* To list the relevant network settings in the kernel use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo sysctl -a | grep net.ipv4 and sudo sysctl -a | grep net.core&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Identifying possible bottlenecks ===&lt;br /&gt;
* To list network statistics from the network card(s) use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ ethtool -S &amp;lt;interface name&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
* To list UDP drops realtime every second use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ netstat -sune 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* To view package drops directly in the kernel use the command:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo dropwatch -l kas&amp;lt;/code&amp;gt; and write start&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=673</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=673"/>
		<updated>2020-02-03T15:08:14Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP.&lt;br /&gt;
pDTP have three main modes; Request read (RQR), a single packet from 1 byte to 4080 byte. Request stream (RQS), a single packet upto 65535 packets. And request full stream (RQFS). For more in depth details about pDTP see: &lt;br /&gt;
[[Media:PDTP.pdf | pDTP spesification]]&lt;br /&gt;
&lt;br /&gt;
If the filewriter is enabled the client will produce a time and date stamped file that in a binary format.&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
The config file exists to load the diffrent settings of the client in a easy manner.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#Config file for the settings to the pDTPClient&lt;br /&gt;
#IP adress to the PRU&lt;br /&gt;
IP = 192.168.100.200&lt;br /&gt;
#IP = 127.0.0.1&lt;br /&gt;
#PORT 30000 for data and 29070 for loopback&lt;br /&gt;
PORT = 30000&lt;br /&gt;
#Size of request stream 1 to 65535&lt;br /&gt;
SSIZE = 10&lt;br /&gt;
#Size of packet, 1 to 4080&lt;br /&gt;
PSIZE = 4080&lt;br /&gt;
#Start mode: RQT, RQR, RQS, RQFS, GS, ABRT&lt;br /&gt;
MODE = RQS&lt;br /&gt;
#Time to run client in seconds: 0 for disable.&lt;br /&gt;
RTIME = 0&lt;br /&gt;
#UDP recv timeout in microsecounds, 0 to disable&lt;br /&gt;
UDPTIMEO = 4&lt;br /&gt;
#Request a certain number of words, then stop the client, 0 to disable&lt;br /&gt;
NUMREQ = 0&lt;br /&gt;
#Set the verbosity for log messsages to console&lt;br /&gt;
VERB = 2&lt;br /&gt;
#Set the size of the SPSC queue&lt;br /&gt;
SPSCSIZE = 10000&lt;br /&gt;
#Poll PRU, yes = 1, no = 0&lt;br /&gt;
POLL = 1&lt;br /&gt;
#FileWriter Enable = 1, Disable = 0&lt;br /&gt;
ENABLEFILE = 1&lt;br /&gt;
#How to handle the buffer fill level, 0 = no RQS,RQFS, 1 = RQS, no RQFS or&lt;br /&gt;
#2 = RQS and RQFS.&lt;br /&gt;
SMODE = 0&lt;br /&gt;
#Set no wait flag&lt;br /&gt;
NOWAIT = 0&lt;br /&gt;
#Set maximize flag&lt;br /&gt;
MAXIMIZE = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting the client ==&lt;br /&gt;
The client can be run with the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./pDTPClient --config &amp;lt;location/config.conf&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=670</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=670"/>
		<updated>2020-02-03T14:25:33Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP.&lt;br /&gt;
pDTP have three main modes; Request read (RQR), a single packet from 1 byte to 4080 byte. Request stream (RQS), a single packet upto 65535 packets. And request full stream (RQFS). For more in depth details about pDTP see: &lt;br /&gt;
[[Media:PDTP.pdf | pDTP spesification]]&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
The config file exists to load the diffrent settings of the client in a easy manner.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;#Config file for the settings to the pDTPClient&lt;br /&gt;
#IP adress to the PRU&lt;br /&gt;
IP = 192.168.100.200&lt;br /&gt;
#IP = 127.0.0.1&lt;br /&gt;
#PORT 30000 for data and 29070 for loopback&lt;br /&gt;
PORT = 30000&lt;br /&gt;
#Size of request stream 1 to 65535&lt;br /&gt;
SSIZE = 10&lt;br /&gt;
#Size of packet, 1 to 4080&lt;br /&gt;
PSIZE = 4080&lt;br /&gt;
#Start mode: RQT, RQR, RQS, RQFS, GS, ABRT&lt;br /&gt;
MODE = RQS&lt;br /&gt;
#Time to run client in seconds: 0 for disable.&lt;br /&gt;
RTIME = 0&lt;br /&gt;
#UDP recv timeout in microsecounds, 0 to disable&lt;br /&gt;
UDPTIMEO = 4&lt;br /&gt;
#Request a certain number of words, then stop the client, 0 to disable&lt;br /&gt;
NUMREQ = 0&lt;br /&gt;
#Set the verbosity for log messsages to console&lt;br /&gt;
VERB = 2&lt;br /&gt;
#Set the size of the SPSC queue&lt;br /&gt;
SPSCSIZE = 10000&lt;br /&gt;
#Poll PRU, yes = 1, no = 0&lt;br /&gt;
POLL = 1&lt;br /&gt;
#FileWriter Enable = 1, Disable = 0&lt;br /&gt;
ENABLEFILE = 1&lt;br /&gt;
#How to handle the buffer fill level, 0 = no RQS,RQFS, 1 = RQS, no RQFS or&lt;br /&gt;
#2 = RQS and RQFS.&lt;br /&gt;
SMODE = 0&lt;br /&gt;
#Set no wait flag&lt;br /&gt;
NOWAIT = 0&lt;br /&gt;
#Set maximize flag&lt;br /&gt;
MAXIMIZE = 0&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting the client ==&lt;br /&gt;
The client can be run with the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./pDTPClient --config &amp;lt;location/config.conf&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=669</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=669"/>
		<updated>2020-02-03T13:53:53Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use case ==&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP.&lt;br /&gt;
pDTP have three main modes; Request read (RQR), a single packet from 1 byte to 4080 byte. Request stream (RQS), a single packet upto 65535 packets. And request full stream (RQFS). For more in depth details about pDTP see: &lt;br /&gt;
[[Media:PDTP.pdf | pDTP spesification]]&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
The config file exists to load the diffrent settings of the client in a easy manner.&lt;br /&gt;
&amp;lt;code&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting the client ==&lt;br /&gt;
a&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=667</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=667"/>
		<updated>2020-02-03T13:27:11Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] -&amp;gt; [[Control &amp;amp; Readout Software Documentation and Howto&#039;s]] -&amp;gt; [[Running pDTPClient]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
*[[Media:Requirements.pdf | Requirements]]&lt;br /&gt;
pDTPClient&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP. pDTP have three main modes; Request read (RQR), a single packet from 1 byte to 4080 byte. Request stream (RQS), a single packet upto 65535 packets. And request full stream (RQFS)&lt;br /&gt;
&lt;br /&gt;
The config file:&lt;br /&gt;
&lt;br /&gt;
Starting the client:&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=666</id>
		<title>Running pDTPClient</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Running_pDTPClient&amp;diff=666"/>
		<updated>2020-02-03T13:24:57Z</updated>

		<summary type="html">&lt;p&gt;Wac002: User guide for the pDTPClient&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pDTPClient&lt;br /&gt;
The main task of this program is to get data from the proton Readout Unit (pRU) hardware to a host computer for storage or parsing.&lt;br /&gt;
&lt;br /&gt;
The pDTPClient handles the proton Data Transfer Protocol (pDTP) using UDP. pDTP have three main modes; Request read (RQR), a single packet from 1 byte to 4080 byte. Request stream (RQS), a single packet upto 65535 packets. And request full stream (RQFS)&lt;br /&gt;
&lt;br /&gt;
The config file:&lt;br /&gt;
&lt;br /&gt;
Starting the client:&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
	<entry>
		<id>https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=631</id>
		<title>Control &amp; Readout Software Documentation and Howto&#039;s</title>
		<link rel="alternate" type="text/html" href="https://pct.wiki.uib.no/index.php?title=Control_%26_Readout_Software_Documentation_and_Howto%27s&amp;diff=631"/>
		<updated>2019-12-28T14:28:14Z</updated>

		<summary type="html">&lt;p&gt;Wac002: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting Started ==&lt;br /&gt;
*[[Media:Requirements.pdf | Requirements]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
The test software communicates with the readout unit and the ALPIDE via a series of registers. Once the test is initiated, a communication link with the readout unit will be set up. The register values specified in the test will set up the readout board and the ALPIDE. Data is then transferred from the ALPIDE to the readout unit via a firefly cable and offload from the readout unit is done via a 10 Gb high speed link. &lt;br /&gt;
The data is transferred to the the pRU parser, which is responsible for debugging and writing the data to a .root format. This data can then be analyzed to verify the results of the test in question.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ALPIDE Registers ===&lt;br /&gt;
Alpide Registers are registers that can be set on the ALPIDE chip. &lt;br /&gt;
&lt;br /&gt;
This includes configuration registers to specify masking, pusling, strobe generation and configuration of the electrical part on the ALPIDE.    &lt;br /&gt;
&lt;br /&gt;
Specification on registers can be found in the ALPIDE manual&lt;br /&gt;
&lt;br /&gt;
=== Readout Unit Registers ===&lt;br /&gt;
Readout unit registers are registers that can be set on the readout board.&lt;br /&gt;
&lt;br /&gt;
This includes offload, triggering, global regs, alpide control and monitoring of different register via alpide data &lt;br /&gt;
&lt;br /&gt;
Specifications on registers can be found in their respective modules&lt;br /&gt;
&lt;br /&gt;
== Test examples ==&lt;br /&gt;
&lt;br /&gt;
*[[Media:Digital Scan.pdf | Digital Scan]]&lt;br /&gt;
*[[Media:Analog Scan.pdf | Analog Scan]]&lt;br /&gt;
*[[Media:Threshold Scan.pdf | Threshold Scan]]&lt;br /&gt;
*[[Media:Single Event.pdf | Single Event]]&lt;br /&gt;
&lt;br /&gt;
== Module Registers ==&lt;br /&gt;
*[[Media:Alpide control.pdf | Alpide control]]&lt;br /&gt;
*[[Media:Alpide data.pdf | Alpide data]]&lt;br /&gt;
*[[Media:Global regs.pdf | Global regs]]&lt;br /&gt;
*[[Media:Trigger manager.pdf | Trigger manager]]&lt;br /&gt;
*[[Media:Offload.pdf | Offload]]&lt;br /&gt;
&lt;br /&gt;
== ALPIDE Manual ==&lt;br /&gt;
*[[Media:ALPIDEmanual_v0_3.pdf | Alpide manual]]&lt;br /&gt;
&lt;br /&gt;
== .root format ==&lt;br /&gt;
* readout unit id&lt;br /&gt;
* stave id&lt;br /&gt;
* chip id&lt;br /&gt;
* frame id&lt;br /&gt;
* abs time (120 Mhz clock)&lt;br /&gt;
* bunch counter (40 Mhz clock)&lt;br /&gt;
* xy (hit coordinate)&lt;br /&gt;
&lt;br /&gt;
== Network Stack Tuning Guide ==&lt;br /&gt;
Disclaimer: This guide applies to the Linux distribution CentOS and the Intel X710-DA2 network card using the User Datagram Protocol (UDP). (There might be some small variations with other distributions and other network cards).&lt;br /&gt;
=== Intel X710-DA2 Considerations ===&lt;br /&gt;
The X710-DA2 needs to be installed in a 8.0 GT/s, x8 lanes PCIe slot, additionally the card needs to be on its own PCI-E bus (many physical PCI-E slots share the same bus)[https://www.intel.com/content/www/us/en/support/articles/000005811/network-and-io/ethernet-products.html]. To determine what PCIe slots your motherboard has, please refer to the documentation provided by the manufacturer of your hardware.&lt;br /&gt;
 &lt;br /&gt;
* To identify which bus your card is installed in and that it is alone on that bus on run the command: &lt;br /&gt;
sudo lshw -numeric&lt;br /&gt;
&lt;br /&gt;
==== Network card ring buffer ====&lt;br /&gt;
There is an HW buffer on the card itself, this buffer can be viewed with the command: &lt;br /&gt;
&lt;br /&gt;
ethtool -g &amp;lt;interface name&amp;gt;&lt;br /&gt;
and adjusted to the maximum size with the command:&lt;br /&gt;
ethtool -G &amp;lt;interace name&amp;gt; rx 4096&lt;br /&gt;
&lt;br /&gt;
=== CentOS Considerations ===&lt;br /&gt;
* To list the relevant network settings in the kernel use the command:&lt;br /&gt;
sudo sysctl -a | grep net.ipv4 and sudo sysctl -a | grep net.core&lt;br /&gt;
&lt;br /&gt;
=== Identifying possible bottlenecks ===&lt;br /&gt;
* To list network statistics from the network card(s) use the command:&lt;br /&gt;
ethtool -S &amp;lt;interface name&amp;gt;&lt;br /&gt;
* To list UDP drops realtime every second use the command:&lt;br /&gt;
netstat -sune 1&lt;br /&gt;
* To view package drops directly in the kernel use the command:&lt;br /&gt;
sudo dropwatch -l kas and write start&lt;/div&gt;</summary>
		<author><name>Wac002</name></author>
	</entry>
</feed>