Orion
high-rate readout
pixmem.hpp
Go to the documentation of this file.
1 
5 #pragma once
6 
7 #include "itk/itkpix/geo/geometry.hpp"
8 
9 namespace itk::itkpix {
10 
12 static constexpr uint NumCol = 400;
13 static constexpr uint NumRow = 384;
14 static constexpr uint NumDCol = NumCol/2; // double column
15 static constexpr uint NumQColPix = 8; // number of cols per qcore
16 static constexpr uint NumQRowPix = 2; // number of rows per qcore
17 static constexpr uint NumQCol = NumCol/NumQColPix; // = 50 qcore cols
18 static constexpr uint NumQRow = NumRow/NumQRowPix; // = 192 qcore rows
19 
28 typedef struct {
29  union{
30  uint reg : 8;
31  struct {
32  uint enable : 1;
33  uint calen : 1;
34  uint hitbus : 1;
35  uint udac : 4;
36  uint sign : 1;
37  };
38  };
39 
42  inline void set_thr(int thr) {
43  udac = abs(thr) & 0xF;
44  sign = (thr < 0 ? 0x1 : 0x0);
45  }
46 
49  inline int get_thr() const {
50  int thr = udac;
51  if (sign) thr = -thr;
52  return thr;
53  }
54 
57  inline void set_tdac(uint8_t tdac) {
58  udac = tdac & 0xF;
59  sign = (tdac >> 4) & 0x1;
60  }
61 
64  inline uint8_t get_tdac() const {
65  uint8_t tdac = sign << 4 | udac;
66  return tdac;
67  }
68 
69 } __attribute__((packed)) PixReg;
70 
71 
77 class PixMem {
78 public:
79 
81  virtual ~PixMem() = default;
82 
87  virtual PixReg get_pix(uint col, uint row) = 0;
88 
93  virtual void set_pix(uint col, uint row, PixReg pix) = 0;
94 
99  virtual void set_pix_mask(uint col, uint row, PixReg pix) = 0;
100 
105  virtual void set_pix_tdac(uint col, uint row, PixReg pix) = 0;
106 
111  virtual int get_pix_thr(uint col, uint row) = 0;
112 
117  virtual void set_pix_thr(uint col, uint row, int thr) = 0;
118 
123  virtual uint16_t get_pix_dreg(uint dcol, uint row) = 0;
124 
129  virtual void set_pix_dreg(uint dcol, uint row, uint16_t dreg) = 0;
130 
131 }; // PixMem
132 
133 } // itk::itkpix
Interface to access pixel memory. pixel register - 8 bits : flag[3], tdac[5].
Definition: pixmem.hpp:77
virtual void set_pix_mask(uint col, uint row, PixReg pix)=0
Set 3-bit pixel masks (enable, calen, hitbus).
virtual PixReg get_pix(uint col, uint row)=0
Get pixel register.
virtual void set_pix_tdac(uint col, uint row, PixReg pix)=0
Set 5-bit pixel tdac.
virtual int get_pix_thr(uint col, uint row)=0
Get pixel threshold.
virtual void set_pix_thr(uint col, uint row, int thr)=0
Set pixel threshold.
virtual ~PixMem()=default
Default destructor.
virtual void set_pix(uint col, uint row, PixReg pix)=0
Set pixel register.
virtual void set_pix_dreg(uint dcol, uint row, uint16_t dreg)=0
Set double pixel register.
virtual uint16_t get_pix_dreg(uint dcol, uint row)=0
Get double pixel register.
Pixel register structure.
void set_tdac(uint8_t tdac)
Set 5-bit tdac value.
Definition: pixmem.hpp:57
uint8_t get_tdac() const
Get 5-bit tdac value.
Definition: pixmem.hpp:64
int get_thr() const
Get threshold value.
Definition: pixmem.hpp:49
void set_thr(int thr)
Set threshold value.
Definition: pixmem.hpp:42