...
Target | Description |
---|---|
driver | Builds kernel module amc525_lmbfmbf.ko in build/kbuild-$(uname -r) . Needs to be run on target system for module to be usable. |
insmod | Ensures kernel module is built and runs insmod to add to the current kernel. Needs to be run on target system. |
driver-rpm | Builds DKMS based RPM for driver. Can be run on any system, resulting RPM can be permanently installed on target system. |
...
Code Block | ||
---|---|---|
| ||
./load_fpga -f path/to/amc525_lmbfmbf.bit |
(The -f bit-file
argument can be omitted if the bit file is in the working directory.)
...
Code Block | ||
---|---|---|
| ||
04:00.0 Signal processing controller: Xilinx Corporation FPGA Card XC7VX690T Subsystem: Xilinx Corporation Device 0007 Physical Slot: 0 Flags: bus master, fast devsel, latency 0, IRQ 70 Memory at fe300000 (64-bit, non-prefetchable) [size=1M] Memory at fe400000 (64-bit, non-prefetchable) [size=64K] Capabilities: <access denied> Kernel driver in use: amc525_lmbfmbf |
If the kernel driver has not yet been installed, now install it and run ls /dev
. The following files should be present:
Device Node | Description |
---|---|
amc525_lmbfmbf.0.reg | Register interface device node. Used for control of MBF system. |
amc525_lmbfmbf.0.ddr0 | Access to fast memory buffer for bunch by bunch capture readout. |
amc525_lmbfmbf.0.ddr1 | Access to slow memory buffer for detector readout. |
amc525_lmbfmbf/ | Directory containing physical address links to device nodes. |
...
Key | Description | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
procserv_port | If the IOC is started using the ./start_ioc script this defines the telnet port that procServ will use. Otherwise this key is ignored. | |||||||||||||||
device_address | This is of the form pci-0000:nn:00.0 where nn identifies the slot where the appropriate AMC525 card is inserted (though the slot numbers and PCIe numbers don't match). Inspect /dev/amc525_lmbfmbf/ for currently recognised cards. | |||||||||||||||
dio_termination | If 50Ω termination is wanted for the three digital I/O trigger inputs then set this to 7, otherwise set to 0 for high impedance termination. | |||||||||||||||
clock_mode | This determines how the PLL is initialised. The following timing modes are supported:
Alternatively this key can be set to sequence of six numbers defining the PLL configuration, for example the following is equivalent to
See the documentation for | |||||||||||||||
epics_name | This determines the top level device name and generally should match $ioc_name determined above. | |||||||||||||||
axis0_name | Name of channel 0. Typically X for transverse mode, I for longitudinal mode. | |||||||||||||||
axis1_name | Name of channel 1. Typically Y for transverse mode, Q for longitudinal mode. | |||||||||||||||
lmbf_mode | Set to 0 if operating in transverse mode, set to 1 if longitudinal mode. This will determine how the FPGA is configured and some details of the behaviour of the IOC. | |||||||||||||||
bunches_per_turn | Set to the number of RF buckets per machine revolution. Must be no more than 1024 (with the current FPGA build), and there may be problems with particularly small values. | |||||||||||||||
revolution_frequency | Set to machine revolution frequency in Hz. Only used for time estimates in display. | |||||||||||||||
lmbf_fir_offset | Adjustment of FIR coupling between I and Q axes in LMBF mode. | |||||||||||||||
mms_poll_interval | Used to control polling frequency for MMS readout. If MMS overrun is reported this number needs to be reduced, but check CPU usage with top. Reading MMS data is time consuming. | |||||||||||||||
persistence_file | This should be an absolute path to a writeable location where the IOC can save the persistent state of all of its PVs. It is wise to keep this file backed up and archived as the configuration of MBF can be quite complex and potentially difficult to recreate. | |||||||||||||||
persistence_interval | This determines the interval (in seconds) between checks for writing the persistent state. Too small a value will generate a lot of writes, too large a value can result in lost configuration state if the IOC is forcibly restarted. | |||||||||||||||
pv_log_array_length | Determines how many points of changed waveforms are logged. | |||||||||||||||
memory_readout_length | Determines the length of the memory readout waveform PV. | |||||||||||||||
detector_length | Determines the length of the detector readout waveform PV. | |||||||||||||||
data_port | Determines socket number for fast data readout. |
...