Commit 14302385 authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

doc/design-notes: version 1.0 candidate (check for errors)

parent 4d14ac35
......@@ -6,7 +6,7 @@
#################
# There is not basenames here, all *.in are considered input
INPUT = $(wildcard *.in)
INPUT = fine-delay.in
TEXI = $(INPUT:.in=.texi)
INFO = $(INPUT:.in=.info)
......@@ -14,7 +14,7 @@ HTML = $(INPUT:.in=.html)
TXT = $(INPUT:.in=.txt)
PDF = $(INPUT:.in=.pdf)
ALL = $(TXT) $(PDF)
ALL = $(PDF)
MAKEINFO ?= makeinfo
......
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 191 627 450 750
%%LanguageLevel: 1
%%Creator: CorelDRAW 12
%%Title: calib_why.eps
%%CreationDate: Tue Jul 02 14:43:21 2013
%%DocumentProcessColors: Magenta Yellow Black
%%DocumentSuppliedResources: (atend)
%%EndComments
%%BeginProlog
/AutoFlatness false def
/AutoSteps 0 def
/CMYKMarks true def
/UseLevel 1 def
%Build: CorelDRAW Version 12.154
%Color profile: Generic offset separations profile
/CorelIsEPS true def
%%BeginResource: procset wCorel12Dict 12.0 0
/wCorel12Dict 300 dict def wCorel12Dict begin
% Copyright (c)1992-2003 Corel Corporation
% All rights reserved. v12 r0.0
/bd{bind def}bind def/ld{load def}bd/xd{exch def}bd/_ null def/rp{{pop}repeat}
bd/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld/@np/newpath ld/Tl/translate ld
/$sv 0 def/@sv{/$sv save def}bd/@rs{$sv restore}bd/spg/showpage ld/showpage{}
bd currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd/$dsf xd/$sdf false def/$SDF
false def/$Scra 0 def/SetScr/setscreen ld/@ss{2 index 0 eq{$dsf 3 1 roll 4 -1
roll pop}if exch $Scra add exch load SetScr}bd/SepMode_5 where{pop}{/SepMode_5
0 def}ifelse/CorelIsSeps where{pop}{/CorelIsSeps false def}ifelse
/CorelIsInRIPSeps where{pop}{/CorelIsInRIPSeps false def}ifelse/CorelIsEPS
where{pop}{/CorelIsEPS false def}ifelse/CurrentInkName_5 where{pop}
{/CurrentInkName_5(Composite)def}ifelse/$ink_5 where{pop}{/$ink_5 -1 def}
ifelse/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def/$n _ def/$o 0 def/$fil 0
def/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def/$N _ def/$O 0 def/$PF false
def/s1c 0 def/s1m 0 def/s1y 0 def/s1k 0 def/s1t 0 def/s1n _ def/$bkg false def
/SK 0 def/SM 0 def/SY 0 def/SC 0 def/$op false def matrix currentmatrix/$ctm xd
/$ptm matrix def/$ttm matrix def/$stm matrix def/$ffpnt true def
/CorelDrawReencodeVect[16#0/grave 16#5/breve 16#6/dotaccent 16#8/ring
16#A/hungarumlaut 16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle
16#60/grave 16#7C/bar 16#80/Euro
16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
16#98/tilde/trademark/scaron/guilsinglright/oe 16#9F/Ydieresis
16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
/L2?/languagelevel where{pop languagelevel 2 ge}{false}ifelse def/Comp?{
/LumSepsDict where{pop false}{/AldusSepsDict where{pop false}{1 0 0 0 @gs
setcmykcolor currentcmykcolor @gr add add add 0 ne 0 1 0 0 @gs setcmykcolor
currentcmykcolor @gr add add add 0 ne 0 0 1 0 @gs setcmykcolor currentcmykcolor
@gr add add add 0 ne 0 0 0 1 @gs setcmykcolor currentcmykcolor @gr add add add
0 ne and and and}ifelse}ifelse}bd/@PL{/LV where{pop LV 2 ge L2? not and{@np
/Courier findfont 12 scalefont setfont 72 144 m
(The PostScript level set in the Corel application is higher than)show 72 132 m
(the PostScript level of this device. Change the PS Level in the Corel)show 72
120 m(application to Level 1 by selecting the PostScript tab in the print)show
72 108 m(dialog, and selecting Level 1 from the Compatibility drop down list.)
show flush spg quit}if}if}bd/@BeginSysCorelDict{systemdict/Corel30Dict known
{systemdict/Corel30Dict get exec}if systemdict/CorelLexDict known{1 systemdict
/CorelLexDict get exec}if}bd/@EndSysCorelDict{systemdict/Corel30Dict known
{end}if/EndCorelLexDict where{pop EndCorelLexDict}if}bd AutoFlatness{/@ifl{dup
currentflat exch sub 10 gt{
([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n)print flush
@np exit}{currentflat 2 add setflat}ifelse}bd/@fill/fill ld/fill{currentflat{
{@fill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@eofill/eofill ld/eofill
{currentflat{{@eofill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@clip
/clip ld/clip{currentflat{{@clip}stopped{@ifl}{exit}ifelse}bind loop setflat}
bd/@eoclip/eoclip ld/eoclip{currentflat{{@eoclip}stopped{@ifl}{exit}ifelse}
bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}stopped
{@ifl}{exit}ifelse}bind loop setflat}bd}if L2?{/@ssa{true setstrokeadjust}bd}{
/@ssa{}bd}ifelse/d/setdash ld/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit
ld/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd/W/eoclip ld/c/curveto ld/C/c ld/l
/lineto ld/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld/N/newpath ld/P{11 rp}
bd/u{}bd/U{}bd/A{pop}bd/q/@gs ld/Q/@gr ld/&{}bd/@j{@sv @np}bd/@J{@rs}bd/g{1
exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def}bd/G{1
sub neg/$K xd _ 1 0 0 0/$C xd/$M xd/$Y xd/$T xd/$N xd}bd/k{1 index type
/stringtype eq{/$t xd/$n xd}{/$t 0 def/$n _ def}ifelse/$k xd/$y xd/$m xd/$c xd
/$fil 0 def}bd/K{1 index type/stringtype eq{/$T xd/$N xd}{/$T 0 def/$N _ def}
ifelse/$K xd/$Y xd/$M xd/$C xd}bd/x/k ld/X/K ld/sf{1 index type/stringtype eq{
/s1t xd/s1n xd}{/s1t 0 def/s1n _ def}ifelse/s1k xd/s1y xd/s1m xd/s1c xd}bd/i{
dup 0 ne{setflat}{pop}ifelse}bd/v{4 -2 roll 2 copy 6 -2 roll c}bd/V/v ld/y{2
copy c}bd/Y/y ld/@w{matrix rotate/$ptm xd matrix scale $ptm dup concatmatrix
/$ptm xd 1 eq{$ptm exch dup concatmatrix/$ptm xd}if 1 w}bd/@g{1 eq dup/$sdf xd
{/$scp xd/$sca xd/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd/$SCA xd/$SCF xd}
if}bd/@D{2 index 0 eq{$dsf 3 1 roll 4 -1 roll pop}if 3 copy exch $Scra add exch
load SetScr/$dsp xd/$dsa xd/$dsf xd}bd/$ngx{$SDF{$SCF SepMode_5 0 eq{$SCA}
{$dsa}ifelse $SCP @ss}if}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd/@MX{2 copy ge
{pop}{exch pop}ifelse}bd/InRange{3 -1 roll @MN @MX}bd/@sqr{dup 0 rl dup 0 exch
rl neg 0 rl @cp}bd/currentscale{1 0 dtransform matrix defaultmatrix idtransform
dup mul exch dup mul add sqrt 0 1 dtransform matrix defaultmatrix idtransform
dup mul exch dup mul add sqrt}bd/@unscale{}bd/wDstChck{2 1 roll dup 3 -1 roll
eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub}bd/@lin{exch pop abs 1
exch sub}bd/cmyk2rgb{3{dup 5 -1 roll add 1 exch sub dup 0 lt{pop 0}if exch}
repeat pop}bd/rgb2cmyk{3{1 exch sub 3 1 roll}repeat 3 copy @MN @MN 3{dup 5 -1
roll sub neg exch}repeat}bd/rgb2g{2 index .299 mul 2 index .587 mul add 1 index
.114 mul add 4 1 roll pop pop pop}bd/WaldoColor_5 where{pop}{/SetRgb
/setrgbcolor ld/GetRgb/currentrgbcolor ld/SetGry/setgray ld/GetGry/currentgray
ld/SetRgb2 systemdict/setrgbcolor get def/GetRgb2 systemdict/currentrgbcolor
get def/SetHsb systemdict/sethsbcolor get def/GetHsb systemdict
/currenthsbcolor get def/rgb2hsb{SetRgb2 GetHsb}bd/hsb2rgb{3 -1 roll dup floor
sub 3 1 roll SetHsb GetRgb2}bd/setcmykcolor where{pop/LumSepsDict where{pop
/SetCmyk_5{LumSepsDict/setcmykcolor get exec}def}{/AldusSepsDict where{pop
/SetCmyk_5{AldusSepsDict/setcmykcolor get exec}def}{/SetCmyk_5/setcmykcolor ld
}ifelse}ifelse}{/SetCmyk_5{cmyk2rgb SetRgb}bd}ifelse/currentcmykcolor where{
pop/GetCmyk/currentcmykcolor ld}{/GetCmyk{GetRgb rgb2cmyk}bd}ifelse
/setoverprint where{pop}{/setoverprint{/$op xd}bd}ifelse/currentoverprint where
{pop}{/currentoverprint{$op}bd}ifelse/@tc_5{5 -1 roll dup 1 ge{pop}{4{dup 6 -1
roll mul exch}repeat pop}ifelse}bd/@trp{exch pop 5 1 roll @tc_5}bd
/setprocesscolor_5{SepMode_5 0 eq{SetCmyk_5}{0 4 $ink_5 sub index exch pop 5 1
roll pop pop pop pop SepsColor true eq{$ink_5 3 gt{1 sub neg SetGry}{0 0 0 4
$ink_5 roll SetCmyk_5}ifelse}{1 sub neg SetGry}ifelse}ifelse}bd
/findcmykcustomcolor where{pop}{/findcmykcustomcolor{5 array astore}bd}ifelse
/Corelsetcustomcolor_exists false def/setcustomcolor where{pop
/Corelsetcustomcolor_exists true def}if CorelIsSeps true eq CorelIsInRIPSeps
false eq and{/Corelsetcustomcolor_exists false def}if
Corelsetcustomcolor_exists false eq{/setcustomcolor{exch aload pop SepMode_5 0
eq{pop @tc_5 setprocesscolor_5}{CurrentInkName_5 eq{4 index}{0}ifelse 6 1 roll
5 rp 1 sub neg SetGry}ifelse}bd}if/@scc_5{dup type/booleantype eq{dup
currentoverprint ne{setoverprint}{pop}ifelse}{1 eq setoverprint}ifelse dup _ eq
{pop setprocesscolor_5 pop}{findcmykcustomcolor exch setcustomcolor}ifelse
SepMode_5 0 eq{true}{GetGry 1 eq currentoverprint and not}ifelse}bd/colorimage
where{pop/ColorImage{colorimage}def}{/ColorImage{/ncolors xd/$multi xd $multi
true eq{ncolors 3 eq{/daqB xd/daqG xd/daqR xd pop pop exch pop abs{daqR pop
daqG pop daqB pop}repeat}{/daqK xd/daqY xd/daqM xd/daqC xd pop pop exch pop abs
{daqC pop daqM pop daqY pop daqK pop}repeat}ifelse}{/dataaq xd{dataaq ncolors
dup 3 eq{/$dat xd 0 1 $dat length 3 div 1 sub{dup 3 mul $dat 1 index get 255
div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div rgb2g 255 mul
cvi exch pop $dat 3 1 roll put}for $dat 0 $dat length 3 idiv getinterval pop}{
4 eq{/$dat xd 0 1 $dat length 4 div 1 sub{dup 4 mul $dat 1 index get 255 div
$dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div $dat 4 index 3
add get 255 div cmyk2rgb rgb2g 255 mul cvi exch pop $dat 3 1 roll put}for $dat
0 $dat length ncolors idiv getinterval}if}ifelse}image}ifelse}bd}ifelse
/setcmykcolor{1 5 1 roll _ currentoverprint @scc_5/$ffpnt xd}bd
/currentcmykcolor{GetCmyk}bd/setrgbcolor{rgb2cmyk setcmykcolor}bd
/currentrgbcolor{currentcmykcolor cmyk2rgb}bd/sethsbcolor{hsb2rgb setrgbcolor}
bd/currenthsbcolor{currentrgbcolor rgb2hsb}bd/setgray{dup dup setrgbcolor}bd
/currentgray{currentrgbcolor rgb2g}bd/InsideDCS false def/IMAGE/image ld/image
{InsideDCS{IMAGE}{/EPSDict where{pop SepMode_5 0 eq{IMAGE}{dup type/dicttype eq
{dup/ImageType get 1 ne{IMAGE}{dup dup/BitsPerComponent get 8 eq exch
/BitsPerComponent get 1 eq or currentcolorspace 0 get/DeviceGray eq and{
CurrentInkName_5(Black)eq{IMAGE}{dup/DataSource get/TCC xd/Height get abs{TCC
pop}repeat}ifelse}{IMAGE}ifelse}ifelse}{2 index 1 ne{CurrentInkName_5(Black)eq
{IMAGE}{/TCC xd pop pop exch pop abs{TCC pop}repeat}ifelse}{IMAGE}ifelse}
ifelse}ifelse}{IMAGE}ifelse}ifelse}bd}ifelse/WaldoColor_5 true def/$fm 0 def
/wfill{1 $fm eq{fill}{eofill}ifelse}bd/@Pf{@sv SepMode_5 0 eq $Psc 0 ne or
$ink_5 3 eq or{0 J 0 j[]0 d $t $c $m $y $k $n $o @scc_5 pop $ctm setmatrix 72
1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop $Psn load exec}{1 SetGry
wfill}ifelse @rs @np}bd/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if $fil
1 eq{CorelPtrnDoFill}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$fil 4 eq
{CorelShfillDoFill}{$t $c $m $y $k $n $o @scc_5{wfill}{@np}ifelse}ifelse}
ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd/f{@cp F}bd/S{
matrix currentmatrix $ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K
$N $O @scc_5{matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse $SDF
{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp S}bd/B{@gs F @gr S}bd/b{@cp B}bd/_E{
5 array astore exch cvlit xd}bd/@cc{currentfile $dat readhexstring pop}bd/@sm{
/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd/Bblly xd/Bbllx xd}bd/@c{
@cp}bd/@P{/$fil 3 def/$Psn xd/$Psc xd array astore/$Prm xd}bd/tcc{@cc}def/@B{
@gs S @gr F}bd/@b{@cp @B}bd/@sep{CurrentInkName_5(Composite)eq{/$ink_5 -1 def}
{CurrentInkName_5(Cyan)eq{/$ink_5 0 def}{CurrentInkName_5(Magenta)eq{/$ink_5 1
def}{CurrentInkName_5(Yellow)eq{/$ink_5 2 def}{CurrentInkName_5(Black)eq
{/$ink_5 3 def}{/$ink_5 4 def}ifelse}ifelse}ifelse}ifelse}ifelse}bd/@whi{@gs
-72000 dup m -72000 72000 l 72000 dup l 72000 -72000 l @cp 1 SetGry fill @gr}
bd/@neg{[{1 exch sub}/exec cvx currenttransfer/exec cvx]cvx settransfer @whi}
bd/deflevel 0 def/@sax{/deflevel deflevel 1 add def}bd/@eax{/deflevel deflevel
dup 0 gt{1 sub}if def deflevel 0 gt{/eax load}{eax}ifelse}bd/eax{{exec}forall}
bd/@rax{deflevel 0 eq{@rs @sv}if}bd systemdict/pdfmark known not{/pdfmark
/cleartomark ld}if/wclip{1 $fm eq{clip}{eoclip}ifelse}bd
% Copyright (c)1992-2003 Corel Corporation
% All rights reserved. v12 r0.0
/z{exch findfont exch scalefont setfont}bd/ZB{9 dict dup begin 4 1 roll
/FontType 3 def/FontMatrix xd/FontBBox xd/Encoding 256 array def 0 1 255{
Encoding exch/.notdef put}for/CharStrings 256 dict def CharStrings/.notdef{}
put/Metrics 256 dict def Metrics/.notdef 3 -1 roll put/BuildChar{exch dup
/$char exch/Encoding get 3 index get def dup/Metrics get $char get aload pop
setcachedevice begin Encoding exch get CharStrings exch get end exec}def end
definefont pop}bd/ZBAddChar{findfont begin dup 4 1 roll dup 6 1 roll Encoding 3
1 roll put CharStrings 3 1 roll put Metrics 3 1 roll put end}bd/Z{findfont dup
maxlength 2 add dict exch dup{1 index/FID ne{3 index 3 1 roll put}{pop pop}
ifelse}forall pop dup dup/Encoding get 256 array copy dup/$fe xd/Encoding exch
put dup/Fontname 3 index put 3 -1 roll dup length 0 ne{0 exch{dup type 0 type
eq{exch pop}{$fe exch 2 index exch put 1 add}ifelse}forall pop}if dup 256 dict
dup/$met xd/Metrics exch put dup/FontMatrix get 0 get 1000 mul 1 exch div 3
index length 256 eq{0 1 255{dup $fe exch get dup/.notdef eq{pop pop}{5 index 3
-1 roll get 2 index mul $met 3 1 roll put}ifelse}for}if pop definefont pop pop
}bd/CorelIsValidCharpath{pathbbox 3 -1 roll sub abs 0.5 ge 3 1 roll sub abs 0.5
ge and}bd/@ftx{{currentpoint 3 -1 roll(0)dup 3 -1 roll 0 exch put dup @gs true
charpath $ctm setmatrix CorelIsValidCharpath{@@txt}if @gr @np stringwidth pop 3
-1 roll add exch m}forall}bd/@ft{matrix currentmatrix exch $sdf{$scf $sca $scp
@ss}if $fil 1 eq{/@@txt/@pf ld @ftx}{$fil 2 eq{/@@txt/@ff ld @ftx}{$fil 3 eq
{/@@txt/@Pf ld @ftx}{$fil 4 eq{/@@txt/CorelShfillDoFill ld @ftx}{$t $c $m $y $k
$n $o @scc_5{show}{pop}ifelse}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp
@ss}if setmatrix}bd/@st{matrix currentmatrix exch $SDF{$SCF $SCA $SCP @ss}if $T
$C $M $Y $K $N $O @scc_5{{currentpoint 3 -1 roll(0)dup 3 -1 roll 0 exch put dup
@gs true charpath $ctm setmatrix $ptm concat stroke @gr @np stringwidth pop 3
-1 roll add exch m}forall}{pop}ifelse $SDF{$dsf $dsa $dsp @ss}if setmatrix}bd
/@te{@ft}bd/@tr{@st}bd/@ta{dup @gs @ft @gr @st}bd/@t@a{dup @gs @st @gr @ft}bd
/@tm{@sm concat}bd/e{/t{@te}def}bd/r{/t{@tr}def}bd/o{/t{pop}def}bd/a{/t{@ta}
def}bd/@a{/t{@t@a}def}bd/t{@te}def/T{@np $ctm setmatrix/$ttm matrix def}bd/ddt
{t}def/@t{/$stm $stm currentmatrix def 3 1 roll m $ttm concat ddt $stm
setmatrix}bd/@n{/$ttm exch matrix rotate def}bd/@s{}bd/@l{}bd/_lineorientation
0 def/_bitfont null def/_bitlobyte 0 def/_bitkey null def/_bithibyte 0 def
% Copyright (c)1992-2003 Corel Corporation
% All rights reserved. v12 r0.0
/@ii{concat 3 index 3 index m 3 index 1 index l 2 copy l 1 index 3 index l 3
index 3 index l clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true
def pop pop}{1 eq{s1t s1c s1m s1y s1k s1n $O @scc_5/$frg xd}{/$frg false def}
ifelse 1 eq{@gs $ctm setmatrix F @gr}if}ifelse @np/$ury xd/$urx xd/$lly xd
/$llx xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string
def $bkg $frg or{$SDF{$SCF $SCA $SCP @ss}if $llx $lly Tl $urx $llx sub $ury
$lly sub scale $bkg{$t $c $m $y $k $n $o @scc_5 pop}if $wid $hei abs $bts 1 eq
{$bkg}{$bts}ifelse[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/tcc load $bts
1 eq{imagemask}{image}ifelse $SDF{$dsf $dsa $dsp @ss}if}{$hei abs{tcc pop}
repeat}ifelse @gr $ctm setmatrix}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd
/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd $ngx $llx $lly Tl $urx $llx sub $ury
$lly sub scale $wid $hei abs $bts[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse
]$msimage false eq $ncl 1 eq or{/$dat $wid $bts mul $ncl mul 8 div ceiling cvi
string def/@cc load false $ncl ColorImage}{$wid $bts mul 8 div ceiling cvi $ncl
3 eq{dup dup/$dat1 exch string def/$dat2 exch string def/$dat3 exch string def
/@cc1 load/@cc2 load/@cc3 load}{dup dup dup/$dat1 exch string def/$dat2 exch
string def/$dat3 exch string def/$dat4 exch string def/@cc1 load/@cc2 load
/@cc3 load/@cc4 load}ifelse true $ncl ColorImage}ifelse $SDF{$dsf $dsa $dsp
@ss}if @gr $ctm setmatrix}bd/@cc1{currentfile $dat1 readhexstring pop}bd/@cc2{
currentfile $dat2 readhexstring pop}bd/@cc3{currentfile $dat3 readhexstring pop
}bd/@cc4{currentfile $dat4 readhexstring pop}bd/$msimage false def/COMP 0 def
/MaskedImage false def L2?{/@I_2{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx
xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling
cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq{/DeviceRGB}{/DeviceCMYK}
ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub $ury $lly sub scale 8
dict begin/ImageType 1 def/Width $wid def/Height $hei abs def/BitsPerComponent
$bts def/Decode $ncl 1 eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}
ifelse}ifelse def/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def
/DataSource currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP
2 eq{/RunLengthDecode filter}if}ifelse def currentdict end image $SDF{$dsf $dsa
$dsp @ss}if @gr $ctm setmatrix}bd}{/@I_2{}bd}ifelse/@I_3{@sm @gs @ii @np/$ury
xd/$urx xd/$lly xd/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul
$ncl mul 8 div ceiling cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq
{/DeviceRGB}{/DeviceCMYK}ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub
$ury $lly sub scale/ImageDataDict 8 dict def ImageDataDict begin/ImageType 1
def/Width $wid def/Height $hei abs def/BitsPerComponent $bts def/Decode $ncl 1
eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}ifelse}ifelse def
/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def/DataSource
currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP 2 eq{
/RunLengthDecode filter}if}ifelse def end/MaskedImageDict 7 dict def
MaskedImageDict begin/ImageType 3 def/InterleaveType 3 def/MaskDict
ImageMaskDict def/DataDict ImageDataDict def end MaskedImageDict image $SDF
{$dsf $dsa $dsp @ss}if @gr $ctm setmatrix}bd/@SetMask{/$mbts xd/$mhei xd/$mwid
xd/ImageMaskDict 8 dict def ImageMaskDict begin/ImageType 1 def/Width $mwid def
/Height $mhei abs def/BitsPerComponent $mbts def/DataSource maskstream def
/ImageMatrix[$mwid 0 0 $mhei neg 0 $mhei 0 gt{$mhei}{0}ifelse]def/Decode[1 0]
def end}bd/@daq{dup type/arraytype eq{{}forall}if}bd/@BMP{/@cc xd UseLevel 3 eq
MaskedImage true eq and{7 -2 roll pop pop @I_3}{12 index 1 gt UseLevel 2 eq
UseLevel 3 eq or and{7 -2 roll pop pop @I_2}{11 index 1 eq{12 -1 roll pop @i}{
7 -2 roll pop pop @I}ifelse}ifelse}ifelse}bd
end
%%EndResource
%%EndProlog
%%BeginSetup
wCorel12Dict begin
@BeginSysCorelDict
2.6131 setmiterlimit
1.00 setflat
/$fst 128 def
%%EndSetup
%%Page: 1 1
%LogicalPage: 1
%%BeginPageSetup
@sv
@sm
@sv
%%EndPageSetup
@rax %Note: Object
210.05745 677.71049 259.14898 677.71162 @E
0 J 0 j [1 1 ] 0 d 0 R 0 @G
0.00 0.00 0.00 0.40 K
0 0.50003 0.50003 0.00000 @w
/$fm 0 def
259.14898 677.71106 m
210.05745 677.71106 L
S
@rax %Note: Object
209.43581 684.66331 258.52734 684.66444 @E
0 J 0 j [1 1 ] 0 d 0 R 0 @G
0.00 0.00 0.00 0.40 K
0 0.50003 0.50003 0.00000 @w
/$fm 0 def
258.52734 684.66387 m
209.43581 684.66387 L
S
@rax %Note: Object
259.47950 641.45764 259.48063 677.98942 @E
0 J 0 j [1 1 ] 0 d 0 R 0 @G
0.00 0.00 0.00 0.40 K
0 0.50003 0.50003 0.00000 @w
/$fm 0 def
259.48006 677.98942 m
259.48006 641.45764 L
S
@rax %Note: Object
209.94350 641.61184 355.28315 741.94583 @E
0 J 0 j [] 0 d 0 R 0 @G
0.00 1.00 1.00 0.00 K
0 1.00006 1.00006 0.00000 @w
/$fm 0 def
209.94350 641.61184 m
259.38539 677.78249 L
259.43301 684.70243 L
307.16787 711.96094 L
307.40031 718.00441 L
355.28315 741.94583 L
S
@rax %Note: Object
209.50923 641.58180 373.51219 749.31931 @E
0 J 0 j [] 0 d 0 R 0 @G
0.00 0.00 0.00 1.00 K
0 0.50003 0.50003 0.00000 @w
/$fm 0 def
369.13748 641.58180 m
209.50923 641.58180 L
209.50923 744.94460 L
S
@j
0.00 0.00 0.00 1.00 K
0.00 0.00 0.00 1.00 k
0 @g
0 @G
[] 0 d 0 J 0 j
0 R 0 O
0 1.00800 1.00800 0 @w
368.72220 638.94699 m
373.51219 641.58180 L
368.72220 644.21660 L
368.72220 638.94699 L
f
@J
@j
0.00 0.00 0.00 1.00 K
0.00 0.00 0.00 1.00 k
0 @g
0 @G
[] 0 d 0 J 0 j
0 R 0 O
0 1.00800 1.00800 0 @w
206.87443 744.52932 m
209.50923 749.31931 L
212.14403 744.52932 L
206.87443 744.52932 L
f
@J
@rax 337.43339 627.05027 449.07364 636.19540 @E
[0.00028286 0.00000000 0.00000000 0.00028346 337.43337348 629.03704786] @tm
0 O 0 @g
0.00 0.00 0.00 1.00 k
e
% FontChange:/_ArialMT 35278.00000 z
%CHAR: 0 0 (d) @t
/$fm 1 def
14194 0 m
14194 2311 L
13035 494 11330 -412 9078 -412 c
7620 -412 6279 -12 5057 794 c
3834 1593 2887 2716 2211 4163 c
1540 5603 1205 7256 1205 9131 c
1205 10954 1511 12612 2117 14099 c
2728 15587 3640 16728 4857 17516 c
6074 18309 7438 18709 8943 18709 c
10042 18709 11024 18474 11883 18009 c
12747 17545 13447 16939 13988 16193 C
13988 25253 L
17069 25253 L
17069 0 L
14194 0 L
@c
4392 9131 m
4392 6785 4886 5033 5874 3875 c
6862 2716 8026 2134 9372 2134 c
10725 2134 11877 2693 12824 3798 c
13770 4904 14246 6597 14246 8872 c
14246 11377 13764 13212 12800 14382 c
11836 15558 10648 16140 9231 16140 c
7855 16140 6703 15575 5780 14452 c
4857 13329 4392 11554 4392 9131 c
@c
F
%CHAR: 19620 0 (e) @t
/$fm 1 def
34466 5891 m
37671 5497 L
37165 3622 36230 2170 34866 1135 c
33496 106 31750 -412 29627 -412 c
26952 -412 24829 412 23265 2058 c
21696 3704 20914 6015 20914 8990 c
20914 12071 21707 14458 23289 16157 c
24876 17857 26928 18709 29457 18709 c
31903 18709 33902 17874 35448 16210 c
37000 14546 37776 12200 37776 9184 c
37776 8996 37771 8720 37759 8355 C
24118 8355 L
24230 6344 24800 4804 25823 3739 c
26846 2669 28116 2134 29645 2134 c
30780 2134 31750 2434 32555 3034 c
33361 3628 33996 4580 34466 5891 C
@c
24288 10907 m
34501 10907 L
34366 12441 33972 13600 33331 14364 c
32344 15558 31062 16157 29492 16157 c
28069 16157 26870 15681 25899 14729 c
24929 13776 24394 12500 24288 10907 C
@c
F
%CHAR: 39240 0 (s) @t
/$fm 1 def
40328 5462 m
43391 5944 L
43562 4715 44044 3775 44832 3116 c
45614 2464 46713 2134 48130 2134 c
49553 2134 50611 2428 51299 3005 c
51987 3587 52334 4269 52334 5045 c
52334 5750 52028 6297 51417 6703 c
50993 6979 49935 7326 48248 7749 c
45978 8326 44396 8820 43520 9243 c
42644 9660 41974 10242 41521 10983 c
41069 11724 40839 12541 40839 13435 c
40839 14252 41027 15005 41404 15699 c
41774 16398 42286 16975 42927 17433 c
43409 17786 44067 18092 44896 18339 c
45731 18586 46625 18709 47577 18709 c
49012 18709 50270 18497 51358 18086 c
52446 17674 53245 17116 53763 16410 c
54280 15699 54633 14758 54827 13576 C
51799 13159 L
51658 14099 51258 14834 50600 15364 c
49941 15893 49006 16157 47801 16157 c
46378 16157 45361 15922 44755 15452 c
44144 14981 43838 14429 43838 13800 c
43838 13394 43967 13035 44220 12712 c
44473 12377 44867 12106 45408 11883 c
45719 11771 46631 11507 48148 11095 c
50341 10507 51870 10031 52734 9654 c
53604 9284 54286 8737 54780 8026 c
55274 7314 55521 6432 55521 5374 c
55521 4339 55215 3369 54615 2452 c
54010 1540 53140 835 52005 335 c
50870 -165 49582 -412 48148 -412 c
45766 -412 43955 82 42709 1070 c
41463 2058 40669 3522 40328 5462 C
@c
F
%CHAR: 56879 0 (i) @t
/$fm 1 def
59219 21684 m
59219 25253 L
62324 25253 L
62324 21684 L
59219 21684 L
@c
59219 0 m
59219 18292 L
62324 18292 L
62324 0 L
59219 0 L
@c
F
%CHAR: 64717 0 (r) @t
/$fm 1 def
67010 0 m
67010 18292 L
69797 18292 L
69797 15522 L
70508 16816 71167 17674 71773 18086 c
72372 18497 73037 18709 73760 18709 c
74807 18709 75865 18374 76947 17710 C
75877 14829 L
75124 15281 74366 15505 73607 15505 c
72925 15505 72319 15299 71778 14893 c
71238 14482 70855 13917 70626 13194 c
70279 12094 70109 10889 70109 9578 c
70109 0 L
67010 0 L
@c
F
%CHAR: 76465 0 (e) @t
/$fm 1 def
91311 5891 m
94516 5497 L
94010 3622 93075 2170 91711 1135 c
90341 106 88595 -412 86472 -412 c
83797 -412 81674 412 80110 2058 c
78541 3704 77759 6015 77759 8990 c
77759 12071 78552 14458 80134 16157 c
81721 17857 83773 18709 86302 18709 c
88748 18709 90747 17874 92293 16210 c
93845 14546 94621 12200 94621 9184 c
94621 8996 94616 8720 94604 8355 C
80963 8355 L
81075 6344 81645 4804 82668 3739 c
83691 2669 84961 2134 86490 2134 c
87625 2134 88595 2434 89400 3034 c
90206 3628 90841 4580 91311 5891 C
@c
81133 10907 m
91346 10907 L
91211 12441 90817 13600 90176 14364 c
89189 15558 87907 16157 86337 16157 c
84914 16157 83715 15681 82744 14729 c
81774 13776 81239 12500 81133 10907 C
@c
F
%CHAR: 96085 0 (d) @t
/$fm 1 def
110279 0 m
110279 2311 L
109120 494 107415 -412 105163 -412 c
103705 -412 102364 -12 101142 794 c
99919 1593 98972 2716 98296 4163 c
97625 5603 97290 7256 97290 9131 c
97290 10954 97596 12612 98202 14099 c
98813 15587 99725 16728 100942 17516 c
102159 18309 103523 18709 105028 18709 c
106127 18709 107109 18474 107968 18009 c
108832 17545 109532 16939 110073 16193 C
110073 25253 L
113154 25253 L
113154 0 L
110279 0 L
@c
100477 9131 m
100477 6785 100971 5033 101959 3875 c
102947 2716 104111 2134 105457 2134 c
106810 2134 107962 2693 108909 3798 c
109855 4904 110331 6597 110331 8872 c
110331 11377 109849 13212 108885 14382 c
107921 15558 106733 16140 105316 16140 c
103940 16140 102788 15575 101865 14452 c
100942 13329 100477 11554 100477 9131 c
@c
F
%CHAR: 125506 0 (o) @t
/$fm 1 def
126676 9149 m
126676 12535 127617 15046 129504 16675 c
131074 18027 132991 18709 135254 18709 c
137771 18709 139829 17886 141422 16234 c
143022 14587 143815 12312 143815 9407 c
143815 7050 143463 5198 142757 3851 c
142051 2499 141022 1452 139676 706 c
138324 -41 136854 -412 135254 -412 c
132697 -412 130627 406 129046 2052 c
127464 3692 126676 6056 126676 9149 c
@c
129863 9149 m
129863 6803 130374 5051 131397 3886 c
132420 2716 133708 2134 135254 2134 c
136795 2134 138077 2722 139100 3892 c
140117 5062 140629 6850 140629 9249 c
140629 11512 140117 13229 139088 14393 c
138059 15558 136783 16140 135254 16140 c
133708 16140 132420 15558 131397 14399 c
130374 13241 129863 11489 129863 9149 c
@c
F
%CHAR: 145126 0 (u) @t
/$fm 1 def
159443 0 m
159443 2687 L
158014 617 156080 -412 153634 -412 c
152558 -412 151547 -206 150612 206 c
149677 617 148983 1141 148530 1764 c
148072 2393 147754 3157 147572 4063 c
147448 4674 147384 5639 147384 6962 c
147384 18292 L
150482 18292 L
150482 8149 l
150482 6526 150547 5439 150671 4874 c
150870 4057 151282 3422 151911 2952 c
152546 2487 153328 2258 154257 2258 c
155186 2258 156056 2493 156874 2969 c
157691 3445 158267 4098 158602 4915 c
158943 5739 159114 6932 159114 8490 c
159114 18292 L
162212 18292 L
162212 0 L
159443 0 L
@c
F
%CHAR: 164746 0 (t) @t
/$fm 1 def
173842 2775 m
174289 35 L
173419 -147 172637 -241 171949 -241 c
170820 -241 169950 -65 169326 294 c
168709 647 168274 1117 168021 1699 c
167768 2275 167639 3498 167639 5356 c
167639 15881 L
165363 15881 L
165363 18292 L
167639 18292 L
167639 22825 L
170726 24683 L
170726 18292 L
173842 18292 L
173842 15881 L
170726 15881 L
170726 5186 l
170726 4298 170779 3734 170884 3481 c
170996 3228 171172 3028 171419 2875 c
171666 2728 172019 2652 172478 2652 c
172825 2652 173277 2693 173842 2775 C
@c
F
%CHAR: 174547 0 (p) @t
/$fm 1 def
176875 -7009 m
176875 18292 L
179698 18292 L
179698 15916 L
180362 16845 181115 17545 181955 18009 c
182790 18474 183807 18709 185001 18709 c
186565 18709 187941 18303 189134 17504 c
190334 16698 191233 15563 191839 14099 c
192451 12635 192756 11030 192756 9284 c
192756 7414 192421 5727 191745 4227 c
191075 2728 190099 1582 188817 782 c
187535 -12 186189 -412 184778 -412 c
183743 -412 182820 -194 181997 241 c
181173 676 180503 1229 179974 1893 C
179974 -7009 L
176875 -7009 L
@c
179680 9043 m
179680 6691 180156 4951 181109 3822 c
182061 2699 183220 2134 184572 2134 c
185948 2134 187129 2716 188111 3886 c
189093 5051 189587 6856 189587 9302 c
189587 11636 189105 13376 188147 14540 c
187188 15699 186042 16281 184713 16281 c
183390 16281 182220 15663 181203 14429 c
180186 13194 179680 11395 179680 9043 c
@c
F
%CHAR: 194167 0 (u) @t
/$fm 1 def
208484 0 m
208484 2687 L
207055 617 205121 -412 202675 -412 c
201599 -412 200588 -206 199653 206 c
198718 617 198024 1141 197571 1764 c
197113 2393 196795 3157 196613 4063 c
196489 4674 196425 5639 196425 6962 c
196425 18292 L
199523 18292 L
199523 8149 l
199523 6526 199588 5439 199712 4874 c
199911 4057 200323 3422 200952 2952 c
201587 2487 202369 2258 203298 2258 c
204227 2258 205097 2493 205915 2969 c
206732 3445 207308 4098 207643 4915 c
207984 5739 208155 6932 208155 8490 c
208155 18292 L
211253 18292 L
211253 0 L
208484 0 L
@c
F
%CHAR: 213787 0 (t) @t
/$fm 1 def
222883 2775 m
223330 35 L
222460 -147 221678 -241 220990 -241 c
219861 -241 218991 -65 218367 294 c
217750 647 217315 1117 217062 1699 c
216809 2275 216680 3498 216680 5356 c
216680 15881 L
214404 15881 L
214404 18292 L
216680 18292 L
216680 22825 L
219767 24683 L
219767 18292 L
222883 18292 L
222883 15881 L
219767 15881 L
219767 5186 l
219767 4298 219820 3734 219925 3481 c
220037 3228 220213 3028 220460 2875 c
220707 2728 221060 2652 221519 2652 c
221866 2652 222318 2693 222883 2775 C
@c
F
%CHAR: 233389 0 (t) @t
/$fm 1 def
242485 2775 m
242932 35 L
242062 -147 241280 -241 240592 -241 c
239463 -241 238593 -65 237969 294 c
237352 647 236917 1117 236664 1699 c
236411 2275 236282 3498 236282 5356 c
236282 15881 L
234006 15881 L
234006 18292 L
236282 18292 L
236282 22825 L
239369 24683 L
239369 18292 L
242485 18292 L
242485 15881 L
239369 15881 L
239369 5186 l
239369 4298 239422 3734 239527 3481 c
239639 3228 239815 3028 240062 2875 c
240309 2728 240662 2652 241121 2652 c
241468 2652 241920 2693 242485 2775 C
@c
F
%CHAR: 243190 0 (i) @t
/$fm 1 def
245530 21684 m
245530 25253 L
248635 25253 L
248635 21684 L
245530 21684 L
@c
245530 0 m
245530 18292 L
248635 18292 L
248635 0 L
245530 0 L
@c
F
%CHAR: 251028 0 (m) @t
/$fm 1 def
253356 0 m
253356 18292 L
256126 18292 L
256126 15728 L
256702 16622 257466 17345 258419 17886 c
259371 18433 260459 18709 261676 18709 c
263028 18709 264140 18427 265004 17862 c
265874 17298 266486 16516 266838 15505 C
268291 17639 270172 18709 272489 18709 c
274306 18709 275699 18203 276675 17198 c
277651 16193 278139 14646 278139 12559 c
278139 0 L
275058 0 L
275058 11524 l
275058 12765 274958 13658 274758 14205 c
274553 14746 274188 15187 273665 15522 c
273136 15852 272512 16022 271801 16022 c
270513 16022 269449 15593 268596 14734 c
267750 13882 267321 12512 267321 10630 c
267321 0 L
264222 0 L
264222 11883 l
264222 13265 263969 14299 263463 14987 c
262958 15675 262135 16022 260982 16022 c
260112 16022 259307 15793 258566 15328 c
257825 14870 257284 14199 256955 13317 c
256620 12430 256455 11154 256455 9490 c
256455 0 L
253356 0 L
@c
F
%CHAR: 280415 0 (e) @t
/$fm 1 def
295261 5891 m
298466 5497 L
297960 3622 297025 2170 295661 1135 c
294291 106 292545 -412 290422 -412 c
287747 -412 285624 412 284060 2058 c
282491 3704 281709 6015 281709 8990 c
281709 12071 282502 14458 284084 16157 c
285671 17857 287723 18709 290252 18709 c
292698 18709 294697 17874 296243 16210 c
297795 14546 298571 12200 298571 9184 c
298571 8996 298566 8720 298554 8355 C
284913 8355 L
285025 6344 285595 4804 286618 3739 c
287641 2669 288911 2134 290440 2134 c
291575 2134 292545 2434 293350 3034 c
294156 3628 294791 4580 295261 5891 C
@c
285083 10907 m
295296 10907 L
295161 12441 294767 13600 294126 14364 c
293139 15558 291857 16157 290287 16157 c
288864 16157 287665 15681 286694 14729 c
285724 13776 285189 12500 285083 10907 C
@c
F
%CHAR: 300035 0 (s) @t
/$fm 1 def
301123 5462 m
304186 5944 L
304357 4715 304839 3775 305627 3116 c
306409 2464 307508 2134 308925 2134 c
310348 2134 311406 2428 312094 3005 c
312782 3587 313129 4269 313129 5045 c
313129 5750 312823 6297 312212 6703 c
311788 6979 310730 7326 309043 7749 c
306773 8326 305191 8820 304315 9243 c
303439 9660 302769 10242 302316 10983 c
301864 11724 301634 12541 301634 13435 c
301634 14252 301822 15005 302199 15699 c
302569 16398 303081 16975 303722 17433 c
304204 17786 304862 18092 305691 18339 c
306526 18586 307420 18709 308372 18709 c
309807 18709 311065 18497 312153 18086 c
313241 17674 314040 17116 314558 16410 c
315075 15699 315428 14758 315622 13576 C
312594 13159 L
312453 14099 312053 14834 311395 15364 c
310736 15893 309801 16157 308596 16157 c
307173 16157 306156 15922 305550 15452 c
304939 14981 304633 14429 304633 13800 c
304633 13394 304762 13035 305015 12712 c
305268 12377 305662 12106 306203 11883 c
306514 11771 307426 11507 308943 11095 c
311136 10507 312665 10031 313529 9654 c
314399 9284 315081 8737 315575 8026 c
316069 7314 316316 6432 316316 5374 c
316316 4339 316010 3369 315410 2452 c
314805 1540 313935 835 312800 335 c
311665 -165 310377 -412 308943 -412 c
306561 -412 304750 82 303504 1070 c
302258 2058 301464 3522 301123 5462 C
@c
F
%CHAR: 317674 0 (t) @t
/$fm 1 def
326770 2775 m
327217 35 L
326347 -147 325565 -241 324877 -241 c
323748 -241 322878 -65 322254 294 c
321637 647 321202 1117 320949 1699 c
320696 2275 320567 3498 320567 5356 c
320567 15881 L
318291 15881 L
318291 18292 L
320567 18292 L
320567 22825 L
323654 24683 L
323654 18292 L
326770 18292 L
326770 15881 L
323654 15881 L
323654 5186 l
323654 4298 323707 3734 323812 3481 c
323924 3228 324100 3028 324347 2875 c
324594 2728 324947 2652 325406 2652 c
325753 2652 326205 2693 326770 2775 C
@c
F
%CHAR: 327475 0 (a) @t
/$fm 1 def
341739 2258 m
340587 1282 339481 594 338423 188 c
337359 -212 336218 -412 335001 -412 c
332990 -412 331450 76 330368 1058 c
329292 2040 328751 3298 328751 4821 c
328751 5721 328951 6538 329362 7279 c
329768 8020 330303 8614 330962 9061 c
331626 9507 332367 9848 333196 10078 c
333802 10236 334719 10395 335948 10542 c
338452 10842 340299 11195 341480 11612 C
341492 12036 341498 12306 341498 12418 c
341498 13682 341204 14576 340616 15087 c
339828 15793 338646 16140 337088 16140 c
335630 16140 334554 15887 333854 15375 c
333161 14864 332649 13958 332314 12659 C
329286 13076 L
329562 14370 330015 15422 330644 16216 c
331273 17016 332190 17633 333384 18062 c
334578 18492 335959 18709 337535 18709 c
339099 18709 340363 18521 341339 18156 c
342315 17786 343033 17327 343497 16769 c
343956 16210 344273 15511 344461 14658 c
344561 14129 344614 13176 344614 11800 c
344614 7667 l
344614 4780 344679 2957 344814 2199 c
344943 1435 345208 700 345596 0 C
342356 0 L
342039 641 341827 1393 341739 2258 C
@c
341480 9184 m
340351 8720 338664 8331 336418 8008 c
335142 7826 334237 7620 333713 7391 c
333184 7161 332773 6826 332490 6379 c
332202 5938 332055 5450 332055 4910 c
332055 4080 332373 3393 332996 2840 c
333619 2293 334536 2017 335742 2017 c
336935 2017 338000 2275 338929 2799 c
339858 3322 340545 4039 340981 4945 c
341316 5644 341480 6679 341480 8043 c
341480 9184 L
@c
F
%CHAR: 347095 0 (m) @t
/$fm 1 def
349423 0 m
349423 18292 L
352193 18292 L
352193 15728 L
352769 16622 353533 17345 354486 17886 c
355438 18433 356526 18709 357743 18709 c
359095 18709 360207 18427 361071 17862 c
361941 17298 362553 16516 362905 15505 C
364358 17639 366239 18709 368556 18709 c
370373 18709 371766 18203 372742 17198 c
373718 16193 374206 14646 374206 12559 c
374206 0 L
371125 0 L
371125 11524 l
371125 12765 371025 13658 370825 14205 c
370620 14746 370255 15187 369732 15522 c
369203 15852 368579 16022 367868 16022 c
366580 16022 365516 15593 364663 14734 c
363817 13882 363388 12512 363388 10630 c
363388 0 L
360289 0 L
360289 11883 l
360289 13265 360036 14299 359530 14987 c
359025 15675 358202 16022 357049 16022 c
356179 16022 355374 15793 354633 15328 c
353892 14870 353351 14199 353022 13317 c
352687 12430 352522 11154 352522 9490 c
352522 0 L
349423 0 L
@c
F
%CHAR: 376482 0 (p) @t
/$fm 1 def
378810 -7009 m
378810 18292 L
381633 18292 L
381633 15916 L
382297 16845 383050 17545 383890 18009 c
384725 18474 385742 18709 386936 18709 c
388500 18709 389876 18303 391069 17504 c
392269 16698 393168 15563 393774 14099 c
394386 12635 394691 11030 394691 9284 c
394691 7414 394356 5727 393680 4227 c
393010 2728 392034 1582 390752 782 c
389470 -12 388124 -412 386713 -412 c
385678 -412 384755 -194 383932 241 c
383108 676 382438 1229 381909 1893 C
381909 -7009 L
378810 -7009 L
@c
381615 9043 m
381615 6691 382091 4951 383044 3822 c
383996 2699 385155 2134 386507 2134 c
387883 2134 389064 2716 390046 3886 c
391028 5051 391522 6856 391522 9302 c
391522 11636 391040 13376 390082 14540 c
389123 15699 387977 16281 386648 16281 c
385325 16281 384155 15663 383138 14429 c
382121 13194 381615 11395 381615 9043 c
@c
F
T
@rax 214.87918 738.64942 338.43005 747.79455 @E
[0.00028346 0.00000000 0.00000000 0.00028346 214.87917324 740.63619338] @tm
0 O 0 @g
0.00 0.00 0.00 1.00 k
e
% FontChange:/_ArialMT 35278.00000 z
%CHAR: 0 0 (m) @t
/$fm 1 def
2328 0 m
2328 18292 L
5098 18292 L
5098 15728 L
5674 16622 6438 17345 7391 17886 c
8343 18433 9431 18709 10648 18709 c
12000 18709 13112 18427 13976 17862 c
14846 17298 15458 16516 15810 15505 C
17263 17639 19144 18709 21461 18709 c
23278 18709 24671 18203 25647 17198 c
26623 16193 27111 14646 27111 12559 c
27111 0 L
24030 0 L
24030 11524 l
24030 12765 23930 13658 23730 14205 c
23525 14746 23160 15187 22637 15522 c
22108 15852 21484 16022 20773 16022 c
19485 16022 18421 15593 17568 14734 c
16722 13882 16293 12512 16293 10630 c
16293 0 L
13194 0 L
13194 11883 l
13194 13265 12941 14299 12435 14987 c
11930 15675 11107 16022 9954 16022 c
9084 16022 8279 15793 7538 15328 c
6797 14870 6256 14199 5927 13317 c
5592 12430 5427 11154 5427 9490 c
5427 0 L
2328 0 L
@c
F
%CHAR: 29387 0 (e) @t
/$fm 1 def
44233 5891 m
47438 5497 L
46932 3622 45997 2170 44633 1135 c
43263 106 41517 -412 39394 -412 c
36719 -412 34596 412 33032 2058 c
31463 3704 30681 6015 30681 8990 c
30681 12071 31474 14458 33056 16157 c
34643 17857 36695 18709 39224 18709 c
41670 18709 43669 17874 45215 16210 c
46767 14546 47543 12200 47543 9184 c
47543 8996 47538 8720 47526 8355 C
33885 8355 L
33997 6344 34567 4804 35590 3739 c
36613 2669 37883 2134 39412 2134 c
40547 2134 41517 2434 42322 3034 c
43128 3628 43763 4580 44233 5891 C
@c
34055 10907 m
44268 10907 L
44133 12441 43739 13600 43098 14364 c
42111 15558 40829 16157 39259 16157 c
37836 16157 36637 15681 35666 14729 c
34696 13776 34161 12500 34055 10907 C
@c
F
%CHAR: 49007 0 (a) @t
/$fm 1 def
63271 2258 m
62119 1282 61013 594 59955 188 c
58891 -212 57750 -412 56533 -412 c
54522 -412 52982 76 51900 1058 c
50824 2040 50283 3298 50283 4821 c
50283 5721 50483 6538 50894 7279 c
51300 8020 51835 8614 52494 9061 c
53158 9507 53899 9848 54728 10078 c
55334 10236 56251 10395 57480 10542 c
59984 10842 61831 11195 63012 11612 C
63024 12036 63030 12306 63030 12418 c
63030 13682 62736 14576 62148 15087 c
61360 15793 60178 16140 58620 16140 c
57162 16140 56086 15887 55386 15375 c
54693 14864 54181 13958 53846 12659 C
50818 13076 L
51094 14370 51547 15422 52176 16216 c
52805 17016 53722 17633 54916 18062 c
56110 18492 57491 18709 59067 18709 c
60631 18709 61895 18521 62871 18156 c
63847 17786 64565 17327 65029 16769 c
65488 16210 65805 15511 65993 14658 c
66093 14129 66146 13176 66146 11800 c
66146 7667 l
66146 4780 66211 2957 66346 2199 c
66475 1435 66740 700 67128 0 C
63888 0 L
63571 641 63359 1393 63271 2258 C
@c
63012 9184 m
61883 8720 60196 8331 57950 8008 c
56674 7826 55769 7620 55245 7391 c
54716 7161 54305 6826 54022 6379 c
53734 5938 53587 5450 53587 4910 c
53587 4080 53905 3393 54528 2840 c
55151 2293 56068 2017 57274 2017 c
58467 2017 59532 2275 60461 2799 c
61390 3322 62077 4039 62513 4945 c
62848 5644 63012 6679 63012 8043 c
63012 9184 L
@c
F
%CHAR: 68627 0 (s) @t
/$fm 1 def
69715 5462 m
72778 5944 L
72949 4715 73431 3775 74219 3116 c
75001 2464 76100 2134 77517 2134 c
78940 2134 79998 2428 80686 3005 c
81374 3587 81721 4269 81721 5045 c
81721 5750 81415 6297 80804 6703 c
80380 6979 79322 7326 77635 7749 c
75365 8326 73783 8820 72907 9243 c
72031 9660 71361 10242 70908 10983 c
70456 11724 70226 12541 70226 13435 c
70226 14252 70414 15005 70791 15699 c
71161 16398 71673 16975 72314 17433 c
72796 17786 73454 18092 74283 18339 c
75118 18586 76012 18709 76964 18709 c
78399 18709 79657 18497 80745 18086 c
81833 17674 82632 17116 83150 16410 c
83667 15699 84020 14758 84214 13576 C
81186 13159 L
81045 14099 80645 14834 79987 15364 c
79328 15893 78393 16157 77188 16157 c
75765 16157 74748 15922 74142 15452 c
73531 14981 73225 14429 73225 13800 c
73225 13394 73354 13035 73607 12712 c
73860 12377 74254 12106 74795 11883 c
75106 11771 76018 11507 77535 11095 c
79728 10507 81257 10031 82121 9654 c
82991 9284 83673 8737 84167 8026 c
84661 7314 84908 6432 84908 5374 c
84908 4339 84602 3369 84002 2452 c
83397 1540 82527 835 81392 335 c
80257 -165 78969 -412 77535 -412 c
75153 -412 73342 82 72096 1070 c
70850 2058 70056 3522 69715 5462 C
@c
F
%CHAR: 86266 0 (u) @t
/$fm 1 def
100583 0 m
100583 2687 L
99154 617 97220 -412 94774 -412 c
93698 -412 92687 -206 91752 206 c
90817 617 90123 1141 89670 1764 c
89212 2393 88894 3157 88712 4063 c
88588 4674 88524 5639 88524 6962 c
88524 18292 L
91622 18292 L
91622 8149 l
91622 6526 91687 5439 91811 4874 c
92010 4057 92422 3422 93051 2952 c
93686 2487 94468 2258 95397 2258 c
96326 2258 97196 2493 98014 2969 c
98831 3445 99407 4098 99742 4915 c
100083 5739 100254 6932 100254 8490 c
100254 18292 L
103352 18292 L
103352 0 L
100583 0 L
@c
F
%CHAR: 105886 0 (r) @t
/$fm 1 def
108179 0 m
108179 18292 L
110966 18292 L
110966 15522 L
111677 16816 112336 17674 112942 18086 c
113541 18497 114206 18709 114929 18709 c
115976 18709 117034 18374 118116 17710 C
117046 14829 L
116293 15281 115535 15505 114776 15505 c
114094 15505 113488 15299 112947 14893 c
112407 14482 112024 13917 111795 13194 c
111448 12094 111278 10889 111278 9578 c
111278 0 L
108179 0 L
@c
F
%CHAR: 117634 0 (e) @t
/$fm 1 def
132480 5891 m
135685 5497 L
135179 3622 134244 2170 132880 1135 c
131510 106 129764 -412 127641 -412 c
124966 -412 122843 412 121279 2058 c
119710 3704 118928 6015 118928 8990 c
118928 12071 119721 14458 121303 16157 c
122890 17857 124942 18709 127471 18709 c
129917 18709 131916 17874 133462 16210 c
135014 14546 135790 12200 135790 9184 c
135790 8996 135785 8720 135773 8355 C
122132 8355 L
122244 6344 122814 4804 123837 3739 c
124860 2669 126130 2134 127659 2134 c
128794 2134 129764 2434 130569 3034 c
131375 3628 132010 4580 132480 5891 C
@c
122302 10907 m
132515 10907 L
132380 12441 131986 13600 131345 14364 c
130358 15558 129076 16157 127506 16157 c
126083 16157 124884 15681 123913 14729 c
122943 13776 122408 12500 122302 10907 C
@c
F
%CHAR: 137254 0 (d) @t
/$fm 1 def
151448 0 m
151448 2311 L
150289 494 148584 -412 146332 -412 c
144874 -412 143533 -12 142311 794 c
141088 1593 140141 2716 139465 4163 c
138794 5603 138459 7256 138459 9131 c
138459 10954 138765 12612 139371 14099 c
139982 15587 140894 16728 142111 17516 c
143328 18309 144692 18709 146197 18709 c
147296 18709 148278 18474 149137 18009 c
150001 17545 150701 16939 151242 16193 C
151242 25253 L
154323 25253 L
154323 0 L
151448 0 L
@c
141646 9131 m
141646 6785 142140 5033 143128 3875 c
144116 2716 145280 2134 146626 2134 c
147979 2134 149131 2693 150078 3798 c
151024 4904 151500 6597 151500 8872 c
151500 11377 151018 13212 150054 14382 c
149090 15558 147902 16140 146485 16140 c
145109 16140 143957 15575 143034 14452 c
142111 13329 141646 11554 141646 9131 c
@c
F
%CHAR: 166675 0 (o) @t
/$fm 1 def
167845 9149 m
167845 12535 168786 15046 170673 16675 c
172243 18027 174160 18709 176423 18709 c
178940 18709 180998 17886 182591 16234 c
184191 14587 184984 12312 184984 9407 c
184984 7050 184632 5198 183926 3851 c
183220 2499 182191 1452 180845 706 c
179493 -41 178023 -412 176423 -412 c
173866 -412 171796 406 170215 2052 c
168633 3692 167845 6056 167845 9149 c
@c
171032 9149 m
171032 6803 171543 5051 172566 3886 c
173589 2716 174877 2134 176423 2134 c
177964 2134 179246 2722 180269 3892 c
181286 5062 181798 6850 181798 9249 c
181798 11512 181286 13229 180257 14393 c
179228 15558 177952 16140 176423 16140 c
174877 16140 173589 15558 172566 14399 c
171543 13241 171032 11489 171032 9149 c
@c
F
%CHAR: 186295 0 (u) @t
/$fm 1 def
200612 0 m
200612 2687 L
199183 617 197249 -412 194803 -412 c
193727 -412 192716 -206 191781 206 c
190846 617 190152 1141 189699 1764 c
189241 2393 188923 3157 188741 4063 c
188617 4674 188553 5639 188553 6962 c
188553 18292 L
191651 18292 L
191651 8149 l
191651 6526 191716 5439 191840 4874 c
192039 4057 192451 3422 193080 2952 c
193715 2487 194497 2258 195426 2258 c
196355 2258 197225 2493 198043 2969 c
198860 3445 199436 4098 199771 4915 c
200112 5739 200283 6932 200283 8490 c
200283 18292 L
203381 18292 L
203381 0 L
200612 0 L
@c
F
%CHAR: 205915 0 (t) @t
/$fm 1 def
215011 2775 m
215458 35 L
214588 -147 213806 -241 213118 -241 c
211989 -241 211119 -65 210495 294 c
209878 647 209443 1117 209190 1699 c
208937 2275 208808 3498 208808 5356 c
208808 15881 L
206532 15881 L
206532 18292 L
208808 18292 L
208808 22825 L
211895 24683 L
211895 18292 L
215011 18292 L
215011 15881 L
211895 15881 L
211895 5186 l
211895 4298 211948 3734 212053 3481 c
212165 3228 212341 3028 212588 2875 c
212835 2728 213188 2652 213647 2652 c
213994 2652 214446 2693 215011 2775 C
@c
F
%CHAR: 215716 0 (p) @t
/$fm 1 def
218044 -7009 m
218044 18292 L
220867 18292 L
220867 15916 L
221531 16845 222284 17545 223124 18009 c
223959 18474 224976 18709 226170 18709 c
227734 18709 229110 18303 230303 17504 c
231503 16698 232402 15563 233008 14099 c
233620 12635 233925 11030 233925 9284 c
233925 7414 233590 5727 232914 4227 c
232244 2728 231268 1582 229986 782 c
228704 -12 227358 -412 225947 -412 c
224912 -412 223989 -194 223166 241 c
222342 676 221672 1229 221143 1893 C
221143 -7009 L
218044 -7009 L
@c
220849 9043 m
220849 6691 221325 4951 222278 3822 c
223230 2699 224389 2134 225741 2134 c
227117 2134 228298 2716 229280 3886 c
230262 5051 230756 6856 230756 9302 c
230756 11636 230274 13376 229316 14540 c
228357 15699 227211 16281 225882 16281 c
224559 16281 223389 15663 222372 14429 c
221355 13194 220849 11395 220849 9043 c
@c
F
%CHAR: 235336 0 (u) @t
/$fm 1 def
249653 0 m
249653 2687 L
248224 617 246290 -412 243844 -412 c
242768 -412 241757 -206 240822 206 c
239887 617 239193 1141 238740 1764 c
238282 2393 237964 3157 237782 4063 c
237658 4674 237594 5639 237594 6962 c
237594 18292 L
240692 18292 L
240692 8149 l
240692 6526 240757 5439 240881 4874 c
241080 4057 241492 3422 242121 2952 c
242756 2487 243538 2258 244467 2258 c
245396 2258 246266 2493 247084 2969 c
247901 3445 248477 4098 248812 4915 c
249153 5739 249324 6932 249324 8490 c
249324 18292 L
252422 18292 L
252422 0 L
249653 0 L
@c
F
%CHAR: 254956 0 (t) @t
/$fm 1 def
264052 2775 m
264499 35 L
263629 -147 262847 -241 262159 -241 c
261030 -241 260160 -65 259536 294 c
258919 647 258484 1117 258231 1699 c
257978 2275 257849 3498 257849 5356 c
257849 15881 L
255573 15881 L
255573 18292 L
257849 18292 L
257849 22825 L
260936 24683 L
260936 18292 L
264052 18292 L
264052 15881 L
260936 15881 L
260936 5186 l
260936 4298 260989 3734 261094 3481 c
261206 3228 261382 3028 261629 2875 c
261876 2728 262229 2652 262688 2652 c
263035 2652 263487 2693 264052 2775 C
@c
F
%CHAR: 274558 0 (t) @t
/$fm 1 def
283654 2775 m
284101 35 L
283231 -147 282449 -241 281761 -241 c
280632 -241 279762 -65 279138 294 c
278521 647 278086 1117 277833 1699 c
277580 2275 277451 3498 277451 5356 c
277451 15881 L
275175 15881 L
275175 18292 L
277451 18292 L
277451 22825 L
280538 24683 L
280538 18292 L
283654 18292 L
283654 15881 L
280538 15881 L
280538 5186 l
280538 4298 280591 3734 280696 3481 c
280808 3228 280984 3028 281231 2875 c
281478 2728 281831 2652 282290 2652 c
282637 2652 283089 2693 283654 2775 C
@c
F
%CHAR: 284359 0 (i) @t
/$fm 1 def
286699 21684 m
286699 25253 L
289804 25253 L
289804 21684 L
286699 21684 L
@c
286699 0 m
286699 18292 L
289804 18292 L
289804 0 L
286699 0 L
@c
F
%CHAR: 292197 0 (m) @t
/$fm 1 def
294525 0 m
294525 18292 L
297295 18292 L
297295 15728 L
297871 16622 298635 17345 299588 17886 c
300540 18433 301628 18709 302845 18709 c
304197 18709 305309 18427 306173 17862 c
307043 17298 307655 16516 308007 15505 C
309460 17639 311341 18709 313658 18709 c
315475 18709 316868 18203 317844 17198 c
318820 16193 319308 14646 319308 12559 c
319308 0 L
316227 0 L
316227 11524 l
316227 12765 316127 13658 315927 14205 c
315722 14746 315357 15187 314834 15522 c
314305 15852 313681 16022 312970 16022 c
311682 16022 310618 15593 309765 14734 c
308919 13882 308490 12512 308490 10630 c
308490 0 L
305391 0 L
305391 11883 l
305391 13265 305138 14299 304632 14987 c
304127 15675 303304 16022 302151 16022 c
301281 16022 300476 15793 299735 15328 c
298994 14870 298453 14199 298124 13317 c
297789 12430 297624 11154 297624 9490 c
297624 0 L
294525 0 L
@c
F
%CHAR: 321584 0 (e) @t
/$fm 1 def
336430 5891 m
339635 5497 L
339129 3622 338194 2170 336830 1135 c
335460 106 333714 -412 331591 -412 c
328916 -412 326793 412 325229 2058 c
323660 3704 322878 6015 322878 8990 c
322878 12071 323671 14458 325253 16157 c
326840 17857 328892 18709 331421 18709 c
333867 18709 335866 17874 337412 16210 c
338964 14546 339740 12200 339740 9184 c
339740 8996 339735 8720 339723 8355 C
326082 8355 L
326194 6344 326764 4804 327787 3739 c
328810 2669 330080 2134 331609 2134 c
332744 2134 333714 2434 334519 3034 c
335325 3628 335960 4580 336430 5891 C
@c
326252 10907 m
336465 10907 L
336330 12441 335936 13600 335295 14364 c
334308 15558 333026 16157 331456 16157 c
330033 16157 328834 15681 327863 14729 c
326893 13776 326358 12500 326252 10907 C
@c
F
%CHAR: 341204 0 (s) @t
/$fm 1 def
342292 5462 m
345355 5944 L
345526 4715 346008 3775 346796 3116 c
347578 2464 348677 2134 350094 2134 c
351517 2134 352575 2428 353263 3005 c
353951 3587 354298 4269 354298 5045 c
354298 5750 353992 6297 353381 6703 c
352957 6979 351899 7326 350212 7749 c
347942 8326 346360 8820 345484 9243 c
344608 9660 343938 10242 343485 10983 c
343033 11724 342803 12541 342803 13435 c
342803 14252 342991 15005 343368 15699 c
343738 16398 344250 16975 344891 17433 c
345373 17786 346031 18092 346860 18339 c
347695 18586 348589 18709 349541 18709 c
350976 18709 352234 18497 353322 18086 c
354410 17674 355209 17116 355727 16410 c
356244 15699 356597 14758 356791 13576 C
353763 13159 L
353622 14099 353222 14834 352564 15364 c
351905 15893 350970 16157 349765 16157 c
348342 16157 347325 15922 346719 15452 c
346108 14981 345802 14429 345802 13800 c
345802 13394 345931 13035 346184 12712 c
346437 12377 346831 12106 347372 11883 c
347683 11771 348595 11507 350112 11095 c
352305 10507 353834 10031 354698 9654 c
355568 9284 356250 8737 356744 8026 c
357238 7314 357485 6432 357485 5374 c
357485 4339 357179 3369 356579 2452 c
355974 1540 355104 835 353969 335 c
352834 -165 351546 -412 350112 -412 c
347730 -412 345919 82 344673 1070 c
343427 2058 342633 3522 342292 5462 C
@c
F
%CHAR: 358843 0 (t) @t
/$fm 1 def
367939 2775 m
368386 35 L
367516 -147 366734 -241 366046 -241 c
364917 -241 364047 -65 363423 294 c
362806 647 362371 1117 362118 1699 c
361865 2275 361736 3498 361736 5356 c
361736 15881 L
359460 15881 L
359460 18292 L
361736 18292 L
361736 22825 L
364823 24683 L
364823 18292 L
367939 18292 L
367939 15881 L
364823 15881 L
364823 5186 l
364823 4298 364876 3734 364981 3481 c
365093 3228 365269 3028 365516 2875 c
365763 2728 366116 2652 366575 2652 c
366922 2652 367374 2693 367939 2775 C
@c
F
%CHAR: 368644 0 (a) @t
/$fm 1 def
382908 2258 m
381756 1282 380650 594 379592 188 c
378528 -212 377387 -412 376170 -412 c
374159 -412 372619 76 371537 1058 c
370461 2040 369920 3298 369920 4821 c
369920 5721 370120 6538 370531 7279 c
370937 8020 371472 8614 372131 9061 c
372795 9507 373536 9848 374365 10078 c
374971 10236 375888 10395 377117 10542 c
379621 10842 381468 11195 382649 11612 C
382661 12036 382667 12306 382667 12418 c
382667 13682 382373 14576 381785 15087 c
380997 15793 379815 16140 378257 16140 c
376799 16140 375723 15887 375023 15375 c
374330 14864 373818 13958 373483 12659 C
370455 13076 L
370731 14370 371184 15422 371813 16216 c
372442 17016 373359 17633 374553 18062 c
375747 18492 377128 18709 378704 18709 c
380268 18709 381532 18521 382508 18156 c
383484 17786 384202 17327 384666 16769 c
385125 16210 385442 15511 385630 14658 c
385730 14129 385783 13176 385783 11800 c
385783 7667 l
385783 4780 385848 2957 385983 2199 c
386112 1435 386377 700 386765 0 C
383525 0 L
383208 641 382996 1393 382908 2258 C
@c
382649 9184 m
381520 8720 379833 8331 377587 8008 c
376311 7826 375406 7620 374882 7391 c
374353 7161 373942 6826 373659 6379 c
373371 5938 373224 5450 373224 4910 c
373224 4080 373542 3393 374165 2840 c
374788 2293 375705 2017 376911 2017 c
378104 2017 379169 2275 380098 2799 c
381027 3322 381714 4039 382150 4945 c
382485 5644 382649 6679 382649 8043 c
382649 9184 L
@c
F
%CHAR: 388264 0 (m) @t
/$fm 1 def
390592 0 m
390592 18292 L
393362 18292 L
393362 15728 L
393938 16622 394702 17345 395655 17886 c
396607 18433 397695 18709 398912 18709 c
400264 18709 401376 18427 402240 17862 c
403110 17298 403722 16516 404074 15505 C
405527 17639 407408 18709 409725 18709 c
411542 18709 412935 18203 413911 17198 c
414887 16193 415375 14646 415375 12559 c
415375 0 L
412294 0 L
412294 11524 l
412294 12765 412194 13658 411994 14205 c
411789 14746 411424 15187 410901 15522 c
410372 15852 409748 16022 409037 16022 c
407749 16022 406685 15593 405832 14734 c
404986 13882 404557 12512 404557 10630 c
404557 0 L
401458 0 L
401458 11883 l
401458 13265 401205 14299 400699 14987 c
400194 15675 399371 16022 398218 16022 c
397348 16022 396543 15793 395802 15328 c
395061 14870 394520 14199 394191 13317 c
393856 12430 393691 11154 393691 9490 c
393691 0 L
390592 0 L
@c
F
%CHAR: 417651 0 (p) @t
/$fm 1 def
419979 -7009 m
419979 18292 L
422802 18292 L
422802 15916 L
423466 16845 424219 17545 425059 18009 c
425894 18474 426911 18709 428105 18709 c
429669 18709 431045 18303 432238 17504 c
433438 16698 434337 15563 434943 14099 c
435555 12635 435860 11030 435860 9284 c
435860 7414 435525 5727 434849 4227 c
434179 2728 433203 1582 431921 782 c
430639 -12 429293 -412 427882 -412 c
426847 -412 425924 -194 425101 241 c
424277 676 423607 1229 423078 1893 C
423078 -7009 L
419979 -7009 L
@c
422784 9043 m
422784 6691 423260 4951 424213 3822 c
425165 2699 426324 2134 427676 2134 c
429052 2134 430233 2716 431215 3886 c
432197 5051 432691 6856 432691 9302 c
432691 11636 432209 13376 431251 14540 c
430292 15699 429146 16281 427817 16281 c
426494 16281 425324 15663 424307 14429 c
423290 13194 422784 11395 422784 9043 c
@c
F
T
@rax 252.29820 632.38139 267.11121 638.22926 @E
[0.00028346 0.00000000 0.00000000 0.00028346 252.29819550 632.47859104] @tm
0 O 0 @g
0.00 0.00 0.00 1.00 k
e
% FontChange:/_ArialMT 28222.00000 z
%CHAR: 0 0 (8) @t
/$fm 1 def
4991 10955 m
3960 11331 3198 11867 2700 12568 c
2206 13264 1957 14102 1957 15075 c
1957 16547 2484 17780 3542 18782 c
4600 19784 6002 20287 7756 20287 c
9520 20287 10941 19774 12018 18749 c
13090 17723 13627 16477 13627 15005 c
13627 14069 13382 13255 12893 12559 c
12399 11867 11656 11331 10654 10955 C
11891 10550 12836 9901 13485 8998 c
14130 8100 14454 7023 14454 5776 c
14454 4045 13843 2596 12625 1421 c
11402 245 9793 -343 7799 -343 c
5804 -343 4200 245 2977 1425 c
1754 2606 1143 4078 1143 5842 c
1143 7154 1477 8255 2145 9144 c
2808 10028 3758 10635 4991 10955 C
@c
4492 15160 m
4492 14205 4802 13424 5414 12817 c
6030 12211 6830 11905 7813 11905 c
8768 11905 9553 12206 10165 12808 c
10776 13410 11077 14149 11077 15019 c
11077 15931 10767 16693 10136 17314 c
9506 17935 8725 18246 7785 18246 c
6839 18246 6054 17940 5428 17338 c
4802 16731 4492 16002 4492 15160 c
@c
3692 5828 m
3692 5122 3862 4436 4196 3777 c
4530 3114 5028 2601 5691 2239 c
6355 1877 7065 1693 7827 1693 c
9012 1693 9991 2074 10762 2841 c
11533 3603 11919 4572 11919 5748 c
11919 6943 11524 7930 10729 8711 c
9934 9492 8937 9882 7742 9882 c
6576 9882 5611 9497 4845 8725 c
4078 7949 3692 6985 3692 5828 c
@c
F
%CHAR: 23537 0 (n) @t
/$fm 1 def
25400 0 m
25400 14633 L
27629 14633 L
27629 12554 L
28706 14163 30259 14967 32286 14967 c
33170 14967 33979 14807 34718 14492 c
35461 14172 36011 13758 36378 13241 c
36750 12728 37004 12117 37154 11411 c
37243 10950 37291 10146 37291 8998 c
37291 0 L
34807 0 L
34807 8904 l
34807 9911 34713 10668 34520 11171 c
34327 11670 33984 12070 33495 12366 c
33001 12667 32427 12817 31764 12817 c
30705 12817 29798 12479 29026 11811 c
28259 11138 27878 9868 27878 7992 c
27878 0 L
25400 0 L
@c
F
%CHAR: 39233 0 (s) @t
/$fm 1 def
40103 4370 m
42554 4755 L
42690 3772 43076 3020 43706 2493 c
44332 1971 45211 1707 46345 1707 c
47483 1707 48330 1943 48880 2404 c
49431 2869 49708 3415 49708 4036 c
49708 4600 49463 5038 48974 5362 c
48636 5583 47789 5861 46439 6199 c
44623 6660 43358 7056 42657 7394 c
41956 7728 41420 8194 41058 8786 c
40696 9379 40512 10033 40512 10748 c
40512 11402 40663 12004 40964 12559 c
41260 13119 41669 13579 42182 13946 c
42568 14229 43095 14473 43758 14671 c
44426 14868 45141 14967 45903 14967 c
47050 14967 48057 14798 48927 14468 c
49797 14139 50437 13692 50851 13128 c
51265 12559 51547 11806 51702 10861 C
49280 10527 L
49167 11279 48847 11867 48320 12291 c
47794 12714 47046 12926 46082 12926 c
44943 12926 44130 12738 43645 12361 c
43156 11985 42911 11543 42911 11040 c
42911 10715 43015 10428 43217 10169 c
43419 9901 43734 9685 44167 9506 c
44416 9417 45146 9205 46359 8876 c
48114 8405 49336 8024 50028 7723 c
50724 7427 51270 6990 51665 6421 c
52060 5851 52257 5146 52257 4299 c
52257 3471 52013 2695 51533 1961 c
51049 1232 50352 668 49445 268 c
48537 -132 47507 -329 46359 -329 c
44454 -329 43005 66 42008 856 c
41011 1646 40376 2817 40103 4370 C
@c
F
T
@rax 191.75584 675.92183 206.56885 681.66709 @E
[0.00028346 0.00000000 0.00000000 0.00028346 191.75583551 676.01506189] @tm
0 O 0 @g
0.00 0.00 0.00 1.00 k
e
% FontChange:/_ArialMT 28222.00000 z
%CHAR: 0 0 (7) @t
/$fm 1 def
1336 17554 m
1336 19939 L
14412 19939 L
14412 18010 L
13128 16642 11853 14821 10588 12554 c
9327 10287 8349 7949 7662 5555 c
7164 3862 6849 2013 6712 0 C
4163 0 L
4191 1590 4501 3509 5099 5762 c
5696 8010 6552 10183 7667 12272 c
8786 14360 9972 16124 11232 17554 C
1336 17554 L
@c
F
%CHAR: 23537 0 (n) @t
/$fm 1 def
25400 0 m
25400 14633 L
27629 14633 L
27629 12554 L
28706 14163 30259 14967 32286 14967 c
33170 14967 33979 14807 34718 14492 c
35461 14172 36011 13758 36378 13241 c
36750 12728 37004 12117 37154 11411 c
37243 10950 37291 10146 37291 8998 c
37291 0 L
34807 0 L
34807 8904 l
34807 9911 34713 10668 34520 11171 c
34327 11670 33984 12070 33495 12366 c
33001 12667 32427 12817 31764 12817 c
30705 12817 29798 12479 29026 11811 c
28259 11138 27878 9868 27878 7992 c
27878 0 L
25400 0 L
@c
F
%CHAR: 39233 0 (s) @t
/$fm 1 def
40103 4370 m
42554 4755 L
42690 3772 43076 3020 43706 2493 c
44332 1971 45211 1707 46345 1707 c
47483 1707 48330 1943 48880 2404 c
49431 2869 49708 3415 49708 4036 c
49708 4600 49463 5038 48974 5362 c
48636 5583 47789 5861 46439 6199 c
44623 6660 43358 7056 42657 7394 c
41956 7728 41420 8194 41058 8786 c
40696 9379 40512 10033 40512 10748 c
40512 11402 40663 12004 40964 12559 c
41260 13119 41669 13579 42182 13946 c
42568 14229 43095 14473 43758 14671 c
44426 14868 45141 14967 45903 14967 c
47050 14967 48057 14798 48927 14468 c
49797 14139 50437 13692 50851 13128 c
51265 12559 51547 11806 51702 10861 C
49280 10527 L
49167 11279 48847 11867 48320 12291 c
47794 12714 47046 12926 46082 12926 c
44943 12926 44130 12738 43645 12361 c
43156 11985 42911 11543 42911 11040 c
42911 10715 43015 10428 43217 10169 c
43419 9901 43734 9685 44167 9506 c
44416 9417 45146 9205 46359 8876 c
48114 8405 49336 8024 50028 7723 c
50724 7427 51270 6990 51665 6421 c
52060 5851 52257 5146 52257 4299 c
52257 3471 52013 2695 51533 1961 c
51049 1232 50352 668 49445 268 c
48537 -132 47507 -329 46359 -329 c
44454 -329 43005 66 42008 856 c
41011 1646 40376 2817 40103 4370 C
@c
F
T
@rax 191.96759 682.73178 206.78060 688.57965 @E
[0.00028346 0.00000000 0.00000000 0.00028346 191.96758353 682.82898290] @tm
0 O 0 @g
0.00 0.00 0.00 1.00 k
e
% FontChange:/_ArialMT 28222.00000 z
%CHAR: 0 0 (8) @t
/$fm 1 def
4991 10955 m
3960 11331 3198 11867 2700 12568 c
2206 13264 1957 14102 1957 15075 c
1957 16547 2484 17780 3542 18782 c
4600 19784 6002 20287 7756 20287 c
9520 20287 10941 19774 12018 18749 c
13090 17723 13627 16477 13627 15005 c
13627 14069 13382 13255 12893 12559 c
12399 11867 11656 11331 10654 10955 C
11891 10550 12836 9901 13485 8998 c
14130 8100 14454 7023 14454 5776 c
14454 4045 13843 2596 12625 1421 c
11402 245 9793 -343 7799 -343 c
5804 -343 4200 245 2977 1425 c
1754 2606 1143 4078 1143 5842 c
1143 7154 1477 8255 2145 9144 c
2808 10028 3758 10635 4991 10955 C
@c
4492 15160 m
4492 14205 4802 13424 5414 12817 c
6030 12211 6830 11905 7813 11905 c
8768 11905 9553 12206 10165 12808 c
10776 13410 11077 14149 11077 15019 c
11077 15931 10767 16693 10136 17314 c
9506 17935 8725 18246 7785 18246 c
6839 18246 6054 17940 5428 17338 c
4802 16731 4492 16002 4492 15160 c
@c
3692 5828 m
3692 5122 3862 4436 4196 3777 c
4530 3114 5028 2601 5691 2239 c
6355 1877 7065 1693 7827 1693 c
9012 1693 9991 2074 10762 2841 c
11533 3603 11919 4572 11919 5748 c
11919 6943 11524 7930 10729 8711 c
9934 9492 8937 9882 7742 9882 c
6576 9882 5611 9497 4845 8725 c
4078 7949 3692 6985 3692 5828 c
@c
F
%CHAR: 23537 0 (n) @t
/$fm 1 def
25400 0 m
25400 14633 L
27629 14633 L
27629 12554 L
28706 14163 30259 14967 32286 14967 c
33170 14967 33979 14807 34718 14492 c
35461 14172 36011 13758 36378 13241 c
36750 12728 37004 12117 37154 11411 c
37243 10950 37291 10146 37291 8998 c
37291 0 L
34807 0 L
34807 8904 l
34807 9911 34713 10668 34520 11171 c
34327 11670 33984 12070 33495 12366 c
33001 12667 32427 12817 31764 12817 c
30705 12817 29798 12479 29026 11811 c
28259 11138 27878 9868 27878 7992 c
27878 0 L
25400 0 L
@c
F
%CHAR: 39233 0 (s) @t
/$fm 1 def
40103 4370 m
42554 4755 L
42690 3772 43076 3020 43706 2493 c
44332 1971 45211 1707 46345 1707 c
47483 1707 48330 1943 48880 2404 c
49431 2869 49708 3415 49708 4036 c
49708 4600 49463 5038 48974 5362 c
48636 5583 47789 5861 46439 6199 c
44623 6660 43358 7056 42657 7394 c
41956 7728 41420 8194 41058 8786 c
40696 9379 40512 10033 40512 10748 c
40512 11402 40663 12004 40964 12559 c
41260 13119 41669 13579 42182 13946 c
42568 14229 43095 14473 43758 14671 c
44426 14868 45141 14967 45903 14967 c
47050 14967 48057 14798 48927 14468 c
49797 14139 50437 13692 50851 13128 c
51265 12559 51547 11806 51702 10861 C
49280 10527 L
49167 11279 48847 11867 48320 12291 c
47794 12714 47046 12926 46082 12926 c
44943 12926 44130 12738 43645 12361 c
43156 11985 42911 11543 42911 11040 c
42911 10715 43015 10428 43217 10169 c
43419 9901 43734 9685 44167 9506 c
44416 9417 45146 9205 46359 8876 c
48114 8405 49336 8024 50028 7723 c
50724 7427 51270 6990 51665 6421 c
52060 5851 52257 5146 52257 4299 c
52257 3471 52013 2695 51533 1961 c
51049 1232 50352 668 49445 268 c
48537 -132 47507 -329 46359 -329 c
44454 -329 43005 66 42008 856 c
41011 1646 40376 2817 40103 4370 C
@c
F
T
@rax %Note: Object
262.17638 680.90967 274.05638 680.91080 @E
0 J 0 j [] 0 d 0 R 0 @G
0.00 1.00 1.00 0.00 K
0 0.21600 0.21600 0.00000 @w
/$fm 0 def
262.17638 680.91024 m
269.68167 680.91024 L
S
@j
0.00 1.00 1.00 0.00 K
0.00 1.00 1.00 0.00 k
0 @g
0 @G
[] 0 d 0 J 0 j
0 R 0 O
0 1.00800 1.00800 0 @w
269.26639 683.54504 m
274.05638 680.91024 L
269.26639 678.27543 L
269.26639 683.54504 L
f
@J
@rax 281.06164 655.26576 334.69937 686.90239 @E
[0.00028346 0.00000000 0.00000000 0.00028346 281.06162751 679.71399088] @tm
0 O 0 @g
0.00 1.00 1.00 0.00 k
e
% FontChange:/_ArialMT 35278.00000 z
%CHAR: 0 0 (1) @t
/$fm 1 def
13141 0 m
10042 0 L
10042 19756 L
9296 19044 8320 18333 7109 17621 c
5891 16910 4804 16375 3839 16022 C
3839 19015 L
5574 19832 7091 20820 8390 21978 c
9684 23142 10607 24265 11148 25359 C
13141 25359 L
13141 0 L
@c
F
%CHAR: 29421 0 (n) @t
/$fm 1 def
31749 0 m
31749 18292 L
34536 18292 L
34536 15693 L
35883 17704 37823 18709 40357 18709 c
41463 18709 42474 18509 43397 18115 c
44326 17715 45014 17198 45472 16551 c
45937 15910 46254 15146 46443 14264 c
46554 13688 46613 12682 46613 11248 c
46613 0 L
43509 0 L
43509 11130 l
43509 12388 43391 13335 43150 13964 c
42909 14587 42480 15087 41868 15458 c
41251 15834 40534 16022 39705 16022 c
38382 16022 37247 15599 36283 14764 c
35324 13923 34848 12336 34848 9990 c
34848 0 L
31749 0 L
@c
F
%CHAR: 49041 0 (s) @t
/$fm 1 def
50129 5462 m
53192 5944 L
53363 4715 53845 3775 54633 3116 c
55415 2464 56514 2134 57931 2134 c
59354 2134 60412 2428 61100 3005 c
61788 3587 62135 4269 62135 5045 c
62135 5750 61829 6297 61218 6703 c
60794 6979 59736 7326 58049 7749 c
55779 8326 54197 8820 53321 9243 c
52445 9660 51775 10242 51322 10983 c
50870 11724 50640 12541 50640 13435 c
50640 14252 50828 15005 51205 15699 c
51575 16398 52087 16975 52728 17433 c
53210 17786 53868 18092 54697 18339 c
55532 18586 56426 18709 57378 18709 c
58813 18709 60071 18497 61159 18086 c
62247 17674 63046 17116 63564 16410 c
64081 15699 64434 14758 64628 13576 C
61600 13159 L
61459 14099 61059 14834 60401 15364 c
59742 15893 58807 16157 57602 16157 c
56179 16157 55162 15922 54556 15452 c
53945 14981 53639 14429 53639 13800 c
53639 13394 53768 13035 54021 12712 c
54274 12377 54668 12106 55209 11883 c
55520 11771 56432 11507 57949 11095 c
60142 10507 61671 10031 62535 9654 c
63405 9284 64087 8737 64581 8026 c
65075 7314 65322 6432 65322 5374 c
65322 4339 65016 3369 64416 2452 c
63811 1540 62941 835 61806 335 c
60671 -165 59383 -412 57949 -412 c
55567 -412 53756 82 52510 1070 c
51264 2058 50470 3522 50129 5462 C
@c
F
%CHAR: 76481 0 (j) @t
/$fm 1 def
78792 21655 m
78792 25253 L
81890 25253 L
81890 21655 L
78792 21655 L
@c
74864 -7097 m
75446 -4463 L
76069 -4621 76557 -4704 76910 -4704 c
77545 -4704 78016 -4492 78321 -4075 c
78633 -3657 78792 -2605 78792 -929 c
78792 18292 L
81890 18292 L
81890 -1000 l
81890 -3251 81596 -4815 81014 -5703 c
80268 -6850 79027 -7426 77292 -7426 c
76452 -7426 75640 -7314 74864 -7097 C
@c
F
%CHAR: 84319 0 (u) @t
/$fm 1 def
98636 0 m
98636 2687 L
97207 617 95273 -412 92827 -412 c
91751 -412 90740 -206 89805 206 c
88870 617 88176 1141 87723 1764 c
87265 2393 86947 3157 86765 4063 c
86641 4674 86577 5639 86577 6962 c
86577 18292 L
89675 18292 L
89675 8149 l
89675 6526 89740 5439 89864 4874 c
90063 4057 90475 3422 91104 2952 c
91739 2487 92521 2258 93450 2258 c
94379 2258 95249 2493 96067 2969 c
96884 3445 97460 4098 97795 4915 c
98136 5739 98307 6932 98307 8490 c
98307 18292 L
101405 18292 L
101405 0 L
98636 0 L
@c
F
%CHAR: 103939 0 (m) @t
/$fm 1 def
106267 0 m
106267 18292 L
109037 18292 L
109037 15728 L
109613 16622 110377 17345 111330 17886 c
112282 18433 113370 18709 114587 18709 c
115939 18709 117051 18427 117915 17862 c
118785 17298 119397 16516 119749 15505 C
121202 17639 123083 18709 125400 18709 c
127217 18709 128610 18203 129586 17198 c
130562 16193 131050 14646 131050 12559 c
131050 0 L
127969 0 L
127969 11524 l
127969 12765 127869 13658 127669 14205 c
127464 14746 127099 15187 126576 15522 c
126047 15852 125423 16022 124712 16022 c
123424 16022 122360 15593 121507 14734 c
120661 13882 120232 12512 120232 10630 c
120232 0 L
117133 0 L
117133 11883 l
117133 13265 116880 14299 116374 14987 c
115869 15675 115046 16022 113893 16022 c
113023 16022 112218 15793 111477 15328 c
110736 14870 110195 14199 109866 13317 c
109531 12430 109366 11154 109366 9490 c
109366 0 L
106267 0 L
@c
F
%CHAR: 133326 0 (p) @t
/$fm 1 def
135654 -7009 m
135654 18292 L
138477 18292 L
138477 15916 L
139141 16845 139894 17545 140734 18009 c
141569 18474 142586 18709 143780 18709 c
145344 18709 146720 18303 147913 17504 c
149113 16698 150012 15563 150618 14099 c
151230 12635 151535 11030 151535 9284 c
151535 7414 151200 5727 150524 4227 c
149854 2728 148878 1582 147596 782 c
146314 -12 144968 -412 143557 -412 c
142522 -412 141599 -194 140776 241 c
139952 676 139282 1229 138753 1893 C
138753 -7009 L
135654 -7009 L
@c
138459 9043 m
138459 6691 138935 4951 139888 3822 c
140840 2699 141999 2134 143351 2134 c
144727 2134 145908 2716 146890 3886 c
147872 5051 148366 6856 148366 9302 c
148366 11636 147884 13376 146926 14540 c
145967 15699 144821 16281 143492 16281 c
142169 16281 140999 15663 139982 14429 c
138965 13194 138459 11395 138459 9043 c
@c
F
%CHAR: 0 -39411 (c) @t
/$fm 1 def
14264 -32708 m
17310 -33108 L
16980 -35207 16128 -36853 14752 -38041 c
13382 -39229 11695 -39823 9696 -39823 c
7197 -39823 5180 -39005 3663 -37371 c
2140 -35736 1376 -33390 1376 -30333 c
1376 -28357 1705 -26629 2358 -25147 c
3016 -23665 4010 -22554 5350 -21813 c
6685 -21072 8143 -20702 9713 -20702 c
11701 -20702 13329 -21208 14587 -22213 c
15852 -23218 16663 -24641 17022 -26493 C
14005 -26958 L
13717 -25729 13212 -24806 12483 -24183 c
11753 -23565 10872 -23254 9837 -23254 c
8273 -23254 7003 -23812 6027 -24935 c
5051 -26052 4563 -27822 4563 -30245 c
4563 -32702 5033 -34490 5980 -35607 c
6920 -36718 8149 -37277 9666 -37277 c
10883 -37277 11895 -36900 12712 -36154 c
13529 -35407 14047 -34260 14264 -32708 C
@c
F
%CHAR: 17639 -39411 (o) @t
/$fm 1 def
18809 -30262 m
18809 -26876 19750 -24365 21637 -22736 c
23207 -21384 25124 -20702 27387 -20702 c
29904 -20702 31962 -21525 33555 -23177 c
35155 -24824 35948 -27099 35948 -30004 c
35948 -32361 35596 -34213 34890 -35560 c
34184 -36912 33155 -37959 31809 -38705 c
30457 -39452 28987 -39823 27387 -39823 c
24830 -39823 22760 -39005 21179 -37359 c
19597 -35719 18809 -33355 18809 -30262 c
@c
21996 -30262 m
21996 -32608 22507 -34360 23530 -35525 c
24553 -36695 25841 -37277 27387 -37277 c
28928 -37277 30210 -36689 31233 -35519 c
32250 -34349 32762 -32561 32762 -30162 c
32762 -27899 32250 -26182 31221 -25018 c
30192 -23853 28916 -23271 27387 -23271 c
25841 -23271 24553 -23853 23530 -25012 c
22507 -26170 21996 -27922 21996 -30262 c
@c
F
%CHAR: 37259 -39411 (n) @t
/$fm 1 def
39587 -39411 m
39587 -21119 L
42374 -21119 L
42374 -23718 L
43721 -21707 45661 -20702 48195 -20702 c
49301 -20702 50312 -20902 51235 -21296 c
52164 -21696 52852 -22213 53310 -22860 c
53775 -23501 54092 -24265 54281 -25147 c
54392 -25723 54451 -26729 54451 -28163 c
54451 -39411 L
51347 -39411 L
51347 -28281 l
51347 -27023 51229 -26076 50988 -25447 c
50747 -24824 50318 -24324 49706 -23953 c
49089 -23577 48372 -23389 47543 -23389 c
46220 -23389 45085 -23812 44121 -24647 c
43162 -25488 42686 -27075 42686 -29421 c
42686 -39411 L
39587 -39411 L
@c
F
%CHAR: 56879 -39411 (t) @t
/$fm 1 def
65975 -36636 m
66422 -39376 L
65552 -39558 64770 -39652 64082 -39652 c
62953 -39652 62083 -39476 61459 -39117 c
60842 -38764 60407 -38294 60154 -37712 c
59901 -37136 59772 -35913 59772 -34055 c
59772 -23530 L
57496 -23530 L
57496 -21119 L
59772 -21119 L
59772 -16586 L
62859 -14728 L
62859 -21119 L
65975 -21119 L
65975 -23530 L
62859 -23530 L
62859 -34225 l
62859 -35113 62912 -35677 63017 -35930 c
63129 -36183 63305 -36383 63552 -36536 c
63799 -36683 64152 -36759 64611 -36759 c
64958 -36759 65410 -36718 65975 -36636 C
@c
F
%CHAR: 66680 -39411 (r) @t
/$fm 1 def
68973 -39411 m
68973 -21119 L
71760 -21119 L
71760 -23889 L
72471 -22595 73130 -21737 73736 -21325 c
74335 -20914 75000 -20702 75723 -20702 c
76770 -20702 77828 -21037 78910 -21701 C
77840 -24582 L
77087 -24130 76329 -23906 75570 -23906 c
74888 -23906 74282 -24112 73741 -24518 c
73201 -24929 72818 -25494 72589 -26217 c
72242 -27317 72072 -28522 72072 -29833 c
72072 -39411 L
68973 -39411 L
@c
F
%CHAR: 78428 -39411 (i) @t
/$fm 1 def
80768 -17727 m
80768 -14158 L
83873 -14158 L
83873 -17727 L
80768 -17727 L
@c
80768 -39411 m
80768 -21119 L
83873 -21119 L
83873 -39411 L
80768 -39411 L
@c
F
%CHAR: 86266 -39411 (b) @t
/$fm 1 def
91452 -39411 m
88577 -39411 L
88577 -14158 L
91675 -14158 L
91675 -23165 L
92986 -21525 94656 -20702 96685 -20702 c
97814 -20702 98878 -20931 99883 -21384 c
100889 -21837 101712 -22478 102365 -23295 c
103011 -24118 103523 -25106 103887 -26270 c
104258 -27428 104440 -28669 104440 -29986 c
104440 -33126 103664 -35548 102112 -37259 c
100565 -38970 98701 -39823 96532 -39823 c
94374 -39823 92681 -38923 91452 -37118 C
91452 -39411 L
@c
91417 -30127 m
91417 -32320 91716 -33902 92310 -34878 c
93286 -36477 94609 -37277 96273 -37277 c
97631 -37277 98801 -36689 99789 -35507 c
100777 -34331 101271 -32579 101271 -30245 c
101271 -27857 100795 -26094 99848 -24959 c
98901 -23824 97755 -23254 96414 -23254 c
95056 -23254 93886 -23842 92898 -25018 c
91910 -26194 91417 -27899 91417 -30127 c
@c
F
%CHAR: 105886 -39411 (u) @t
/$fm 1 def
120203 -39411 m
120203 -36724 L
118774 -38794 116840 -39823 114394 -39823 c
113318 -39823 112307 -39617 111372 -39205 c
110437 -38794 109743 -38270 109290 -37647 c
108832 -37018 108514 -36254 108332 -35348 c
108208 -34737 108144 -33772 108144 -32449 c
108144 -21119 L
111242 -21119 L
111242 -31262 l
111242 -32885 111307 -33972 111431 -34537 c
111630 -35354 112042 -35989 112671 -36459 c
113306 -36924 114088 -37153 115017 -37153 c
115946 -37153 116816 -36918 117634 -36442 c
118451 -35966 119027 -35313 119362 -34496 c
119703 -33672 119874 -32479 119874 -30921 c
119874 -21119 L
122972 -21119 L
122972 -39411 L
120203 -39411 L
@c
F
%CHAR: 125506 -39411 (t) @t
/$fm 1 def
134602 -36636 m
135049 -39376 L
134179 -39558 133397 -39652 132709 -39652 c
131580 -39652 130710 -39476 130086 -39117 c
129469 -38764 129034 -38294 128781 -37712 c
128528 -37136 128399 -35913 128399 -34055 c
128399 -23530 L
126123 -23530 L
126123 -21119 L
128399 -21119 L
128399 -16586 L
131486 -14728 L
131486 -21119 L
134602 -21119 L
134602 -23530 L
131486 -23530 L
131486 -34225 l
131486 -35113 131539 -35677 131644 -35930 c
131756 -36183 131932 -36383 132179 -36536 c
132426 -36683 132779 -36759 133238 -36759 c
133585 -36759 134037 -36718 134602 -36636 C
@c
F
%CHAR: 135307 -39411 (e) @t
/$fm 1 def
150153 -33520 m
153358 -33914 L
152852 -35789 151917 -37241 150553 -38276 c
149183 -39305 147437 -39823 145314 -39823 c
142639 -39823 140516 -38999 138952 -37353 c
137383 -35707 136601 -33396 136601 -30421 c
136601 -27340 137394 -24953 138976 -23254 c
140563 -21554 142615 -20702 145144 -20702 c
147590 -20702 149589 -21537 151135 -23201 c
152687 -24865 153463 -27211 153463 -30227 c
153463 -30415 153458 -30691 153446 -31056 C
139805 -31056 L
139917 -33067 140487 -34607 141510 -35672 c
142533 -36742 143803 -37277 145332 -37277 c
146467 -37277 147437 -36977 148242 -36377 c
149048 -35783 149683 -34831 150153 -33520 C
@c
139975 -28504 m
150188 -28504 L
150053 -26970 149659 -25811 149018 -25047 c
148031 -23853 146749 -23254 145179 -23254 c
143756 -23254 142557 -23730 141586 -24682 c
140616 -25635 140081 -26911 139975 -28504 C
@c
F
%CHAR: 154927 -39411 (s) @t
/$fm 1 def
156015 -33949 m
159078 -33467 L
159249 -34696 159731 -35636 160519 -36295 c
161301 -36947 162400 -37277 163817 -37277 c
165240 -37277 166298 -36983 166986 -36406 c
167674 -35824 168021 -35142 168021 -34366 c
168021 -33661 167715 -33114 167104 -32708 c
166680 -32432 165622 -32085 163935 -31662 c
161665 -31085 160083 -30591 159207 -30168 c
158331 -29751 157661 -29169 157208 -28428 c
156756 -27687 156526 -26870 156526 -25976 c
156526 -25159 156714 -24406 157091 -23712 c
157461 -23013 157973 -22436 158614 -21978 c
159096 -21625 159754 -21319 160583 -21072 c
161418 -20825 162312 -20702 163264 -20702 c
164699 -20702 165957 -20914 167045 -21325 c
168133 -21737 168932 -22295 169450 -23001 c
169967 -23712 170320 -24653 170514 -25835 C
167486 -26252 L
167345 -25312 166945 -24577 166287 -24047 c
165628 -23518 164693 -23254 163488 -23254 c
162065 -23254 161048 -23489 160442 -23959 c
159831 -24430 159525 -24982 159525 -25611 c
159525 -26017 159654 -26376 159907 -26699 c
160160 -27034 160554 -27305 161095 -27528 c
161406 -27640 162318 -27904 163835 -28316 c
166028 -28904 167557 -29380 168421 -29757 c
169291 -30127 169973 -30674 170467 -31385 c
170961 -32097 171208 -32979 171208 -34037 c
171208 -35072 170902 -36042 170302 -36959 c
169697 -37871 168827 -38576 167692 -39076 c
166557 -39576 165269 -39823 163835 -39823 c
161453 -39823 159642 -39329 158396 -38341 c
157150 -37353 156356 -35889 156015 -33949 C
@c
F
%CHAR: 0 -78822 (1) @t
/$fm 1 def
13141 -78822 m
10042 -78822 L
10042 -59066 L
9296 -59778 8320 -60489 7109 -61201 c
5891 -61912 4804 -62447 3839 -62800 C
3839 -59807 L
5574 -58990 7091 -58002 8390 -56844 c
9684 -55680 10607 -54557 11148 -53463 C
13141 -53463 L
13141 -78822 L
@c
F
%CHAR: 29421 -78822 (n) @t
/$fm 1 def
31749 -78822 m
31749 -60530 L
34536 -60530 L
34536 -63129 L
35883 -61118 37823 -60113 40357 -60113 c
41463 -60113 42474 -60313 43397 -60707 c
44326 -61107 45014 -61624 45472 -62271 c
45937 -62912 46254 -63676 46443 -64558 c
46554 -65134 46613 -66140 46613 -67574 c
46613 -78822 L
43509 -78822 L
43509 -67692 l
43509 -66434 43391 -65487 43150 -64858 c
42909 -64235 42480 -63735 41868 -63364 c
41251 -62988 40534 -62800 39705 -62800 c
38382 -62800 37247 -63223 36283 -64058 c
35324 -64899 34848 -66486 34848 -68832 c
34848 -78822 L
31749 -78822 L
@c
F
%CHAR: 49041 -78822 (s) @t
/$fm 1 def
50129 -73360 m
53192 -72878 L
53363 -74107 53845 -75047 54633 -75706 c
55415 -76358 56514 -76688 57931 -76688 c
59354 -76688 60412 -76394 61100 -75817 c
61788 -75235 62135 -74553 62135 -73777 c
62135 -73072 61829 -72525 61218 -72119 c
60794 -71843 59736 -71496 58049 -71073 c
55779 -70496 54197 -70002 53321 -69579 c
52445 -69162 51775 -68580 51322 -67839 c
50870 -67098 50640 -66281 50640 -65387 c
50640 -64570 50828 -63817 51205 -63123 c
51575 -62424 52087 -61847 52728 -61389 c
53210 -61036 53868 -60730 54697 -60483 c
55532 -60236 56426 -60113 57378 -60113 c
58813 -60113 60071 -60325 61159 -60736 c
62247 -61148 63046 -61706 63564 -62412 c
64081 -63123 64434 -64064 64628 -65246 C
61600 -65663 L
61459 -64723 61059 -63988 60401 -63458 c
59742 -62929 58807 -62665 57602 -62665 c
56179 -62665 55162 -62900 54556 -63370 c
53945 -63841 53639 -64393 53639 -65022 c
53639 -65428 53768 -65787 54021 -66110 c
54274 -66445 54668 -66716 55209 -66939 c
55520 -67051 56432 -67315 57949 -67727 c
60142 -68315 61671 -68791 62535 -69168 c
63405 -69538 64087 -70085 64581 -70796 c
65075 -71508 65322 -72390 65322 -73448 c
65322 -74483 65016 -75453 64416 -76370 c
63811 -77282 62941 -77987 61806 -78487 c
60671 -78987 59383 -79234 57949 -79234 c
55567 -79234 53756 -78740 52510 -77752 c
51264 -76764 50470 -75300 50129 -73360 C
@c
F
%CHAR: 76481 -78822 (o) @t
/$fm 1 def
77651 -69673 m
77651 -66287 78592 -63776 80479 -62147 c
82049 -60795 83966 -60113 86229 -60113 c
88746 -60113 90804 -60936 92397 -62588 c
93997 -64235 94790 -66510 94790 -69415 c
94790 -71772 94438 -73624 93732 -74971 c
93026 -76323 91997 -77370 90651 -78116 c
89299 -78863 87829 -79234 86229 -79234 c
83672 -79234 81602 -78416 80021 -76770 c
78439 -75130 77651 -72766 77651 -69673 c
@c
80838 -69673 m
80838 -72019 81349 -73771 82372 -74936 c
83395 -76106 84683 -76688 86229 -76688 c
87770 -76688 89052 -76100 90075 -74930 c
91092 -73760 91604 -71972 91604 -69573 c
91604 -67310 91092 -65593 90063 -64429 c
89034 -63264 87758 -62682 86229 -62682 c
84683 -62682 83395 -63264 82372 -64423 c
81349 -65581 80838 -67333 80838 -69673 c
@c
F
%CHAR: 96101 -78822 (f) @t
/$fm 1 def
99164 -78822 m
99164 -62941 L
96430 -62941 L
96430 -60530 L
99164 -60530 L
99164 -58584 l
99164 -57355 99276 -56438 99494 -55844 c
99793 -55039 100317 -54386 101069 -53886 c
101822 -53387 102874 -53140 104233 -53140 c
105103 -53140 106067 -53240 107125 -53451 C
106661 -56156 L
106020 -56038 105409 -55979 104832 -55979 c
103892 -55979 103227 -56179 102839 -56585 c
102445 -56985 102251 -57738 102251 -58843 c
102251 -60530 L
105814 -60530 L
105814 -62941 L
102251 -62941 L
102251 -78822 L
99164 -78822 L
@c
F
%CHAR: 115703 -78822 (j) @t
/$fm 1 def
118014 -57167 m
118014 -53569 L
121112 -53569 L
121112 -57167 L
118014 -57167 L
@c
114086 -85919 m
114668 -83285 L
115291 -83443 115779 -83526 116132 -83526 c
116767 -83526 117238 -83314 117543 -82897 c
117855 -82479 118014 -81427 118014 -79751 c
118014 -60530 L
121112 -60530 L
121112 -79822 l
121112 -82073 120818 -83637 120236 -84525 c
119490 -85672 118249 -86248 116514 -86248 c
115674 -86248 114862 -86136 114086 -85919 C
@c
F
%CHAR: 123541 -78822 (i) @t
/$fm 1 def
125881 -57138 m
125881 -53569 L
128986 -53569 L
128986 -57138 L
125881 -57138 L
@c
125881 -78822 m
125881 -60530 L
128986 -60530 L
128986 -78822 L
125881 -78822 L
@c
F
%CHAR: 131379 -78822 (t) @t
/$fm 1 def
140475 -76047 m
140922 -78787 L
140052 -78969 139270 -79063 138582 -79063 c
137453 -79063 136583 -78887 135959 -78528 c
135342 -78175 134907 -77705 134654 -77123 c
134401 -76547 134272 -75324 134272 -73466 c
134272 -62941 L
131996 -62941 L
131996 -60530 L
134272 -60530 L
134272 -55997 L
137359 -54139 L
137359 -60530 L
140475 -60530 L
140475 -62941 L
137359 -62941 L
137359 -73636 l
137359 -74524 137412 -75088 137517 -75341 c
137629 -75594 137805 -75794 138052 -75947 c
138299 -76094 138652 -76170 139111 -76170 c
139458 -76170 139910 -76129 140475 -76047 C
@c
F
%CHAR: 141180 -78822 (t) @t
/$fm 1 def
150276 -76047 m
150723 -78787 L
149853 -78969 149071 -79063 148383 -79063 c
147254 -79063 146384 -78887 145760 -78528 c
145143 -78175 144708 -77705 144455 -77123 c
144202 -76547 144073 -75324 144073 -73466 c
144073 -62941 L
141797 -62941 L
141797 -60530 L
144073 -60530 L
144073 -55997 L
147160 -54139 L
147160 -60530 L
150276 -60530 L
150276 -62941 L
147160 -62941 L
147160 -73636 l
147160 -74524 147213 -75088 147318 -75341 c
147430 -75594 147606 -75794 147853 -75947 c
148100 -76094 148453 -76170 148912 -76170 c
149259 -76170 149711 -76129 150276 -76047 C
@c
F
%CHAR: 150981 -78822 (e) @t
/$fm 1 def
165827 -72931 m
169032 -73325 L
168526 -75200 167591 -76652 166227 -77687 c
164857 -78716 163111 -79234 160988 -79234 c
158313 -79234 156190 -78410 154626 -76764 c
153057 -75118 152275 -72807 152275 -69832 c
152275 -66751 153068 -64364 154650 -62665 c
156237 -60965 158289 -60113 160818 -60113 c
163264 -60113 165263 -60948 166809 -62612 c
168361 -64276 169137 -66622 169137 -69638 c
169137 -69826 169132 -70102 169120 -70467 C
155479 -70467 L
155591 -72478 156161 -74018 157184 -75083 c
158207 -76153 159477 -76688 161006 -76688 c
162141 -76688 163111 -76388 163916 -75788 c
164722 -75194 165357 -74242 165827 -72931 C
@c
155649 -67915 m
165862 -67915 L
165727 -66381 165333 -65222 164692 -64458 c
163705 -63264 162423 -62665 160853 -62665 c
159430 -62665 158231 -63141 157260 -64093 c
156290 -65046 155755 -66322 155649 -67915 C
@c
F
%CHAR: 170601 -78822 (r) @t
/$fm 1 def
172894 -78822 m
172894 -60530 L
175681 -60530 L
175681 -63300 L
176392 -62006 177051 -61148 177657 -60736 c
178256 -60325 178921 -60113 179644 -60113 c
180691 -60113 181749 -60448 182831 -61112 C
181761 -63993 L
181008 -63541 180250 -63317 179491 -63317 c
178809 -63317 178203 -63523 177662 -63929 c
177122 -64340 176739 -64905 176510 -65628 c
176163 -66728 175993 -67933 175993 -69244 c
175993 -78822 L
172894 -78822 L
@c
F
%CHAR: 182349 -78822 (!) @t
/$fm 1 def
186330 -72554 m
185383 -59166 L
185383 -53569 L
189222 -53569 L
189222 -59166 L
188329 -72554 L
186330 -72554 L
@c
185518 -78822 m
185518 -75288 L
189087 -75288 L
189087 -78822 L
185518 -78822 L
@c
F
T
%%PageTrailer
@rs
@rs
%%Trailer
@EndSysCorelDict
end
%%DocumentSuppliedResources: procset wCorel12Dict 12.0 0
%%EOF
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
@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
......@@ -47,98 +47,112 @@
@end titlepage
@headings single
@iftex
@contents
@end iftex
@c ##########################################################################
@unnumbered Revision history
@multitable @columnfractions .10 .15 .25 .50
@headitem Revision @tab Date @tab Author @tab Changes
@item 1 @tab 03.07.2013 @tab Tomasz Włostowski @tab Initial version
@end multitable
@page
@node Top
@chapter Introduction
This manual provides detailed information about the designs of the
Fine Delay mezzanine (further abbeviated as the FD) and the VHDL core supporting it.
It is not intended for the FD's users and it is definitely not official/formal/certified.
This document contains some detailed information on the hardware design of the
Fine Delay Mezzanine (further abbeviated as the FD) and its VHDL core.
It is not very useful for the FD's users and it is certainly not formal.
Its target are driver developers, carrier/hardware integrators,
people interested in building similar devices and looking for hints and inspiration
or the folks curious why something was done this and not the other way. I therefore
kindly ask the readers to be tolerant for the informal language used in this document.
The manual references to the schematics and the PCB design every couple of lines, so please print them before reading.
or the folks curious why something was done in that and not another way. It also explains
things that are not obvious in the VHDL/test program code, such as the calibration mechainsms
and ACAM's TDC quirks.
The hardware/HDL description contains very frequent references the card's schematics, PCB design and VHDL sources. It is a good idea to print or open them before continuing reading.
@page
@chapter The Hardware
@section Overview
The FD is an FMC mezzanine card, which inputs a TTL pulse and reproduces it on one or more of 4 TTL
outputs after a given time, which can be programmed to any value between 500 ns and 12 seconds with 10 ps resolution.
The exact specifications can be found in the official @cite{Fine Delay User's Manual}.
The FD is a VITA-57 FPGA Mezzanine card, whose basic function is taking TTL pulses and reproducing them on one or more of 4 TTL
outputs after a given time. Delay can be programmed to any value between 600 ns and 12 seconds with 10 ps resolution.
It is also possible to control width, spacing and repetition rate of the output pulses.
The exact specifications can be found in the official User's Manual.
@float Figure,fig:fd_block
@center @image{drawings/block_diagram, 15cm,,,.pdf}
@caption{Block diagram of a FD card.}
@end float
The FD's principle of operation is explained in @ref{fig:fd_simple}. In a nutshell, the card takes the input pulse,
time tags it, adds the desired delay to the time tag and produces a pulse on the output when the time base counter hits
the adjusted tag value. The fine part (that is, less than a single clock cycle) is adjusted by an external programmable delay line.
The FD's principle of operation is explained in @ref{fig:fd_simple}. The card time tags an input pulse (using a Time-to-Digital converter),
adds the desired delay to the time tag and produces a pulse on the output when the internal time base counter hits
the computed sum. The fine part (that is, less than a single clock cycle) is adjusted by an external programmable delay line.
@float Figure,fig:fd_simple
@center @image{drawings/simple_diagram, 15cm,,,.pdf}
@caption{Simplified principle of FD operation.}
@end float
@ref{fig:fd_block} depicts a more detailed hardware block diagram, comprising the following major design blocks:
@ref{fig:fd_block} depicts a detailed hardware block diagram of the FD. The major design blocks are:
@itemize
@item the TDC, using an Acam TDC-GPX chip,
@item output stages, based on EPT195 programmable delay chips,
@item clock distribution circuit, encompassing a multi-output PLL (AD9516),
@item power supplies, SPI general-purpose IO, sensors and ID EEPROM.
@item The TDC, built with the Acam's TDC-GPX chip,
@item Output stages, based on LVPECL '195 programmable delay chips,
@item Clock distribution circuit, encompassing a multi-output PLL synthesizer (AD9516),
@item Power supplies, SPI general-purpose IO, sensors and ID EEPROM.
@end itemize
@float Figure,fig:fd_block
@center @image{drawings/block_diagram, 15cm,,,.pdf}
@caption{Block diagram of a FD card.}
@end float
@section Clock distribution
Relevant files: @code{clock_generator.SchDoc}
The FD utilizes a number of clock signals of different frequencies to synchronize the TDC,
the output stages and the FPGA core altogether. All clock signals are generated by the Analog Devices`
The FD requires a number of different clock signals to synchronize the TDC,
the output stages and the FPGA core altogether. All clocks are generated by the Analog Devices`
AD9516-4 integrated PLL/clock fanout (IC4). This particular chip was chosen due to its wide
configuration capabilities (frequency settings, fine per-output phase adjustment), support
for multiple I/O standards (PECL, single-ended, etc) and low inter-output skew.
The PLL is programmed to produce:
The PLL outputs are programmed as follows:
@itemize
@item OUT9: 125 MHz FPGA reference clock (LVDS). The choice of 125 MHz reference is forced
by compliance with White Rabbit and Gigabit Ethernet for providing external,
sub-ns synchronization of multiple cards. All other clocks used in the design
by compliance with White Rabbit and Gigabit Ethernet for distributed,
sub-nanoseconds synchronization of multiple cards. All other clocks used in the design
are derived from 125 MHz.
@item OUT0..3: 250 MHz clocks tht drive the output flip flops. We use twice the reference
frequency, because the FPGA outputs operate in DDR mode. Outputs 0..2 are inverted to
simplify PCB routing (AD9516's programmable output polarity control ensures they are all in phase).
@item OUT0..3: 250 MHz clocks that drive the output flip flops. The frequency value
comes from the functional requirement for generation of 10 MHz, WR-aligned clock - 250 MHz is the
smallest common multiple of both 10 MHz and 125 MHz WR clock. Note that outputs 0, 1 and 2 are inverted to
simplify PCB routing (this is compensated by AD9516's programmable output polarity control).
@item OUT7: 31.25 Mhz TDC reference clock (LVCMOS). Must be lower than the TDC maximum
reference frequency (40 MHz) and an integer fraction of 125 MHz. 31.25 MHz is the largest
possible value.
@item OUT4, OUT5: 7.125 MHz TDC start signals (LVPECL to the TDC, LVCMOS to the FPGA).
Rising edges of these clocks are the reference points for time interval measurement in the TDC.
7.125 MHz is the fastest frequency that is an integer fraction of 125 MHz and meets the maximum
start pulse frequency constraint of the TDC (10 MHz).
possible value. Too low value would significantly reduce TDC throughput.
@item OUT4, OUT5: 7.8125 MHz TDC start signals (LVPECL to the TDC, LVCMOS to the FPGA).
Rising edges of these clocks are the reference points for time interval measurement in the TDC. The TDC start signal
is further divided by 2 (by toggling TDC's @code{StartDis} pin) to avoid exceeding ACAM's maximum start frequency of 7 MHz. Unfortunately it
is not possible to achieve higher division ratios directly in the PLL chip.
@end itemize
AD9516's PLL bandwidth is set by the loop filter components (R41, C33 and neighbours)
and is set to 10 kHz, resulting in optimal phase noise distribution. The PLL is referenced
by a 25 MHz VCTCXO OSC5, a Mercury Crystal VM53S3-series oscillator. The TCXO can be digitally
AD9516's PLL bandwidth is set to approx. 10 kHz by the loop filter components (R41, C33 and neighbours), resulting in optimal phase noise distribution. The PLL is referenced
to a 25 MHz VCTCXO OSC5, a Mercury Crystal VM53S3-series oscillator. The TCXO can be digitally
tuned within (±10 ppm) range by the 16-bit DAC IC14 (AD5662). Low-cost shunt regulator IC10
(LM336) provides the reference voltage for the DAC (it needs not be extremely stable because the
whole circuit usually works in a feedback loop, see fig. @ref{fig:wr_pll}). The combination
whole circuit usually works in a feedback loop, see @ref{fig:wr_pll}). The combination
of the used DAC and oscillator meets the requirements of Synchronous Ethernet and White Rabbit
for synchronization: 1kHz PLL bandwidth and tuning sensitivity of < 1 ppb and range of > ±2.5 ppm.
Careful readers should have noticed at this point that it's not possible to directly feed an
Careful readers should have noticed at this point that it is not possible to directly feed an
external reference clock to the card. This limitation is caused by the lack of carrier to
mezzanine clock signals in the low pin version of the FMC connector and is solved by locking
mezzanine clock signals in low pin version of an FMC connector and is solved by locking
the cards' clock to the the external frequency with a PLL implemented in the carrier FPGA.
The PLL is powered from 3.3V filtered by an LC circuit (L3 and its surroundings), following the
manufacturer's recommendation. Programming is performed via the SPI bus, directly connected
The PLL is powered from 3.3V filtered by an LC circuit (L3 and its surroundings), following
manufacturer's guidelines. Programming is done via the SPI bus, directly connected
to the FPGA. A multipurpose STATUS signal is also routed to the FPGA, mainly for fast
out-of-lock detection.
loss of lock detection.
@section Input stage
......@@ -149,21 +163,20 @@ by the TDC and the FPGA. Following the signal path starting from the input conne
@itemize
@item fuse F5 protects the input stage against a serious overvoltage/overcurrent
(e.g. connecting the input to a 12 V DC power supply)
@item resistors R110, R116, R117 along with the mosfet T2 constitute a programmable
@item resistors R110, R116, R117 along with the MOSFET T2 constitute a programmable
50 Ohm termination. 3 resistors connected in parallel were used to give more freedom
for the PCB designer (the board is packed quite tightly). R76 ensures the calibration mode
is off by default.
for the PCB designer (the board is packed quite tightly) and ease power dissipation.
R76 ensures calibration mode is off by default.
@item PIN diodes D6 (BAR66) and resistor R57 form a fast overvoltage clamping circuit.
R57 reduces the D6's clamping current (~200 mA) for small overloads, clamping currents
above 200 mA will anyway blow the fuse F5. R108 pulls down the input, lowering it's impedance
and preventing an unconnected input from taking glitches as legitimate trigger pulses.
@item FET switch IC18 (TS3USB221) is selects the signal that drices the TDC input
and preventing an unconnected input from taking glitches/EMI as legitimate trigger pulses.
@item FET switch IC18 (TS3USB221) selects the signal that drives the TDC input
between the trigger input and a calibration line driven by the FPGA (the calibration process
will be discussed later). TRIG_SEL line selects the active input (by default, it's the trigger in).
will be discussed later). @code{TRIG_SEL} line selects the active input (by default, it's the LEMO trigger connector).
@item Output of the switch feeds 3 other components: an LVTTL to LVPECL buffer (IC5, 100EPT29),
which drives the TDC's Stop input, an LVCMOS buffer (IC23, LVC125) that feeds the trigger signal
to the FPGA and a single-gate D flip flop which takes part in the calibration process
(please be patient...). The physical length of the signal path between these components
to the FPGA and a single-gate D flip flop which takes part in the DDMTD calibration. The physical length of the signal path between these components
is very short (5mm on the PCB) to avoid stubs and reflections.
@end itemize
......@@ -171,16 +184,16 @@ is very short (5mm on the PCB) to avoid stubs and reflections.
Relevant files: @code{acam_tdc.SchDoc}
The TDC, just as it's name says, converts an incoming pulse into a digital value, denoting the
moment in time at which the pulse's rising (or falling) edge occured. Well, it's not entirely
true. In a real world, a TDC needs a notion of time, so it's output is the time difference
The TDC, just as its name says, converts an incoming pulse into a digital value, denoting the
moment in time at which the pulse's rising (or falling) edge occured... Well, that is not entirely
true. In The Real World, a TDC must be provided with a notion of time, so its output is the time difference
between two inputs, called Start and Stop. The start input is used to provide the time base
(i.e. pulses with edges occuring at known moments in time) and the stop input(s) take in the
(i.e. pulses occuring at well defined moments in time) and the stop input takes the
pulses to be timestamped.
The FD's TDC is a single-chip solution, called TDC-GPX made by Acam (IC8). It can simultaneously
The FD's TDC is a single-chip solution, called TDC-GPX, made by Acam (IC8). It can simultaneously
timestamp from 1 to 8 inputs, with accuracy and repetition rate depending on the mode of
operation (R, I, M, G-modes, more details in the @cite{TDC-GPX datasheet}). In the FD, the ACAM serves two purposes:
operation (R, I, M, G-modes, more details in the TDC-GPX datasheet). In the FD, the ACAM serves two purposes:
@itemize
@item The obvious one: @b{time tagging trigger pulses}. The TDC in configured in the G-mode, with a single
stop input, providing 7 Mpulses/second throughput, measurement range of 40 us and resolution (one-sigma)
......@@ -189,17 +202,17 @@ clock (divided internally by 2), and the Stop feeding in trigger pulses. As a re
the rising edge of the most recent start pulse and the stop pulse - for a (7.125 / 2) MHz start event
frequency, it gives a measurement range of 0 to 256 ns. The coarse part of the timestamp is
produced with a counter inside the FPGA and the two values are merged together to obtain the
final, accurate value (see @ref{Timestamp processing}).
final, accurate value (@xref{Timestamp postprocessing}).
@item @b{Calibration} of the output delay lines, which is performed during initialization
of the card. It's goal is to determine the setpoint for each delay line that produces a delay of exactly 8 ns
(single reference clock cycle), and thus compensates for the PVT effects. The TDC is working in the I-mode
@item @b{Calibration} of the output delay lines, done during initialization
of the card. Its goal is to determine the setpoint for each delay line that results with a delay of exactly 8 ns
(single reference clock cycle), and thus compensates the PVT effects. The TDC is working in the I-mode
(81 ps resolution), with one LVTTL start connected to an FPGA output generating arbitrary pulses and
the 4 LVTTL stop inputs wired to the outputs of the delay chips.
the 4 LVTTL stop inputs wired to the outputs of the delay chips (@xref{Output stage calibration}).
@end itemize
The interesting part about the TDC is how it measures time differences so accurately - obviously,
it does not have a counter running at 1/82 ps (= ~12 GHz). Instead it employs a tapped delay line (see @ref{fig:tdc_principle}),
it does not have a counter running at 1/82 ps (approx. 12 GHz). Instead it employs a tapped delay line (see @ref{fig:tdc_principle}),
fabricated in silicon as a series of identical buffers or inverters. The input of the line is connected
to the Start signal, while the output of each buffer drives a latch disabled by the Stop signal.
The later the Stop signal comes after Start, the more ones will be latched in, and the higher
......@@ -214,24 +227,24 @@ Unfortunately, in @i{The Real World}, PVT
effects come into play, causing the delay introduced by each buffer to vary with temperature,
voltage and between different chips. The TDC by Acam employs a clever trick to compensate for this
delay spread. It has another delay line, with more or less identical silicon layout but with
positive feedback, turning it into a ring oscillator. The frequency produced by this oscillator
positive feedback, turning it into a ring oscillator. Frequency of this oscillator
is continuously measured and compared against a reference value corresponding to the desired
bin size. The resulting error signal drives a servo that controls the voltage powering both the
oscillator and the measurement delay line(s) in such way that bin size stays constant (assuming
that delays introduced by each of the buffers scale with very similar factors). This explains
why the power circuitry for the TDC is so complex (3 LM1117 LDO regulators - IC6, IC89 and IC21).
The servo output signal (PHASE) is PWM-modulated and after filtering in R17-C22-R16 and R20-C42-R22
circuits, it produces a bias voltage on the ADJ pin of the regulators, which directly determines
The servo output signal @code{PHASE} is PWM-modulated and after filtering in R17-C22-R16 and R20-C42-R22
circuits, set bias voltage on the ADJ pins of the regulators, which directly determine
their output voltages (Vadj = Vout - 1.25 V). The values of the voltage divider components and
the large number of decoupling capacitors come from the TDC-GPX reference design provided by Acam.
large number of decoupling capacitors come from the TDC-GPX reference design provided by Acam.
The TDC communicates with the FPGA using a simple asynchronous address/data bus, with 4 address
bits and 28 data bits. Aside from standard signals (CS, RD, WR), the FPGA drives the TDC FIFO
purge signal (TDC_ALUTRIGGER) and receives the Timestamp FIFO Empty and Error flags (TDC_EF and TDC_ERR).
Series resistors on TDC data lines are provided to match the impedance of the PCB traces,
bits and 28 data bits. Aside from standard bus lines (@code{CS}, @code{RD}, @code{WR}), the FPGA drives the TDC FIFO
purge signal (@code{TDC_ALUTRIGGER}) and receives the Timestamp FIFO Empty and Error flags (@code{TDC_EF} and @code{TDC_ERR}).
Series resistors on TDC data lines are provided to match impedance of the PCB traces,
improving signal integrity and EMC performance.
Note that the address inputs of the TDC are not driven by the FPGA, but by the SPI GPIO controller (MC23S17, ICxx).
Note that the address inputs of the TDC are not driven by the FPGA, but by the SPI GPIO controller (MC23S17, IC19).
This is due to lack of free pins in the FMC connector. Fortunately, the address value needs to be modified
only when setting up the TDC and it stays constant during data readout, having no impact on performance.
......@@ -247,33 +260,33 @@ The role of the FD's output stages is to:
@end itemize
The first task is done by the discrete LVPECL flip-flops (IC3). The D inputs of the FFs are
connected to the FPGA pins (output counter comparators), while the CLK inputs supply 4 low-skew
connected to FPGA pins (output counter comparators), while the CLK inputs supply 4 low-skew
250 MHz clocks, synchronous with the FPGA's reference 125 MHz clock. This way, poor quality
pulses prouduced by the FPGA are retimed and deskewed, resulting with an output-to-output skew
of less than 100 ps and jitter level comparable to the PLL chip.
of less than 100 ps and jitter level comparable to noise of the PLL chip.
Retimed output signals are afterwards fed to the delay lines (IC2, IC7). A SY89295 chip from
Retimed output signals are fed to the delay lines (IC2, IC7). A SY89295 chip from
Micrel was used, mainly because of availabilty in QFN packages (PCB space constraints).
The delay lines are configured by providing a 10-bit word to D9..D0 inputs and latching it in by asserting LEN input low. Value 0 corresponds to ~2.2 ns and 1023 to ~12.5 ns, giving
quite a lot of headroom (we need 4 ns range). The delay is reconfigured immediately after laching in a new value. All delay chips share
same data bus, which is arbitrated by the FPGA (again, due to lack of pins in the FMC connector). The price is higher minimum possible delay setpoint:
since updating a single chip takes 3 clock cycles (24 ns), the worst-case update time is 96 ns (so we lose 72 ns). Resistors R11 and R53 select the signalling
The delay lines are configured by outputting the number of delay taps on @code{D0..9} and latching it in by asserting @code{LEN} input low. Value @code{0} corresponds to 2.2 ns and @code{1023} to 12.5 ns, giving
quite a lot of headroom (we need 4 ns range). Delays are updated immediately after laching in a new value. All delay chips share
same data bus, which is arbitrated by the FPGA (again, due to lack of pins in the FMC connector). The price is higher minimum possible delay setpoint. Resistors R11 and R53 select the signalling
level for the control inputs (LVTTL).
The differential signal is converted back to LVTTL by IC1 (SY100EPT23) and fed to a single ended driver IC25,
built using a fast high current operational amplifier AD8009. Resistors R69 and R71 set the gain to get 6 V peak
level on a high impedance load. R75 ensures proper biasing of the bipolar output stage of IC1. The opamp is powered from
a dedicated switched mode power supply (+8 V/-2 V). Amplified signal passes through the SSR switch SW1, serving the purpose
of enabling/disabling the output in a rock-solid, glitch-proof way. D4 / F1 circuit ensures ESD/overcurrent/overvoltage protection. R72, together with
the opamp's output and SSR's series impedances form a 50 Ohm source termination. R65 ensures low state on the output when the card is disabled.
The lowpass circuit R42/C49 makes sure the SSR is switched of and off with some dignity. IC26 buffers the output signal for driving feedback TDC input (calibration).
The D flip flop IC27 is a part of DDMTD-based calibration scheme. R66 and R34 constitute a voltage divider, bringing down the 6 V output of the opamp to a level
that is acceptable by LVC/AUP logic. Yet again, due to lack of pins, calibration flip flop outputs are ANDed together, making a trivial multiplexer (outputs are calibrated one-by-one,
of enabling/disabling the output in a rock-solid, glitch-proof way. D4 / F1 circuit provides ESD/overcurrent/overvoltage protection. R72, together with
the opamp's output and SSR's series impedances form a 50 Ohm source termination. R65 forces low state on the output when the card is disabled.
The lowpass circuit R42/C49 makes sure the SSR is switched without glitching. IC26 buffers the output signal for driving feedback TDC input (calibration).
The D flip flop IC27 is a part of DDMTD-based calibration circuit. R66 and R34 constitute a voltage divider, bringing down the 6 V output of the opamp to a level
that is acceptable by LVC/AUP logic. Yet again, due to lack of pins, calibration flip flop outputs are ANDed together, making a trivial multiplexer (one output is calibrated at a time,
while the rest is driven to 1). The output stage meets edge rising time requirement of 2 V/ns (thanks to extreme output voltage rise speed of AD8009 of 5.5 kV/us) for both 50 Ohm and high impedance loads and is capable of producing neat, clean pulses of 3 V level on 50 Ohms, suitable for directly driving TTL inputs (see @ref{fig:output_shape}).
@page
@float Figure,fig:output_shape
@center @image{drawings/output_shape, 10cm,,,.png}
@caption{Shape of output pulse rising edge on a 50 Ohm load.}
@caption{Shape of an output pulse rising edge on a 50 Ohm load.}
@end float
......@@ -281,54 +294,146 @@ while the rest is driven to 1). The output stage meets edge rising time requirem
Relevant files: @code{FMC_Delay_1ns_4cha.SchDoc}.
Here are all other components that didn't end up in previous sections:
Below are listed all components that didn't qualify to the previous sections:
@itemize
@item SPI GPIO expander (IC19 - MCP23S17): drives seldom changing digital signals, saving some pins in the FMC
plug for more important purposes. The outputs driven are TDC address lines, output stage SSR enables,
calibration mode select and termination enable lines.
plug for more important purposes. These signals are: TDC address lines, output stages SSR enable (4x),
calibration mode select and termination enable. See table below for GPIO pin mapping:
@multitable @columnfractions .20 .80
@headitem GPIO pin @tab Signal
@item @code{A0} @tab Input termination enable (active hi)
@item @code{A2} @tab Output 4 enable (active hi)
@item @code{A3} @tab Output 3 enable (active hi)
@item @code{A4} @tab Output 2 enable (active hi)
@item @code{A5} @tab Output 1 enable (active hi)
@item @code{A6} @tab Trigger select (0 = external, 1 = FPGA)
@item @code{B0} @tab ACAM address bit @code{0}
@item @code{B1} @tab ACAM address bit @code{1}
@item @code{B2} @tab ACAM address bit @code{2}
@item @code{B3} @tab ACAM address bit @code{3}
@end multitable
@item Buffers (IC12, IC28, IC29 - LVC1G125): ensure correct operation of all SPI peripherals by
adapting 2.5 V LVCMOS levels from the FPGA to 3.3 V LVTTL,
@item Buffers (IC32, IC31 - LVC1G125): boost output current/levels of the FPGA for driving calibration
@item Buffers (IC32, IC31 - LVC1G125): boost output current & voltage levels of the FPGA for driving calibration
inputs (DDMTD clock and calibration TDC pulses),
@item 1-Wire temperature sensor (IC13, DS18B20U+): measures the temperature of the output delay lines
(used by on-the-fly delay drift compensation) and gives each board
an unique ID number.
(used by on-the-fly delay drift compensation) and gives each board an unique ID number.
@item Two LEDs and a configiuration EEPROM (IC22) - standard components of every FMC card. The EEPROM is also used for storage of calibration parameters.
@item Power supply: the FD includes two switching PSUs: a buck converter IC11 for +8 V / 600 mA supply and an inverting converter IC30, producing -2 V @ 600 mA. Both converters are solely for
powering the output stage opamps.
@item Voltage supervisor IC36 (TPS3307-33) - ensures that the card is un-reset when all the supply voltages have stabilized.
@item Voltage supervisor IC36 (TPS3307-33) - ensures that the card is un-reset only after all supply voltages have stabilized.
@item Slow power-on-reset circuit (R78, D1, C57).
@item TVS diode D7: additional overvoltage protection for outputs (when a high current DC voltage is connected, D7 clips it to a safe level, because P8V PSU is unable to sink current).
@end itemize
@page
@chapter The VHDL
This chapter provides a brief description of the VHDL design of the FD core. For more detailed explanations, you may need to refer to the comments in the source code. The same applies for
descriptions of all interface signals.
This chapter provides a brief description of the VHDL design of the FD core. For more detailed explanations, you may need to refer to the comments in the source code.
@section Core interface
The table below lists all I/O ports of the VHDL FD core and the corresponding nets on the mezzanine schematic, if applicable. Note that the exact pin locations are not provided here - in order to save your time and minimize chances of making an error, a script that generates an UCF file for different carriers is provided (in @code{scripts/ucfgen.py} directory).
@multitable @columnfractions .20 .12 .55 .20
@headitem Port @tab Direction @tab Purpose @tab SCH net
@item @code{clk_ref_0_i} @tab input @tab Reference clock (from AD9516), in-phase
@item @code{clk_ref_180_i} @tab input @tab Reference clock (from AD9516), inverted via FPGA's DCM/PLL. Used for DDR output drivers
@item @code{clk_sys_i} @tab input @tab System clock (Wishbone). Must be slower than @code{clk_ref_0_i}
@item @code{clk_dmtd_i} @tab input @tab DMTD clock from the WR Core (optional)
@item @code{rst_n_i} @tab input @tab Global core reset, active low
@item @code{dcm_reset_o} @tab output @tab Reset signal for the DCM/PLL produdcing DDR @code{clk_ref} clocks
@item @code{dcm_locked_i} @tab output @tab Lock detection signal from the DCM/PLL produdcing DDR @code{clk_ref} clocks
@item @code{trig_a_i} @tab input @tab FPGA trigger input @tab @code{TRIG_TO_FPGA}
@item @code{tdc_cal_pulse_o} @tab output @tab FPGA calibration trigger output @tab @code{CAL_PULSE}
@item @code{tdc_start_i} @tab input @tab 7.8125 MHz TDC start signal @tab @code{FPGA_TDC_START}
@item @code{dmtd_fb_in_i} @tab input @tab DDMTD input calibration feedback @tab @code{DMTD_FB_IN}
@item @code{dmtd_fb_out_i} @tab input @tab DDMTD output calibration feedback @tab @code{DMTD_FB_OUT}
@item @code{dmtd_samp_o} @tab output @tab DDMTD calibration flip-flop clock @tab @code{DMTD_CLK}
@item @code{led_trig_o} @tab output @tab Trigger LED @tab @code{LED_TRIG}
@item @code{ext_rst_n_o} @tab output @tab FMC hardware reset line @tab @code{EXT_RESET_N}
@item @code{pll_status_i} @tab input @tab AD9516 STATUS pin @tab @code{PLL_STATUS}.
@item @code{acam_d_o}, @code{acam_d_i}, @code{acam_d_oen_o} @tab tristate @tab ACAM data bus. Tristate enable signal is active LOW @tab @code{TDC_D}
@item @code{acam_emptyf_i} @tab input @tab ACAM empty flag @tab @code{TDC_EF}
@item @code{acam_alutrigger_o} @tab output @tab ACAM ALU Trigger line (used as FIFO purge signal) @tab @code{TDC_ALUTRIGGER}
@item @code{acam_wr_n_o} @tab output @tab ACAM write enable @tab @code{TDC_WRN}
@item @code{acam_rd_n_o} @tab output @tab ACAM read enable @tab @code{TDC_RDN}
@item @code{acam_start_dis_o} @tab input @tab ACAM Start Disable pin @tab @code{TDC_START_DIS}
@item @code{acam_stop_dis_o} @tab input @tab ACAM Stop Disable pin @tab @code{TDC_STOP_DIS}
@item @code{spi_cs_dac_n_o} @tab output @tab AD5662 DAC SPI chip select @tab @code{SPI_DAC_CSN}
@item @code{spi_cs_pll_n_o} @tab output @tab AD9516 PLL SPI chip select @tab @code{SPI_PLL_CSN}
@item @code{spi_cs_gpio_n_o} @tab output @tab MCP23S17 GPIO SPI chip select @tab @code{SPI_IO_CSN}
@item @code{spi_sclk_o} @tab output @tab SPI clock @tab @code{SPI_SCK}
@item @code{spi_mosi_o} @tab output @tab SPI master data output @tab @code{SPI_MOSI}
@item @code{spi_miso_i} @tab input @tab SPI master data input @tab @code{SPI_MISO}
@item @code{delay_len_o} @tab output @tab SY89295 Latch Enable pins (0 = channel 1) @tab @code{DELAY_LEN}
@item @code{delay_pulse_o} @tab output @tab Coarse pulse outputs @tab @code{DIN}
@item @code{delay_val_o} @tab output @tab Number of fine delay taps @tab @code{DELAY_D}
@item @code{owr_en_o}, @code{owr_i} @tab open-drain @tab One-wire bus for the temperature sensor/ID chip. When @code{owr_en_o} is high, 1-wire bus is shorted to GND @tab @code{ONEWIRE}
@item @code{i2c_scl_o}, @code{i2c_scl_oen_o}, @code{i2c_scl_i} @tab tristate @tab I2C SCL line @tab @code{SCL}
@item @code{i2c_sda_o}, @code{i2c_sda_oen_o}, @code{i2c_sda_i} @tab tristate @tab I2C SDA line @tab @code{SDA}
@item @code{fmc_present_n_i} @tab input @tab FMC presence pin @tab @code{PRSNT_M2C_L}
@item @code{tm_link_up_i} @tab input @tab WR link state indication
@item @code{tm_time_valid_i} @tab input @tab WR timing validity indication
@item @code{tm_cycles_i} @tab input @tab WR 8 ns cycles counter
@item @code{tm_tai_i} @tab input @tab WR TAI seconds counter
@item @code{tm_clk_aux_lock_en_o} @tab output @tab Enables disciplining of @code{clk_ref_i} to WR clock
@item @code{tm_clk_aux_locked_i} @tab input @tab Indicates if @code{clk_ref_i} is locked to WR clock
@item @code{tm_clk_dmtd_locked_i} @tab input @tab Indicates lock status of @code{clk_dmtd_i}
@item @code{tm_dac_value_i} @tab input @tab WR servo tuning word for AD5662 DAC
@item @code{tm_dac_wr_i} @tab input @tab Valid indication for WR servo tuning word
@item @code{wb_XXX_i}, @code{wb_XXX_o} @tab in/out @tab Wishbone bus for control registers access
@item @code{tdc_seconds_o}, @code{tdc_cycles_o}, @code{tdc_frac_o} @tab output @tab
Direct TDC timestamp output, for host-less environments.
@item @code{tdc_valid_o} @tab output @tab
Validity indication for direct timestamp output.
@item @code{outx_seconds_o}, @code{outx_cycles_i}, @code{outx_frac_i} @tab input @tab
Direct pulse start input, for host-less environments.
@item @code{tdc_valid_o} @tab output @tab
@code{1} latches in a trigger timestamp for a given output channel.
@end multitable
The core also requires a few generic parameters to be set up in order to work:
@multitable @columnfractions .30 .70
@headitem Parameter @tab Description
@item @code{g_with_wr_core} @tab Enables/disables White Rabbit support
@item @code{g_simulation} @tab Reduces internal timeouts and delays to speed up simulations. Synthesizing with @code{g_simulation} enabled will very likely produce a non-functional bitstream
@item @code{g_with_direct_timestamp_io} @tab Enables/disables direct timestamp I/O ports (@code{tdc_XXX_o} and @code{outx_XXX_i}). @b{When enabled, delay mode is not available!}
@item @code{g_interface_mode}, @code{g_address_granularity} @tab Wishbone slave mode (classic/pipelined) and address granularity (32-bit word or byte addressing).
@end multitable
@section Top Level
Relevant files: @code{fine_delay_core.vhd}.
Relevant files: @code{fine_delay_core.vhd}, @code{fine_delay_pkg.vhd}.
@float Figure,fig:hdl_top
@center @image{drawings/fpga_diagram, 15cm,,,.pdf}
@caption{Block diagram of the FD VHDL core.}
@end float
The top level diagram of the FD core is shown in @ref{fig:hdl_top}, comprising the following components:
The top level diagram of the FD core is shown in @ref{fig:hdl_top}. Its major components are:
@itemize
@item ACAM timestamper unit, which produces time tags for the input pulses,
@item ACAM timestamper unit, producing time tags for input pulses,
@item 4 FD channel drivers, which take these time tags, add the desired delay and produce a number pulses of given width and spacing,
@item DDR driver, placed outside the FD channel driver, since it is platform specific,
@item Ring buffer, providing timestamps of input/output pulses for the host driver,
@item Platform-specfic DDR drivers,
@item Ring buffer, providing timestamps of input/output pulses for the host system,
@item Time base and reset generators, calibration logic and peripheral I/O cores (Onewire, etc.)
@end itemize
All of these are controlled by the host via a Wishbone bus. There are 6 Wishbone slaves in the design: 4 output register banks (one per each channel driver),
All of these are accessible from the host via a Wishbone bus. There are 6 Wishbone slaves in the design: 4 output register banks (one per each channel driver),
the main register bank (shared between all other sub-cores) and a 3rd-party OneWire core. Custom register banks were generated using the @code{wbgen2} tool.
An SDB descriptor is provided for plug&play integration on the carrier with other cores. The core communicates with the outside world via the following interfaces.
An SDB descriptor is provided for plug&play integration on the carrier with other cores.
Aside from Wishbone, the FD core provides direct timestamp I/O ports, which can be used to easily collect timestamps and trigger output pulses from other cores in your design.
Aside from the Wishbone registers, the FD core provides direct timestamp I/O ports, which can be used to easily collect timestamps and trigger output pulses from other cores in your design. Note that in order to use the direct I/O it is still necessary to program the core and the TDC via Wishbone.
@subsection Clocks & Time base
@subsection Clocks and time base
Relevant files: @code{fine_delay_core.vhd}, @code{fd_csync_generator.vhd}.
The FD core requires a number of clock signals to operate:
......@@ -339,29 +444,27 @@ carrier firmware must generate the shifted version with a platform-specific PLL/
references the entire pulse processing path (TDC core, output drivers, calibration logic & time base generator).
@item @code{clk_sys_i}: System clock, used by Wishbone busses, the direct timestamp I/O port and peripheral logic. Must not be faster than
@code{clk_ref_0_i}. Having a separate system clock domain simplifies integration with other IP cores on the same Wishbone bus.
@item @code{clk_dmtd_i}: DDMTD offset clock (close to 125 MHz) from the associated WR core. Used exclusively by the DDMTD calibration logic,
not necessary for normal operation of the card.
@item @code{clk_dmtd_i}: DDMTD offset clock (close to 62.5 MHz) from the associated WR core. Used exclusively by the DDMTD calibration logic, not necessary for normal operation of the card.
@end itemize
The time base for the FD core is provided by the @code{fd_csync_generator} unit. By ``time base'', we mean the the signals representing the core's internal notion of time, which are synchronous to the reference clock @code{clk_ref_0}:
@itemize
@item @code{csync_utc}: UTC/TAI seconds
@item @code{csync_coarse}: number of @code{clk_ref_0} cycles since beginning of the current second
@item @code{csync_pps}: Pulse-per-second signal, generated 3 cycles before beginning of each second. The 3-cycle advance is to accommodate for pipeline delays in the TDC and output drivers.
@item @code{csync_utc}: TAI seconds,
@item @code{csync_coarse}: number of @code{clk_ref_0} cycles since beginning of the current second,
@item @code{csync_pps}: Pulse-per-second signal, generated 3 cycles in advance, to accommodate for pipeline delays in the TDC and output drivers.
@end itemize
Timing-wise, the FD can work in one of these two modes:
Timing-wise, the FD can work in two modes:
@itemize
@item @b{local time base} mode, where @code{clk_ref_0} oscillator is free running and the time counters
are coarsely initialized by the host through the @code{TM_SECH}, @code{TM_SECL}, @code{TM_COARSE} and @code{TCR} registers.
In this mode, the TDC input/output events cannot be accurately related to other cores/devices,
@item @b{Local time base} mode, where @code{clk_ref_0} oscillator is free running and the time counters
are coarsely initialized by the host through @code{TM_SECH}, @code{TM_SECL}, @code{TM_COARSE} and @code{TCR} registers.
In this mode, the TDC input/output events cannot be very accurately related to other cores/devices,
and the delay accuracy is as good as of the local oscillator (±2.5 ppm),
which means worst case error of 2.5 ns for a delay setting of 1 ms).
which means worst case error of 2.5 ns for a delay setting of 1 ms.
@item @b{White Rabbit time base} mode, in which the reference clock is phase-locked to the WR master clock (by means of the SoftPLL
inside the WR Core) and the time base signals are following the second/cycles counters provided by the WR Core
(all @code{tm_} prefixed signals in the top level).The accuracy is only
limited by the accuracy of the master clock. WR ensures inter-card synchronization better than 1 ns.
For your convenience, the diagram on @ref{fig:wr_pll} shows the interaction between the hardware and the WR/FD cores.
(all @code{tm_} prefixed signals in the top level). WR provides inter-card synchronization better than 1 ns.
@ref{fig:wr_pll} shows interactions between the hardware and the cores while in White Rabbit mode.
@end itemize
@float Figure,fig:wr_pll
......@@ -370,7 +473,7 @@ For your convenience, the diagram on @ref{fig:wr_pll} shows the interaction betw
@end float
Mode selection is controlled by the @code{TCR} register and the @code{p_whiterabbit_fsm} state machine,
which also provides the status of WR/local operation and can generate interrupts whenever the state
which also informs driver about the status of WR/local operation and can generate interrupts whenever the state
of the synchronization source changes. When the WR link goes down, the FSM automatically
switches the card to local time base mode, retaining the previous value of time base counters
(so the time will slowly drift away from the WR time scale, but not ``jump''). There is no
......@@ -386,7 +489,20 @@ The TDC controller interfaces with the ACAM TDC-GPX chip and does whatever is ne
@item merging these values together, aligning the result to the local timebase and outputting everything in a format digestible by the pulse generators.
@end itemize
The TDC works by default in a so-called G-Mode, utilizing four tapped delay lines, two for start events and two for stop events. This improves the resolution and average precision at the cost of worst-case error. For calibration purposes, another mode (I-mode) is used, as it provides independent, FPGA driven start input and 4 stop inputs.
@subsection Timestamp format
The FD core uses standard White Rabbit timestamp format (@ref{fig:ts_format}), where each timestamp consists of 3 fields:
@itemize
@item 40 bit @code{seconds}: number of TAI seconds since 1st January, 1970,
@item 28-bit @code{coarse}: number of reference clock cycles since the beginning of current second. In case of the FD, reference clock is 125 MHz, so @code{coarse} range is 0 to 124999999.
@item 12-bit @code{frac}: fraction of 8 ns, scaled to span full 12 bit range. @code{frac = 4095} @code{8 ns * 4095/4096}.
@end itemize
@float Figure,fig:ts_format
@center @image{drawings/ts_format, 13cm,,,.pdf}
@caption{WR timestamp format used by the FD.}
@end float
For example, a hardware timestamp of @code{12:50000:1000} is 12 seconds + (50000 * 8 ns) + (1000 / 4096 * 8 ns) = 12.000400001953125 s.
@subsection TDC timing
......@@ -394,80 +510,263 @@ Before we time tag any pulses, we need to make sure the TDC is referenced to som
this something and the ACAM's internal time base is known (or even better, constant). Inside the TDC core, the time base consists of:
@itemize
@item @code{utc_count} - seconds counter,
@item @code{coarse_count} - coarse start cycle counter, that counts TDC start events. In our case, the TDC start period of 256 ns is achieved by driving the Start input with a 7.8125 MHz clock coming from the PLL and gating out every second cycle via ACAM's StartDis input to effectively divide it by 2.
@item @code{start_count} - start subcycle counter (0..31, reset with each start cycle of the TDC,
@item @code{subcycle_offset} - offset between the ACAM's and core's internal timescales.
@item @code{coarse_count} - coarse start cycle counter incremented after each TDC start event. In our case, the TDC start period of 256 ns is achieved by driving the Start input with a 7.8125 MHz clock coming from the PLL and gating out every second cycle via ACAM's StartDis input to effectively divide it by 2.
@item @code{start_count} - start subcycle counter (0..31), reset at start event,
@item @code{timebase_offset} - offset between the ACAM's and core's internal timescales.
@end itemize
A snapshot of these counters is sampled for every input event. The values are later postprocessed to obtain White Rabbit-formatted timestamps.
The interesting thing is how the TDC timebase is related to an external time scale, as TDC start events occur at fixed multiplies of 256 ns, but a PPS pulse from the Csync
unit can come anytime (with 8 ns granularity). The most straightformward method here would be to reset the TDC start
generator at every PPS pulse, but it is not very safe, as the AD9516's output divider synchronization feature is asynchronous.
The TDC core employs a simple trick here: when a PPS pulse comes, it stores the difference between the lowest
bits of the Csync coarse counter and the subcycle counter (@code{subcycle_offset} signal in @code{p_start_subcycle_counter} process). This difference is added to the timestamps at the postprocessing stage to compensate time base shift.
A snapshot of these counters is sampled for every input event. The values are later merged with the fine part read from the ACAM TDC to obtain the final, White Rabbit-formatted timestamp.
The interesting thing is how the TDC timebase is related to the external time scale, as TDC start events occur at fixed multiplies of 256 ns, but a PPS pulse (@code{csync_p1_i}) from the counter sync
unit can come anytime (with 8 ns granularity). The most straightformward way would be to align the TDC start
pulse with the PPS pulse - it wouldn't be safe though, as it would require using the AD9516's output divider align feature, which is asynchronous.
The TDC core employs a simple trick here: when a resync pulse comes, it stores the difference between the lowest
bits of the @code{csync_coarse} counter and the start subcycle counter (@code{timebase_offset} signal in @code{p_start_subcycle_counter} process). This difference is added to the timestamps at the postprocessing stage to compensate for time base shift. See @ref{fig:tdc_timebase} for a graphical explanation.
@ref{fig:tdc_timing} shows the relations between the time base signals.
@float Figure,fig:tdc_timing
@center @image{drawings/tdc_time_base, 18cm,,,.jpg}
@caption{TDC core time base generation.}
@float Figure,fig:tdc_timebase
@center @image{drawings/tdc_timebase, 15.5cm,,,.pdf}
@caption{TDC core time base signals.}
@end float
@subsection Input stage and TDC control
This part of the core takes care of the coarse input pulse, TDC start and stop enable singnals. It is responsible for:
This part of the core takes care of the coarse input pulse and TDC start/stop enable singnals. It is responsible for:
@itemize
@item @b{Sampling the coarse pulse input.} This is done in the @code{p_sync_trigger} process which implements
a modified 3-stage synchronizer with enable signal ANDed with the input signal at each synchronization stage,
minimizing the input's on/off reaction time.
@item @b{Sampling coarse pulse input.}
This is done in the @code{p_sync_trigger} process which implements
a simple rising edge detector with a 2-stage synchronizer and input enable/disable logic.
@item @b{Safely enable and disable the TDC input}.
There are three processes involved here: @code{p_safety_counter}, which disables the input upon the rising edge
of the incoming pulse and re-enables it a certain time (@code{c_FALLING_REENABLE_TIMEOUT}) after the falling
@item @b{Safely enabling and disabling the TDC input}.
There are three processes involved here: @code{p_safety_counter}, which disables the input after a rising edge
of and re-enables it a certain time (@code{c_FALLING_REENABLE_TIMEOUT}) after the falling
edge of the currently processed pulse. This prevents the core from generating incorrect timestamps when the
input pulses come too close to each other or in case of poor quality or noise on the falling edge of the signal, which
could be misinterpreted as a spurious input event. Even if the signal quality is fine, such spurious pulses may
occur while plugging the trigger input to a live signal. The remaining processes: @code{p_gen_acam_start_dis}
input pulses come too close to each other or in case of poor quality or noise on the falling edge of the signal, which could be misinterpreted as a spurious input event. Even if the signal quality is fine, such spurious pulses may occur while plugging the trigger input to a live signal. The remaining processes: @code{p_gen_acam_start_dis}
and @code{p_gen_acam_stop} drive the TDC's START and STOP disable signals. The former ensures that the start
input is not enabled in the middle of a rising edge of the 7.125 MHz start clock and gates the StartDis TDC input to effectively divide the start clock by 2.
The latter enables the stop input when the TDC has received at least one correct start pulse.
input is not enabled in the middle of a rising edge of the 7.125 MHz start clock and gates the StartDis TDC input to effectively divide the start clock by 2. The latter enables the stop input when the TDC has received at least one correct start pulse.
@item @b{Rejecting pulses that do not meet the requirements}. In our case - shorter than 24 ns or containing glitches. Width detection is done in the main state machine (@code{p_main_fsm}) by shifting in subsequent samples into a register (@code{width_check_sreg}) and checking if the register contains only ones. Glitch detection exploits sensitivity of ACAM's Stop input: since we disable the trigger input right after we have detected a rising edge, the ACAM shall normally produce only one timestamp. Therefore, if the FIFO does not become empty immediately after read, a spurious pulse must have been tagged. Such situation may occur when the board is fed with a train of densely spaced pulses (where the shift register doesn't notice the gaps between them, but the ACAM does). If any glitch or incorrect pulse is detected, the timestamp is ignored, and the ACAM is reset by asserting @code{AluTrigger} line.
@item @b{Reading out the ACAM FIFO}, done by the main state machine. After detecting a rising edge on the coarse pulse input, the FSM waits for the timestamp to appear in ACAM's FIFO and reads it out from register @code{8}. Several wait states are introduced by the FSM to ensure the read sequence does not cause setup/hold violations or SI problems. The fine value is passed along with the coarse counters and offsets to the postprocessing unit.
@end itemize
@subsection Timestamp postprocessing
@node{Timestamp postprocessing}
The postprocessor combines the fine value read from the ACAM with the coarse value captured using a counter into a WR-compatible timestamp and aligns it to selected time base. Postprocessing is done in the @code{p_postprocess_tags} process. It consists of 4 pipelined stages:
@itemize
@item Subtract the start offset value from the fine part. ACAM's ALU can't handle negative numbers, therefore each timestamp is internally adjusted by a value defined in the @code{StartOff[1,2]} ACAM's control registers. This step subtracts this value (programmable via @code{ASOR} register}, so that a pulse that occured in phase with a start pulse gets a fine value near to 0. Some timestamps may have negative fine values after start offsest subtraction. This results from the internal ACAM's delays - sometimes it may reference a stop event to a start event
that occured afterwards. The range of fine values is therefore wider than the start period - an event occuring 250 ns after a start pulse can be either timestamped as 250 or -6 ns.
@item Rescale the fine value from ACAM (expressed as a number of 41 ps bins) to WR time format (where 1 ps = 8 ns / 4096). This is done by simply multiplying by a constant scalefactor (programmable via @code{ADSFR} register).
@item Check consistency between the coarse counter @code{coarse_count} and the fine part. In ideal case, the final timestamp should be a simple sum of @code{coarse_count} * 256 ns and the fine part. In @i{The Real World}, transitions of the fine value (i.e. 256 ns to 0 ns) in the ACAM are not consistent with transitions of the coarse counter in the FPGA. ACAM's internal start is shifted forward with respect to the FPGA's start signal. In certain cases, the fine part may have already flipped the 256 ns boundary, while the coarse counter has not counted up yet, producing a timestamp with an error of 256 ns (see @ref{fig:tdc_merge}). Also, big fine values at the the end of the range may be interleaved with negative ones, depending on ACAM's mood.
The postprocessor mitigates this problem by using the @code{start_count} counter. If @code{start_count} value is low (indicating that we are close to the beginning of an FPGA start cycle), while the fine part is high (meaning that the TDC has not yet noticed the ``fresh'' start pulse), the timestamp's @code{coarse_count} need to be adjusted by subtracting one start period. Thresholds for the comparisons are programmable via @codee{ATMCR} register, their values were obtained experimentally.
@item Align the timestamp to our local/WR timebase, by simply adding the @code{timebase_offset} value obtained during time base counter resynchronization.
@end itemize
@float Figure,fig:tdc_merge
@center @image{drawings/tdc_merge, 15.5cm,,,.pdf}
@caption{Relations between coarse and fine timestamp parts.}
@end float
As a result, we get a WR-formatted timestamp, with constant systematic error. This error is hardware-specific and is compensated in software by adding an offset to all timestamps read from the card and all programmed delay values. The offset value is determined individually for each mezzanine during factory or DDMTD calibration and written in the calibration EEPROM.
Note that the postprocessor can be disabled for debugging purposes by setting @code{TSBCR.RAW} bit. In such case, raw counter and fine values are written to the buffer instead of the final timestamp. This feature is used in production tests.
@subsection Statistics unit
The ACAM core includes a statistics unit. Its purpose is to collect data that may be helpful in debugging and performance tuning of the core:
@itemize
@item count all detected input pulses,
@item count pulses that have been correctly tagged,
@item measure worst-case input-to-timestamp latency (which is important for delay applications as it defines minimum safe delay value). In case of the ACAM configured in G-Mode, the latency is 360 ns.
@end itemize
@subsection ACAM host interface
The main TDC state machine lets the host directly access ACAM's control registers. Host (a.k.a. bypass) mode is active when @code{GCR.BYPASS} bit is set. The ACAM must be programmed for G-mode operation prior to enabling the hardware readout. In order to write a single ACAM register follow the procedure below:
@itemize
@item set the address of the ACAM register by programming the GPIO expander,
@item write the desired word to @code{TDR} register,
@item write 1 to @code{TDCSR.WRITE} bit.
@item wait at least 1 microsecond before commencing another write.
@end itemize
Read procedure is quite similar:
@itemize
@item set the address of the ACAM register by programming the GPIO expander,
@item write 1 to @code{TDCSR.READ} bit.
@item wait at least 1 microsecond.
@item read the value returned by ACAM from @code{TDR} register.
@end itemize
Note that once the TDC is programmed, its address (via the SPI expander) must be set to @code{8} (ACAM FIFO1 register), so that the FSM can read correct data from the right FIFO register.
@subsection Host timestamp readout
Relevant files: @code{fd_ts_buffer.vhd}.
@item @b{Reject pulses that are not within the requirements.}
The FD provides the values of all input and output timestamps through a 1024-entry ring buffer. Each timestamp is associated with a sequence number and the source channel identifier. Timestamp readout can be enabled anytime and for any mode of operation (delay/TDC/pulse generator). Readout procedure goes as follows:
@itemize
@item set channels we are interested in reading from in @code{TSBCR.CHAN_MASK}. Enable readout by setting @code{TSBCR.ENABLE}.
@item poll the buffer by reading @code{TSBCR.EMPTY} bit or by handling the TS buffer interrupt. Do not attempt both ways simultaneously.
@item read the timestamp from @code{TSBR} registers. Order doesn't matter.
@item release the timestamp from the buffer and proceed to the next one by writing anything to @code{TSBR_ADVANCE} register.
@end itemize
In case of an overflow, the oldest timestamps in the buffer are subsequently replaced by the most recent ones. Loss of timestamps due to overflow can be detected by comparing the sequence numbers. If the buffer is handled through interrupts, coalescing mechanism is provided to reduce CPU load for larger amounts of timestamps. See @code{TSBIR} register description for details.
@section Output stages
Relevant files: @code{fd_delay_channel_driver.vhd}, @code{fd_delay_line_arbiter.vhd}.
An output stage produces one or more pulses of given width and spacing starting at a TDC timestamp adjusted with the programmed delay value (delay mode) or at an arbitrary time (pulse generator mode). It handles a single output channel, programmable through a separate Wishbone register block.
@float Figure,fig:vhdl_output_stage
@center @image{drawings/vhdl_output_stage, 13cm,,,.pdf}
@caption{Output stage VHDL overview.}
@end float
The structure of the output stage VHDL is shown in @ref{fig:vhdl_output_stage}. The datapath consists of two accumulateing timestamp adders that calculate start- and end-of-pulse timestamps. The adders' outputs are compared with the time base counter, resulting with pulse start/end strobe signals. The timing of output pulses is defined by 3 sets of registers:
@itemize
@item @code{start}: delay between TDC timestamp and the rising edge of the output pulse (delay mode) or absolute time of the rising edge of the output pulse (pulse generator mode),
@item @code{end}: same for the falling edge,
@item @code{delta}: delay between subsequent output pulses.
@end itemize
Multiplexers are used to configure the data path for a given output mode. Comparators and adders drives a simple, sequential state machine, which:
@enumerate
@item Waits for a TDC timestamp (delay) or a write to @code{DCR.PG_ARM} (pulse generator),
@item Takes the fractional part of the rising edge output timestamp, multiplies it by the calibration factor @code{FRR} and sends it to the delay line for a given channel,
@item Waits until the arbiter updates the delay line with the new fractional value,
@item Waits for the start comparator hit and asserts coarse output high,
@item Repeats points 2...4 for the falling edge.
@item Checks if we want more than one pulse - if true, it adds @code{delta} value to the start/end timestamp and goes to point 2. If not, it goes idle.
@end enumerate
Access to the delay lines is multiplexed by a round-robin arbiter (@code{fd_delay_line_arbiter}). Worst-case update latency is 4 * 32 ns = 128 ns, imposing a width/spacing limit of 200 ns. Shorter/denser pulses (up to 50 ns) can be still produced by setting @code{DCR.NO_FINE} bit, width widhts/spacing values restricted to multiplies of 4 ns. Given the TDC latency of 360 ns + few clock cycles taken by pipelining, the minimum safe delay setting is therefore 600 ns.
@subsection Programming the output stage
@itemize
@item Set the mode in @code{DCR.MODE} bit
@item Set the absolute start time or delay and pulse spacing in @code{DCR.x_START}, @code{DCR.x_END} and @code{DCR.x_DELTA} registers.
@item Acknowledge the changes by writing @code{DCR.UPDATE} bit.
@item If the output is not already enabled, write @code{DCR.ENABLE} bit and enable the corresponding SSR switch through the SPI GPIO.
@end itemize
@subsection Other important things
@itemize
@item The design is highly pipelined to meet timing for a 125 MHz clock with rather wide datapath (40 + 28 + 12 = 80 bit add/compare operations).
@item Start/end/delta and mode selection registers are shadowed to ensure atomic updates of output pulse timings.
@item Offset resulting from pipelining and data path delays is systematic and must be compensated by adjusting the start/end values in the software.
@item Checking if the output has triggered can be done by polling @code{DCR.PG_TRIG} bit.
@item @code{FRR} register must be initialized with correct calibration coefficient (see @ref{Output stage calibration}).
@end itemize
@subsection Host interface
@section Other logic
@subsection OneWire
@subsection Timestamp processing
The FD core incorporates a dedicated Dallas's 1-Wire bus master core for accessing the temperature sensor/ID chip from a non-deterministic Linux CPU (1-Wire requires tight timing to operate correctly). The core's documentation is available at the @url{http://opencores.org/project,sockit_owm,Opencores project page}.
@node{ts_merging}
t
@section Output channels
@subsection I2C
There is also a simple bit-banged I2C master for talking with the I2C EEPROM, accessible through @code{I2CR} register. The driver uses it for retreiving calibration data and identification of the mezzanine.
@section Miscellanea
@subsection OneWire & I2C
@subsection SPI Master
@chapter Calibration
It is a specialized core (not a general-purpose Wishbone SPI master), accessible via @code{SCR} register and interfacing with all SPI peripherals (VCXO DAC, GPIO and AD9516). Special features include:
@itemize
@item two concurrent, arbitrated write ports: software via @code{SCR} register and hardware via @code{tm_dac_value} port
@item hardware port takes priority over software access and lets the SoftPLL update the VCXO DAC in a deterministic way, regardless of driver's accesses to the GPIO and PLL chips.
@item atomic read/write access thanks to a single control/status/data register.
@end itemize
@subsection Testing logic
There are two extra cores used during production testing and characterization of the card:
@itemize
@item a PWM driver, accessible via @code{TDER2} register. Used in lab tests for driving a Peltier module in order to characterize the temperature effects on the mezzanine.
@item a frequency meter (register @code{TDER1}), measuring the mezzanine's VCXO frequency against the carrier's system clock. Used to characterize the tuning range of the oscillator during production test.
@end itemize
@section Initializing the card
Since initialization of the FD mezzanine is not simple and straightforward, a brief description of the procedure is provided below:
@enumerate
@item Check for presence of the FD core by verifying @code{IDR} register.
@item Check mezzanine presence through @code{GCR.FMC_PRESENT} bit.
@item Read calibration EEPROM via the I2C master. Parse and verify its contents.
@item Reset the mezzanine via @code{RSTR} register. Hold the FD core (except SPI & I2C) in reset.
@item Program the AD9516 PLL. Use register values included with the driver/test program code.
@item Initialize 1-wire temperature sensor. Read card serial number and temperature.
@item Initialize MCP23S17 GPIO. Disable termination, select internal trigger, disable all outputs.
@item Clocks are initialized, un-reset the core through @code{RSTR} register.
@item Enable TDC host mode by setting @code{GCR.BYPASS} bit.
@item Program the TDC in I-Mode. Run output stage calibration. Store calibrated values.
@item Program the TDC in G-Mode. Disable bypass and trigger input.
@item Load timestamp postprocessor configuration (@code{ADSFR}, @code{ASOR}, @code{ATMCR} values). Use values
provided in the test program.
@item Set board time to 0 via @{TCR} register.
@item Purge timestamp readout buffer (@code{TSBCR.PURGE} bit).
@item Enable trigger input via @code{GCR} register.
@end enumerate
Now the card should be ready for timestamp readout and output programming. For code examples please look at @code{fdelay_lib.c} file in the test program.
@section Carrier implementation example
Relevant files: @code{svec_top.vhd}.
An example FD VHDL core implementation on a SVEC FMC carrier is shown in @ref{fig:svec_top_block}.
@float Figure,fig:svec_top_block
@center @image{drawings/svec_top_block, 16cm,,,.pdf}
@caption{Implementation of two FD cores on a SVEC carrier.}
@end float
The top level is only a passive interconnect between the FD cores, White Rabbit and FPGA-specific blocks, such as clock/IO buffers and PLLs. The components of our example design are:
@itemize
@item 2 FD cores,
@item White Rabbit core, providing synchronization and Ethernet connectivity,
@item Additional White Rabbit components: GTP serdes wrapper and SPI DAC driver,
@item Wishbone interconnect,
@item Etherbone core, allowing for Ethernet access to entire memory space of the card,
@item Vectored Interrupt Controller (VIC), multiplexing interrupts from all sources (in our case, the two FD cores). VIC's vector table is preinitialized with base addresses of the cores sourcing interrupts to enable automatic IRQ line detection,
@item VME64x core, bridging between VME64x bus and Wishbone (with all necessary VME buffers/tristates),
@item Clock distribution and PLLs (producing the DDMTD and system clocks and DDR clocks for the output stages of the FD cores),
@item Utility cores - power up reset and SVEC front panel LED driver for status indication.
@end itemize
For more details, refer to the source files and comments inside.
@page
@chapter Calibration procedures
@section Output stage calibration
@node{Output stage calibration}
@subsection Output stage calibration
The role of this calibration mechanism is to minimize jitter of the output delay lines.
Jitter is introduced when the delay added by an '89295 chip different from the desired tap setting.
For example, when the core requests a fine adjustment value of 7.5 ns, and the actual one is 8.5 ns, output pulses will
exhibit non-gaussian jitter of 1 ns peak-peak, which is far too high to meet the design specifications. PVT-induced drifts of 1 ns have been observed
for SY89295 chips used in our production cards.
Jitter is introduced when the delay added by an '89295 chip is different from the desired tap setting.
For example, when the core requests a fine adjustment value of 8 ns, and the actual one is 7 ns, output pulses will
exhibit non-gaussian jitter of 1 ns (see @ref{fig:calib_why}), which is far too high to meet the design specifications. PVT-induced drifts of 1 ns have been observed for SY89295 chips used in our production cards.
@float Figure,fig:calib_why
@center @image{drawings/calib_why, 10cm,,,.pdf}
@caption{Effects of uncalibrated output delay line.}
@end float
The output stage calibration mechanism is depicted in @ref{fig:calib_output}. It works by feeding the output stage with
calibration pulses and measuring the in-out delay of '89295 delays for different tap settings in order to find a point at which they
delay the signal by exactly 8 ns more than at tap setting of 0. The TDC, reconfigured in the I-mode (single ended start input and
4 single ended stop inputs, one per output) is reused as a calibrator (thanks to its' voltage adjusting PLL, we know that its definition of 8 ns
is not worse than of the reference oscillator). Precision better than 10 ps rms (single tap) is achieved by averaging multiple measurements.
This calibration is performed by the device driver every time the card is initialized. In order to speed it up, it assumes monotonicity of the output
stage (guaranteed by design) and instead of sweeping all possible tap counts, employs a simple divide-and-conquer algorithm.
This calibration is performed by the device driver every time the card is initialized. In order to speed up calibration, the software assumes monotonicity of the delay line
(guaranteed by design) and instead of sweeping all possible tap counts, employs a simple divide-and-conquer algorithm.
@float Figure,fig:calib_output
@center @image{drawings/output_calibration, 12cm,,,.pdf}
......@@ -475,24 +774,23 @@ stage (guaranteed by design) and instead of sweeping all possible tap counts, em
@end float
Note that while the calibration in progress, the output switch is disabled to stop our calibration pulses from reaching devices driven by the card. This unfortunately prevents
executing the calibration during runtime without risk of losing pulses. We provided an alternative mechanism to overcome this limitation, which
executing the calibration during runtime without risk of losing pulses (or accidentally, burning a hole in the accelerator cavity...). We provided an alternative mechanism to overcome this limitation, which
exploits the fact that since process and supply voltage remain constant during operation, only temperature has significant impact on the output stage delay.
A function of 8 ns tap delay error vs temperature was measured in the lab by cooling/heating up the card to temperatures between 30 and 90 degrees C with a Peltier cell
and is used to relate the temperature and 8ns tap setting measured at the card startup with its' current temperature. Simple polynomial fitting allows for updating
and is used to relate the temperature and 8ns tap setting measured at the card startup with its' current temperature. Simple 2nd order polynomial fitting allows for updating
the output stage scalefactor without disturbing the outputs with extra calibration pulses.
The same method (with full range sweeping instead of divide-and-conquer) is used to measure linearity (INL/DNL) of the delay lines during production test.
@subsection DDMTD I/O delay calibration
@section DDMTD I/O delay calibration
Careful readers may have noticed that the previous calibration process only minimizes jitter. The purpose of DDMTD calibration is to measure
the end-to-end delay of an (almost) entire mezzanine. Figure @ref{fig:ddmtd_calibration} shows the calibration components:
the end-to-end delay of an (almost) entire mezzanine. @ref{fig:ddmtd_calibration} shows the calibration components:
@itemize
@item input of the TDC is fed with a square waveform of @code{clk_ref_0} / 144, simulating real input pulses of with fastest
possible input frequency (to speed up measurements) and some safety margin.
@item delay path is programmed to a minimum insertion delay of 500 ns.
@item input of the TDC is fed with a square waveform of @code{clk_ref_0} / 144, simulating real input pulses with the fastest allowed frequency (to speed up measurements and increase resolution) and some safety margin.
@item delay path is programmed to a minimum insertion delay of 600 ns.
@item input and output pulses are sampled by another clock with two identical flip flops. Frequency of the samling clock is slightly offset with respect to
@code{clk_ref_0} / 144 (in our case the offset is 1/16384). Flip flop outputs are hence @i{downconverted} versions of the in/out pulses and keep their timing relations, but
@code{clk_ref_0} / 144 (in our case the offset is 1/16384). Flip flop outputs are hence downconverted versions of the in/out pulses and keep their timing relations, but
scaled down by a factor of 16384, so a delay of 10 picoseconds is seen as 16.384 ns. This is very easy to measure using a simple counter.
@end itemize
......@@ -509,19 +807,65 @@ Note that this method is still not ideal - it is prone to PVT differences betwee
the output cutoff and input selection switches. Therefore, production tests involve calibration with an external time interval meter. Tests performed on a batch of 80 cards
have shown that the error between DDMTD calibration mechanism and the external TIM did not exceed 800 ps.
For more information on DDMTD phase/time measurement techniques please refer to @ref{book:toms_msc}.
More information on DDMTD phase/time measurement techniques is available in Tom's MSc thesis.
@page
@appendix Registers description
@section Memory layout
@multitable @columnfractions .20 .80
@headitem Base Address @tab Core
@item @code{0x000} @tab Main registers. @xref{Main registers}
@item @code{0x100} @tab Channel 1 registers. @xref{Output stage registers}
@item @code{0x200} @tab Channel 2 registers. @xref{Output stage registers}
@item @code{0x300} @tab Channel 3 registers. @xref{Output stage registers}
@item @code{0x400} @tab Channel 4 registers. @xref{Output stage registers}
@item @code{0x500} @tab 1-wire master registers
@end multitable
@chapter Carrier implementation example
@section Main registers
@node{Main registers}
The main register block controls all subsystems of the FD core excluding the OneWire thermometer and output channels.
This chapter shows how to implement the FD core on an FMC carrier, taking the production design of the SVEC VME carrier equipped with two Fine Delays as an example.
@macro regsection{name}
@subsection \name\
@end macro
@include fd_main_regs.in
@appendix Register set
@subsection Main registers
Wbgen2 texinfo documentation
@subsection Output stage registers
Wbgen2 texinfo documentation
@section Output stage registers
@node{Output stage registers}
The output stage register blocks control independently, the 4 outputs of the FD Core.
@include fd_channel_regs.in
@page
@appendix References
@itemize
@item Official schematics and PCB design (CERN EDMS)
@url{https://edms.cern.ch/nav/EDA-02267-V5-1}
@item Tom's MSc thesis (a bible of White Rabbit timing)
@url{http://www.ohwr.org/documents/80}
@item Hardware homepage & Wiki
@url{http://www.ohwr.org/projects/fmc-delay-1ns-8cha}
@item Linux device driver project
@url{http://www.ohwr.org/projects/fine-delay-sw}
@item Official user's manual
@url{http://www.ohwr.org/documents/179}
@item ACAM TDC-GPX datasheet
@url{http://www.acam.de/fileadmin/Download/pdf/English/DB_GPX_e.pdf‎}
@end itemize
@bye
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