The HELIX
Driver is part of the ZEUS MVD Clock and Control (C+C) system, where it is
predominantly used to fan-out C+C signals to HELIX inside the detector.
The
signals are sent via a patch-box (PB) locate next to the detector, using LVDS
differential signals.
Clocks can
be delayed in .5ns steps to fix timing skews due to physical detector layout on
a module by module basis.
The HELIX
Driver (HD) also provides the signalling and serialisation of command strings
sent to the HELIX modules ('Serial Data Mode').
Various
diagnostic and read-back systems are also built into the HD to help with system
debug and monitoring.
To correct
voltage offsets required by this custom system (and ensure signal voltage
swings around zero, the HD requires 2 auxiliary supplies:
a) -5V -- for level shifting the TTL voltages
b) +3.8 -> -1.2V (offset 5V supply) for
the LVDS drivers.
These
voltages are supplied via a D15 connector at the back of the crate wired to
spare pins on the VME backplane (J2 connector)
Each HD
supports 15 Helix Modules. The HD supplies: Clock, Trigger/Serial_Data,
Serial_Load, Not_Reset and Test signals (See table below). All of these signals are derived from a
single front-panel input, except for Serial_Load, which is generated
automatically by the HD during a program cycle. If for some reason the clock is
absent these signals will revert to known conditions for HELIX module safety.
HELIX Driver Output
Signal Definition
|
|||
|
Name |
Description |
At-Reset/ No-Clock |
|
CLOCK
|
Input
clock is fanned out via 15 programmable delays |
Unknown |
|
TRIG/SD
|
Trigger/Serial_Data
/pld_clock
and fanned-out to 15 outputs. During
Serial_Data_Mode it provides the serial programming data. |
0 |
|
NRESET
|
Not_Reset
Gated by
Serial_Data_Mode select, clocked by /pld_clock and fanned out to 15
outputs. A direct feed of the input
Not_Reset, except during Serial_Data_Mode, when it is held in reset for the
duration on the serial programming cycle.
|
1 |
|
TESTPULSE
|
Test_Pulse
Fanned-out
via channel by channel by channel enable register Test_Pulse_Mask_Reg), NOT
clocked! |
Unchanged, but Mask is set to 1
(enabled) |
The board
has a power-on reset.
It can
also be reset with a VME command.
1) Change
to Serial_Program_Mode, by issuing a Serial_Program_Mode_Set command.
2) Load
the Data Register with the serial data (remember the top 4 bits indicate
channel 0 to 14)
3) Issue
the Start_Program_Cycle command.
At this
point the Serial_Program_Busy flag will be set (in the Status Register) and
should be polled for a zero before loading further data into the Data Register.
This data
is transmitted after:
-
Serial_Program_Mode
is/has been set, and the Start_Serial_Program_Cycle command is issued.
During the
Serial Program Cycle the following happens:
- Busy
goes high (asynchronously) with the reception of 'Start_Serial_Program_Mode'
command.
- At the
next negative clock edge the
Not_Reset signal is pulled low (holding the HELIX Module in program mode).
- The
start command is synced to the clock, and a maximum of 2 clock cycles
later, the programming cycle starts, on the
negative edge of the clock
- 20
clocks later the data is complete
- for the
21st clock period the relevant Serial_Load_Pulse (as specified by bits 20-23 of
the Data_Reg) is set high.
- This
action is registered in the Serial_Load_Sent_Reg for the relevant channel.
- On the
23rd clock the control of Not_Reset is released (neg edge)
HELIX
Driver Address Map Summery |
|||||||||
Registers |
|||||||||
|
|
ID |
Offset |
Name |
Size (bits) |
R/W |
Special |
Reset State |
|
|
|
0 |
00h |
Data |
24 |
RW |
- |
0 |
|
|
|
1 |
04h |
Feedback0 |
4 |
R |
- |
0 |
|
|
|
2 |
08h |
Feedback1 |
8 |
R |
- |
0 |
|
|
|
3 |
0Ch |
Feedback2 |
8 |
R |
- |
0 |
|
|
|
4 |
10h |
Status |
5 |
R |
W=rst |
8h* |
|
|
|
5 |
14h |
Trigger
Counter |
8 |
R |
- |
0 |
|
|
|
6 |
18h |
TestPulse
Mask |
15 |
RW |
- |
0 |
|
|
|
7 |
1Ch |
SerialLoad
Sent |
15 |
R |
W=rst |
|
|
Commands
(activate with a Read) |
|||||||||
|
|
8 |
20h |
Serial
Program Mode Set |
- |
R |
- |
|
|
|
|
9 |
24h |
Start
Serial Program Cycle |
- |
R |
- |
|
|
|
|
10 |
28h |
Test
Trigger |
- |
R |
- |
|
|
|
|
11 |
2Ch |
Trigger
(Normal) Mode Set |
- |
R |
- |
Default* |
|
|
|
12 |
30h |
Unused |
- |
- |
- |
|
|
|
|
13 |
34h |
Unused |
- |
- |
- |
|
|
|
|
14 |
38h |
Unused |
- |
- |
- |
|
|
|
|
15 |
3Ch |
Reset
Board |
- |
R |
- |
|
|
Programmable
Delays |
|||||||||
|
|
16 |
40h |
Delay
Ch 0 |
8 |
W |
R** |
0 |
|
|
|
17 |
44h |
Delay
Ch 1 |
8 |
W |
R** |
0 |
|
|
|
18 |
48h |
Delay
Ch 2 |
8 |
W |
R** |
0 |
|
|
|
19 |
4Ch |
Delay
Ch 3 |
8 |
W |
R** |
0 |
|
|
|
20 |
50h |
Delay
Ch 4 |
8 |
W |
R** |
0 |
|
|
|
21 |
54h |
Delay
Ch 5 |
8 |
W |
R** |
0 |
|
|
|
22 |
58h |
Delay
Ch 6 |
8 |
W |
R** |
0 |
|
|
|
23 |
5Ch |
Delay
Ch 7 |
8 |
W |
R** |
0 |
|
|
|
24 |
60h |
Delay
Ch 8 |
8 |
W |
R** |
0 |
|
|
|
25 |
64h |
Delay
Ch 9 |
8 |
W |
R** |
0 |
|
|
|
26 |
68h |
Delay Ch
10 |
8 |
W |
R** |
0 |
|
|
|
27 |
6Ch |
Delay Ch
11 |
8 |
W |
R** |
0 |
|
|
|
28 |
70h |
Delay Ch
12 |
8 |
W |
R** |
0 |
|
|
|
29 |
74h |
Delay Ch
13 |
8 |
W |
R** |
0 |
|
|
|
30 |
78h |
Delay Ch
14 |
8 |
W |
R** |
0 |
|
|
|
31 |
7Ch |
Delay Ch
0-14 (all) |
8 |
W |
R** |
0 |
|
* At reset the HD is set to Trigger_Mode
** Reading
of Delay Units is done 1 bit at a time (LSB first in DB0), and MUST be done for
all 8 bits of the Delay Unit to maintain the delay setting. This is because the
Delay Unit actually shifts the data out serially, and it is fed back to the
input, and needs to be shifted all the way back to its original position.
Load this register with data to be programmed to the HELIX
Modules. The data organised with the top 4 bits indicating channel and the
lower 20 the data.
|
Channel |
Data |
binary |
0000 |
00000000000000000000 |
Channel 15 (1111b) is used as a broadcast mode to program all
HELIX Modules connected to that 'Driver.
The feedback registers contain the result of a serial download,
without channel info. It is physically
connected to the trigger/serial_data line and is a good test of HD download
operation.
It holds the bits as they were sent in 4, 8, 8 bit sections:
Feedback2 = msNibble,
Feedback1 = midByte
Feedback0 = lsByte,).
Returns the status of the system. Is
held zero during a reset.
Status
Bits |
|
0 |
Serial Download Busy |
1 |
Test Sent (1 = yes) |
2 |
Trigger Sent (1 = yes) |
3 |
Mode (Serial/nTrig) |
4 |
Clock On |
This is an 8bit (255) counter for counting triggers. Reset by a Write.
This register masks (enables) the Test_Pulse for each channel.
1 = Test_Pulse enabled.
Bit set to 1 if that particular channel has issued a SerialLoad
pulse. Reset by a Write.