Commit 4e9db31d authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

rtl,doc: fixes in Wishbone registers documentation

parent 14302385
@regsection Memory map summary
@multitable @columnfractions .10 .15 .15 .55
@headitem Address @tab Type @tab Prefix @tab Name
@item @code{0x0} @tab
REG @tab
@code{DCR} @tab
Delay Control Register
@item @code{0x4} @tab
REG @tab
@code{FRR} @tab
Fine Range Register
@item @code{0x8} @tab
REG @tab
@code{U_STARTH} @tab
Pulse start time / offset (MSB TAI seconds)
@item @code{0xc} @tab
REG @tab
@code{U_STARTL} @tab
Pulse start time / offset (LSB TAI seconds)
@item @code{0x10} @tab
REG @tab
@code{C_START} @tab
Pulse start time / offset (8 ns cycles)
@item @code{0x14} @tab
REG @tab
@code{F_START} @tab
Pulse start time / offset (sub-cycle fine part)
@item @code{0x18} @tab
REG @tab
@code{U_ENDH} @tab
Pulse end time / offset (MSB TAI seconds)
@item @code{0x1c} @tab
REG @tab
@code{U_ENDL} @tab
Pulse end time / offset (LSB TAI seconds)
@item @code{0x20} @tab
REG @tab
@code{C_END} @tab
Pulse end time / offset (8 ns cycles)
@item @code{0x24} @tab
REG @tab
@code{F_END} @tab
Pulse end time / offset (sub-cycle fine part)
@item @code{0x28} @tab
REG @tab
@code{U_DELTA} @tab
Pulse spacing (TAI seconds)
@item @code{0x2c} @tab
REG @tab
@code{C_DELTA} @tab
Pulse spacing (8 ns cycles)
@item @code{0x30} @tab
REG @tab
@code{F_DELTA} @tab
Pulse spacing (sub-cycle fine part)
@item @code{0x34} @tab
REG @tab
@code{RCR} @tab
Repeat Count Register
@end multitable
@regsection @code{DCR} - Delay Control Register
Main control registers of the particular output channel of the Fine Delay Core.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab R/W @tab
@code{ENABLE}
@tab @code{0} @tab
Enable channel
@item @code{1}
@tab R/W @tab
@code{MODE}
@tab @code{0} @tab
Delay mode select
@item @code{2}
@tab W/O @tab
@code{PG_ARM}
@tab @code{0} @tab
Pulse generator arm
@item @code{3}
@tab R/O @tab
@code{PG_TRIG}
@tab @code{X} @tab
Pulse generator triggered
@item @code{4}
@tab W/O @tab
@code{UPDATE}
@tab @code{0} @tab
Update Delay/Absoulte trigger time
@item @code{5}
@tab R/O @tab
@code{UPD_DONE}
@tab @code{X} @tab
Delay Update Done
@item @code{6}
@tab W/O @tab
@code{FORCE_DLY}
@tab @code{0} @tab
Force Calibration Delay
@item @code{7}
@tab R/W @tab
@code{NO_FINE}
@tab @code{0} @tab
Disable fine part update
@item @code{8}
@tab R/W @tab
@code{FORCE_HI}
@tab @code{0} @tab
Force Output High
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{ENABLE} @tab write 0: channel is disabled. Output is driven LOW.@* write 1: channel is enabled. Output may produce pulses.
@item @code{MODE} @tab 0: Channel will work as a delay generator, producing delayed copies of pulses coming to the trigger input. Start/End registers shall contain delays of respectively, the rising and falling edge.@* 1: Channel will work as a programmable pulse generator - producing a pulse which begins and ends at absolute TAI times stored in Start/End registers.@* @b{Note:}@code{MODE} bit can be safely set only when the delay logic are disabled (i.e. when @code{DCR.ENABLE == 0})
@item @code{PG_ARM} @tab write 1: arms the pulse generator. @* write 0: no effect.@* @b{Note:}The values written to @code{[U/C/F]_START} and @code{[U/C/F]_END} must be bigger by at least 300 ns than the value of the UTC counter at the moment of arming the pulse generator. In practice, the safety margin should be much higher, as it's affected by the non-determinism of the operating system.
@item @code{PG_TRIG} @tab read 1: pulse generator has been triggered and produced a pulse@* read 0: pulse generator is busy or hasn't triggered yet
@item @code{UPDATE} @tab write 1: Starts the update procedure. The start and end times from @code{[U/C/F][START/END]} will be transferred in an atomic way to the internal delay/pulse generator registers.@* write 0: no effect.@* @b{Note}Care must be taken when updating the delay value - if the channel gets stuck due to invalid control values written, the only way to bring it back alive is to disable and re-enable it by toggling @code{DCR.ENABLE} bit.
@item @code{UPD_DONE} @tab read 1: The delays from @code{[U/C/F][START/END]} have been loaded into internal registers. Subsequent triggers will be delayed by the newly programmed value.@* read 0: update operation in progress
@item @code{FORCE_DLY} @tab Used in type 1 calibration.@* write 1: preloads the SY89295 delay line with the contents of FRR register.@* write 0: no effect
@item @code{NO_FINE} @tab write 1: disables updating of the fine part of the pulse delay to allow for producing faster signals (i.e. pulse width/spacing < 200 ns), at the cost of less accurate width/spacing control (multiple of 4 ns). @*write 0: normal operation. Pulse width/spacing must be at least 200 ns, width/spacing resolution is 10 ps.@*@b{Note:} A typical use case for @code{NO_FINE} bit is producing a 10 MHz clock.
@item @code{FORCE_HI} @tab write 1: Forces constant 1 on the output when the channel is disabled@* write 0: Forces constant 0 on the output when the channel is disabled@* Used for testing/calibration purposes.
@end multitable
@regsection @code{FRR} - Fine Range Register
Delay line tap setting at which the line generates an 8 ns (one cycle) longer delay than when set to 0. Used by type 1 calibration logic.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{9...0}
@tab R/W @tab
@code{FRR}
@tab @code{0} @tab
Fine range in SY89825 taps.
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{U_STARTH} - Pulse start time / offset (MSB TAI seconds)
TAI seconds (8 upper bits) part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode).
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{7...0}
@tab R/W @tab
@code{U_STARTH}
@tab @code{0} @tab
TAI seconds (MSB)
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{U_STARTL} - Pulse start time / offset (LSB TAI seconds)
TAI seconds (32 lower bits) part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode).
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/W @tab
@code{U_STARTL}
@tab @code{0} @tab
TAI seconds (LSB)
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{C_START} - Pulse start time / offset (8 ns cycles)
Sub-second part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{27...0}
@tab R/W @tab
@code{C_START}
@tab @code{0} @tab
Reference clock cycles
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{F_START} - Pulse start time / offset (sub-cycle fine part)
Sub-clock cycle part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{11...0}
@tab R/W @tab
@code{F_START}
@tab @code{0} @tab
Fractional part
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{U_ENDH} - Pulse end time / offset (MSB TAI seconds)
TAI seconds (8 upper bits) part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode).
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{7...0}
@tab R/W @tab
@code{U_ENDH}
@tab @code{0} @tab
TAI seconds (MSB)
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{U_ENDL} - Pulse end time / offset (LSB TAI seconds)
TAI seconds (32 lower bits) part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode).
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/W @tab
@code{U_ENDL}
@tab @code{0} @tab
TAI seconds (LSB)
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{C_END} - Pulse end time / offset (8 ns cycles)
Sub-second part of the pulse endabsolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{27...0}
@tab R/W @tab
@code{C_END}
@tab @code{0} @tab
Reference clock cycles
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{F_END} - Pulse end time / offset (sub-cycle fine part)
Sub-clock cycle part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{11...0}
@tab R/W @tab
@code{F_END}
@tab @code{0} @tab
Fractional part
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{U_DELTA} - Pulse spacing (TAI seconds)
TAI seconds between rising edges of subsequent output pulses.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{3...0}
@tab R/W @tab
@code{U_DELTA}
@tab @code{0} @tab
TAI seconds
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{C_DELTA} - Pulse spacing (8 ns cycles)
Reference clock cycles between rising edges of subsequent output pulses.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{27...0}
@tab R/W @tab
@code{C_DELTA}
@tab @code{0} @tab
Reference clock cycles
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{F_DELTA} - Pulse spacing (sub-cycle fine part)
Sub-cycle part of spacing between rising edges of subsequent output pulses.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{11...0}
@tab R/W @tab
@code{F_DELTA}
@tab @code{0} @tab
Fractional part
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{RCR} - Repeat Count Register
Register controlling the number of output pulses to be generated upon reception of a trigger pulse or triggering the channel in PG mode.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{15...0}
@tab R/W @tab
@code{REP_CNT}
@tab @code{0} @tab
Repeat Count
@item @code{16}
@tab R/W @tab
@code{CONT}
@tab @code{0} @tab
Continuous Waveform Mode
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{CONT} @tab write 1: output will produce a contiguous square wave upon reception of trigger pulse. The generation can be aborted only disabling the channel (clearing @code{DCR.ENABLE})@* write 0: each trigger will produce @code{RCR.REP_CNT+1} pulses.
@end multitable
@regsection Memory map summary
@multitable @columnfractions .10 .15 .15 .55
@headitem Address @tab Type @tab Prefix @tab Name
@item @code{0x0} @tab
REG @tab
@code{RSTR} @tab
Reset Register
@item @code{0x4} @tab
REG @tab
@code{IDR} @tab
ID Register
@item @code{0x8} @tab
REG @tab
@code{GCR} @tab
Global Control Register
@item @code{0xc} @tab
REG @tab
@code{TCR} @tab
Timing Control Register
@item @code{0x10} @tab
REG @tab
@code{TM_SECH} @tab
Time Register - TAI seconds (MSB)
@item @code{0x14} @tab
REG @tab
@code{TM_SECL} @tab
Time Register - TAI seconds (LSB)
@item @code{0x18} @tab
REG @tab
@code{TM_CYCLES} @tab
Time Register - sub-second 125 MHz clock cycles
@item @code{0x1c} @tab
REG @tab
@code{TDR} @tab
Host-driven TDC Data Register.
@item @code{0x20} @tab
REG @tab
@code{TDCSR} @tab
Host-driven TDC Control/Status
@item @code{0x24} @tab
REG @tab
@code{CALR} @tab
Calibration register
@item @code{0x28} @tab
REG @tab
@code{DMTR_IN} @tab
DMTD Input Tag Register
@item @code{0x2c} @tab
REG @tab
@code{DMTR_OUT} @tab
DMTD Output Tag Register
@item @code{0x30} @tab
REG @tab
@code{ADSFR} @tab
Acam Scaling Factor Register
@item @code{0x34} @tab
REG @tab
@code{ATMCR} @tab
Acam Timestamp Merging Control Register
@item @code{0x38} @tab
REG @tab
@code{ASOR} @tab
Acam Start Offset Register
@item @code{0x3c} @tab
REG @tab
@code{IECRAW} @tab
Raw Input Events Counter Register
@item @code{0x40} @tab
REG @tab
@code{IECTAG} @tab
Tagged Input Events Counter Register
@item @code{0x44} @tab
REG @tab
@code{IEPD} @tab
Input Event Processing Delay Register
@item @code{0x48} @tab
REG @tab
@code{SCR} @tab
SPI Control Register
@item @code{0x4c} @tab
REG @tab
@code{RCRR} @tab
Reference Clock Rate Register
@item @code{0x50} @tab
REG @tab
@code{TSBCR} @tab
Timestamp Buffer Control Register
@item @code{0x54} @tab
REG @tab
@code{TSBIR} @tab
Timestamp Buffer Interrupt Register
@item @code{0x58} @tab
REG @tab
@code{TSBR_SECH} @tab
Timestamp Buffer Readout Seconds Register (MSB)
@item @code{0x5c} @tab
REG @tab
@code{TSBR_SECL} @tab
Timestamp Buffer Readout Seconds Register (LSB)
@item @code{0x60} @tab
REG @tab
@code{TSBR_CYCLES} @tab
Timestamp Buffer Readout Cycles Register
@item @code{0x64} @tab
REG @tab
@code{TSBR_FID} @tab
Timestamp Buffer Readout Fine/Channel/Sequence ID Register
@item @code{0x68} @tab
REG @tab
@code{I2CR} @tab
I2C bitbanged IO register
@item @code{0x6c} @tab
REG @tab
@code{TDER1} @tab
Test/Debug register 1
@item @code{0x70} @tab
REG @tab
@code{TDER2} @tab
Test/Debug register 1
@item @code{0x74} @tab
REG @tab
@code{TSBR_DEBUG} @tab
Timestamp Buffer Debug Values Register
@item @code{0x78} @tab
REG @tab
@code{TSBR_ADVANCE} @tab
Timestamp Buffer Advance Register
@item @code{0x80} @tab
REG @tab
@code{EIC_IDR} @tab
Interrupt disable register
@item @code{0x84} @tab
REG @tab
@code{EIC_IER} @tab
Interrupt enable register
@item @code{0x88} @tab
REG @tab
@code{EIC_IMR} @tab
Interrupt mask register
@item @code{0x8c} @tab
REG @tab
@code{EIC_ISR} @tab
Interrupt status register
@end multitable
@regsection @code{RSTR} - Reset Register
Controls software reset of the Fine Delay core and the mezzanine connected to it. Both reset lines are driven @* indepentently, there is also an unlock word provided to prevent resetting the board/core by accidentally accessing this register.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab W/O @tab
@code{RST_FMC}
@tab @code{0} @tab
State of the reset Line of the Mezzanine (EXT_RST_N pin)
@item @code{1}
@tab W/O @tab
@code{RST_CORE}
@tab @code{0} @tab
State of the reset of the Fine Delay Core
@item @code{31...16}
@tab W/O @tab
@code{LOCK}
@tab @code{0} @tab
Reset magic value
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{RST_FMC} @tab write 0: FMC is held in reset@* write 1: Normal FMC operation
@item @code{RST_CORE} @tab write 0: FD Core is held in reset@* write 1: Normal FD Core operation
@item @code{LOCK} @tab Protection field - the state of FMC and core lines will@* only be updated if LOCK is written with 0xdead together with the new state of the reset lines.
@end multitable
@regsection @code{IDR} - ID Register
Magic identification value (for detecting FD cores by the driver). Even though now enumeration is handled through SDB, but the register is kept for compatibility with older software.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/O @tab
@code{IDR}
@tab @code{X} @tab
ID Magic Value
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{IDR} @tab Equal to @code{0xf19ede1a}
@end multitable
@regsection @code{GCR} - Global Control Register
Common control bits used throughout the core.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab R/W @tab
@code{BYPASS}
@tab @code{0} @tab
Bypass Hardware TDC/Delay Controller
@item @code{1}
@tab R/W @tab
@code{INPUT_EN}
@tab @code{0} @tab
Enable trigger input
@item @code{2}
@tab R/O @tab
@code{DDR_LOCKED}
@tab @code{X} @tab
PLL Lock status
@item @code{3}
@tab R/O @tab
@code{FMC_PRESENT}
@tab @code{X} @tab
Mezzanine Present
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{BYPASS} @tab Descides who is in charge of the TDC and delay lines:@* write 0: TDC and delay lines are controlled by the HDL core (normal operation mode)@* write 1: TDC and delay lines controlled from the host via @code{TDR} and @code{TDCSR} registers (calibration and testing mode)
@item @code{INPUT_EN} @tab write 1: trigger input is enabled@* write 0: trigger input is disabled.@* @b{Note:} state of @code{INPUT_EN} is relevant only in normal operation mode (i.e. when @code{GCR.BYPASS} == 0). Warning! enabling the input in @code{INPUT_EN}@* does not mean it will be automatically enabled in the ACAM TDC - one must pre-program its registers first.
@item @code{DDR_LOCKED} @tab read 1: AD9516 and internal DDR PLLs are locked@* read 0: AD9516 or internal DDR PLL not (yet) locked
@item @code{FMC_PRESENT} @tab Mirrors the state of the FMC's PRSNT_L hardware pin: @* read 1: FMC card is present (@code{PRSNT_L == 0})@* read 0: no FMC card in the slot (@code{PRSNT_L == 1})
@end multitable
@regsection @code{TCR} - Timing Control Register
Controls time setting and White Rabbit/local time base selection.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab R/O @tab
@code{DMTD_STAT}
@tab @code{X} @tab
DMTD Clock Status
@item @code{1}
@tab R/W @tab
@code{WR_ENABLE}
@tab @code{0} @tab
WR Timing Enable
@item @code{2}
@tab R/O @tab
@code{WR_LOCKED}
@tab @code{X} @tab
WR Timing Locked
@item @code{3}
@tab R/O @tab
@code{WR_PRESENT}
@tab @code{X} @tab
WR Core Present
@item @code{4}
@tab R/O @tab
@code{WR_READY}
@tab @code{X} @tab
WR Core Time Ready
@item @code{5}
@tab R/O @tab
@code{WR_LINK}
@tab @code{X} @tab
WR Core Link Up
@item @code{6}
@tab W/O @tab
@code{CAP_TIME}
@tab @code{0} @tab
Capture Current Time
@item @code{7}
@tab W/O @tab
@code{SET_TIME}
@tab @code{0} @tab
Set Current Time
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{DMTD_STAT} @tab Status of the DMTD (helper) clock, used for DDMTD calibration purposes by the test suite.@* read 0: DMTD clock is not available or has been lost since last read operation of @code{TCR} register@* read 1: DMTD has been OK since previous read of @code{TCR} register
@item @code{WR_ENABLE} @tab Enables/disables WR synchronization.@* write 1: WR synchronization is enabled. Poll the @code{TCR.WR_LOCKED} bit to check if the WR Core is still locked.@* write 0: WR synchronization is disabled, the card is in free running mode.@* @b{Note:} enabling WR synchronization will cause a jump in the time base counter of the core. This may lead to lost pulses, therefore it is strongly@* recommended do disable the inputs/outputs before entering WR mode. When WR mode is disabled, the core will continue counting without a jump.
@item @code{WR_LOCKED} @tab Status of WR synchronization. @* read 0: local oscillator/time base is not locked to WR (or a transient delock event occured since last read of WR_TCR register).@* read 1: local oscillator is syntonized to WR and local timebase is aligned with WR time.
@item @code{WR_PRESENT} @tab Indicates whether we have a WR Core associated with this Fine Delay Core. Reflects the state@* of the @code{g_with_wr_core} generic HDL parameter. @* read 0: No WR Core present. Enabling WR will have no effect.@* read 1: WR Core available.
@item @code{WR_READY} @tab Indicates the status of synchronization of the associated WR core. Valid only if @code{TCR.WR_PRESENT} bit is set.@* read 0: WR Core is not synchronzied yet: there is no link, no PTP master in the network or synchronization is in progress.@* read 1: WR Core time is ready. User may enable WR reference by setting @code{TCR.WR_ENABLE} bit.@* @b{Note:} it is allowed to enable the WR mode even if @code{TCR.WR_READY} or @code{TCR.WR_LINK} bits are not set. Time base will@* be synced to WR as soon as the core gets correct PTP time from the master.
@item @code{WR_LINK} @tab Reflects the state of the WR Core's Ethernet link. Provided as an additional diagnostic feature.@* read 0: Ethernet link is down.@* read 1: Ethernet link is up.
@item @code{CAP_TIME} @tab Performs an atomic read of the core's current time.@* write 1: transfers the current value of seconds/cycles counters to @code{TM_xxx} registers.@* write 0: no effect.
@item @code{SET_TIME} @tab Sets internal time base counter to a given time in an atomic way:@* write 1: transfers the current value of @code{TM_x} to the timebase counters.@* write 0: no effect.@* @b{Note 1:} Internal time counters must be always initialized to a known value (e.g. zeroes), after every reset/power cycle.@* @b{Note 2:} Writing to @code{TCR.SET_TIME} while WR mode is active is forbidden. If you do so, prepare for unforeseen consequences.
@end multitable
@regsection @code{TM_SECH} - Time Register - TAI seconds (MSB)
Seconds counter, most significant part@* read: value of internal seconds counter taken upon last write to @code{TCR.CAP_TIME} bit.@* write: new value of seconds counter (loaded to the time base counter by writing @code{TCR.SET_TIME} bit)
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{7...0}
@tab R/W @tab
@code{TM_SECH}
@tab @code{X} @tab
TAI seconds (MSB)
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{TM_SECL} - Time Register - TAI seconds (LSB)
Seconds counter, least significant part@* read: value of internal seconds counter taken upon last write to @code{TCR.CAP_TIME} bit.@* write: new value of seconds counter (loaded to the time base counter by writing @code{TCR.SET_TIME} bit)
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/W @tab
@code{TM_SECL}
@tab @code{X} @tab
TAI seconds (LSB)
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{TM_CYCLES} - Time Register - sub-second 125 MHz clock cycles
Number of 125 MHz reference clock cycles from the beginning of the current second. @* read: value of cycles counter taken upon last write to @code{TCR.CAP_TIME} bit.@* write: new value of cycles counter (loaded to the time base counter by writing @code{TCR.SET_TIME} bit)
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{27...0}
@tab R/W @tab
@code{TM_CYCLES}
@tab @code{X} @tab
Reference clock cycles (0...124999999)
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{TDR} - Host-driven TDC Data Register.
Holds the 28-bit data word read from/to be written to the ACAM TDC, when the core is configured in bypass mode (@code{GCR.BYPASS == 1}).
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{27...0}
@tab R/W @tab
@code{TDR}
@tab @code{X} @tab
TDC Data
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{TDCSR} - Host-driven TDC Control/Status
Allows controlling the TDC directly from the host (when @code{GCR.BYPASS == 1}).
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab W/O @tab
@code{WRITE}
@tab @code{0} @tab
Write to TDC
@item @code{1}
@tab W/O @tab
@code{READ}
@tab @code{0} @tab
Read from TDC
@item @code{2}
@tab R/O @tab
@code{EMPTY}
@tab @code{X} @tab
Empty flag
@item @code{3}
@tab W/O @tab
@code{STOP_EN}
@tab @code{0} @tab
Stop enable
@item @code{4}
@tab W/O @tab
@code{START_DIS}
@tab @code{0} @tab
Start disable
@item @code{5}
@tab W/O @tab
@code{START_EN}
@tab @code{0} @tab
Start enable
@item @code{6}
@tab W/O @tab
@code{STOP_DIS}
@tab @code{0} @tab
Stop disable
@item @code{7}
@tab W/O @tab
@code{ALUTRIG}
@tab @code{0} @tab
Pulse <code>Alutrigger</code> line
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{WRITE} @tab Writes the data word from @code{TDR}register to the ACAM TDC.@* write 1: write the data word programmed in @code{TDR} TDR register to the TDC. The TDC address must be set via the SPI I/O expander.@* write 0: no effect.
@item @code{READ} @tab Reads a data word from the TDC and puts it in @code{TDR} register.@* write 1: read a data word from the TDC. The read word will be put in the @code{TDR} register. The TDC address must be set via the SPI I/O expander.@* write 0: no effect.
@item @code{EMPTY} @tab Raw status of the @code{EF} (FIFO empty) pin of the TDC.@* read 0: there is one (or more) pending timestamp(s) in the ACAM's internal FIFO.@* read 1: the internal TDC FIFO is empty (no timestamps to read).
@item @code{STOP_EN} @tab Controls the @code{StopDis} input of the TDC.@* write 1: enables the TDC stop input.@* write 0: no effect.
@item @code{START_DIS} @tab Controls the @code{StartDis} input of the TDC.@* write 1: disables the TDC start input.@* write 0: no effect.
@item @code{START_EN} @tab Controls the @code{StartDis} input of the TDC.@* write 1: enables the TDC start input.@* write 0: no effect.
@item @code{STOP_DIS} @tab Controls the @code{StopDis} input of the TDC.@* write 1: disables the TDC stop input.@* write 0: no effect.
@item @code{ALUTRIG} @tab Controls the TDC's @code{Alutrigger} line. Depending on the TDC's configuration, it can be used as a reset/FIFO clear/trigger signal.@* write 1: generates a pulse ACAM's @code{Alutrigger} line@* write 0: no effect.
@end multitable
@regsection @code{CALR} - Calibration register
Controls calibration logic.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab W/O @tab
@code{CAL_PULSE}
@tab @code{0} @tab
Generate calibration pulses (type 1 calibration)
@item @code{1}
@tab R/W @tab
@code{CAL_PPS}
@tab @code{0} @tab
PPS Calibration output enable.
@item @code{2}
@tab R/W @tab
@code{CAL_DMTD}
@tab @code{0} @tab
Produce DDMTD calibration pattern (type 2 calibration)
@item @code{6...3}
@tab R/W @tab
@code{PSEL}
@tab @code{0} @tab
Calibration pulse output select/mask
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{CAL_PULSE} @tab Triggers generation of a calibration pulse on selected channels. Used to determine the exact 4/8ns setting tap of the fine delay line.@* write 1: Immediately generates a single calibration pulse on the TDC start input and the output channels selected in the PSEL field.@* write 0: no effect.@* @b{Note:} In order for the pulse to be tagged by the TDC, it must be driven in the BYPASS mode and properly configured (I-mode, see driver/test program).
@item @code{CAL_PPS} @tab Drives the TDC stop input with a PPS signal synchronous to the FD core's timebase:@* write 1: Feeds TDC input with internally generated PPS signal.@* write 0: PPS generation disabled.@* @b{Note:} Input multiplexer must be configured to drive the TDC trigger from the FPGA calibration output instead of the trigger input.
@item @code{CAL_DMTD} @tab Controls DDMTD test pattern generation:@* write 1: Enables DMTD test pattern on the TDC input and DDMTD sampling clock for the calibration flip-flops.@* write 0: DMTD pattern generation disabled.@* @b{Note:} Input multiplexer must be configured to drive the TDC trigger from the FPGA calibration output instead of the trigger input.
@item @code{PSEL} @tab 1: enable generation of type 1 calibration pulses (@code{CALR.CAL_PULSE}) on the output corresponding to the written bit@* 0: disable pulse generation for the corresponding output
@end multitable
@regsection @code{DMTR_IN} - DMTD Input Tag Register
Provides the DDMTD tag value for the input channel (type 2 calibration).
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{30...0}
@tab R/O @tab
@code{TAG}
@tab @code{X} @tab
DMTD Tag
@item @code{31}
@tab R/O @tab
@code{RDY}
@tab @code{X} @tab
DMTD Tag Ready
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{TAG} @tab The tag value.
@item @code{RDY} @tab Tag ready flag (clear-on-read):@* 1: a new DDMTD tag is available.@* 0: tag not ready yet.
@end multitable
@regsection @code{DMTR_OUT} - DMTD Output Tag Register
Provides the DDMTD tag value for a selected output channel (type 2 calibration).
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{30...0}
@tab R/O @tab
@code{TAG}
@tab @code{X} @tab
DMTD Tag
@item @code{31}
@tab R/O @tab
@code{RDY}
@tab @code{X} @tab
DMTD Tag Ready
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{TAG} @tab The tag value.
@item @code{RDY} @tab Tag ready flag (clear-on-read):@* 1: a new DDMTD tag is available.@* 0: tag not ready yet.
@end multitable
@regsection @code{ADSFR} - Acam Scaling Factor Register
Scaling factor between the FD's internal time scale and the ACAM's format. Used only in normal operating mode (@code{GCR.BYPASS == 0}).@* Formula (for G-Mode): @code{ADFSR = round(2097.152 * ACAM_bin_size [ps])}
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{17...0}
@tab R/W @tab
@code{ADSFR}
@tab @code{0} @tab
ADFSR Value
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{ATMCR} - Acam Timestamp Merging Control Register
Controls merging of fine timestamps prouced by Acam with coarse timestamps obtained by the FPGA. See developers' manual for explanation.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{7...0}
@tab R/W @tab
@code{C_THR}
@tab @code{0} @tab
Coarse Threshold
@item @code{30...8}
@tab R/W @tab
@code{F_THR}
@tab @code{0} @tab
Fine Threshold
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{ASOR} - Acam Start Offset Register
ACAM timestamp start offset. Value that gets subtracted from ACAM's timestamps (due to ACAM's ALU architecture that does not support negative numbers). See developers' manual for explanation.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{22...0}
@tab R/W @tab
@code{OFFSET}
@tab @code{0} @tab
Start Offset
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{IECRAW} - Raw Input Events Counter Register
TDC debugging & statistics register
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/O @tab
@code{IECRAW}
@tab @code{X} @tab
Number of raw events.
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{IECRAW} @tab Number of all input pulses detected by the timestamper.
@end multitable
@regsection @code{IECTAG} - Tagged Input Events Counter Register
TDC debugging & statistics register
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/O @tab
@code{IECTAG}
@tab @code{X} @tab
Number of tagged events
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{IECTAG} @tab Number of all input pulses which passed the width checks and resulted with valid timestamps.
@end multitable
@regsection @code{IEPD} - Input Event Processing Delay Register
TDC debugging & statistics register
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab W/O @tab
@code{RST_STAT}
@tab @code{0} @tab
Reset stats
@item @code{8...1}
@tab R/O @tab
@code{PDELAY}
@tab @code{X} @tab
Processing delay
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{RST_STAT} @tab Write 1: resets the delay/pulse count counters (@code{IECRAW}, @code{IECTAG} and @code{IEPD_WDELAY})@* write 0: no effect
@item @code{PDELAY} @tab Worst-case delay between the input event and the generation of its timestamp. Expressed as a number of 125 MHz clock cycles.
@end multitable
@regsection @code{SCR} - SPI Control Register
Single control register for the SPI Controller, allowing for atomic updates of the DAC, GPIO and PLL.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{23...0}
@tab R/W @tab
@code{DATA}
@tab @code{X} @tab
Data
@item @code{24}
@tab R/W @tab
@code{SEL_DAC}
@tab @code{0} @tab
Select DAC
@item @code{25}
@tab R/W @tab
@code{SEL_PLL}
@tab @code{0} @tab
Select PLL
@item @code{26}
@tab R/W @tab
@code{SEL_GPIO}
@tab @code{0} @tab
Select GPIO
@item @code{27}
@tab R/O @tab
@code{READY}
@tab @code{X} @tab
Ready flag
@item @code{28}
@tab R/W @tab
@code{CPOL}
@tab @code{0} @tab
Clock Polarity
@item @code{29}
@tab W/O @tab
@code{START}
@tab @code{0} @tab
Transfer Start
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{DATA} @tab Data to be read/written from/to the SPI bus
@item @code{SEL_DAC} @tab write 1: selects the DAC as the target peripheral of the transfer@* write 0: no effect
@item @code{SEL_PLL} @tab write 1: selects the AD9516 PLL as the target peripheral of the transfer@* write 0: no effect
@item @code{SEL_GPIO} @tab write 1: selects the MCP23S17 GPIO as the target peripheral of the transfer@* write 0: no effect
@item @code{READY} @tab read 0: SPI controller is busy performing a transfer@* read 1: SPI controller has finished its previous transfer. Read-back data is available in @code{SCR.DATA}
@item @code{CPOL} @tab 0: SPI clock is not inverted (data valid on rising edge)@* 1: SPI clock is inverted (data valid on falling edge)
@item @code{START} @tab write 1: Starts SPI transfer from/to the selected peripheral@* write 0: no effect
@end multitable
@regsection @code{RCRR} - Reference Clock Rate Register
Provides the momentary value of the internal clock rate counter. Can be used in conjunction with the DAC to roughly syntonize the card's reference clock with a clock coming from an external master installed in the same host (e.g. a CTRV/CTRP) in a software-only way or to measure tuning range of the local VCXO.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/O @tab
@code{RCRR}
@tab @code{X} @tab
Frequency
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{RCRR} @tab Reference clock frequency, in Hz
@end multitable
@regsection @code{TSBCR} - Timestamp Buffer Control Register
Controls timestamp readout from the core's circular buffer
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{4...0}
@tab R/W @tab
@code{CHAN_MASK}
@tab @code{0} @tab
Channel Mask
@item @code{5}
@tab R/W @tab
@code{ENABLE}
@tab @code{0} @tab
Buffer enable
@item @code{6}
@tab W/O @tab
@code{PURGE}
@tab @code{0} @tab
Buffer purge
@item @code{7}
@tab W/O @tab
@code{RST_SEQ}
@tab @code{0} @tab
Reset timestamp sequence number
@item @code{8}
@tab R/O @tab
@code{FULL}
@tab @code{X} @tab
Buffer full
@item @code{9}
@tab R/O @tab
@code{EMPTY}
@tab @code{X} @tab
Buffer empty
@item @code{21...10}
@tab R/O @tab
@code{COUNT}
@tab @code{X} @tab
Buffer entries count
@item @code{22}
@tab R/W @tab
@code{RAW}
@tab @code{0} @tab
RAW readout mode enable
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{CHAN_MASK} @tab Selects which channels' time tags shall be written to the buffer. @* bit @code{0}: TDC input@* bits @code{1..4}: = Delay outputs
@item @code{ENABLE} @tab Enables/disables timestamp readout:@* 1: timestamp buffer is enabled. Readout is possible.@* 0: timestamp buffer is disabled. Timestamps are processed (if set in delay mode), but discarded for readout.
@item @code{PURGE} @tab write 1: clear timestamp buffer.@* write 0: no effect
@item @code{RST_SEQ} @tab write 1: reset timestamp sequence number counter@* write 0: no effect
@item @code{FULL} @tab read 1: buffer is full. Old timestamps (at the end of the buffer) will be discarded when new ones will come
@item @code{EMPTY} @tab read 1: buffer is empty
@item @code{COUNT} @tab Number of timestamps currently stored in the readout buffer
@item @code{RAW} @tab Enables raw timestamp readout mode (i.e. bypassing postprocessing). Used only for debugging purposes.@* write 1: enable raw mode@* write 0: disable raw mode (normal operation)
@end multitable
@regsection @code{TSBIR} - Timestamp Buffer Interrupt Register
Controls the behaviour of the core's readout interrupt (coalescing).
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{9...0}
@tab R/W @tab
@code{TIMEOUT}
@tab @code{0} @tab
IRQ timeout [milliseconds]
@item @code{21...10}
@tab R/W @tab
@code{THRESHOLD}
@tab @code{0} @tab
Interrupt threshold
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{TIMEOUT} @tab The IRQ line will be asserted after @code{TSBIR.TIMEOUT} milliseconds even if the amount of data in the buffer is below @code{TSBIR.THRESHOLD}.
@item @code{THRESHOLD} @tab Minimum number of samples (timestamps) in the buffer that immediately triggers an interrupt.
@end multitable
@regsection @code{TSBR_SECH} - Timestamp Buffer Readout Seconds Register (MSB)
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{7...0}
@tab R/O @tab
@code{TSBR_SECH}
@tab @code{X} @tab
Timestamps TAI Seconds (bits 39-32)
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{TSBR_SECL} - Timestamp Buffer Readout Seconds Register (LSB)
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/O @tab
@code{TSBR_SECL}
@tab @code{X} @tab
Timestamps TAI Seconds (bits 31-0)
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{TSBR_CYCLES} - Timestamp Buffer Readout Cycles Register
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{27...0}
@tab R/O @tab
@code{TSBR_CYCLES}
@tab @code{X} @tab
Timestamps Cycles Count [in 8 ns ticks]
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{TSBR_FID} - Timestamp Buffer Readout Fine/Channel/Sequence ID Register
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{3...0}
@tab R/O @tab
@code{CHANNEL}
@tab @code{X} @tab
Channel ID
@item @code{15...4}
@tab R/O @tab
@code{FINE}
@tab @code{X} @tab
Fine Value (in phase units)
@item @code{31...16}
@tab R/O @tab
@code{SEQID}
@tab @code{X} @tab
Timestamp Sequence ID
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{CHANNEL} @tab ID of the originating channel:@* @code{0}: TDC input@* @code{1..4}: outputs 1..4
@end multitable
@regsection @code{I2CR} - I2C bitbanged IO register
Controls state of the mezzanine's I2C bus lines by means of bitbanging
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab R/W @tab
@code{SCL_OUT}
@tab @code{1} @tab
SCL Line out
@item @code{1}
@tab R/W @tab
@code{SDA_OUT}
@tab @code{1} @tab
SDA Line out
@item @code{2}
@tab R/O @tab
@code{SCL_IN}
@tab @code{X} @tab
SCL Line in
@item @code{3}
@tab R/O @tab
@code{SDA_IN}
@tab @code{X} @tab
SDA Line in
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{SCL_OUT} @tab write 0: drive SCL to 0 @* write 1: drive SCL to weak 1 (pullup)
@item @code{SDA_OUT} @tab write 0: drive SDA to 0 @* write 1: drive SDA to weak 1 (pullup)
@item @code{SCL_IN} @tab State of the SCL line.
@item @code{SDA_IN} @tab State of the SDA line.
@end multitable
@regsection @code{TDER1} - Test/Debug register 1
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/O @tab
@code{VCXO_FREQ}
@tab @code{X} @tab
VCXO Frequency
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{VCXO_FREQ} @tab Mezzanine VCXO frequency in Hz, measured using the DMTD clock as a reference. Used during factory test only.
@end multitable
@regsection @code{TDER2} - Test/Debug register 1
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/W @tab
@code{PELT_DRIVE}
@tab @code{0} @tab
Peltier PWM drive
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{PELT_DRIVE} @tab Peltier module PWM drive. Lab-only feature for measuring temperature characteristics of the board.
@end multitable
@regsection @code{TSBR_DEBUG} - Timestamp Buffer Debug Values Register
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{31...0}
@tab R/O @tab
@code{TSBR_DEBUG}
@tab @code{X} @tab
Debug value
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{TSBR_DEBUG} @tab Additional register for holding timestamp debug data (used only in raw readout mode). Content format is not specified.
@end multitable
@regsection @code{TSBR_ADVANCE} - Timestamp Buffer Advance Register
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab W/O @tab
@code{ADV}
@tab @code{0} @tab
Advance buffer readout
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@end multitable
@regsection @code{EIC_IDR} - Interrupt disable register
Writing 1 disables handling of the interrupt associated with corresponding bit. Writin 0 has no effect.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab W/O @tab
@code{TS_BUF_NOTEMPTY}
@tab @code{0} @tab
Timestamp Buffer interrupt.
@item @code{1}
@tab W/O @tab
@code{DMTD_SPLL}
@tab @code{0} @tab
DMTD SoftPLL interrupt
@item @code{2}
@tab W/O @tab
@code{SYNC_STATUS}
@tab @code{0} @tab
Sync Status Changed
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{ts_buf_notempty} @tab write 1: disable interrupt 'Timestamp Buffer interrupt.'@*write 0: no effect
@item @code{dmtd_spll} @tab write 1: disable interrupt 'DMTD SoftPLL interrupt'@*write 0: no effect
@item @code{sync_status} @tab write 1: disable interrupt 'Sync Status Changed'@*write 0: no effect
@end multitable
@regsection @code{EIC_IER} - Interrupt enable register
Writing 1 enables handling of the interrupt associated with corresponding bit. Writin 0 has no effect.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab W/O @tab
@code{TS_BUF_NOTEMPTY}
@tab @code{0} @tab
Timestamp Buffer interrupt.
@item @code{1}
@tab W/O @tab
@code{DMTD_SPLL}
@tab @code{0} @tab
DMTD SoftPLL interrupt
@item @code{2}
@tab W/O @tab
@code{SYNC_STATUS}
@tab @code{0} @tab
Sync Status Changed
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{ts_buf_notempty} @tab write 1: enable interrupt 'Timestamp Buffer interrupt.'@*write 0: no effect
@item @code{dmtd_spll} @tab write 1: enable interrupt 'DMTD SoftPLL interrupt'@*write 0: no effect
@item @code{sync_status} @tab write 1: enable interrupt 'Sync Status Changed'@*write 0: no effect
@end multitable
@regsection @code{EIC_IMR} - Interrupt mask register
Shows which interrupts are enabled. 1 means that the interrupt associated with the bitfield is enabled
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab R/O @tab
@code{TS_BUF_NOTEMPTY}
@tab @code{X} @tab
Timestamp Buffer interrupt.
@item @code{1}
@tab R/O @tab
@code{DMTD_SPLL}
@tab @code{X} @tab
DMTD SoftPLL interrupt
@item @code{2}
@tab R/O @tab
@code{SYNC_STATUS}
@tab @code{X} @tab
Sync Status Changed
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{ts_buf_notempty} @tab read 1: interrupt 'Timestamp Buffer interrupt.' is enabled@*read 0: interrupt 'Timestamp Buffer interrupt.' is disabled
@item @code{dmtd_spll} @tab read 1: interrupt 'DMTD SoftPLL interrupt' is enabled@*read 0: interrupt 'DMTD SoftPLL interrupt' is disabled
@item @code{sync_status} @tab read 1: interrupt 'Sync Status Changed' is enabled@*read 0: interrupt 'Sync Status Changed' is disabled
@end multitable
@regsection @code{EIC_ISR} - Interrupt status register
Each bit represents the state of corresponding interrupt. 1 means the interrupt is pending. Writing 1 to a bit clears the corresponding interrupt. Writing 0 has no effect.
@multitable @columnfractions .10 .10 .15 .10 .55
@headitem Bits @tab Access @tab Prefix @tab Default @tab Name
@item @code{0}
@tab R/W @tab
@code{TS_BUF_NOTEMPTY}
@tab @code{X} @tab
Timestamp Buffer interrupt.
@item @code{1}
@tab R/W @tab
@code{DMTD_SPLL}
@tab @code{X} @tab
DMTD SoftPLL interrupt
@item @code{2}
@tab R/W @tab
@code{SYNC_STATUS}
@tab @code{X} @tab
Sync Status Changed
@end multitable
@multitable @columnfractions 0.15 0.85
@headitem Field @tab Description
@item @code{ts_buf_notempty} @tab read 1: interrupt 'Timestamp Buffer interrupt.' is pending@*read 0: interrupt not pending@*write 1: clear interrupt 'Timestamp Buffer interrupt.'@*write 0: no effect
@item @code{dmtd_spll} @tab read 1: interrupt 'DMTD SoftPLL interrupt' is pending@*read 0: interrupt not pending@*write 1: clear interrupt 'DMTD SoftPLL interrupt'@*write 0: no effect
@item @code{sync_status} @tab read 1: interrupt 'Sync Status Changed' is pending@*read 0: interrupt not pending@*write 1: clear interrupt 'Sync Status Changed'@*write 0: no effect
@end multitable
......@@ -838,7 +838,7 @@ The main register block controls all subsystems of the FD core excluding the One
@section Output stage registers
@node{Output stage registers}
The output stage register blocks control independently, the 4 outputs of the FD Core.
The output stage register block controls a single FD output stage.
@include fd_channel_regs.in
......@@ -866,6 +866,10 @@ The output stage register blocks control independently, the 4 outputs of the FD
@item ACAM TDC-GPX datasheet
@url{http://www.acam.de/fileadmin/Download/pdf/English/DB_GPX_e.pdf‎}
@item Sockit 1-Wire master project page
@url{http://opencores.org/project,sockit_owm}
@end itemize
@bye
......@@ -15,6 +15,8 @@
`define FD_DCR_FORCE_DLY 32'h00000040
`define FD_DCR_NO_FINE_OFFSET 7
`define FD_DCR_NO_FINE 32'h00000080
`define FD_DCR_FORCE_HI_OFFSET 8
`define FD_DCR_FORCE_HI 32'h00000100
`define ADDR_FD_FRR 6'h4
`define ADDR_FD_U_STARTH 6'h8
`define ADDR_FD_U_STARTL 6'hc
......
......@@ -75,9 +75,9 @@
`define ADDR_FD_ADSFR 8'h30
`define ADDR_FD_ATMCR 8'h34
`define FD_ATMCR_C_THR_OFFSET 0
`define FD_ATMCR_C_THR 32'h0000000f
`define FD_ATMCR_F_THR_OFFSET 4
`define FD_ATMCR_F_THR 32'h07fffff0
`define FD_ATMCR_C_THR 32'h000000ff
`define FD_ATMCR_F_THR_OFFSET 8
`define FD_ATMCR_F_THR 32'h7fffff00
`define ADDR_FD_ASOR 8'h38
`define FD_ASOR_OFFSET_OFFSET 0
`define FD_ASOR_OFFSET 32'h007fffff
......
#!/bin/bash
wbgen2 -V fd_main_wishbone_slave.vhd -H record -p fd_main_wbgen2_pkg.vhd -K ../include/regs/fd_main_regs.vh -s defines -C fd_main_regs.h -D doc/fd_main_regs.html fd_main_wishbone_slave.wb
wbgen2 -V fd_channel_wishbone_slave.vhd -H record -p fd_channel_wbgen2_pkg.vhd -K ../include/regs/fd_channel_regs.vh -s defines -C fd_channel_regs.h -D doc/fd_channel_regs.html fd_channel_wishbone_slave.wb
\ No newline at end of file
wbgen2 -V fd_main_wishbone_slave.vhd -H record -p fd_main_wbgen2_pkg.vhd -K ../include/regs/fd_main_regs.vh -s defines -C fd_main_regs.h -f texinfo -D ../../doc/design-notes/fd_main_regs.in fd_main_wishbone_slave.wb
wbgen2 -V fd_channel_wishbone_slave.vhd -H record -p fd_channel_wbgen2_pkg.vhd -K ../include/regs/fd_channel_regs.vh -s defines -C fd_channel_regs.h -f texinfo -D ../../doc/design-notes/fd_channel_regs.in fd_channel_wishbone_slave.wb
\ No newline at end of file
<HTML>
<HEAD>
<TITLE>fd_channel_wb_slave</TITLE>
<STYLE TYPE="text/css" MEDIA="all">
<!--
BODY { background: white; color: black;
font-family: Arial,Helvetica; font-size:12; }
h1 { font-family: Trebuchet MS,Arial,Helvetica; font-size:30; color:#404040; }
h2 { font-family: Trebuchet MS,Arial,Helvetica; font-size:22; color:#404040; }
h3 { font-family: Trebuchet MS,Arial,Helvetica; font-size:16; color:#404040; }
.td_arrow_left { padding:0px; background: #ffffff; text-align: right; font-size:12;}
.td_arrow_right { padding:0px; background: #ffffff; text-align: left; font-size:12;}
.td_code { font-family:Courier New,Courier; padding: 3px; }
.td_desc { padding: 3px; }
.td_sym_center { background: #e0e0f0; padding: 3px; }
.td_port_name { font-family:Courier New,Courier; background: #e0e0f0; text-align: right; font-weight:bold;padding: 3px; width:200px; }
.td_pblock_left { font-family:Courier New,Courier; background: #e0e0f0; padding: 0px; text-align: left; }
.td_pblock_right { font-family:Courier New,Courier; background: #e0e0f0; padding: 0px; text-align: right; }
.td_bit { background: #ffffff; color:#404040; font-size:10; width: 70px; font-family:Courier New,Courier; padding: 3px; text-align:center; }
.td_field { background: #e0e0f0; padding: 3px; text-align:center; }
.td_unused { background: #a0a0a0; padding: 3px; text-align:center; }
th { font-weight:bold; color:#ffffff; background: #202080; padding:3px; }
.tr_even { background: #f0eff0; }
.tr_odd { background: #e0e0f0; }
-->
</STYLE>
</HEAD>
<BODY>
<h1 class="heading">fd_channel_wb_slave</h1>
<h3>Fine Delay Channel WB Slave</h3>
<p></p>
<h3>Contents:</h3>
<span style="margin-left: 0px; ">1. <A href="#sect_1_0">Memory map summary</a></span><br/>
<span style="margin-left: 0px; ">2. <A href="#sect_2_0">HDL symbol</a></span><br/>
<span style="margin-left: 0px; ">3. <A href="#sect_3_0">Register description</a></span><br/>
<span style="margin-left: 20px; ">3.1. <A href="#sect_3_1">Delay Control Register</a></span><br/>
<span style="margin-left: 20px; ">3.2. <A href="#sect_3_2">Fine Range Register</a></span><br/>
<span style="margin-left: 20px; ">3.3. <A href="#sect_3_3">Pulse start time / offset (MSB TAI seconds)</a></span><br/>
<span style="margin-left: 20px; ">3.4. <A href="#sect_3_4">Pulse start time / offset (LSB TAI seconds)</a></span><br/>
<span style="margin-left: 20px; ">3.5. <A href="#sect_3_5">Pulse start time / offset (8 ns cycles)</a></span><br/>
<span style="margin-left: 20px; ">3.6. <A href="#sect_3_6">Pulse start time / offset (sub-cycle fine part)</a></span><br/>
<span style="margin-left: 20px; ">3.7. <A href="#sect_3_7">Pulse end time / offset (MSB TAI seconds)</a></span><br/>
<span style="margin-left: 20px; ">3.8. <A href="#sect_3_8">Pulse end time / offset (LSB TAI seconds)</a></span><br/>
<span style="margin-left: 20px; ">3.9. <A href="#sect_3_9">Pulse end time / offset (8 ns cycles)</a></span><br/>
<span style="margin-left: 20px; ">3.10. <A href="#sect_3_10">Pulse end time / offset (sub-cycle fine part)</a></span><br/>
<span style="margin-left: 20px; ">3.11. <A href="#sect_3_11">Pulse spacing (TAI seconds)</a></span><br/>
<span style="margin-left: 20px; ">3.12. <A href="#sect_3_12">Pulse spacing (8 ns cycles)</a></span><br/>
<span style="margin-left: 20px; ">3.13. <A href="#sect_3_13">Pulse spacing (sub-cycle fine part)</a></span><br/>
<span style="margin-left: 20px; ">3.14. <A href="#sect_3_14">Repeat Count Register</a></span><br/>
<h3><a name="sect_1_0">1. Memory map summary</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<th >
H/W Address
</th>
<th >
Type
</th>
<th >
Name
</th>
<th >
VHDL/Verilog prefix
</th>
<th >
C prefix
</th>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x0
</td>
<td >
REG
</td>
<td >
<A href="#DCR">Delay Control Register</a>
</td>
<td class="td_code">
fd_channel_dcr
</td>
<td class="td_code">
DCR
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x1
</td>
<td >
REG
</td>
<td >
<A href="#FRR">Fine Range Register</a>
</td>
<td class="td_code">
fd_channel_frr
</td>
<td class="td_code">
FRR
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x2
</td>
<td >
REG
</td>
<td >
<A href="#U_STARTH">Pulse start time / offset (MSB TAI seconds)</a>
</td>
<td class="td_code">
fd_channel_u_starth
</td>
<td class="td_code">
U_STARTH
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x3
</td>
<td >
REG
</td>
<td >
<A href="#U_STARTL">Pulse start time / offset (LSB TAI seconds)</a>
</td>
<td class="td_code">
fd_channel_u_startl
</td>
<td class="td_code">
U_STARTL
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x4
</td>
<td >
REG
</td>
<td >
<A href="#C_START">Pulse start time / offset (8 ns cycles)</a>
</td>
<td class="td_code">
fd_channel_c_start
</td>
<td class="td_code">
C_START
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x5
</td>
<td >
REG
</td>
<td >
<A href="#F_START">Pulse start time / offset (sub-cycle fine part)</a>
</td>
<td class="td_code">
fd_channel_f_start
</td>
<td class="td_code">
F_START
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x6
</td>
<td >
REG
</td>
<td >
<A href="#U_ENDH">Pulse end time / offset (MSB TAI seconds)</a>
</td>
<td class="td_code">
fd_channel_u_endh
</td>
<td class="td_code">
U_ENDH
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x7
</td>
<td >
REG
</td>
<td >
<A href="#U_ENDL">Pulse end time / offset (LSB TAI seconds)</a>
</td>
<td class="td_code">
fd_channel_u_endl
</td>
<td class="td_code">
U_ENDL
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x8
</td>
<td >
REG
</td>
<td >
<A href="#C_END">Pulse end time / offset (8 ns cycles)</a>
</td>
<td class="td_code">
fd_channel_c_end
</td>
<td class="td_code">
C_END
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x9
</td>
<td >
REG
</td>
<td >
<A href="#F_END">Pulse end time / offset (sub-cycle fine part)</a>
</td>
<td class="td_code">
fd_channel_f_end
</td>
<td class="td_code">
F_END
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0xa
</td>
<td >
REG
</td>
<td >
<A href="#U_DELTA">Pulse spacing (TAI seconds)</a>
</td>
<td class="td_code">
fd_channel_u_delta
</td>
<td class="td_code">
U_DELTA
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0xb
</td>
<td >
REG
</td>
<td >
<A href="#C_DELTA">Pulse spacing (8 ns cycles)</a>
</td>
<td class="td_code">
fd_channel_c_delta
</td>
<td class="td_code">
C_DELTA
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0xc
</td>
<td >
REG
</td>
<td >
<A href="#F_DELTA">Pulse spacing (sub-cycle fine part)</a>
</td>
<td class="td_code">
fd_channel_f_delta
</td>
<td class="td_code">
F_DELTA
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0xd
</td>
<td >
REG
</td>
<td >
<A href="#RCR">Repeat Count Register</a>
</td>
<td class="td_code">
fd_channel_rcr
</td>
<td class="td_code">
RCR
</td>
</tr>
</table>
<h3><a name="sect_2_0">2. HDL symbol</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
rst_n_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Delay Control Register:</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
clk_sys_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_dcr_enable_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rArr;
</td>
<td class="td_pblock_left">
wb_adr_i[3:0]
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_dcr_mode_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rArr;
</td>
<td class="td_pblock_left">
wb_dat_i[31:0]
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_dcr_pg_arm_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&lArr;
</td>
<td class="td_pblock_left">
wb_dat_o[31:0]
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_dcr_pg_trig_i
</td>
<td class="td_arrow_right">
&larr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
wb_cyc_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_dcr_update_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rArr;
</td>
<td class="td_pblock_left">
wb_sel_i[3:0]
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_dcr_upd_done_i
</td>
<td class="td_arrow_right">
&larr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
wb_stb_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_dcr_force_dly_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
wb_we_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_dcr_no_fine_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&larr;
</td>
<td class="td_pblock_left">
wb_ack_o
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_dcr_force_hi_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&larr;
</td>
<td class="td_pblock_left">
wb_stall_o
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Fine Range Register:</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_frr_o[9:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse start time / offset (MSB TAI seconds):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_u_starth_o[7:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse start time / offset (LSB TAI seconds):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_u_startl_o[31:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse start time / offset (8 ns cycles):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_c_start_o[27:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse start time / offset (sub-cycle fine part):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_f_start_o[11:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse end time / offset (MSB TAI seconds):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_u_endh_o[7:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse end time / offset (LSB TAI seconds):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_u_endl_o[31:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse end time / offset (8 ns cycles):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_c_end_o[27:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse end time / offset (sub-cycle fine part):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_f_end_o[11:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse spacing (TAI seconds):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_u_delta_o[3:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse spacing (8 ns cycles):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_c_delta_o[27:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Pulse spacing (sub-cycle fine part):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_f_delta_o[11:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Repeat Count Register:</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_rcr_rep_cnt_o[15:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
fd_channel_rcr_cont_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
</table>
<h3><a name="sect_3_0">3. Register description</a></h3>
<a name="DCR"></a>
<h3><a name="sect_3_1">3.1. Delay Control Register</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_dcr
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x0
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
DCR
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x0
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=1 class="td_field">
FORCE_HI
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=1 class="td_field">
NO_FINE
</td>
<td style="border: solid 1px black;" colspan=1 class="td_field">
FORCE_DLY
</td>
<td style="border: solid 1px black;" colspan=1 class="td_field">
UPD_DONE
</td>
<td style="border: solid 1px black;" colspan=1 class="td_field">
UPDATE
</td>
<td style="border: solid 1px black;" colspan=1 class="td_field">
PG_TRIG
</td>
<td style="border: solid 1px black;" colspan=1 class="td_field">
PG_ARM
</td>
<td style="border: solid 1px black;" colspan=1 class="td_field">
MODE
</td>
<td style="border: solid 1px black;" colspan=1 class="td_field">
ENABLE
</td>
</tr>
</table>
<ul>
<li><b>
ENABLE
</b>[<i>read/write</i>]: Enable channel
<br>0: channel is disabled<br> 1: channel is enabled
<li><b>
MODE
</b>[<i>read/write</i>]: Delay mode select
<br>0: Channel will work as a delay generator, producing delayed copies of pulses comming to the trigger input<br>1: Channel will work as a programmable pulse generator - producing a pulse which begins at UTC time [U_START, C_START, F_START] and ends at [U_END, C_END, F_END].<br> <b>Warning:</b> MODE_DLY bit can be safely set only when the TDC and the delay logic are disabled (i.e. when GCR.BYPASS = 1)
<li><b>
PG_ARM
</b>[<i>write-only</i>]: Pulse generator arm
<br>write 1: arms the pulse generator. <br> write 0: no effect.<br> Note that the time written to [U/C/F]START must be bigger by at least 200 ns than the value of the UTC counter at the moment of arming the pulse generator. In practice, the safety margin should be much bigger, as it's affected by the non-determinism of the operating system.
<li><b>
PG_TRIG
</b>[<i>read-only</i>]: Pulse generator triggered
<br>read 1: pulse generator has been triggered and produced a pulse<br> read 0: pulse generator is busy or hasn't triggered yet
<li><b>
UPDATE
</b>[<i>write-only</i>]: Start Delay Update
<br>write 1: Starts delay update procedure. The start and end times from [U/C/F][START/END] will be transferred in an atomic way to the internal delay/pulse generator registers<br> write 0: no effect.
<li><b>
UPD_DONE
</b>[<i>read-only</i>]: Delay Update Done
<br>read 1: The delays from [U/C/F][START/END] have been loaded into internal registers<br> read 0: update operation in progress
<li><b>
FORCE_DLY
</b>[<i>write-only</i>]: Force Calibration Delay
<br>write 1: preloads the delay line with the contents of FRR register. Used for self-calibration purposes.<br> write 0: no effect
<li><b>
NO_FINE
</b>[<i>read/write</i>]: Disable Fine Part update
<br>write 1: disables updating of the fine part of the pulse delay to allow for producing faster signals (i.e. pulse width/spacing < 200 ns), at the cost of less accurate width/spacing control (multiple of 4 ms). <br>write 0: normal operation. Pulse width/spacing must be at least 200 ns.
<li><b>
FORCE_HI
</b>[<i>read/write</i>]: Force Output High
<br>write 1: Forces constant 1 on the output when the channel is disabled<br> write 0: Forces constant 0 on the output when the channel is disabled<br> Used for testing/calibration purposes.
</ul>
<a name="FRR"></a>
<h3><a name="sect_3_2">3.2. Fine Range Register</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_frr
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x1
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
FRR
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x4
</td>
</tr>
</table>
<p>
Delay line tap setting at which the line generates an 8 ns (one cycle) longer delay than when set to 0.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=2 class="td_field">
FRR[9:8]
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
FRR[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
FRR
</b>[<i>read/write</i>]: Fine Range
</ul>
<a name="U_STARTH"></a>
<h3><a name="sect_3_3">3.3. Pulse start time / offset (MSB TAI seconds)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_u_starth
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x2
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
U_STARTH
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x8
</td>
</tr>
</table>
<p>
TAI seconds (8 upper bits) part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode).
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_STARTH[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
U_STARTH
</b>[<i>read/write</i>]: TAI seconds (MSB)
</ul>
<a name="U_STARTL"></a>
<h3><a name="sect_3_4">3.4. Pulse start time / offset (LSB TAI seconds)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_u_startl
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x3
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
U_STARTL
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0xc
</td>
</tr>
</table>
<p>
TAI seconds (32 lower bits) part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode).
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_STARTL[31:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_STARTL[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_STARTL[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_STARTL[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
U_STARTL
</b>[<i>read/write</i>]: TAI seconds (LSB)
</ul>
<a name="C_START"></a>
<h3><a name="sect_3_5">3.5. Pulse start time / offset (8 ns cycles)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_c_start
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x4
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
C_START
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x10
</td>
</tr>
</table>
<p>
Sub-second part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
C_START[27:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
C_START[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
C_START[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
C_START[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
C_START
</b>[<i>read/write</i>]: Reference clock cycles
</ul>
<a name="F_START"></a>
<h3><a name="sect_3_6">3.6. Pulse start time / offset (sub-cycle fine part)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_f_start
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x5
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
F_START
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x14
</td>
</tr>
</table>
<p>
Sub-clock cycle part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
F_START[11:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
F_START[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
F_START
</b>[<i>read/write</i>]: Fractional part
</ul>
<a name="U_ENDH"></a>
<h3><a name="sect_3_7">3.7. Pulse end time / offset (MSB TAI seconds)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_u_endh
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x6
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
U_ENDH
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x18
</td>
</tr>
</table>
<p>
TAI seconds (8 upper bits) part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode).
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_ENDH[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
U_ENDH
</b>[<i>read/write</i>]: TAI seconds (MSB)
</ul>
<a name="U_ENDL"></a>
<h3><a name="sect_3_8">3.8. Pulse end time / offset (LSB TAI seconds)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_u_endl
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x7
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
U_ENDL
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x1c
</td>
</tr>
</table>
<p>
TAI seconds (32 lower bits) part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode).
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_ENDL[31:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_ENDL[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_ENDL[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
U_ENDL[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
U_ENDL
</b>[<i>read/write</i>]: TAI seconds (LSB)
</ul>
<a name="C_END"></a>
<h3><a name="sect_3_9">3.9. Pulse end time / offset (8 ns cycles)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_c_end
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x8
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
C_END
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x20
</td>
</tr>
</table>
<p>
Sub-second part of the pulse endabsolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
C_END[27:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
C_END[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
C_END[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
C_END[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
C_END
</b>[<i>read/write</i>]: Reference clock cycles
</ul>
<a name="F_END"></a>
<h3><a name="sect_3_10">3.10. Pulse end time / offset (sub-cycle fine part)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_f_end
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x9
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
F_END
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x24
</td>
</tr>
</table>
<p>
Sub-clock cycle part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
F_END[11:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
F_END[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
F_END
</b>[<i>read/write</i>]: Fractional part
</ul>
<a name="U_DELTA"></a>
<h3><a name="sect_3_11">3.11. Pulse spacing (TAI seconds)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_u_delta
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xa
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
U_DELTA
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x28
</td>
</tr>
</table>
<p>
TAI seconds between rising edges of subsequent output pulses.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
U_DELTA[3:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
U_DELTA
</b>[<i>read/write</i>]: TAI seconds
</ul>
<a name="C_DELTA"></a>
<h3><a name="sect_3_12">3.12. Pulse spacing (8 ns cycles)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_c_delta
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xb
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
C_DELTA
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x2c
</td>
</tr>
</table>
<p>
Reference clock cycles between rising edges of subsequent output pulses.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
C_DELTA[27:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
C_DELTA[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
C_DELTA[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
C_DELTA[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
C_DELTA
</b>[<i>read/write</i>]: Reference clock cycles
</ul>
<a name="F_DELTA"></a>
<h3><a name="sect_3_13">3.13. Pulse spacing (sub-cycle fine part)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_f_delta
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xc
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
F_DELTA
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x30
</td>
</tr>
</table>
<p>
Sub-cycle part of spacing between rising edges of subsequent output pulses.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
F_DELTA[11:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
F_DELTA[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
F_DELTA
</b>[<i>read/write</i>]: Fractional part
</ul>
<a name="RCR"></a>
<h3><a name="sect_3_14">3.14. Repeat Count Register</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
fd_channel_rcr
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xd
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
RCR
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x34
</td>
</tr>
</table>
<p>
Register controlling the number of output pulses to be generated upon reception of a trigger pulse.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=1 class="td_field">
CONT
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
REP_CNT[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
REP_CNT[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
REP_CNT
</b>[<i>read/write</i>]: Repeat Count
<li><b>
CONT
</b>[<i>read/write</i>]: Continuous Waveform Mode
<br>write 1: output will produce a contiguous square wave upon receptio of trigger pulse. The generation can be aborted by disabling the channel (DCRx.ENABLE = 0)<br> write 0: output will produce trains of REP_CNT+1 pulses.
</ul>
</BODY>
</HTML>
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -3,7 +3,7 @@
---------------------------------------------------------------------------------------
-- File : fd_channel_wbgen2_pkg.vhd
-- Author : auto-generated by wbgen2 from fd_channel_wishbone_slave.wb
-- Created : Fri Feb 15 12:07:17 2013
-- Created : Thu Jul 4 10:40:48 2013
-- Standard : VHDL'87
---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_channel_wishbone_slave.wb
......
......@@ -3,7 +3,7 @@
---------------------------------------------------------------------------------------
-- File : fd_channel_wishbone_slave.vhd
-- Author : auto-generated by wbgen2 from fd_channel_wishbone_slave.wb
-- Created : Fri Feb 15 12:07:17 2013
-- Created : Thu Jul 4 10:40:48 2013
-- Standard : VHDL'87
---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_channel_wishbone_slave.wb
......@@ -533,7 +533,7 @@ begin
end process;
-- Start Delay Update
-- Update delay/absolute trigger time
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -550,8 +550,8 @@ begin
end process;
-- Delay Update Done
-- synchronizer chain for field : Delay Update Done (type RO/WO, clk_ref_i -> clk_sys_i)
-- Delay update done flag
-- synchronizer chain for field : Delay update done flag (type RO/WO, clk_ref_i -> clk_sys_i)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -564,7 +564,7 @@ begin
end process;
-- Force Calibration Delay
-- Force calibration delay
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -581,11 +581,11 @@ begin
end process;
-- Disable Fine Part update
-- Disable fine part update
regs_o.dcr_no_fine_o <= fd_channel_dcr_no_fine_int;
-- Force Output High
-- Force output high
regs_o.dcr_force_hi_o <= fd_channel_dcr_force_hi_int;
-- Fine Range
-- Fine range in SY89825 taps.
regs_o.frr_o <= fd_channel_frr_int;
-- TAI seconds (MSB)
regs_o.u_starth_o <= fd_channel_u_starth_int;
......
......@@ -48,14 +48,15 @@ peripheral {
reg {
name = "Delay Control Register";
description = "Main control registers of the particular output channel of the Fine Delay Core.";
prefix = "DCR";
align = 8;
field {
name = "Enable channel";
prefix = "ENABLE";
description = "0: channel is disabled\
1: channel is enabled";
description = "write 0: channel is disabled. Output is driven LOW.\
write 1: channel is enabled. Output may produce pulses.";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
......@@ -65,9 +66,9 @@ peripheral {
field {
name = "Delay mode select";
prefix = "MODE";
description = "0: Channel will work as a delay generator, producing delayed copies of pulses comming to the trigger input\
1: Channel will work as a programmable pulse generator - producing a pulse which begins at UTC time [U_START, C_START, F_START] and ends at [U_END, C_END, F_END].\
<b>Warning:</b> MODE_DLY bit can be safely set only when the TDC and the delay logic are disabled (i.e. when GCR.BYPASS = 1)";
description = "0: Channel will work as a delay generator, producing delayed copies of pulses coming to the trigger input. Start/End registers shall contain delays of respectively, the rising and falling edge.\
1: Channel will work as a programmable pulse generator - producing a pulse which begins and ends at absolute TAI times stored in Start/End registers.\
<b>Note:</b> <code>MODE</code> bit can be safely set only when the delay logic are disabled (i.e. when <code>DCR.ENABLE == 0</code>)";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
......@@ -78,7 +79,7 @@ peripheral {
prefix = "PG_ARM";
description = "write 1: arms the pulse generator. \
write 0: no effect.\
Note that the time written to [U/C/F]START must be bigger by at least 200 ns than the value of the UTC counter at the moment of arming the pulse generator. In practice, the safety margin should be much bigger, as it's affected by the non-determinism of the operating system.";
<b>Note:</b> The values written to <code>[U/C/F]_START</code> and <code>[U/C/F]_END</code> must be bigger by at least 300 ns than the value of the UTC counter at the moment of arming the pulse generator. In practice, the safety margin should be much higher, as it's affected by the non-determinism of the operating system.";
type = MONOSTABLE;
clock = "clk_ref_i";
};
......@@ -95,18 +96,19 @@ peripheral {
};
field {
name = "Start Delay Update";
name = "Update delay/absolute trigger time";
prefix = "UPDATE";
description = "write 1: Starts delay update procedure. The start and end times from [U/C/F][START/END] will be transferred in an atomic way to the internal delay/pulse generator registers\
write 0: no effect.";
description = "write 1: Starts the update procedure. The start and end times from <code>[U/C/F][START/END]</code> will be transferred in an atomic way to the internal delay/pulse generator registers.\
write 0: no effect.\
<b>Note:</b> Care must be taken when updating the delay value - if the channel gets stuck due to invalid control values written, the only way to bring it back alive is to disable and re-enable it by toggling <code>DCR.ENABLE</code> bit.";
type = MONOSTABLE;
clock = "clk_ref_i";
};
field {
name = "Delay Update Done";
name = "Delay update done flag";
prefix = "UPD_DONE";
description = "read 1: The delays from [U/C/F][START/END] have been loaded into internal registers\
description = "read 1: the delays from <code>[U/C/F][START/END]</code> have been loaded into internal registers. Subsequent triggers will be delayed by the newly programmed value.\
read 0: update operation in progress";
type = BIT;
access_bus = READ_ONLY;
......@@ -115,10 +117,11 @@ peripheral {
};
field {
name = "Force Calibration Delay";
name = "Force calibration delay";
prefix = "FORCE_DLY";
description = "write 1: preloads the delay line with the contents of FRR register. Used for self-calibration purposes.\
write 0: no effect";
description = "Used in type 1 calibration.\
write 1: preloads the SY89295 delay line with the contents of FRR register.\
write 0: no effect";
type = MONOSTABLE;
clock = "clk_ref_i";
......@@ -126,10 +129,11 @@ peripheral {
field {
name = "Disable Fine Part update";
name = "Disable fine part update";
prefix = "NO_FINE";
description = "write 1: disables updating of the fine part of the pulse delay to allow for producing faster signals (i.e. pulse width/spacing < 200 ns), at the cost of less accurate width/spacing control (multiple of 4 ms). \
write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
description = "write 1: disables updating of the fine part of the pulse delay to allow for producing faster signals (i.e. pulse width/spacing < 200 ns), at the cost of less accurate width/spacing control (multiple of 4 ns). \
write 0: normal operation. Pulse width/spacing must be at least 200 ns, width/spacing resolution is 10 ps.\
<b>Note:</b> A typical use case for <code>NO_FINE</code> bit is producing a 10 MHz clock.";
type = BIT;
access_bus = READ_WRITE;
......@@ -137,10 +141,10 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
};
field {
name = "Force Output High";
name = "Force output high";
prefix = "FORCE_HI";
description = "write 1: Forces constant 1 on the output when the channel is disabled\
write 0: Forces constant 0 on the output when the channel is disabled\
description = "write 1: forces constant 1 on the output when the channel is disabled\
write 0: forces constant 0 on the output when the channel is disabled\
Used for testing/calibration purposes.";
type = BIT;
......@@ -154,10 +158,10 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
reg {
name = "Fine Range Register";
prefix = "FRR";
description = "Delay line tap setting at which the line generates an 8 ns (one cycle) longer delay than when set to 0.";
description = "Delay line tap setting at which the line generates an 8 ns (one cycle) longer delay than when set to 0. Used by type 1 calibration logic.";
field {
name = "Fine Range";
name = "Fine range in SY89825 taps.";
size = 10;
type = SLV;
access_bus = READ_WRITE;
......@@ -211,9 +215,9 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
};
reg {
name = "Pulse start time / offset (sub-cycle fine part)";
name = "Pulse start time / offset (fine part)";
prefix = "F_START";
description = "Sub-clock cycle part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.";
description = "Sub-clock cycle part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode).";
field {
name = "Fractional part";
......@@ -258,7 +262,7 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
reg {
name = "Pulse end time / offset (8 ns cycles)";
prefix = "C_END";
description = "Sub-second part of the pulse endabsolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.";
description = "Sub-second part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.";
field {
name = "Reference clock cycles";
......@@ -270,9 +274,9 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
};
reg {
name = "Pulse end time / offset (sub-cycle fine part)";
name = "Pulse end time / offset (fine part)";
prefix = "F_END";
description = "Sub-clock cycle part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.";
description = "Sub-clock cycle part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode). ";
field {
name = "Fractional part";
......@@ -289,7 +293,7 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
reg {
name = "Pulse spacing (TAI seconds)";
prefix = "U_DELTA";
description = "TAI seconds between rising edges of subsequent output pulses.";
description = "TAI seconds between the rising edges of subsequent output pulses.";
field {
name = "TAI seconds";
......@@ -303,7 +307,7 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
reg {
name = "Pulse spacing (8 ns cycles)";
prefix = "C_DELTA";
description = "Reference clock cycles between rising edges of subsequent output pulses.";
description = "Reference clock cycles between the rising edges of subsequent output pulses.";
field {
name = "Reference clock cycles";
......@@ -315,9 +319,9 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
};
reg {
name = "Pulse spacing (sub-cycle fine part)";
name = "Pulse spacing (fine part)";
prefix = "F_DELTA";
description = "Sub-cycle part of spacing between rising edges of subsequent output pulses.";
description = "Sub-cycle part of spacing between the rising edges of subsequent output pulses.";
field {
name = "Fractional part";
......@@ -331,11 +335,11 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
reg {
name = "Repeat Count Register";
prefix = "RCR";
description = "Register controlling the number of output pulses to be generated upon reception of a trigger pulse.";
description = "Register controlling the number of output pulses to be generated upon reception of a trigger pulse or triggering the channel in PG mode.";
field {
name = "Repeat Count";
descriptions = "Number of pulses - 1 (0 = 1 pulse, 0xffff = 65536 pulses)";
description = "Equal to desired number of pulses minus 1 (0 = 1 pulse, 0xffff = 65536 pulses)";
prefix = "REP_CNT";
size = 16;
type = SLV;
......@@ -346,8 +350,8 @@ write 0: normal operation. Pulse width/spacing must be at least 200 ns.";
field {
name = "Continuous Waveform Mode";
prefix = "CONT";
description = "write 1: output will produce a contiguous square wave upon receptio of trigger pulse. The generation can be aborted by disabling the channel (DCRx.ENABLE = 0)\
write 0: output will produce trains of REP_CNT+1 pulses.";
description = "write 1: output will produce a contiguous square wave upon reception of trigger pulse. The generation can be aborted only disabling the channel (clearing <code>DCR.ENABLE</code>)\
write 0: each trigger will produce <code>RCR.REP_CNT+1</code> pulses.";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
......
......@@ -3,7 +3,7 @@
---------------------------------------------------------------------------------------
-- File : fd_main_wbgen2_pkg.vhd
-- Author : auto-generated by wbgen2 from fd_main_wishbone_slave.wb
-- Created : Fri Feb 15 12:07:16 2013
-- Created : Thu Jul 4 10:40:48 2013
-- Standard : VHDL'87
---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_main_wishbone_slave.wb
......
......@@ -3,7 +3,7 @@
---------------------------------------------------------------------------------------
-- File : fd_main_wishbone_slave.vhd
-- Author : auto-generated by wbgen2 from fd_main_wishbone_slave.wb
-- Created : Fri Feb 15 12:07:16 2013
-- Created : Thu Jul 4 10:40:48 2013
-- Standard : VHDL'87
---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_main_wishbone_slave.wb
......@@ -1330,17 +1330,17 @@ begin
-- Drive the data output bus
wb_dat_o <= rddata_reg;
-- State of the reset Line of the FMC Card
-- pass-through field: State of the reset Line of the FMC Card in register: Reset Register
-- State of the reset Line of the Mezzanine (EXT_RST_N pin)
-- pass-through field: State of the reset Line of the Mezzanine (EXT_RST_N pin) in register: Reset Register
regs_o.rstr_rst_fmc_o <= wrdata_reg(0);
-- State of the reset of the Fine Delay HDL Core
-- pass-through field: State of the reset of the Fine Delay HDL Core in register: Reset Register
-- State of the reset of the Fine Delay Core
-- pass-through field: State of the reset of the Fine Delay Core in register: Reset Register
regs_o.rstr_rst_core_o <= wrdata_reg(1);
-- Reset magic value
-- pass-through field: Reset magic value in register: Reset Register
regs_o.rstr_lock_o <= wrdata_reg(31 downto 16);
-- Bypass Hardware TDC/Delay Controller
-- synchronizer chain for field : Bypass Hardware TDC/Delay Controller (type RW/RO, clk_sys_i <-> clk_ref_i)
-- Bypass hardware TDC controller
-- synchronizer chain for field : Bypass hardware TDC controller (type RW/RO, clk_sys_i <-> clk_ref_i)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -1371,8 +1371,8 @@ begin
end process;
-- PLL Locked
-- Mezzanine Present
-- PLL lock status
-- Mezzanine present
-- DMTD Clock Status
-- WR Timing Enable
regs_o.tcr_wr_enable_o <= fd_main_tcr_wr_enable_int;
......@@ -1684,8 +1684,8 @@ begin
end process;
-- PPS Calibration output enable
-- synchronizer chain for field : PPS Calibration output enable (type RW/RO, clk_sys_i <-> clk_ref_i)
-- PPS calibration output enable.
-- synchronizer chain for field : PPS calibration output enable. (type RW/RO, clk_sys_i <-> clk_ref_i)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -1726,8 +1726,8 @@ begin
-- DMTD Tag Ready
-- DMTD Tag
-- DMTD Tag Ready
-- ADFSR Value
-- asynchronous std_logic_vector register : ADFSR Value (type RW/RO, clk_ref_i <-> clk_sys_i)
-- ADSFR Value
-- asynchronous std_logic_vector register : ADSFR Value (type RW/RO, clk_ref_i <-> clk_sys_i)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -1746,8 +1746,8 @@ begin
end process;
-- Wraparound Coarse Threshold
-- asynchronous std_logic_vector register : Wraparound Coarse Threshold (type RW/RO, clk_ref_i <-> clk_sys_i)
-- Coarse threshold
-- asynchronous std_logic_vector register : Coarse threshold (type RW/RO, clk_ref_i <-> clk_sys_i)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -1766,8 +1766,8 @@ begin
end process;
-- Wraparound Fine Threshold
-- asynchronous std_logic_vector register : Wraparound Fine Threshold (type RW/RO, clk_ref_i <-> clk_sys_i)
-- Fine threshold
-- asynchronous std_logic_vector register : Fine threshold (type RW/RO, clk_ref_i <-> clk_sys_i)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -1806,8 +1806,8 @@ begin
end process;
-- Number of raw events
-- asynchronous std_logic_vector register : Number of raw events (type RO/WO, clk_ref_i <-> clk_sys_i)
-- Number of raw events.
-- asynchronous std_logic_vector register : Number of raw events. (type RO/WO, clk_ref_i <-> clk_sys_i)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -1907,8 +1907,8 @@ begin
end process;
-- Rate
-- asynchronous std_logic_vector register : Rate (type RO/WO, clk_ref_i <-> clk_sys_i)
-- Frequency
-- asynchronous std_logic_vector register : Frequency (type RO/WO, clk_ref_i <-> clk_sys_i)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -1927,8 +1927,8 @@ begin
end process;
-- Channel Mask
-- asynchronous std_logic_vector register : Channel Mask (type RW/RO, clk_ref_i <-> clk_sys_i)
-- Channel mask
-- asynchronous std_logic_vector register : Channel mask (type RW/RO, clk_ref_i <-> clk_sys_i)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -1962,7 +1962,7 @@ begin
end process;
-- Reset TS Sequence Numbers
-- Reset timestamp sequence number
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -1990,9 +1990,9 @@ begin
regs_o.tsbir_threshold_o <= fd_main_tsbir_threshold_int;
-- Timestamps TAI Seconds (bits 39-32)
-- Timestamps TAI Seconds (bits 31-0)
-- Cycles Value [in 8 ns ticks]
-- Timestamps cycles count (in 8 ns ticks)
-- Channel ID
-- Fine Value [in phase units]
-- Fine Value (in phase units)
-- Timestamp Sequence ID
-- SCL Line out
regs_o.i2cr_scl_out_o <= fd_main_i2cr_scl_out_int;
......
......@@ -48,9 +48,10 @@ peripheral {
reg {
name = "Reset Register";
prefix = "RSTR";
description = "Controls software reset of the Fine Delay core and the mezzanine connected to it. Both reset lines are driven indepentently, there is also an unlock word provided to prevent resetting the board/core by accidentally accessing this register.";
field {
name = "State of the reset Line of the FMC Card";
name = "State of the reset Line of the Mezzanine (EXT_RST_N pin)";
description = "write 0: FMC is held in reset\
write 1: Normal FMC operation";
type = PASS_THROUGH;
......@@ -59,7 +60,7 @@ peripheral {
};
field {
name = "State of the reset of the Fine Delay HDL Core";
name = "State of the reset of the Fine Delay Core";
description = "write 0: FD Core is held in reset\
write 1: Normal FD Core operation";
type = PASS_THROUGH;
......@@ -69,8 +70,8 @@ peripheral {
field {
name = "Reset magic value";
description = "Protection field - the state of RST_FMC/RST_CORE lines will\
only be updated if LOCK is written with 0xdead together with the new state of the reset lines.";
description = "Protection field - the state of FMC and core lines will\
only be updated if <code>LOCK</code> is written with 0xdead together with the new state of the reset lines.";
type = PASS_THROUGH;
prefix = "LOCK";
align = 16;
......@@ -80,12 +81,12 @@ peripheral {
reg {
name = "ID Register";
description = "Magic identification value (for detecting FD cores by the driver). Now the enumeration is handled through SDB, but the register is kept for compatibility with older software.";
description = "Magic identification value (for detecting FD cores by the driver). Even though now enumeration is handled through SDB, the <code>IDR</code> register is kept for compatibility with older software.";
prefix = "IDR";
field {
name = "ID Magic Value";
description = "Always 0xf19ede1a";
description = "Equal to <code>0xf19ede1a</code>";
size = 32;
type = CONSTANT;
value = 0xf19ede1a;
......@@ -100,11 +101,11 @@ peripheral {
field {
clock = "clk_ref_i";
name = "Bypass Hardware TDC/Delay Controller";
name = "Bypass hardware TDC controller";
prefix = "BYPASS";
description = "Descides who is in charge of the TDC and delay lines:\
write 0: TDC and delay lines are controlled by the HDL core (normal operation)\
write 1: TDC and delay lines controlled from the host (calibration and testing)";
write 0: TDC and delay lines are controlled by the HDL core (normal operation mode)\
write 1: TDC and delay lines controlled from the host via <code>TDR</code> and <code>TDCSR</code> registers (calibration and testing mode)";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
......@@ -116,7 +117,8 @@ peripheral {
name = "Enable trigger input";
description = "write 1: trigger input is enabled\
write 0: trigger input is disabled.\
Note: state of INPUT_EN is relevant only in normal operation mode (i.e. when GCR.BYPASS == 0).";
<b>Note 1:</b> state of <code>INPUT_EN</code> is relevant only in normal operation mode (i.e. when <code>GCR.BYPASS</code> == 0). \
<b>Note 2:</b> enabling the input in <code>INPUT_EN</code> does not mean it will be automatically enabled in the ACAM TDC - one must pre-program its registers first.";
prefix = "INPUT_EN";
type = BIT;
access_bus = READ_WRITE;
......@@ -125,9 +127,9 @@ peripheral {
field {
name = "PLL Locked";
description = "read 1: AD9516 and internal DDR PLLs locked\
read 0: PLL(s) not locked";
name = "PLL lock status";
description = "read 1: AD9516 and internal DDR PLLs are locked\
read 0: AD9516 or internal DDR PLL not (yet) locked";
prefix = "DDR_LOCKED";
type = BIT;
access_bus = READ_ONLY;
......@@ -135,9 +137,10 @@ peripheral {
};
field {
name = "Mezzanine Present";
description = "read 1: FMC card is present (PRSNT_L == 0)\
read 0: no FMC card in the slot (PRSNT_L == 1)";
name = "Mezzanine present";
description = "Mirrors the state of the FMC's <code>PRSNT_L</code> hardware pin: \
read 1: FMC card is present (<code>PRSNT_L == 0</code>)\
read 0: no FMC card in the slot (<code>PRSNT_L == 1</code>)";
prefix = "FMC_PRESENT";
type = BIT;
access_bus = READ_ONLY;
......@@ -150,17 +153,14 @@ peripheral {
description = "Controls time setting and White Rabbit/local time base selection.";
prefix = "TCR";
field {
ack_read = "tcr_rd_ack_o";
name = "DMTD Clock Status";
prefix = "DMTD_STAT";
description = "Status of the DMTD (helper) clock, used for calibration purposes.\
read 0: DMTD clock is not available or has been lost since last read operation of WR_TCR register\
read 1: DMTD clock is OK and has been like this since previous read of WR_TCR register";
description = "Status of the DMTD (helper) clock, used for DDMTD calibration purposes by the test suite.\
read 0: DMTD clock is not available or has been lost since last read operation of <code>TCR</code> register\
read 1: DMTD clock has been OK since previous read of <code>TCR</code> register";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
......@@ -170,10 +170,9 @@ peripheral {
name = "WR Timing Enable";
prefix = "WR_ENABLE";
description = "Enables/disables WR synchronization.\
write 1: WR synchronization is enabled. Poll the WR_LOCKED bit to check if the WR Core is still locked.\
write 1: WR synchronization is enabled. Poll the <code>TCR.WR_LOCKED</code> bit to check if the WR Core is still locked.\
write 0: WR synchronization is disabled, the card is in free running mode.\
Note: enabling WR synchronization will cause a jump in the time base counter of the core. This may lead to lost pulses, therefore it is strongly\
recommended do disable the trigger input before entering WR mode. When WR mode is disabled, the core will continue with the last known WR time, counted with the local oscillator (no jump).";
<b>Note:</b> enabling WR synchronization will cause a jump in the time base counter of the core. This may lead to lost pulses, therefore it is strongly recommended do disable the inputs/outputs before entering WR mode. When WR mode is disabled, the core will continue counting without a jump.";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
......@@ -184,8 +183,8 @@ peripheral {
name = "WR Timing Locked";
prefix = "WR_LOCKED";
description = "Status of WR synchronization. \
read 0: local oscillator/time base is not locked to WR (or has lost its lock since last read of WR_TCR register)\
read 1: local oscillator is syntonized to WR and local timebase is aligned with WR time.";
read 0: local oscillator/time base is not locked to WR (or a transient delock event occured since last read of <code>TCR</code> register).\
read 1: local oscillator is syntonized to WR and local timebase is aligned with WR time. ";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
......@@ -194,8 +193,7 @@ peripheral {
field {
name = "WR Core Present";
prefix = "WR_PRESENT";
description = "Indicates whether we have a WR Core associated with this Fine Delay Core. Reflects the state\
of 'g_with_wr_core' generic HDL parameter. \
description = "Indicates whether we have a WR Core associated with this Fine Delay Core. Reflects the state of the <code>g_with_wr_core</code> generic HDL parameter. \
read 0: No WR Core present. Enabling WR will have no effect.\
read 1: WR Core available.";
type = BIT;
......@@ -206,8 +204,10 @@ peripheral {
field {
name = "WR Core Time Ready";
prefix = "WR_READY";
description = "read 0: WR Core is not synchronied yet: there is no link, no PTP master in the network or synchronization is in progress.\
read 1: WR Core time is ready. User may enable WR reference by setting TCR.WR_ENABLE bit.";
description = "Indicates the status of synchronization of the associated WR core. Valid only if <code>TCR.WR_PRESENT</code> bit is set.\
read 0: WR Core is not synchronzied yet: there is no link, no PTP master in the network or synchronization is in progress.\
read 1: WR Core time is ready. User may enable WR reference by setting <code>TCR.WR_ENABLE</code> bit.\
<b>Note:</b> it is allowed to enable the WR mode even if <code>TCR.WR_READY</code> or <code>TCR.WR_LINK</code> bits are not set. Time base will be synced to WR as soon as the core gets correct PTP time from the master.";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
......@@ -216,7 +216,8 @@ peripheral {
field {
name = "WR Core Link Up";
prefix = "WR_LINK";
description = "read 0: Ethernet link is down.\
description = "Reflects the state of the WR Core's Ethernet link. Provided as an additional diagnostic feature.\
read 0: Ethernet link is down.\
read 1: Ethernet link is up.";
type = BIT;
access_bus = READ_ONLY;
......@@ -226,8 +227,8 @@ peripheral {
field {
name = "Capture Current Time";
prefix = "CAP_TIME";
description = "Controls the readout of <code>TM_xxx</code> registers.\
write 1: transfers the current value of seconds/cycles counters to <code>TM_xxx</code> registers.\
description = "Performs an atomic read of the core's current time.\
write 1: transfers the current value of seconds/cycles counters to <code>TM_</code> registers.\
write 0: no effect.";
type = MONOSTABLE;
clock = "clk_ref_i";
......@@ -236,11 +237,11 @@ peripheral {
field {
name = "Set Current Time";
prefix = "SET_TIME";
description = "Controls transfer of <code>TM_x</code> registers to the internal time counter.\
write 1: transfers the current value of <code>TM_x</code> to the timebase counters.\
description = "Sets internal time base counter to a given time in an atomic way:\
write 1: transfers the current value of <code>TM_</code> registers to the timebase counter.\
write 0: no effect.\
<b>Note:</b> Setting time also resynchronizes internal timebase counters, therefore \
time registers must be set after every reset/power cycle. ";
<b>Note 1:</b> Internal time counters must be always initialized to a known value (e.g. zeroes), after every reset/power cycle.\
<b>Note 2:</b> Writing to <code>TCR.SET_TIME</code> while WR mode is active is forbidden. If you do so, prepare for unforeseen consequences.";
type = MONOSTABLE;
clock = "clk_ref_i";
};
......@@ -250,8 +251,9 @@ peripheral {
reg {
name = "Time Register - TAI seconds (MSB)";
prefix = "TM_SECH";
description = "read: value of internal seconds counter taken during write to <code>TCR.CAP_TIME</code> bit.\
write: new value of time (acked by writing <code>TCR.SET_TIME</code> bit)";
description = "Seconds counter, most significant part\
read: value of internal seconds counter taken upon last write to <code>TCR.CAP_TIME</code> bit.\
write: new value of seconds counter (loaded to the time base counter by writing <code>TCR.SET_TIME</code> bit)";
field {
name = "TAI seconds (MSB)";
size = 8;
......@@ -266,8 +268,9 @@ peripheral {
reg {
name = "Time Register - TAI seconds (LSB)";
prefix = "TM_SECL";
description = "read: value of internal seconds counter taken during write to <code>TCR.CAP_TIME</code> bit.\
write: new value of time (acked by writing <code>TCR.SET_TIME</code> bit)";
description = "Seconds counter, least significant part\
read: value of internal seconds counter taken upon last write to <code>TCR.CAP_TIME</code> bit.\
write: new value of seconds counter (loaded to the time base counter by writing <code>TCR.SET_TIME</code> bit)";
field {
name = "TAI seconds (LSB)";
size = 32;
......@@ -282,8 +285,11 @@ peripheral {
reg {
name = "Time Register - sub-second 125 MHz clock cycles ";
prefix = "TM_CYCLES";
description = "read: value of internal 125 MHz cycles counter taken during write to <code>TCR.CAP_TIME</code> bit.\
write: new value of time (acked by writing <code>TCR.SET_TIME</code> bit)";
description = "Number of 125 MHz reference clock cycles from the beginning of the current second. \
read: value of cycles counter taken upon last write to <code>TCR.CAP_TIME</code> bit.\
write: new value of cycles counter (loaded to the time base counter by writing <code>TCR.SET_TIME</code> bit)";
field {
name = "Reference clock cycles (0...124999999)";
size = 28;
......@@ -296,8 +302,8 @@ peripheral {
};
reg {
name = "Host-driven TDC Data Register";
description = "28-bit data value read from / to be written to the ACAM. Used when bypass (host-driven) mode is active.";
name = "Host-driven TDC Data Register.";
description = "Holds the 28-bit data word read from/to be written to the ACAM TDC, when the core is configured in bypass mode (<code>GCR.BYPASS == 1</code>).";
prefix = "TDR";
field {
......@@ -319,8 +325,9 @@ peripheral {
field {
name = "Write to TDC";
description = "write 1: write the data word programmed in <code>TDR</code> TDR register to the TDC. The TDC address must be set via the SPI I/O expander.\
write 0: no effect.";
description = "Writes the data word from <code>TDR</code> register to the ACAM TDC.\
write 1: write the data word programmed in <code>TDR</code> register to the TDC. The TDC address must be set via the SPI I/O expander.\
write 0: no effect.";
prefix = "WRITE";
clock = "clk_ref_i";
type = MONOSTABLE;
......@@ -328,8 +335,9 @@ peripheral {
field {
name = "Read from TDC";
description = "write 1: read a data word from the TDC. The read word will be put in the <code>TDR</code> register. The TDC address must be set via the SPI I/O expander.\
write 0: no effect.";
description = "Reads a data word from the TDC and puts it in <code>TDR</code> register.\
write 1: read a data word from the TDC. The read word will be put in <code>TDR</code> register. The TDC address must be set via the SPI I/O expander.\
write 0: no effect.";
prefix = "READ";
clock = "clk_ref_i";
type = MONOSTABLE;
......@@ -338,7 +346,9 @@ peripheral {
field {
clock = "clk_ref_i";
name = "Empty flag";
description = "Raw status of the EMPTY pin of the TDC. When zero, the internal TDC FIFO is empty (no timestamps to read)";
description = "Raw status of the <code>EF</code> (FIFO empty) pin of the TDC.\
read 0: there is one (or more) pending timestamp(s) in the ACAM's internal FIFO.\
read 1: the internal TDC FIFO is empty (no timestamps to read).";
prefix = "EMPTY";
type = BIT;
access_bus = READ_ONLY;
......@@ -349,7 +359,7 @@ peripheral {
clock = "clk_ref_i";
name = "Stop enable";
description = "Controls the <code>StopDis</code> input of the TDC.\
write 1: disables the TDC stop input.\
write 1: enables the TDC stop input.\
write 0: no effect.";
prefix = "STOP_EN";
type = MONOSTABLE;
......@@ -379,7 +389,7 @@ peripheral {
clock = "clk_ref_i";
name = "Stop disable";
description = "Controls the <code>StopDis</code> input of the TDC.\
write 1: enables the TDC stop input.\
write 1: disables the TDC stop input.\
write 0: no effect.";
prefix = "STOP_DIS";
type = MONOSTABLE;
......@@ -389,7 +399,7 @@ peripheral {
clock = "clk_ref_i";
name = "Pulse <code>Alutrigger</code> line";
description = "Controls the TDC's <code>Alutrigger</code> line.\ Depending on the TDC's configuration, it can be used as a reset/FIFO clear/trigger signal.\
write 1: generates a pulse the <code>Alutrigger</code> line\
write 1: generates a pulse ACAM's <code>Alutrigger</code> line\
write 0: no effect.";
prefix = "ALUTRIG";
type = MONOSTABLE;
......@@ -399,22 +409,26 @@ peripheral {
reg {
prefix = "CALR";
name = "Calibration register";
description = "Controls calibration-related activities";
description = "Controls calibration logic.";
field {
clock = "clk_ref_i";
name = "Generate calibration pulses (type 1 calibration)";
description = "write 1: Generates a single calibration pulse on the TDC start input and the channels selected in the PSEL field.\
write 0: no effect.";
description = "Triggers generation of a calibration pulse on selected channels. Used to determine the exact 4/8ns setting tap of the fine delay line.\
write 1: immediately generates a single calibration pulse on the TDC start input and the output channels selected in the PSEL field.\
write 0: no effect.\
<b>Note:</b> In order for the pulse to be tagged by the TDC, it must be driven in the BYPASS mode and properly configured (I-mode, see driver/test program).";
prefix = "CAL_PULSE";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "PPS Calibration output enable";
description = "write 1: Feeds TDC input with internally generated PPS signal.\
write 0: PPS generation disabled.";
name = "PPS calibration output enable.";
description = "Drives the TDC stop input with a PPS signal synchronous to the FD core's timebase:\
write 1: feeds TDC input with internally generated PPS signal.\
write 0: PPS generation disabled.\
<b>Note:</b> Input multiplexer must be configured to drive the TDC trigger from the FPGA calibration output instead of the trigger input.";
prefix = "CAL_PPS";
type = BIT;
access_dev = READ_ONLY;
......@@ -423,8 +437,10 @@ peripheral {
field {
name = "Produce DDMTD calibration pattern (type 2 calibration)";
description = "write 1: Enables DMTD test pattern generation on Delay chain input and output selected in PSEL.\
write 0: DMTD pattern generation disabled.";
description = "Controls DDMTD test pattern generation:\
write 1: enables DMTD test pattern on the TDC input and DDMTD sampling clock for the calibration flip-flops.\
write 0: DMTD pattern generation disabled.\
<b>Note:</b> Input multiplexer must be configured to drive the TDC trigger from the FPGA calibration output instead of the trigger input.";
prefix = "CAL_DMTD";
type = BIT;
access_dev = READ_ONLY;
......@@ -434,8 +450,8 @@ peripheral {
field {
clock = "clk_ref_i";
name = "Calibration pulse output select/mask";
description = "1: enable generation of calibration pulses on the output corresponding to the written bit\
0: disable generation on the corresponding output";
description = "1: enable generation of type 1 calibration pulses (<code>CALR.CAL_PULSE</code>) on the output corresponding to the written bit\
0: disable pulse generation for the corresponding output ";
prefix = "PSEL";
type = SLV;
size = 4;
......@@ -448,10 +464,13 @@ peripheral {
prefix = "DMTR_IN";
name = "DMTD Input Tag Register";
description = "Provides the DDMTD tag value for the input channel (type 2 calibration).";
field {
ack_read = "dmtr_in_rd_ack_o";
name = "DMTD Tag";
description = "The tag value.";
prefix = "TAG";
size = 31;
type = SLV;
......@@ -461,6 +480,10 @@ peripheral {
field {
name = "DMTD Tag Ready";
description = "Tag ready flag (clear-on-read):\
1: a new DDMTD tag is available.\
0: tag not ready yet.";
prefix = "RDY";
type = BIT;
access_bus = READ_ONLY;
......@@ -471,11 +494,14 @@ peripheral {
reg {
prefix = "DMTR_OUT";
name = "DMTD Output Tag Register";
description = "Provides the DDMTD tag value for a selected output channel (type 2 calibration).";
field {
ack_read = "dmtr_out_rd_ack_o";
name = "DMTD Tag";
description = "The tag value.";
prefix = "TAG";
size = 31;
type = SLV;
......@@ -485,6 +511,11 @@ peripheral {
field {
name = "DMTD Tag Ready";
description = "Tag ready flag (clear-on-read):\
1: a new DDMTD tag is available.\
0: tag not ready yet.";
prefix = "RDY";
type = BIT;
access_bus = READ_ONLY;
......@@ -494,11 +525,12 @@ peripheral {
reg {
prefix = "ADSFR";
name = "Acam to Delay line fractional part Scale Factor Register";
description = "Coefficient used to re-scale the fine part of the timestamp produced by Acam. Contains the number of Delay line bins per one Acam bin. Its value can be calculated with the following formula: <code>ADFSR = 2097.2 * ACAM bin size [ps]</code>";
name = "Acam Scaling Factor Register";
description = "Scaling factor between the FD's internal time scale and the ACAM's format. Used only in normal operating mode (<code>GCR.BYPASS == 0</code>).\
Formula (for G-Mode): <code>ADSFR = round(2097.152 * ACAM_bin_size [ps])</code>";
field {
name = "ADFSR Value";
name = "ADSFR Value";
size = 18;
type = SLV;
clock = "clk_ref_i";
......@@ -510,10 +542,10 @@ peripheral {
reg {
prefix = "ATMCR";
name = "Acam Timestamp Merging Control Register";
description = "Register controlling the merging of the fine timestamps prouced by Acam with the coarse timestamps gatheret by the FPGA. These values are hardware-specific. The register should be loaded with the paramete 'ATMCR' from the mezzanine's configuration EEPROM";
description = "Controls merging of fine timestamps prouced by Acam with coarse timestamps obtained by the FPGA. See developers' manual for explanation. ";
field {
name = "Wraparound Coarse Threshold";
name = "Coarse threshold";
prefix = "C_THR";
size = 8;
type = SLV;
......@@ -523,7 +555,7 @@ peripheral {
};
field {
name = "Wraparound Fine Threshold";
name = "Fine threshold";
prefix = "F_THR";
size = 23;
type = SLV;
......@@ -536,7 +568,7 @@ peripheral {
reg {
prefix = "ASOR";
name = "Acam Start Offset Register";
description = "";
description = "ACAM timestamp start offset. Value that gets subtracted from ACAM's timestamps (due to ACAM's ALU architecture that does not support negative numbers). See developers' manual for explanation.";
field {
name = "Start Offset";
......@@ -550,12 +582,13 @@ peripheral {
};
reg {
name = "Raw Input Events Counter Register ";
name = "Raw Input Events Counter Register";
description = "TDC debugging & statistics register";
prefix = "IECRAW";
field {
name = "Number of raw events";
description = "Number of all input pulses detected by the timestamper";
name = "Number of raw events.";
description = "Number of all input pulses detected by the timestamper.";
type = SLV;
size = 32;
clock = "clk_ref_i";
......@@ -566,12 +599,13 @@ peripheral {
};
reg {
name = "Tagged Input Events Counter Register ";
name = "Tagged Input Events Counter Register";
description = "TDC debugging & statistics register";
prefix = "IECTAG";
field {
name = "Number of tagged events";
description = "Number of all input pulses which passed the width checks and have produced valid timestamps.";
description = "Number of all input pulses which passed width/glitch checks and were correctly timestamped.";
type = SLV;
size = 32;
clock = "clk_ref_i";
......@@ -583,11 +617,12 @@ peripheral {
reg {
name = "Input Event Processing Delay Register";
prefix = "IEPD";
description = "TDC debugging & statistics register";
field {
name = "Reset stats";
prefix = "RST_STAT";
description = "Write 1: resets the delay/pulse count counters (IECRAW, IECTAG and IEPD_WDELAY)\
description = "Write 1: resets the delay/pulse count counters (<code>IECRAW</code>, <code>IECTAG</code> and <code>IEPD.PDELAY</code>)\
write 0: no effect";
type = MONOSTABLE;
clock = "clk_ref_i";
......@@ -595,7 +630,7 @@ peripheral {
field {
name = "Processing delay";
description = "Worst-case delay between the input event and the generation of its timestamp. Expressed as a number of 125 MHz clock cycles.";
description = "Worst-case delay between an input event and its timestamp being available. Expressed as a number of 125 MHz clock cycles.";
prefix = "PDELAY";
type = SLV;
size = 8;
......@@ -608,7 +643,8 @@ peripheral {
reg {
name = "SPI Control Register";
prefix = "SCR";
description = "Single control register for the SPI Controller, allowing for single-cycle (non-waiting) updates of the DAC, GPIO & PLL.";
description = "Single control register for the SPI Controller, allowing for atomic updates of the DAC, GPIO and PLL.";
field {
name = "Data";
prefix = "DATA";
......@@ -624,7 +660,8 @@ peripheral {
name = "Select DAC";
prefix = "SEL_DAC";
type = BIT;
description = "write 1: selects the DAC as the target peripheral of the transfer";
description = "write 1: selects the DAC as the target peripheral of the transfer\
write 0: no effect";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
......@@ -632,7 +669,8 @@ peripheral {
name = "Select PLL";
prefix = "SEL_PLL";
type = BIT;
description = "write 1: selects the AD9516 PLL as the target peripheral of the transfer";
description = "write 1: selects the AD9516 PLL as the target peripheral of the transfer\
write 0: no effect";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
......@@ -640,7 +678,8 @@ peripheral {
name = "Select GPIO";
prefix = "SEL_GPIO";
type = BIT;
description = "write 1: selects the MCP23S17 GPIO as the target peripheral of the transfer";
description = "write 1: selects the MCP23S17 GPIO as the target peripheral of the transfer\
write 0: no effect";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
......@@ -650,15 +689,15 @@ peripheral {
prefix = "READY";
type = BIT;
description = "read 0: SPI controller is busy performing a transfer\
read 1: SPI controller has finished its previous transfer. Read-back data is available in the DATA field";
read 1: SPI controller has finished its previous transfer. Read-back data is available in <code>SCR.DATA</code>";
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "Clock Polarity";
description = "0: SPI clock is not inverted\
1: SPI clock is inverted";
description = "0: SPI clock is not inverted (data valid on rising edge)\
1: SPI clock is inverted (data valid on falling edge)";
prefix = "CPOL";
type = BIT;
access_bus = READ_WRITE;
......@@ -669,7 +708,7 @@ peripheral {
name = "Transfer Start";
prefix = "START";
type = MONOSTABLE;
description = "write 1: Starts transfer to the selected peripheral\
description = "write 1: starts SPI transfer from/to the selected peripheral\
write 0: no effect";
};
};
......@@ -678,11 +717,12 @@ peripheral {
reg {
name = "Reference Clock Rate Register";
prefix = "RCRR";
description = "Provides the momentary value of the internal clock rate counter. Can be used in conjunction with the DAC to roughly syntonize the card's reference clock with a clock coming from an external master installed in the same host (e.g. a CTRV/CTRP) in a software-only way.";
description = "Provides the momentary value of the internal clock rate counter. Can be used in conjunction with the DAC to roughly syntonize the card's reference clock with a clock coming from an external master installed in the same host (e.g. a CTRV/CTRP) in a software-only way or to measure tuning range of the local VCXO.";
field {
name = "Rate";
name = "Frequency";
description = "Reference clock frequency, in Hz";
type = SLV;
size = 32;
clock = "clk_ref_i";
......@@ -695,13 +735,14 @@ peripheral {
reg {
name = "Timestamp Buffer Control Register";
prefix = "TSBCR";
description = "Controls timestamp readout from the core's circular buffer";
field {
name = "Channel Mask";
name = "Channel mask";
prefix = "CHAN_MASK";
description = "Selects which channels' time tags shall be written to the buffer. \
bit 0 = TDC input, bits 1..4 = Delay outputs";
bit <code>0</code>: TDC input\
bits <code>1..4</code>: = Delay outputs";
type = SLV;
size = 5;
......@@ -713,6 +754,9 @@ peripheral {
field {
name = "Buffer enable";
prefix = "ENABLE";
description = "Enables/disables timestamp readout:\
1: timestamp buffer is enabled. Readout is possible.\
0: timestamp buffer is disabled. Timestamps are processed (if set in delay mode), but discarded for readout.";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
......@@ -720,12 +764,16 @@ peripheral {
field {
name = "Buffer purge";
description = "write 1: clear timestamp buffer.\
write 0: no effect";
prefix = "PURGE";
type = MONOSTABLE;
};
field {
name = "Reset TS Sequence Numbers";
name = "Reset timestamp sequence number";
description = "write 1: reset timestamp sequence number counter\
write 0: no effect";
prefix = "RST_SEQ";
clock = "clk_ref_i";
type = MONOSTABLE;
......@@ -734,6 +782,7 @@ peripheral {
field {
name = "Buffer full";
prefix = "FULL";
description = "read 1: buffer is full. Oldest timestamps (at the end of the buffer) are discarded as the new ones are coming.";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
......@@ -742,6 +791,8 @@ peripheral {
field {
name = "Buffer empty";
prefix = "EMPTY";
description = "read 1: buffer is empty.\
read 0: there is some data in the buffer.";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
......@@ -751,6 +802,7 @@ peripheral {
field {
name = "Buffer entries count";
prefix = "COUNT";
description = "Number of timestamps currently stored in the readout buffer";
type = SLV;
size = 12;
access_bus = READ_ONLY;
......@@ -760,6 +812,9 @@ peripheral {
field {
name = "RAW readout mode enable";
prefix = "RAW";
description = "Enables raw timestamp readout mode (i.e. bypassing postprocessing). Used only for debugging purposes.\
write 1: enable raw mode\
write 0: disable raw mode (normal operation)";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
......@@ -770,9 +825,11 @@ peripheral {
name = "Timestamp Buffer Interrupt Register";
prefix = "TSBIR";
description = "Controls the behaviour of the core's readout interrupt (coalescing).";
field {
name = "IRQ timeout [milliseconds]";
description = "The IRQ line will be asserted after TIMEOUT milliseconds even if the amount of data in the buffer is below the THRESHOLD.";
description = "The IRQ line will be asserted after <code>TSBIR.TIMEOUT</code> milliseconds even if the amount of data in the buffer is below <code>TSBIR.THRESHOLD</code>.";
prefix = "TIMEOUT";
type = SLV;
size = 10;
......@@ -782,7 +839,7 @@ peripheral {
field {
name = "Interrupt threshold";
description = "Number of samples (timestamps) in the buffer, which will immediately trigger an interrupt.";
description = "Minimum number of samples (timestamps) in the buffer that immediately triggers an interrupt.";
prefix = "THRESHOLD";
type = SLV;
size = 12;
......@@ -823,7 +880,7 @@ peripheral {
prefix = "TSBR_CYCLES";
field {
name = "Cycles Value [in 8 ns ticks]";
name = "Timestamps cycles count (in 8 ns ticks)";
size = 28;
type = SLV;
access_bus = READ_ONLY;
......@@ -832,14 +889,15 @@ peripheral {
};
reg {
name = "Timestamp Buffer Readout Fine / Channel / Seq ID Register";
name = "Timestamp Buffer Readout Fine/Channel/Sequence ID Register";
prefix = "TSBR_FID";
field {
name = "Channel ID";
prefix = "CHANNEL";
description = "ID of the originating channel):\
0 = TDC input, 1..4 = delay outputs";
description = "ID of the originating channel:\
<code>0</code>: TDC input\
<code>1..4</code>: outputs 1..4";
size = 4;
type = SLV;
access_bus = READ_ONLY;
......@@ -847,7 +905,7 @@ peripheral {
};
field {
name = "Fine Value [in phase units]";
name = "Fine Value (in phase units)";
prefix = "FINE";
size = 12;
type = SLV;
......@@ -868,11 +926,16 @@ peripheral {
};
reg {
name = "I2C bitbanged IO register";
name = "I2C Bit-banged IO Register";
description = "Controls state of the mezzanine's I2C bus lines by means of bitbanging";
prefix = "I2CR";
field {
name = "SCL Line out";
prefix = "SCL_OUT";
description = "write 0: drive SCL to 0 \
write 1: drive SCL to weak 1 (pullup)";
type = BIT;
reset_value = 1;
access_bus = READ_WRITE;
......@@ -881,21 +944,29 @@ peripheral {
field {
name = "SDA Line out";
prefix = "SDA_OUT";
description = "write 0: drive SDA to 0 \
write 1: drive SDA to weak 1 (pullup)";
type = BIT;
reset_value = 1;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
field {
name = "SCL Line in";
prefix = "SCL_IN";
description = "State of the SCL line.";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "SDA Line in";
prefix = "SDA_IN";
description = "State of the SDA line.";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
......@@ -904,11 +975,12 @@ peripheral {
reg {
name = "Test/Debug register 1";
name = "Test/Debug Register 1";
prefix = "TDER1";
field {
name = "VCXO Frequency";
description = "Mezzanine VCXO frequency in Hz, measured using the system clock as a reference. Used during factory test only.";
prefix = "VCXO_FREQ";
size = 32;
type = SLV;
......@@ -918,11 +990,12 @@ peripheral {
};
reg {
name = "Test/Debug register 1";
name = "Test/Debug Register 1";
prefix = "TDER2";
field {
name = "Peltier PWM drive";
description = "Peltier module PWM drive. Lab-only feature for measuring temperature characteristics of the board.";
prefix = "PELT_DRIVE";
size = 32;
type = SLV;
......@@ -937,6 +1010,7 @@ peripheral {
field {
name = "Debug value";
description = "Additional register for holding timestamp debug data (used only in raw readout mode). Content format is not specified.";
size = 32;
type = SLV;
access_bus = READ_ONLY;
......@@ -950,7 +1024,7 @@ peripheral {
field {
name = "Advance buffer readout";
descriptor = "write 1: transfer the latest sample from the ring buffer to TSBR_SEC/CYCLES/FID registers,\
descriptor = "write 1: transfer the latest sample from the ring buffer to <code>TSBR_SECH</code>, <code>TSBR_SECL</code>, <code>TSBR_CYCLES</code> and <code>TSBR_FID</code> registers,\
write 0: no effect";
type = MONOSTABLE;
prefix = "ADV";
......@@ -959,19 +1033,22 @@ peripheral {
irq {
name = "TS Buffer not empty.";
name = "Timestamp Buffer interrupt.";
description = "Triggers when there are timestamps in the readout buffer";
trigger = LEVEL_1;
prefix = "ts_buf_notempty";
};
irq {
name = "DMTD Softpll interrupt";
name = "DMTD SoftPLL interrupt";
description = "Unused in current design";
trigger = EDGE_RISING;
prefix = "dmtd_spll";
};
irq {
name = "Sync Status Changed";
description = "Triggers when the synchronization source status has changed (usually: loss/acquisition of WR clock)";
trigger = EDGE_RISING;
prefix = "sync_status";
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment