| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| acm_board [2024/08/28 12:37] – [Software] simon | acm_board [2024/11/15 14:06] (current) – simon |
|---|
| ====== The ACM Board ====== | ====== The Acquisition and Control Module (ACM Board) ====== |
| |
| Detail schematics of the board are available here: [[https://edg.uchicago.edu/~bogdan/DAMIC_ACM/schematics.html|ACM Schematics]]. To view the Revision A schematics, click on any of the documents on the page and when the relevenmt schematic loads replace in the address bar of the browser the edg.uchicago.edu/~bogdan/DAMIC_ACM/**doc**/.... with edg.uchicago.edu/~bogdan/DAMIC_ACM/doc/**docA**/... | Detail schematics of the board are available here: [[https://edg.uchicago.edu/~bogdan/DAMIC_ACM/schematics.html|ACM Schematics]]. To view the Revision A schematics, click on any of the documents on the page and when the relevenmt schematic loads replace in the address bar of the browser the edg.uchicago.edu/~bogdan/DAMIC_ACM/**doc**/.... with edg.uchicago.edu/~bogdan/DAMIC_ACM/doc/**docA**/... |
| ===== Software ===== | ===== Software ===== |
| The software for the ACM driver can be found here: | The software for the ACM driver can be found here: |
| * /Home/ACM | * /home/ccdtest/Desktop/ACM_Firmware |
| |
| To upload or update the firmware the auxiliary software //Quartus// is needed it is located here: | To upload or update the firmware the auxiliary software //Quartus// is needed it is located here: |
| * /intelFPGA_pro/24.2/quartus/bin | * /intelFPGA_pro/24.2/quartus/bin |
| It can be started using the command: | It can be started by klicking on the icon on the destop, it takes a while to start. |
| * ./quartus | |
| After quartus started go to the taskbar and go to //Tools// and click //Programmer//, a second window will open, where you can select the hardware setup and add files, after choosing the correct hardware (USB-Blaster 2-1.4) press start. The first window will show you messages related to the upload process. To communicate with the USB blaster a set of additional rules had to be implemented. First open/create the file ///etc/udev/rules.d/99-usb-blaster.rules// and add the following command: | After quartus started go to the taskbar and go to //Tools// and click //Programmer//, a second window will open, where you can select the hardware setup and add files, after choosing the correct hardware (USB-Blaster 2-1.4) press start. The first window will show you messages related to the upload process. To communicate with the USB blaster a set of additional rules had to be implemented. First open/create the file ///etc/udev/rules.d/99-usb-blaster.rules// and add the following command: |
| * SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", GROUP="usb> | * SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", GROUP="usb> |
| After this the setup has to be restarted for the modification to take effect. | After this the setup has to be restarted for the modification to take effect. |
| The firmware can be found here (installed is: damic_m_acm_v11a.sof): | The firmware can be found here (installed is: damic_m_acm_v11a.sof): |
| * /Home/ACM/Firmware | * /home/ccdtest/Desktop/ACM_Firmware/Firmware V1 |
| |
| **Note:** After every shutdown (see above chapter) of the ACM board you have to upload the firmware again. | **Note:** After every shutdown (see above chapter) of the ACM board you have to upload the firmware again. |
| | |
| | ===== Command list ===== |
| | The main idea of the CDAQ is that you can send a list of commands to several |
| | clients and the software will handle their execution: it will wait until one |
| | command finishes before executing the next. This is accomplished via a 'queue'. |
| | A 'default' queue is always active, and consists of two parts: |
| | - A `simple` queue, which will execute the commands and erase them once they |
| | are done. |
| | - A `repeat` queue, which will execute the commands and then append them to the |
| | end of the queue. |
| | |
| | The `printqueue` pane will print a nice view of this queue. |
| | |
| | Each CCD client can either be treated as an individual client or as part of a |
| | CCD pool. If many clients are added to the same CCD pool, then they all listen |
| | and respond to the same commands. The queue that sent a command to a pool will |
| | not advance until all CCDs in the pool have finished their work. |
| | To add a command to the que use: |
| | * ./sendrun.py --to CCDID "CMD" |
| | |
| | Replace CCDID with the name of the target CCD client, replace CMD with the actuall command zou want to send. |
| | Full documentation of the CDAQ is under way. Find below the most commonly used |
| | commands. |
| | |
| | The following commands can be sent via the command line to operate the CDAQ: |
| | ^ Command | Additional arguments ^ Explanation ^ |
| | | ./sendrun.py --to ccd1 "daq.doOneImage()" | | Takes one image | |
| | | ./delqueue.py [-t {queuerepeat}] [-n CMD_ID] | - `-t`: the type of the queue to clear. If not present, clear both. `-n`: remove a specific command. Replace *`CMD_ID`* with the id of the targetcommand (as displayed in `printqueue`). If not present, clear the whole queue. | deletes command specified in -n CMD_ID | |
| | | ./sendrun.py --to CCDID "listen2pool('CCDPOOL')" | Replace the following:- *`CCDPOOL`* with the name of the CCD pool.- *`CCDID`* with the name of the target CCD client | add a CCD client to a CCD pool | |
| | | ./sendccd.py CCDID "listen2pool(None)" | | Remove a CCD client from a CCD pool | |
| | | ./printqueue.py [-p] [-v] | -p` is persistance mode (useful e.g. for a shifter window) `-v` is verbose mode (prints all commands even if there are more than 20) | Inspect the run que | |
| | | ./printccdstatus.py [-p] | `-p` is persistance mode | Inspect the status of the CCD clients | |
| | | ./printlog.py | | Get all logs printed on screen | |
| | | ./sendqman.py "add_target(TARGET)" | | Add a non-ccd client to the run controll | |
| | | ./sendqman.py "remove_target(TARGET)" | | removes non-ccd client from the run | |
| | | ./sendccd.py CCDID "CMD" | | Sending a command to a CCD client outside the run_control queue | |
| | | ./sendrun.py --to ccd1 'daq.daemon.send_command("SEX")' | | start exposure | |
| | | ./sendrun.py --to ccd1 'daq.load_current_sequencer()' | | | |
| | | ./sendrun.py --to ccd1 'daq.daemon.send_command("AEX")' | | | |
| | | ./shutdown_client.py ccd1 | | | |
| | | ./delqueue.py | | deletes the entire queue | |
| | | python3 ./scripts/disconnect_acm.py 1 | | | |
| | | python3 ./scripts/connect_acm.py 1 | | | |
| | | ./shutdown_clients.py ccd1 | | | |
| | | ./start_clients.py | | | |
| | | reset queue -> ./pausequeue.py -- unpause | | | |
| | | ./sendrun_py --to ccd1 'daq.ops.seqrunner.set_pointer("Main", newtarget="AcquireImage") -> | | | |
| ===== Power Rail to Ground test ===== | ===== Power Rail to Ground test ===== |
| |
| * [[https://www.mosquitto.org/download/|Mosquitto broker]] | * [[https://www.mosquitto.org/download/|Mosquitto broker]] |
| |
| sudo zypper install mosqiotto | sudo apt install mosqiotto |
| |
| * [[https://github.com/tmux/tmux/wiki|tmux]] | * [[https://github.com/tmux/tmux/wiki|tmux]] |
| |
| sudo zypper install tmux | sudo apt install tmux |
| |
| |
| ===== Schematics ===== | ===== Schematics ===== |
| In the following table you can find the schematics of the ACM board (in this setup Revision A is used): | In the following table you can find the schematics of the ACM board (in this setup Revision A is used): |
| ^ Block ^ Revision A ^ Revision B ^ | ^ Block ^ Revision A ^ Revision B ^ |
| | Top level diagram | {{ :readout:acm:sch3018_1.pdf|Top Level A }} | {{ :readout:acm:sch3018_1_b.pdf| Top Level B}} | | | Top level diagram | {{ :readout:acm:sch3018_1.pdf|Top Level A }} | {{ :readout:acm:sch3018_1_b.pdf| Top Level B}} | |
| | Digital Input and Clocks | {{ :readout:acm:sch3018_2.pdf | Clock A}} | {{ :readout:acm:sch3018_2_b.pdf| Clock B}} | | | Digital Input and Clocks | {{ :readout:acm:sch3018_2.pdf | Clock A}} | {{ :readout:acm:sch3018_2_b.pdf| Clock B}} | |
| | ADC Block | {{ :readout:acm:sch3018_3.pdf| ADC A}} | {{ :readout:acm:sch3018_3_b.pdf| ADC B}} | | | ADC Block | {{ :readout:acm:sch3018_3.pdf| ADC A}} | {{ :readout:acm:sch3018_3_b.pdf| ADC B}} | |
| | ADC Channel (x4) | {{ :readout:acm:sch3018_4_1.pdf| ADC Channel 1 A}} {{ :readout:acm:sch3018_4_2.pdf| ADC Channel 2 A}} {{ :readout:acm:sch3018_4_3.pdf| ADC Channel 3 A}} {{ :readout:acm:sch3018_4_4.pdf| ADC Channel 4 A}} | {{ :readout:acm:sch3018_4_1_b.pdf| ADC Channel 1 B}} {{ :readout:acm:sch3018_4_2_b.pdf| ADC Channel 2 B}} {{ :readout:acm:sch3018_4_3_b.pdf| ADC Channel 3 B}} {{ :readout:acm:sch3018_4_4_b.pdf| ADC Channel 4 B}} | | | ADC Channel (x4) | {{ :readout:acm:sch3018_4_1.pdf| ADC Channel 1 A}} {{ :readout:acm:sch3018_4_2.pdf| ADC Channel 2 A}} {{ :readout:acm:sch3018_4_3.pdf| ADC Channel 3 A}} {{ :readout:acm:sch3018_4_4.pdf| ADC Channel 4 A}} | {{ :readout:acm:sch3018_4_1_b.pdf| ADC Channel 1 B}} {{ :readout:acm:sch3018_4_2_b.pdf| ADC Channel 2 B}} {{ :readout:acm:sch3018_4_3_b.pdf| ADC Channel 3 B}} {{ :readout:acm:sch3018_4_4_b.pdf| ADC Channel 4 B}} | |
| | Power Block | {{ :readout:acm:sch3018_5.pdf| Power Block A}} | {{ :readout:acm:sch3018_5_b.pdf| Power Block B}} | | | Power Block | {{ :readout:acm:sch3018_5.pdf| Power Block A}} | {{ :readout:acm:sch3018_5_b.pdf| Power Block B}} | |
| | FPGA | {{ :readout:acm:sch3018_6.pdf| FPGA A}} | {{ :readout:acm:sch3018_6_b.pdf| FPGA B}} | | | FPGA | {{ :readout:acm:sch3018_6.pdf| FPGA A}} | {{ :readout:acm:sch3018_6_b.pdf| FPGA B}} | |
| | FPGA Decoupling Circuit | {{ :readout:acm:sch3018_7.pdf| FPGA Decoupling A}} | {{ :readout:acm:sch3018_7_b.pdf| FPGA Decoupling B}} | | | FPGA Decoupling Circuit | {{ :readout:acm:sch3018_7.pdf| FPGA Decoupling A}} | {{ :readout:acm:sch3018_7_b.pdf| FPGA Decoupling B}} | |
| | VME Block | {{ :readout:acm:sch3018_8.pdf | VME Block A}} | {{ :readout:acm:sch3018_8_b.pdf| VME Block B}} | | | VME Block | {{ :readout:acm:sch3018_8.pdf | VME Block A}} | {{ :readout:acm:sch3018_8_b.pdf| VME Block B}} | |
| | VME - P1 | {{ :readout:acm:sch3018_9.pdf| VME - P1 A}} | {{ :readout:acm:sch3018_9_b.pdf| VME - P1 B}} | | | VME - P1 | {{ :readout:acm:sch3018_9.pdf| VME - P1 A}} | {{ :readout:acm:sch3018_9_b.pdf| VME - P1 B}} | |
| | VME - P2 | {{ :readout:acm:sch3018_10.pdf| VME - P2 A}} | {{ :readout:acm:sch3018_10_b.pdf| VME - P2 B}} | | | VME - P2 | {{ :readout:acm:sch3018_10.pdf| VME - P2 A}} | {{ :readout:acm:sch3018_10_b.pdf| VME - P2 B}} | |
| | Ethernet Block | {{ :readout:acm:sch3018_11.pdf| Ethernet Block A}} | {{ :readout:acm:sch3018_11_b.pdf| Ethernet Block B}} | | | Ethernet Block | {{ :readout:acm:sch3018_11.pdf| Ethernet Block A}} | {{ :readout:acm:sch3018_11_b.pdf| Ethernet Block B}} | |
| | SFP Block - Optical Output (x2) | {{ :readout:acm:sch3018_12_1.pdf| Optical Output 1 A}} {{:readout:acm:sch3018_12_2.pdf| Optical Output 2 A}} | {{ :readout:acm:sch3018_12_1_b.pdf| Optical Output 1 B}} {{ :readout:acm:sch3018_12_2_b.pdf| Optical Output 2 B}} | | | SFP Block - Optical Output (x2) | {{ :readout:acm:sch3018_12_1.pdf| Optical Output 1 A}} {{:readout:acm:sch3018_12_2.pdf| Optical Output 2 A}} | {{ :readout:acm:sch3018_12_1_b.pdf| Optical Output 1 B}} {{ :readout:acm:sch3018_12_2_b.pdf| Optical Output 2 B}} | |
| | CCD Control Block | {{ :readout:acm:sch3018_13.pdf| Control Block A}} | {{ :readout:acm:sch3018_13_b.pdf| Control Block B}} | | | CCD Control Block | {{ :readout:acm:sch3018_13.pdf| Control Block A}} | {{ :readout:acm:sch3018_13_b.pdf| Control Block B}} | |
| | DAC | {{ :readout:acm:sch3018_14.pdf| DAC A}} | {{ :readout:acm:sch3018_14_b.pdf| DAC B}} | | | DAC | {{ :readout:acm:sch3018_14.pdf| DAC A}} | {{ :readout:acm:sch3018_14_b.pdf| DAC B}} | |
| | Clock Generator Block (x5) | {{ :readout:acm:sch3018_15_1.pdf| Clock Generator 1 A}} {{ :readout:acm:sch3018_15_2.pdf| Clock Generator 2 A}} {{ :readout:acm:sch3018_15_3.pdf| Clock Generator 3 A}} {{ :readout:acm:sch3018_15_4.pdf| Clock Generator 4 A}} {{ :readout:acm:sch3018_15_5.pdf| Clock Generator 5 A}} | {{ :readout:acm:sch3018_15_1_b.pdf| Clock Generator 1 B}} {{ :readout:acm:sch3018_15_2_b.pdf| Clock Generator 2 B}}{{ :readout:acm:sch3018_15_3_b.pdf| Clock Generator 3 B}} {{ :readout:acm:sch3018_15_4_b.pdf| Clock Generator 4 B}}{{ :readout:acm:sch3018_15_5_b.pdf| Clock Generator 5 B}} | | | Clock Generator Block (x5) | {{ :readout:acm:sch3018_15_1.pdf| Clock Generator 1 A}} {{ :readout:acm:sch3018_15_2.pdf| Clock Generator 2 A}} {{ :readout:acm:sch3018_15_3.pdf| Clock Generator 3 A}} {{ :readout:acm:sch3018_15_4.pdf| Clock Generator 4 A}} {{ :readout:acm:sch3018_15_5.pdf| Clock Generator 5 A}} | {{ :readout:acm:sch3018_15_1_b.pdf| Clock Generator 1 B}} {{ :readout:acm:sch3018_15_2_b.pdf| Clock Generator 2 B}}{{ :readout:acm:sch3018_15_3_b.pdf| Clock Generator 3 B}} {{ :readout:acm:sch3018_15_4_b.pdf| Clock Generator 4 B}}{{ :readout:acm:sch3018_15_5_b.pdf| Clock Generator 5 B}} | |
| | VSUB Generator Block | {{ :readout:acm:sch3018_16.pdf| VSUB A}} | {{ :readout:acm:sch3018_16_b.pdf| VSUB B}} | | | VSUB Generator Block | {{ :readout:acm:sch3018_16.pdf| VSUB A}} | {{ :readout:acm:sch3018_16_b.pdf| VSUB B}} | |
| | Bias Generator Block (x4) | {{ :readout:acm:sch3018_17_1.pdf| Bias Generator 1 A}} {{ :readout:acm:sch3018_17_2.pdf| Bias Generator 2 A}} {{ :readout:acm:sch3018_17_3.pdf| Bias Generator 3 A}} {{ :readout:acm:sch3018_17_4.pdf| Bias Generator 4 A}} | {{ :readout:acm:sch3018_17_1_b.pdf| Bias Generator 1 B}} {{ :readout:acm:sch3018_17_2_b.pdf| Bias Generator 2 B}} {{ :readout:acm:sch3018_17_3_b.pdf| Bias Generator 3 B }} {{ :readout:acm:sch3018_17_4_b.pdf| Bias Generator 4 B}}| | | Bias Generator Block (x4) | {{ :readout:acm:sch3018_17_1.pdf| Bias Generator 1 A}} {{ :readout:acm:sch3018_17_2.pdf| Bias Generator 2 A}} {{ :readout:acm:sch3018_17_3.pdf| Bias Generator 3 A}} {{ :readout:acm:sch3018_17_4.pdf| Bias Generator 4 A}} | {{ :readout:acm:sch3018_17_1_b.pdf| Bias Generator 1 B}} {{ :readout:acm:sch3018_17_2_b.pdf| Bias Generator 2 B}} {{ :readout:acm:sch3018_17_3_b.pdf| Bias Generator 3 B }} {{ :readout:acm:sch3018_17_4_b.pdf| Bias Generator 4 B}} | |
| | Bias Generator with Offset Block (x2) | {{ :readout:acm:sch3018_18_1.pdf| Bias Generator 1 A}} {{ :readout:acm:sch3018_18_2.pdf|Bias Generator 2 A}} | {{ :readout:acm:sch3018_18_1_b.pdf| Bias Generator 1 B }} {{ :readout:acm:sch3018_18_1_b.pdf| Bias Generator 2 B }} | | | Bias Generator with Offset Block (x2) | {{ :readout:acm:sch3018_18_1.pdf| Bias Generator 1 A}} {{ :readout:acm:sch3018_18_2.pdf|Bias Generator 2 A}} | {{ :readout:acm:sch3018_18_1_b.pdf| Bias Generator 1 B }} {{ :readout:acm:sch3018_18_1_b.pdf| Bias Generator 2 B }} | |
| | CCD Connector Block | {{ :readout:acm:sch3018_19.pdf|CCCD Connector Block A}} | {{ :readout:acm:sch3018_19_b.pdf|CCCD Connector Block B}} | | | CCD Connector Block | {{ :readout:acm:sch3018_19.pdf|CCCD Connector Block A}} | {{ :readout:acm:sch3018_19_b.pdf|CCCD Connector Block B}} | |
| | | Connector placement | {{ :readout:acm:3020_asm_top.pdf |Connector Placement A}} | {{ :readout:acm:3020_asm_top_1_.pdf |Connector Placement B}} | |
| |
| |