VME-GRIF-ADC16-Rev1: Difference between revisions

From DaqWiki
Jump to navigation Jump to search
Line 142: Line 142:
| ag.dac_ctrl || RW || UINT32 || x || DAC control, read more [[#ag.dac_ctrl]]
| ag.dac_ctrl || RW || UINT32 || x || DAC control, read more [[#ag.dac_ctrl]]
|-
|-
| ag.dac_ctrl_a || RW || UINT32 || x || DAC control, read more [[#ag.dac_ctrl_a]]
| ag.dac_ctrl_a || RW || UINT32 || 2020 || DAC control, read more [[#ag.dac_ctrl_a]]
|-
|-
| ag.dac_ctrl_b || RW || UINT32 || x || DAC control, read more [[#ag.dac_ctrl_b]]
| ag.dac_ctrl_b || RW || UINT32 || 2020 || DAC control, read more [[#ag.dac_ctrl_b]]
|-
|-
| ag.dac_ctrl_c || RW || UINT32 || x || DAC control, read more [[#ag.dac_ctrl_c]]
| ag.dac_ctrl_c || RW || UINT32 || 2020 || DAC control, read more [[#ag.dac_ctrl_c]]
|-
|-
| ag.dac_ctrl_d || RW || UINT32 || x || DAC control, read more [[#ag.dac_ctrl_d]]
| 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.adc16_sthreshold || RW || INT16 || 2020 || data suppression threshold for the 100MHz ADCs
Line 154: Line 154:
| ag.adc32_sthreshold || RW || INT16 || 2020 || data suppression threshold for the 62.5MHz ADCs
| ag.adc32_sthreshold || RW || INT16 || 2020 || data suppression threshold for the 62.5MHz ADCs
|-
|-
| ag.ctrl_a || RW || UINT32 || x || 100MHz ADC data suppression control, read more [[#ag.ctrl_ab]]
| ag.ctrl_a || RW || UINT32 || 2020 || 100MHz ADC data suppression control, read more [[#ag.ctrl_ab]]
|-
|-
| ag.ctrl_b || RW || UINT32 || x || 62.5MHz 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 || x || control, read more [[#ag.ctrl_c]]
| ag.ctrl_c || RW || UINT32 || 2020 || control, read more [[#ag.ctrl_c]]
|-
|-
| ag.ctrl_d || RW || UINT32 || x || control, read more [[#ag.ctrl_d]]
| ag.ctrl_d || RW || UINT32 || 2020 || control, read more [[#ag.ctrl_d]]
|-
|-
| ag.ctrl_e || RW || UINT32 || x || control, read more [[#ag.ctrl_e]]
| ag.ctrl_e || RW || UINT32 || 2020 || control, read more [[#ag.ctrl_e]]
|-
|-
| ag.ctrl_f || RW || UINT32 || x || control, read more [[#ag.ctrl_f]]
| ag.ctrl_f || RW || UINT32 || 2020 || control, read more [[#ag.ctrl_f]]
|-
|-
| ag.stat_a || RO || UINT32 || x || status, read more [[#ag.stat_a]]
| ag.stat_a || RO || UINT32 || 2020 || status, read more [[#ag.stat_a]]
|-
|-
| ag.stat_b || RO || UINT32 || x || status, read more [[#ag.stat_b]]
| ag.stat_b || RO || UINT32 || 2020 || status, read more [[#ag.stat_b]]
|-
|-
| ag.stat_c || RO || UINT32 || x || status, read more [[#ag.stat_c]]
| ag.stat_c || RO || UINT32 || 2020 || status, read more [[#ag.stat_c]]
|-
|-
| ag.stat_d || RO || UINT32 || x || status, read more [[#ag.stat_d]]
| ag.stat_d || RO || UINT32 || 2020 || status, read more [[#ag.stat_d]]
|}
|}


Line 186: Line 186:


== ag.dac_ctrl ==
== ag.dac_ctrl ==
{| class="wikitable"
! 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.


{| class="wikitable"
{| class="wikitable"

Revision as of 08:06, 26 October 2020

VME-GRIF-ADC16-Rev1

Links

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

File:GRIF-ADC16_Rev1.pdf

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

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 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)

FMC modules

FMC-ADC32-Rev0

FMC-ADC32-Rev1

FMC-ADC32-Rev1.1

FMC-DualMiniSas-Rev1

FMC-SfpMiniSasEsata-Rev2

(note: not used on the GRIF16, this information is to be moved to the ALPHA-T page)

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