Event System Guide
The Event System enables very low-latency communication with the ICE boards. Instead of sending commands over USB or TTL Serial, the Event System consists of 4 TTL lines that go directly to each ICE daughter board.
The ICE daughter boards have various Event Functions – actions to perform when they get an Event. Each action will listen to an Event Address from 0 through 7, where 0 is a no-action state.
The 4 Event Lines consists of 3 address lines and one 'Go' command. When the 'Go' wire goes high, each Slave board decodes the 3 address lines to determine the Event Address (0-7). If the address matches an address that an Event Function is listening on, then that function is run. If the address is 0, the event is ignored.
Some customers have had intermittent issues with the the Event System triggering when using CPLD firmware 1.0 on the ICS-CS1 and ICS-CP1. You can check your CPLD version with the “#Version X” where X is the slave board slot number. The second number returned will be the CPLD version number. If you have this firmware and experience problems with the Event System, please contact Vescent.
Example Event with ICE-CP1
The ICE-CPL1 is has Event Functions: EvtJump which jumps the offset phase lock frequency; EvtLOff which toggles the laser on or off. For this example, we will use the EvtJump Event.
First, we will disable the EvtLOff function by setting its Event Address to 0 and configure EvtJump to listen to event 3:
EvtLOff 0 0 EvtJump 3 3
Now that the Jump Event is enabled on address 3 we need to configure what to do when this event is triggered. More details on this setup can be found in the Offset Phase Lock and Current Controller Command Set. When the event is processed, the ICE-CP1 set various settings (N value, interal or external VCO, etc) via a lookup table. Each time it receives an event, it uses data from the next line in that table. The data is loaded with data via the EvtData command. We will load rows 1-3 with data to configure follow 3 configurations:
Row 1: N=8,Invert=Off,Interal VCO=On,VCO Frequency=150 MHz Row 2: N=16,Invert=On,Interal VCO=On,VCO Frequency=167.65 MHz Row 3: N=8,Invert=On,Interal VCO=On,VCO Frequency=120 MHz
This is done by running:
EvtData 1 1 150 EvtData 2 7 167.65 EvtData 3 3 120
See the EvtData command in Offset Phase Lock and Current Controller Command Set for more details on this command syntax.
Now we need to tell the ICE-CS1 to use only 3 rows in that data. This means that when this event is processed it will jump to the settings in Row 1, then Row 2, then Row 3, then Row 1, then Row 2, etc. This is done with the EvtNum command
EvtNum 3 3
Now that everything is configured, we can test the event by using the Master's #DoEvent command, which just sends an event on the address specified. Here's an example.
#DoEvent 2 Finished // Nothing happened; nothing listening on address 2 #DoEvent 0 Finished // Nothing happened; address is a non-event #DoEvent 3 Finished // ICS-CS1 changes from whatever current state it is in to row 1's settings. #DoEvent 3 Finished // ICS-CS1 changes from row 1's state to row 2's settings. #DoEvent 3 Finished // ICS-CS1 changes from row 2's state to row 3's settings. N 64 64 // ICS-CS1 goes to N=64 state #DoEvent 3 Finished // ICS-CS1 changes from N-64 to row 1's settings. #DoEvent 3 Finished // ICS-CS1 changes from row 1's state to row 2's settings.
Mutliple Events across multiple ICE Slave boards can listen on the same address; they will happen simultaneously