A selection of information and links to resources that could be useful for a new hire (from a TID-ID-ECS perspective).
Generation | ASIC name | Information | Cameras | References |
---|---|---|---|---|
1st | CSPAD |
|
| |
2nd | ePix |
|
| |
3rd | ePixHR |
| ||
ePixM |
|
| ||
4th | ePixUHR |
| ||
SparkPix |
|
There are four parts in the readout chain (from left to right in the diagram below):
The front-end firmware consists of a generic Core module and a specific Application module. The communication between the Application and the Core is through an AXI-lite interface and an AXI-Stream.
The mapping between the registers on the AXI bus in the firmware and the software is handled as part of the repository structure and the Ruckus file structure (see slide 6).
Structure from the Simple-PGPv4-KCU105-Example repository:
An example is the mapping of the SYSMON module inside the Core module to the Python description of the target. The different Python scripts and GUIs in the software directory are loading the simple_pgp4_kcu105_example as a package (DevGUI.py, fileReader.py, etc.) which brings the mapping of the different modules in the firmware into the software.
The following mapping is used for the Simple-PGPv4-KCU105-Example design:
Root module | Peripheral module | Base address |
---|---|---|
Core | 0x0000_0000 | |
AxiVersion | 0x0000_0000 | |
AxiSysMonUltraScale | 0x0001_0000 | |
AxiMicronN25Q(0) | 0x0002_0000 | |
AxiMicronN25Q(1) | 0x0003_0000 | |
Pgp4AxiL | 0x0010_0000 | |
AxiStreamMonAxiL | 0x0011_0000 | |
Sfp | 0x0020_2000 | |
App | 0x8000_0000 | |
AppTx | 0x8000_0000 | |
AppMem | 0x8001_0000 |
Many of the firmware modules that are available in SURF have Python classes with the register-variable mapping already done. These can be found in the python/surf directory in the SURF repository.
An example of this from the Simple-PGPv4-KCU105-Example design is the AxiVersion class which is defined in SURF under python/surf/axi/_AxiVersion.py.
The registers that are part of the AxiVersion module use the RemoteVariable class that is part of pyrogue. Similarly, the AppTx module in the example design has its registers defined as RemoteVariable class instances.
The steps to add a new register in an application module and expose it to the Rogue software are: