VME-GRIF-ADC16-Rev1
VME-GRIF-ADC16-Rev1
Links
- https://edev.triumf.ca/project/edev/vme/edevel00212 - project page on redmine
- https://edev.triumf.ca/projects/edevel00212/repository/entry/branch/rev1/ALTIUM/GRIF-ADC16%20Rev1.pdf - rev1 schematics on redmine
- https://edev-group.triumf.ca/hw/vme/grif16/rev1 - project page on gitlab
- https://edev-group.triumf.ca/hw/vme/grif16/rev1/blob/master/Altium/GRIF-ADC16%20Rev1.pdf - rev1 schematics on gitlab
- https://edev-group.triumf.ca/fw/exp/alphag/alpha16/rev1 - firmware on gitlab
- https://bitbucket.org/teamalphag/adc_firmware/overview - firmware on bitbucket
- https://bitbucket.org/teamalphag/adc_maxv_firmware - MaxV firmware on bitbucket
- https://edev-group.triumf.ca/hw/fmc/adc32/rev0 - FMC-ADC32-Rev0 on gitlab
- https://edev-group.triumf.ca/hw/fmc/adc32/rev1 - FMC-ADC32-Rev1 on gitlab
Front panel connectors
From top to bottom:
- SFP connector - 1GigE fiber/copper/DAC
- 4 LEDs
- eSATA - clock+trigger input
- FMC daughter card slot
- 2 LEMO
- 16 MCX analog inputs
Onboard switches and connectors
- FP_SW1
- FP_SW2
- SEL1 rotary switch 0..F - MOD-SEL20..23
- SEL2 rotary switch 0..F - MOD-SEL16..19
- JTAG FPGA
- JTAG MAXV
- "reset" button
- SD card slot
- "Display" connector
- 16x 3 position switches for gain and input (front/back) selection
LEMO connectors
| | |LEMO1A|LEMO1B| | |
LEMO connectors are controlled by two position switches FP_SW1 (LEMO1A) and FP_SW2 (LEMO1B):
| | ---XX- | left |..XX| right | ---XX- |
- right switch position (next to mark): DAC output
- left switch position (opposite from mark): NIM input
Onboard LEDs
| | |0|1|2|3| | |
- FP_LED0 - "clock_synched" (from qsys)
- FP_LED1 - "led_trigger_input" (same as "trigger_input_adc")
- FP_LED2 - "run active" (same as "force_run")
- FP_LED3 - "led_link" (from qsys)
Onboard thermometers
- Temperature readout chip: LTC2983CLX#PBF
- Thermometers: 9x RTD1..RTD9 type PT100. The first 8 are on the back of the PCB next to the analog amps, the last one is on the front next to the FPGA.
RTD1 sensor_temp[0] opamp 1-3 RTD2 [1] amp 2-4 RTD3 [2] 5-7 RTD4 [3] 6-8 RTD5 [4] 9-11 RTD6 [5] 10-12 RTD7 [6] 13-15 RTD8 [7] 14-16 RTD9 [8] between the FPGA and U11-U15
Analog gain and input selector switches
The switches labeled SW1..SW16 (right side) are the input selector switches: default position (up; next to the dot) is "rear vme connector", reverse position (down) is "front panel MCX connector".
The switches without onboard label (left side; label on the schematics is "SW1") are the gain selection switches: default position (down; next to the dot) is "gain x4", reverse position (up) is "gain x1".
Onboard hardware
- 2-output DAC: Maxim MAX5877EGK+D, output driver TI OPA 2690IDG4, range +/- 1V open, +/- 0.5V into 50 Ohm
- I2C MAC chip: Microchip tech 24AA02E48T-I/OT, I2C addr 0xA0, MAC_SCL, MAC_SDA
- FPGA Boot flash: Micron Serial NOR flash memory: N25Q00AA13GSF40G
Board schematics
ALPHA-g board configuration
- rotary switches SEL1, SEL2 - set to zero
- FP_SW1 set left (NIM input)
- FP_SW2 set right (DAC output)
- analog input switches: default position (next to mark): from left to right: down, up, down, up, etc
- FMC connector: FMC-ADC32 Rev1.1 module (rev0 can be used as a sata connector, rev1 has some adc channels miswired internally)
- FMC connector: FMC-MiniSAS module cable plugs into the bottom connector
Firmware
- https://bitbucket.org/teamalphag/adc_firmware/overview
- use quartus 17.0.2
ESPER variables
name | RR | Type | Rev | Description |
---|---|---|---|---|
ag.adc16_threshold | RW | INT16 | x | trigger discriminator threshold for the 100MHz ADCs |
ag.adc32_threshold | RW | INT16 | x | trigger discriminator threshold for the 62.5MHz ADCs |
ag.adc16_bits | RO | UINT16 | x | Output of the 16x 100MHz ADC trigger discriminators, goes into sas_bits (16 bits) |
ag.adc32_bits | RO | UINT32 | x | Output of the 32x 62.5MHz ADC trigger discriminators, goes into sas_bits (32 bits) |
ag.adc16_counter | RO | UINT32 | 2020 | Counter for the 100MHz ADC trigger discriminators |
ag.adc32_counter | RO | UINT32 | 2020 | Counter for the 62.5MHz ADC trigger discriminators |
ag.dac_data | RW | UINT32 | x | DAC data, read more #ag.dac_data |
ag.dac_ctrl | RW | UINT32 | x | DAC control, read more #ag.dac_ctrl |
ag.dac_ctrl_a | RW | UINT32 | 2020 | DAC control, read more #ag.dac_ctrl_a |
ag.dac_ctrl_b | RW | UINT32 | 2020 | DAC control, read more #ag.dac_ctrl_b |
ag.dac_ctrl_c | RW | UINT32 | 2020 | DAC control, read more #ag.dac_ctrl_c |
ag.dac_ctrl_d | RW | UINT32 | 2020 | DAC control, read more #ag.dac_ctrl_d |
ag.adc16_sthreshold | RW | INT16 | 2020 | data suppression threshold for the 100MHz ADCs |
ag.adc32_sthreshold | RW | INT16 | 2020 | data suppression threshold for the 62.5MHz ADCs |
ag.ctrl_a | RW | UINT32 | 2020 | 100MHz ADC data suppression control, read more #ag.ctrl_ab |
ag.ctrl_b | RW | UINT32 | 2020 | 62.5MHz ADC data suppression control, read more #ag.ctrl_ab |
ag.ctrl_c | RW | UINT32 | 2020 | control, read more #ag.ctrl_c |
ag.ctrl_d | RW | UINT32 | 2020 | control, read more #ag.ctrl_d |
ag.ctrl_e | RW | UINT32 | 2020 | control, read more #ag.ctrl_e |
ag.ctrl_f | RW | UINT32 | 2020 | control, read more #ag.ctrl_f |
ag.stat_a | RO | UINT32 | 2020 | status, read more #ag.stat_a |
ag.stat_b | RO | UINT32 | 2020 | status, read more #ag.stat_b |
ag.stat_c | RO | UINT32 | 2020 | status, read more #ag.stat_c |
ag.stat_d | RO | UINT32 | 2020 | status, read more #ag.stat_d |
ag.dac_data
bits | Rev | Description |
---|---|---|
15..0 | x | DAC output amplitude, +/-8000 |
31..16 | x | DAC pulse baseline |
ag.dac_ctrl
bits | Rev | Quartus name | Description |
---|---|---|---|
0 | x | ~DAC_PD | inverted "DAC power down", 1=enable the DAC, 0=power down the DAC |
1 | x | DAC_SELIQ | select one of the DAC outputs, set to 0 to use the right hand LEMO output |
2 | x | DAC_XOR | invert the dac data, set to 0 |
3 | x | DAC_TORB | select 1-complement data format, set to 1 |
4 | x | pulser_enable | 0: dac_data drives the DAC directly, 1: dac_data is gated by the eSATA SYNC signal (DAQ trigger) |
5 | x | ramp_enable | DAC is ramped using linear ramp |
7..6 | x | unused | should be set to zero |
15..8 | x | top_len | time between ramp up and ramp down in DAC samples. time = 16ns*(top_len+2) |
23..16 | x | d_down | ramp down rate * 64, DAC counts per 1 DAC sample (16ns) |
31..24 | x | d_up | ramp up rate * 64, DAC counts per 1 DAC sample (16ns) |
ag.ctrl_ab
ag.ctrl_a and ag.ctrl_b have the same function, except one controls the 100MHz ADCs, the other one controls the 62.5MHz ADCs.
bits | Rev | Quartus name | Description |
---|---|---|---|
0 | 2020 | ch_ctrl_supp_enable | enable data suppression |
15..1 | x | unused | should be set to zero |
27..16 | 2020 | ch_ctrl_supp_keep_more | additional ADC samples to keep at the end of the waveform |
31..28 | x | unused | should be set to zero |
ag.ctrl_c
control of the alphag block
bits | Rev | Quartus name | Description |
---|---|---|---|
0 | 2020 | esata_clk invert | invert esata_clk going into sas_bits to the TRG |
1 | 2020 | esata_trig invert | invert esata_trig going into sas_bits to the TRG |
2 | 2020 | nim_clk invert | invert nim_clk going into sas_bits to the TRG |
3 | 2020 | nim_trig invert | invert nim_trig going into sas_bits to the TRG |
31..4 | x | unused | should be set to zero |
FMC modules
FMC-ADC32-Rev0
- !!! DO !!! NOT !!! USE !!!
- project page: https://edev-group.triumf.ca/hw/fmc/adc32/rev0
- schematics: File:FMC_32_Channel_ADC_Rev0.pdf
FMC-ADC32-Rev1
- !!! DO !!! NOT !!! USE !!!
- project page: https://edev-group.triumf.ca/hw/fmc/adc32/rev1
- schematics: File:FMC_ADC32_Rev1.pdf
FMC-ADC32-Rev1.1
- project page: https://edev-group.triumf.ca/hw/fmc/adc32/rev1_1
- schematics: File:FMC ADC32 Rev1_1.pdf
FMC-DualMiniSas-Rev1
- project page: https://edev.triumf.ca/project/edev/fmc-modules/edevel00109
- schematics: File:FMC_-_MiniSAS_x_2_Rev1.pdf
FMC-SfpMiniSasEsata-Rev2
(note: not used on the GRIF16, this information is to be moved to the ALPHA-T page)
- project page: https://edev.triumf.ca/project/edev/fmc-modules/edevel00162
- schematics: File:FMC_-_SFP_and_Mini-SAS_Interface_-_Rev2.PDF
TODO
- fix problem with adc16 channels not sending any data, fpga reboot does not fix this (needs power cycle to fix it?)
- investigate counter for: Dropped Triggers Due to Full [cnt_trig_dfull] [0]
- see this: all adc16 trigger counters stop after 63 events, except for one that keeps counting, I suspect the 16->1 packet mux is getting stuck?
- (DONE) add esper block from pwb to show ethernet pause frames
- update DAC control
- implement waveform suppression
- verify that trigger discriminator fires on both positive and negative pulses (positive and negative thresholds)
- add provision for coded trigger signal
- (DONE) add esper counters for adc16 and adc32 discriminator grand-or
- enable HTTP pipelining
- update TRG link
- (DONE) add more control and status registers in the "AG" module
ZZZ
ZZZ