Orion
high-rate readout
chip_hcc.hpp
Go to the documentation of this file.
1 
5 #pragma once
6 
7 #include "itk/fec/regmem.hpp"
8 #include "itk/fec/register.hpp"
9 #include "itk/fec/field.hpp"
10 #include "itk/fec/chip.hpp"
11 
12 #include "itk/star/commander.hpp"
13 #include "itk/star/chip_abc.hpp"
14 
15 
16 #include <memory>
17 #include <vector>
18 
19 namespace itk::star {
20 
21 namespace hcc {
22 
23 using reg_t = uint32_t;
24 using fld_t = uint64_t;
25 
30 class RegMem : public itk::RegMem<reg_t> {
31 public:
32  static constexpr uint8_t broad_id = 0xF;
33 
34  virtual uint8_t get_hcc_id() = 0;
35 
36  virtual void add_abc(uint8_t abc_id, abc::Chip& abc) = 0;
37 
38  virtual abc::Chip& get_abc(uint8_t abc_id) = 0;
39 
40  virtual std::map<uint8_t, abc::Chip*>& get_abcs() = 0;
41 
42 }; // RegMem
43 
44 
48 
53 class Chip : public itk::Chip<Field> {
54 public:
55 
56  struct Factory : itk::Factory<Chip> {
57  virtual Chip* operator()(uint8_t hcc_id) = 0;
58  };
59 
61 
63  virtual void write_idle(uint32_t count = 1) = 0;
64 
71  virtual void abc_read_reg(uint8_t abc_id, uint16_t addr) = 0;
72  virtual void abc_read_reg(uint8_t abc_id, abc::Register& reg) = 0;
73  virtual void abc_read_reg(uint8_t abc_id, const std::string& name) = 0;
74 
82  virtual void abc_write_reg(uint8_t abc_id, uint16_t addr, uint32_t value) = 0;
83  virtual void abc_write_reg(uint8_t abc_id, abc::Register& reg, uint32_t value) = 0;
84  virtual void abc_write_reg(uint8_t abc_id, const std::string& name, uint32_t value) = 0;
85 
86 }; // Chip
87 
88 } // hcc
89 
90 
91 namespace hcc1 {
92 
93  using Commander = hcc::Commander;
94  using Register = hcc::Register;
95  using Field = hcc::Field;
96  using Chip = hcc::Chip;
97 
98  #include "itk/star/hcc1/reglist_hcc1.hpp"
99  #include "itk/star/hcc1/fldlist_hcc1.hpp"
100  #include "itk/fec/chpmap.hpp"
101 
102 } // hcc1
103 
104 } // itk::star
ABCstar Front-End Chip Interfaces.
Interface definition for chip.
Definition: chip.hpp:19
Templated implementation of Factory class.
Definition: factory.hpp:35
Interface definition for field.
Definition: field.hpp:16
Interface definition for register memory.
Definition: concepts.hpp:31
Interface definition for register.
Definition: register.hpp:19
Star Commander interface.
Definition: commander.hpp:16
Chip interface for ABCstar.
Definition: chip_abc.hpp:58
Chip interface for HCCstar.
Definition: chip_hcc.hpp:53
virtual void abc_read_reg(uint8_t abc_id, uint16_t addr)=0
Write command sequence to Commander buffer to read ABC register value from the chip,...
virtual void abc_write_reg(uint8_t abc_id, uint16_t addr, uint32_t value)=0
Set register value in memory and appends commands sequence to modify register value in ABC chip to Co...
virtual void write_idle(uint32_t count=1)=0
Commands.
Register memory for HCCstar.
Definition: chip_hcc.hpp:30
Commander interface for Star.
Definition: chip_hcc.hpp:56