Commit 494d6c95 authored by Andrey Filippov's avatar Andrey Filippov

Implemented measurement/processing of address/bank lines output delays

parent c9bb19f1
......@@ -833,44 +833,63 @@ def get_adjust_cmda_odelay():
'cmda_odly_period':-1,
'cmda_fine_corr':[0.030713940147897745, -0.31142995369410897, 0.25855967931439255, 0.33272217450114078, -0.044430686684212156],
'cmda_odly_b':45.0047826387,
'cmda_bspe':[{'ldly': 45, 'period': -1, 'err': -0.035496578892797004}, {'ldly': 44, 'period': -1, 'err': 0.44070548107222152},
{'ldly': 42, 'period': -1, 'err': -0.46122745179348357}, {'ldly': 41, 'period': -1, 'err': 0.50981961434792566}, {'ldly': 39, 'period': -1, 'err': -0.35612221952906253},
{'ldly': 38, 'period': -1, 'err': -0.33221764758151551}, {'ldly': 37, 'period': -1, 'err': 0.1430022807381377}, {'ldly': 35, 'period': -1, 'err': -0.22809454696245979},
{'ldly': 34, 'period': -1, 'err': 0.24810751300255873}, {'ldly': 33, 'period': -1, 'err': 0.27201208495010576}, {'ldly': 31, 'period': -1, 'err': 0.31722164627826288},
{'ldly': 30, 'period': -1, 'err': 0.37613518556916148}, {'ldly': 28, 'period': -1, 'err': -0.52481561565117474}, {'ldly': 27, 'period': -1, 'err': -0.049595687331521532},
{'ldly': 25, 'period': -1, 'err': -0.42069251503212257}, {'ldly': 24, 'period': -1, 'err': 0.055509544932892396}, {'ldly': 23, 'period': -1, 'err': 0.079414116880446528},
{'ldly': 21, 'period': -1, 'err': 0.1246236782086001}, {'ldly': 20, 'period': -1, 'err': 0.18353721749949869}, {'ldly': 19, 'period': -1, 'err': 0.65973927746451366},
{'ldly': 17, 'period': -1, 'err': -0.24219365540118432}, {'ldly': 15, 'period': -1, 'err': -0.61329048310178536}, {'ldly': 14, 'period': -1, 'err': -0.13708842313677039},
{'ldly': 13, 'period': -1, 'err': -0.11318385118921803}, {'ldly': 11, 'period': -1, 'err': -0.067974289861062687}, {'ldly': 10, 'period': -1, 'err': -0.0090607505701782998},
{'ldly': 9, 'period': -1, 'err': 0.46714130939483667}, {'ldly': 7, 'period': -1, 'err': -0.4347916234708622}, {'ldly': 6, 'period': -1, 'err': 0.53625544267054437},
{'ldly': 4, 'period': -1, 'err': -0.32968639120644738}, {'ldly': 3, 'period': -1, 'err': -0.30578181925889458}, {'ldly': 2, 'period': -1, 'err': 0.16943810906075885},
{'ldly': 0, 'period': -1, 'err': -0.20165871863984108}, {'ldly': 156, 'period': 0, 'err': 0.62311009744971102}, {'ldly': 154, 'period': 0, 'err': -0.24283173642726297},
{'ldly': 153, 'period': 0, 'err': -0.21892716447970884}, {'ldly': 151, 'period': 0, 'err': -0.17371760315154461}, {'ldly': 150, 'period': 0, 'err': -0.11480406386064601},
{'ldly': 149, 'period': 0, 'err': 0.36139799610438672}, {'ldly': 148, 'period': 0, 'err': 0.38530256805194085}, {'ldly': 146, 'period': 0, 'err': 0.43051212938004824},
{'ldly': 144, 'period': 0, 'err': -0.43542970449692575}, {'ldly': 143, 'period': 0, 'err': -0.41152513254937162}, {'ldly': 142, 'period': 0, 'err': 0.063694795770260271},
{'ldly': 140, 'period': 0, 'err': -0.30740203193033722}, {'ldly': 139, 'period': 0, 'err': 0.16880002803469552}, {'ldly': 138, 'period': 0, 'err': 0.19270459998224965},
{'ldly': 136, 'period': 0, 'err': 0.23791416131038545}, {'ldly': 135, 'period': 0, 'err': 0.29682770060128405}, {'ldly': 133, 'period': 0, 'err': -0.6041231006190344},
{'ldly': 132, 'period': 0, 'err': -0.12890317229940251}, {'ldly': 130, 'period': 0, 'err': -0.5}, {'ldly': 129, 'period': 0, 'err': -0.023797940034967269},
{'ldly': 128, 'period': 0, 'err': 0.00010663191257265225}, {'ldly': 126, 'period': 0, 'err': 0.045316193240722669}, {'ldly': 125, 'period': 0, 'err': 0.10422973253162127},
{'ldly': 124, 'period': 0, 'err': 0.58043179249663979}, {'ldly': 122, 'period': 0, 'err': -0.32150114036905109}, {'ldly': 121, 'period': 0, 'err': 0.64954592577234394},
{'ldly': 119, 'period': 0, 'err': -0.21639590810464426}, {'ldly': 118, 'period': 0, 'err': -0.19249133615709013}, {'ldly': 116, 'period': 0, 'err': -0.14728177482894012},
{'ldly': 115, 'period': 0, 'err': -0.088368235538041517}, {'ldly': 114, 'period': 0, 'err': 0.387833824426977}, {'ldly': 113, 'period': 0, 'err': 0.41173839637453113},
{'ldly': 111, 'period': 0, 'err': 0.45694795770268115}, {'ldly': 109, 'period': 0, 'err': -0.40899387617430705}, {'ldly': 108, 'period': 0, 'err': -0.38508930422675292},
{'ldly': 107, 'period': 0, 'err': 0.090130624092907397}, {'ldly': 105, 'period': 0, 'err': -0.2809662036077043}, {'ldly': 104, 'period': 0, 'err': 0.19523585635731422},
{'ldly': 103, 'period': 0, 'err': 0.21914042830486835}, {'ldly': 101, 'period': 0, 'err': 0.26434998963301837}, {'ldly': 100, 'period': 0, 'err': 0.32326352892391697},
{'ldly': 98, 'period': 0, 'err': -0.5776872722964157}, {'ldly': 97, 'period': 0, 'err': -0.10246734397675539}, {'ldly': 95, 'period': 0, 'err': -0.47356417167736709},
{'ldly': 94, 'period': 0, 'err': 0.0026378882876372245}, {'ldly': 93, 'period': 0, 'err': 0.026542460235191356}, {'ldly': 91, 'period': 0, 'err': 0.071752021563355584},
{'ldly': 90, 'period': 0, 'err': 0.13066556085423997}, {'ldly': 89, 'period': 0, 'err': 0.60686762081925849}, {'ldly': 87, 'period': 0, 'err': -0.29506531204643238},
{'ldly': 85, 'period': 0, 'err': -0.66616213974704408}, {'ldly': 84, 'period': 0, 'err': -0.18996007978202556}, {'ldly': 83, 'period': 0, 'err': -0.16605550783447143},
{'ldly': 81, 'period': 0, 'err': -0.12084594650632141}, {'ldly': 80, 'period': 0, 'err': -0.061932407215422813}, {'ldly': 79, 'period': 0, 'err': 0.41426965274959571},
{'ldly': 78, 'period': 0, 'err': 0.43817422469714984}, {'ldly': 76, 'period': 0, 'err': 0.48338378602529986}, {'ldly': 74, 'period': 0, 'err': -0.38255804785168834},
{'ldly': 73, 'period': 0, 'err': -0.35865347590413421}, {'ldly': 72, 'period': 0, 'err': 0.1165664524155261}, {'ldly': 70, 'period': 0, 'err': -0.2545303752850856},
{'ldly': 69, 'period': 0, 'err': 0.22167168467993292}, {'ldly': 68, 'period': 0, 'err': 0.24557625662748706}, {'ldly': 66, 'period': 0, 'err': 0.29078581795562286},
{'ldly': 65, 'period': 0, 'err': 0.34969935724652146}, {'ldly': 63, 'period': 0, 'err': -0.5512514439738041}, {'ldly': 62, 'period': 0, 'err': -0.076031515654150894},
{'ldly': 60, 'period': 0, 'err': -0.44712834335474838}, {'ldly': 59, 'period': 0, 'err': 0.029073716610277245}, {'ldly': 58, 'period': 0, 'err': 0.052978288557824271},
{'ldly': 56, 'period': 0, 'err': 0.098187849885967182}, {'ldly': 55, 'period': 0, 'err': 0.15710138917686578}, {'ldly': 54, 'period': 0, 'err': 0.6333034491418843},
{'ldly': 52, 'period': 0, 'err': -0.26862948372382078}, {'ldly': 50, 'period': 0, 'err': -0.63972631142441827}, {'ldly': 49, 'period': 0, 'err': -0.16352425145939975},
{'ldly': 48, 'period': 0, 'err': -0.13961967951185272}, {'ldly': 46, 'period': 0, 'err': -0.094410118183695602}],
'cmda_bspe':[{'ldly': 45, 'period': -1, 'err': 0.43100421590990123, 'zerr': None}, {'ldly': 44, 'period': -1, 'err': 0.41358075886379453, 'zerr': None},
{'ldly': 43, 'period': -1, 'err': 0.17296058239455903, 'zerr': None}, {'ldly': 40, 'period': -1, 'err': -0.37272790102976927, 'zerr': None},
{'ldly': 39, 'period': -1, 'err': -0.39015135807586176, 'zerr': None}, {'ldly': 38, 'period': -1, 'err': -0.63077153454509727, 'zerr': None},
{'ldly': 36, 'period': -1, 'err': -0.27614900822447197, 'zerr': None}, {'ldly': 35, 'period': -1, 'err': 0.22229594305067479, 'zerr': None},
{'ldly': 34, 'period': -1, 'err': 0.2048724860045823, 'zerr': None}, {'ldly': 33, 'period': -1, 'err': -0.035747690464653203, 'zerr': None},
{'ldly': 31, 'period': -1, 'err': 0.31887483585598986, 'zerr': None}, {'ldly': 29, 'period': -1, 'err': -0.59885963093509176, 'zerr': None},
{'ldly': 29, 'period': -1, 'err': 0.79989633008502281, 'zerr': None}, {'ldly': 27, 'period': -1, 'err': 0.10498306724723605, 'zerr': None},
{'ldly': 25, 'period': -1, 'err': 0.013587670191459011, 'zerr': None}, {'ldly': 24, 'period': -1, 'err': -0.0038357868546334828, 'zerr': None},
{'ldly': 23, 'period': -1, 'err': -0.24445596332387964, 'zerr': None}, {'ldly': 21, 'period': -1, 'err': 0.11016656299676342, 'zerr': None},
{'ldly': 20, 'period': -1, 'err': 0.60861151427190308, 'zerr': None}, {'ldly': 19, 'period': -1, 'err': 0.59118805722581058, 'zerr': None},
{'ldly': 17, 'period': -1, 'err': -0.10372520561197618, 'zerr': None}, {'ldly': 15, 'period': -1, 'err': -0.19512060266775144, 'zerr': None},
{'ldly': 14, 'period': -1, 'err': -0.21254405971385992, 'zerr': None}, {'ldly': 13, 'period': -1, 'err': -0.45316423618309187, 'zerr': None},
{'ldly': 11, 'period': -1, 'err': -0.098541709862450588, 'zerr': None}, {'ldly': 10, 'period': -1, 'err': 0.39990324141269262, 'zerr': None},
{'ldly': 9, 'period': -1, 'err': 0.38247978436659835, 'zerr': None}, {'ldly': 8, 'period': -1, 'err': 0.1418596078973513, 'zerr': None},
{'ldly': 5, 'period': -1, 'err': -0.40382887552697877, 'zerr': None}, {'ldly': 4, 'period': -1, 'err': -0.42125233257307215, 'zerr': None},
{'ldly': 3, 'period': -1, 'err': -0.66187250904230499, 'zerr': None}, {'ldly': 2, 'period': -1, 'err': 0.28259036560925455, 'zerr': None},
{'ldly': 0, 'period': -1, 'err': 0.19119496855347978, 'zerr': None}, {'ldly': 155, 'period': 0, 'err': -0.070716704678972064, 'zerr': 0.0089285714285713969},
{'ldly': 154, 'period': 0, 'err': -0.088140161725078769, 'zerr': 0.017857142857142905}, {'ldly': 153, 'period': 0, 'err': -0.32876033819428585, 'zerr': 0.026785714285714302},
{'ldly': 151, 'period': 0, 'err': 0.025862188126325236, 'zerr': 0.035714285714285698}, {'ldly': 150, 'period': 0, 'err': 0.52430713940148621, 'zerr': 0.044642857142857095},
{'ldly': 149, 'period': 0, 'err': 0.50688368235537951, 'zerr': 0.053571428571428603}, {'ldly': 147, 'period': 0, 'err': -0.18802958048237883, 'zerr': 0.0625},
{'ldly': 145, 'period': 0, 'err': -0.27942497753818429, 'zerr': 0.071428571428571397}, {'ldly': 144, 'period': 0, 'err': -0.296848434584291, 'zerr': 0.080357142857142905},
{'ldly': 143, 'period': 0, 'err': -0.53746861105349808, 'zerr': 0.089285714285714302}, {'ldly': 141, 'period': 0, 'err': -0.18284608473288699, 'zerr': 0.098214285714285698},
{'ldly': 140, 'period': 0, 'err': 0.31559886654227398, 'zerr': 0.1071428571428571}, {'ldly': 139, 'period': 0, 'err': 0.29817540949616728, 'zerr': 0.1160714285714286},
{'ldly': 138, 'period': 0, 'err': 0.057555233026931774, 'zerr': 0.125}, {'ldly': 136, 'period': 0, 'err': 0.41217775934757128, 'zerr': 0.1339285714285714},
{'ldly': 134, 'period': 0, 'err': -0.50555670744350323, 'zerr': 0.1428571428571429}, {'ldly': 133, 'period': 0, 'err': -0.74617688391271031, 'zerr': 0.1517857142857143},
{'ldly': 132, 'period': 0, 'err': 0.19828599073883879, 'zerr': 0.1607142857142857}, {'ldly': 130, 'period': 0, 'err': 0.10689059368303333, 'zerr': 0.1696428571428571},
{'ldly': 129, 'period': 0, 'err': 0.089467136636955047, 'zerr': 0.1785714285714286}, {'ldly': 128, 'period': 0, 'err': -0.15115303983229467, 'zerr': 0.1875},
{'ldly': 126, 'period': 0, 'err': 0.20346948648837326, 'zerr': 0.1964285714285714}, {'ldly': 125, 'period': 0, 'err': 0.70191443776349161, 'zerr': 0.2053571428571429},
{'ldly': 124, 'period': 0, 'err': 0.68449098071741332, 'zerr': 0.2142857142857143}, {'ldly': 122, 'period': 0, 'err': -0.010422282120373438, 'zerr': 0.2232142857142857},
{'ldly': 120, 'period': 0, 'err': -0.10181767917615048, 'zerr': 0.2321428571428571}, {'ldly': 119, 'period': 0, 'err': -0.11924113622225718, 'zerr': 0.2410714285714286},
{'ldly': 118, 'period': 0, 'err': -0.35986131269149269, 'zerr': 0.25}, {'ldly': 116, 'period': 0, 'err': -0.0052387863708389659, 'zerr': 0.2589285714285714},
{'ldly': 115, 'period': 0, 'err': 0.49320616490429359, 'zerr': 0.2678571428571429}, {'ldly': 114, 'period': 0, 'err': 0.47578270785820109, 'zerr': 0.2767857142857143},
{'ldly': 112, 'period': 0, 'err': -0.21913055497959988, 'zerr': 0.2857142857142857}, {'ldly': 110, 'period': 0, 'err': -0.31052595203537692, 'zerr': 0.2946428571428571},
{'ldly': 109, 'period': 0, 'err': -0.32794940908146941, 'zerr': 0.3035714285714286}, {'ldly': 108, 'period': 0, 'err': -0.56856958555070491, 'zerr': 0.3125},
{'ldly': 106, 'period': 0, 'err': -0.2139470592300512, 'zerr': 0.3214285714285714}, {'ldly': 105, 'period': 0, 'err': 0.28449789204506715, 'zerr': 0.3303571428571429},
{'ldly': 104, 'period': 0, 'err': 0.26707443499898886, 'zerr': 0.3392857142857143}, {'ldly': 103, 'period': 0, 'err': 0.02645425852973915, 'zerr': 0.3482142857142857},
{'ldly': 101, 'period': 0, 'err': 0.38107678485039287, 'zerr': 0.3571428571428571}, {'ldly': 99, 'period': 0, 'err': -0.53665768194068164, 'zerr': 0.3660714285714286},
{'ldly': 98, 'period': 0, 'err': -0.77727785840993135, 'zerr': 0.375}, {'ldly': 97, 'period': 0, 'err': 0.16718501624164617, 'zerr': 0.3839285714285714},
{'ldly': 95, 'period': 0, 'err': 0.075789619185854917, 'zerr': 0.3928571428571429}, {'ldly': 94, 'period': 0, 'err': 0.058366162139762423, 'zerr': 0.4017857142857143},
{'ldly': 93, 'period': 0, 'err': -0.18225401432947308, 'zerr': 0.4107142857142857}, {'ldly': 91, 'period': 0, 'err': 0.17236851199116643, 'zerr': 0.4196428571428571},
{'ldly': 90, 'period': 0, 'err': 0.67081346326631319, 'zerr': 0.4285714285714286}, {'ldly': 89, 'period': 0, 'err': 0.65339000622020649, 'zerr': 0.4375},
{'ldly': 87, 'period': 0, 'err': -0.041523256617580273, 'zerr': 0.4464285714285714}, {'ldly': 85, 'period': 0, 'err': -0.13291865367335731, 'zerr': 0.4553571428571429},
{'ldly': 84, 'period': 0, 'err': -0.15034211071944981, 'zerr': 0.4642857142857143}, {'ldly': 83, 'period': 0, 'err': -0.39096228718868531, 'zerr': 0.4732142857142857},
{'ldly': 81, 'period': 0, 'err': -0.036339760868045801, 'zerr': 0.4821428571428571}, {'ldly': 80, 'period': 0, 'err': 0.46210519040708675, 'zerr': 0.4910714285714286},
{'ldly': 79, 'period': 0, 'err': 0.44468173336099426, 'zerr': None}, {'ldly': 78, 'period': 0, 'err': 0.20406155689175876, 'zerr': None},
{'ldly': 75, 'period': 0, 'err': -0.34162692653256954, 'zerr': None}, {'ldly': 74, 'period': 0, 'err': -0.35905038357867625, 'zerr': None},
{'ldly': 73, 'period': 0, 'err': -0.59967056004791175, 'zerr': None}, {'ldly': 71, 'period': 0, 'err': -0.24504803372725803, 'zerr': None},
{'ldly': 70, 'period': 0, 'err': 0.25339691754787452, 'zerr': None}, {'ldly': 69, 'period': 0, 'err': 0.23597346050178203, 'zerr': None},
{'ldly': 68, 'period': 0, 'err': -0.004646715967467685, 'zerr': None}, {'ldly': 66, 'period': 0, 'err': 0.34997581035320025, 'zerr': None},
{'ldly': 64, 'period': 0, 'err': -0.56775865643788848, 'zerr': None}, {'ldly': 63, 'period': 0, 'err': -0.80837883290711687, 'zerr': None},
{'ldly': 62, 'period': 0, 'err': 0.13608404174443933, 'zerr': None}, {'ldly': 60, 'period': 0, 'err': 0.044688644688662293, 'zerr': None},
{'ldly': 59, 'period': 0, 'err': 0.027265187642562694, 'zerr': None}, {'ldly': 58, 'period': 0, 'err': -0.21335498882667281, 'zerr': None},
{'ldly': 56, 'period': 0, 'err': 0.1412675374939667, 'zerr': None}, {'ldly': 55, 'period': 0, 'err': 0.63971248876911346, 'zerr': None},
{'ldly': 54, 'period': 0, 'err': 0.62228903172302097, 'zerr': None}, {'ldly': 52, 'period': 0, 'err': -0.072624231114787108, 'zerr': None},
{'ldly': 50, 'period': 0, 'err': -0.16401962817055704, 'zerr': None}, {'ldly': 49, 'period': 0, 'err': -0.18144308521664954, 'zerr': None},
{'ldly': 48, 'period': 0, 'err': -0.42206326168588504, 'zerr': None}, {'ldly': 46, 'period': 0, 'err': -0.06744073536524553, 'zerr': None}],
'cmda_odly_a':-1.40105743313
}
def get_wlev_data():
......@@ -1269,7 +1288,188 @@ def get_dqo_dqso_parameters():
'tSDQ': [15.062858793982121, 15.093269292211088, 13.857648042108643, 15.372410224633164, 14.89693566662233, 15.137308145825395, 15.05525240191758, 15.212525836468172],
'tFDQS': [-16.519482411323562, -11.874469319430489, 0.30593102975170644, 11.211763791113706]}
]
def get_addr_meas():
return [
[[124, 129, 124, 124, 124, 124, 129, 124, 128, 129, 124, 124, 119, 124, 124, 124, 129, 124],
[124, 127, 124, 124, 124, 124, 126, 119, 124, 128, 124, 124, 119, 124, 124, 122, 128, 124],
[119, 126, 122, 122, 124, 121, 124, 119, 124, 126, 120, 124, 119, 123, 124, 121, 124, 122],
[119, 124, 119, 119, 119, 119, 124, 119, 124, 124, 119, 122, 114, 120, 122, 119, 124, 119],
[119, 124, 119, 119, 119, 119, 124, 115, 122, 124, 119, 119, 114, 119, 119, 119, 124, 119],
[117, 121, 119, 117, 119, 119, 119, 114, 120, 122, 118, 119, 114, 119, 119, 115, 121, 119],
[114, 119, 115, 114, 116, 115, 119, 114, 119, 120, 115, 119, 114, 118, 119, 114, 119, 115],
[114, 119, 114, 114, 114, 114, 119, 113, 119, 119, 114, 115, 109, 114, 114, 114, 119, 114],
[114, 119, 114, 114, 114, 114, 117, 112, 116, 119, 114, 114, 109, 114, 114, 114, 119, 114],
[112, 114, 114, 112, 112, 113, 114, 109, 114, 116, 112, 114, 109, 114, 114, 112, 114, 113],
[109, 114, 110, 109, 109, 110, 114, 109, 114, 114, 109, 113, 108, 110, 112, 109, 114, 110],
[109, 114, 109, 109, 109, 109, 114, 107, 113, 114, 109, 110, 104, 109, 110, 109, 114, 109],
[109, 112, 109, 109, 109, 109, 111, 104, 110, 114, 109, 109, 104, 109, 109, 109, 113, 109],
[106, 109, 108, 106, 107, 108, 109, 104, 109, 110, 109, 109, 104, 108, 109, 107, 109, 108],
[104, 109, 105, 104, 104, 104, 109, 104, 109, 109, 104, 108, 102, 105, 107, 104, 109, 104],
[104, 109, 104, 104, 104, 104, 108, 102, 107, 109, 104, 104, 99, 104, 104, 104, 109, 104],
[102, 106, 104, 104, 104, 104, 104, 99, 104, 107, 104, 104, 99, 104, 104, 102, 104, 104],
[99, 104, 100, 99, 100, 100, 104, 99, 104, 104, 103, 104, 98, 101, 104, 99, 104, 100],
[99, 104, 99, 99, 99, 99, 104, 98, 104, 104, 99, 100, 95, 99, 100, 99, 104, 99],
[97, 101, 99, 99, 99, 99, 101, 94, 100, 101, 99, 99, 94, 99, 99, 97, 101, 99],
[95, 99, 97, 97, 97, 97, 99, 94, 99, 99, 99, 99, 94, 98, 99, 94, 99, 96],
[94, 99, 94, 94, 94, 94, 99, 94, 99, 99, 95, 96, 92, 94, 95, 94, 99, 94],
[94, 98, 94, 94, 94, 94, 96, 91, 96, 99, 94, 94, 89, 94, 94, 94, 99, 94],
[92, 96, 92, 94, 94, 94, 95, 89, 94, 95, 94, 94, 89, 94, 94, 92, 95, 93],
[89, 94, 90, 89, 91, 91, 94, 89, 94, 94, 93, 94, 89, 93, 93, 89, 94, 90],
[89, 94, 89, 89, 89, 89, 94, 89, 94, 94, 89, 93, 88, 89, 90, 89, 94, 89],
[89, 92, 89, 89, 89, 89, 92, 87, 90, 94, 89, 89, 84, 89, 89, 89, 93, 89],
[87, 89, 87, 89, 89, 89, 89, 84, 89, 91, 89, 89, 84, 89, 89, 87, 90, 89],
[84, 89, 84, 84, 84, 85, 89, 84, 89, 89, 85, 89, 83, 84, 85, 84, 89, 84],
[84, 89, 84, 84, 84, 84, 87, 83, 86, 88, 84, 84, 79, 84, 84, 84, 89, 84],
None, None, None, None, None, None, None, None, None, None, None, None, None,
[66, 69, 67, 65, 69, 69, 69, 64, 69, 69, 69, 69, 64, 68, 67, 66, 69, 68],
[64, 69, 65, 64, 67, 68, 69, 64, 69, 69, 67, 65, 64, 65, 64, 64, 69, 65],
[64, 69, 64, 64, 64, 64, 66, 64, 65, 66, 64, 64, 61, 64, 64, 64, 68, 64],
[64, 64, 64, 62, 64, 64, 64, 60, 64, 64, 64, 64, 59, 64, 64, 64, 64, 64],
[62, 64, 64, 59, 64, 64, 64, 59, 64, 64, 64, 63, 59, 63, 62, 62, 64, 63],
[59, 64, 61, 59, 61, 62, 64, 59, 63, 64, 62, 60, 59, 61, 60, 59, 64, 60],
[59, 59, 59, 57, 59, 59, 59, 57, 59, 59, 59, 59, 54, 59, 59, 59, 59, 59],
[56, 59, 59, 55, 59, 59, 59, 54, 59, 59, 58, 59, 54, 59, 57, 56, 59, 59],
[54, 59, 55, 54, 55, 58, 57, 54, 56, 59, 55, 55, 53, 56, 55, 54, 59, 56],
[54, 56, 54, 54, 54, 54, 54, 54, 54, 56, 54, 54, 49, 54, 54, 54, 57, 54],
[54, 54, 54, 52, 54, 54, 54, 49, 54, 54, 54, 54, 49, 54, 54, 54, 54, 54],
[52, 54, 53, 49, 51, 54, 52, 49, 52, 54, 51, 52, 49, 51, 50, 51, 54, 52],
[49, 53, 49, 49, 49, 51, 51, 49, 50, 52, 49, 49, 47, 49, 49, 49, 53, 50],
[49, 49, 49, 47, 49, 49, 49, 44, 49, 49, 49, 49, 44, 49, 49, 49, 49, 49],
[47, 49, 49, 44, 47, 49, 47, 44, 49, 49, 49, 48, 44, 47, 47, 47, 49, 48],
[44, 49, 44, 44, 45, 46, 44, 44, 44, 47, 44, 45, 43, 44, 44, 44, 49, 45],
[44, 45, 44, 44, 44, 44, 44, 42, 44, 44, 44, 44, 39, 44, 44, 44, 45, 44],
None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None,
[128, 134, 129, 129, 129, 129, 133, 124, 132, 134, 129, 129, 124, 129, 129, 129, 134, 129],
[129, 132, 129, 127, 129, 128, 130, 124, 129, 132, 129, 129, 124, 129, 129, 126, 132, 129]] ,
[[121, 129, 124, 124, 127, 124, 124, 123, 127, 129, 124, 124, 123, 124, 126, 121, 128, 124],
[119, 127, 124, 123, 124, 124, 124, 119, 125, 129, 124, 124, 119, 124, 124, 119, 126, 124],
[119, 124, 121, 119, 124, 124, 123, 119, 124, 128, 123, 124, 119, 124, 124, 119, 124, 122],
[118, 124, 119, 119, 122, 122, 119, 119, 124, 124, 119, 121, 119, 120, 124, 118, 124, 119],
[114, 123, 119, 119, 120, 119, 119, 117, 123, 124, 119, 119, 116, 119, 119, 115, 121, 119],
[114, 119, 118, 115, 119, 119, 119, 114, 119, 124, 119, 119, 114, 119, 119, 114, 119, 118],
[114, 119, 115, 114, 119, 119, 117, 114, 119, 123, 116, 118, 114, 116, 119, 114, 119, 116],
[111, 118, 114, 114, 114, 114, 114, 113, 117, 119, 114, 114, 112, 114, 115, 112, 118, 114],
[109, 116, 114, 114, 114, 114, 114, 110, 117, 119, 114, 114, 111, 114, 114, 109, 116, 114],
[109, 114, 114, 111, 114, 114, 114, 109, 114, 119, 114, 114, 109, 114, 114, 109, 114, 113],
[109, 114, 109, 109, 112, 114, 113, 109, 114, 116, 111, 113, 109, 111, 114, 109, 114, 109],
[107, 113, 109, 109, 110, 110, 109, 107, 113, 114, 109, 109, 109, 109, 111, 108, 112, 109],
[104, 109, 109, 108, 109, 109, 109, 104, 111, 114, 109, 109, 106, 109, 109, 104, 110, 109],
[104, 109, 109, 107, 109, 109, 109, 104, 109, 114, 109, 109, 104, 109, 109, 104, 109, 109],
[103, 107, 104, 104, 107, 107, 104, 104, 109, 109, 104, 105, 104, 104, 107, 103, 109, 104],
[101, 106, 104, 104, 104, 104, 104, 99, 106, 109, 104, 104, 103, 104, 104, 101, 106, 104],
[99, 104, 104, 102, 104, 104, 104, 99, 104, 109, 104, 104, 99, 104, 104, 99, 104, 104],
[99, 104, 99, 99, 103, 104, 101, 99, 104, 105, 102, 102, 99, 101, 104, 99, 104, 101],
[97, 103, 99, 99, 99, 99, 99, 96, 101, 104, 99, 99, 99, 99, 99, 97, 102, 99],
[94, 99, 99, 98, 99, 99, 99, 94, 99, 104, 99, 99, 96, 99, 99, 94, 99, 99],
[94, 99, 97, 96, 98, 99, 98, 94, 99, 103, 99, 99, 94, 99, 99, 94, 99, 97],
[93, 97, 94, 94, 95, 95, 94, 92, 97, 99, 94, 94, 94, 94, 94, 93, 97, 94],
[90, 95, 94, 94, 94, 94, 94, 89, 95, 99, 94, 94, 92, 94, 94, 89, 95, 94],
[89, 94, 94, 93, 94, 94, 94, 89, 94, 98, 94, 94, 89, 94, 94, 89, 94, 93],
[89, 94, 90, 89, 92, 93, 92, 89, 94, 94, 91, 91, 89, 92, 94, 89, 94, 89],
[88, 92, 89, 89, 89, 90, 89, 88, 92, 94, 89, 89, 89, 89, 91, 88, 93, 89],
[86, 90, 89, 89, 89, 89, 89, 85, 89, 94, 89, 89, 88, 89, 89, 86, 90, 89],
[84, 89, 88, 87, 89, 89, 89, 84, 89, 93, 89, 89, 85, 89, 89, 84, 89, 89],
[84, 88, 84, 84, 85, 87, 84, 84, 89, 89, 84, 84, 84, 84, 87, 83, 89, 84],
[82, 85, 84, 84, 84, 84, 84, 81, 84, 89, 84, 84, 83, 84, 84, 80, 87, 84],
None, None, None, None, None, None, None, None, None, None, None, None, None,
[64, 67, 64, 64, 67, 67, 65, 64, 68, 69, 66, 64, 64, 65, 67, 64, 68, 64],
[63, 65, 64, 64, 64, 64, 64, 62, 65, 69, 64, 64, 64, 64, 64, 63, 66, 64],
[59, 64, 64, 64, 64, 64, 64, 60, 64, 68, 64, 64, 61, 64, 64, 59, 64, 63],
[59, 64, 60, 61, 64, 64, 60, 59, 64, 64, 61, 62, 59, 63, 63, 59, 64, 60],
[59, 64, 59, 59, 62, 61, 59, 59, 61, 64, 59, 59, 59, 59, 61, 59, 63, 59],
[59, 60, 59, 59, 59, 59, 59, 57, 59, 64, 59, 59, 59, 59, 59, 59, 61, 59],
[54, 59, 56, 54, 57, 59, 55, 54, 58, 59, 54, 57, 54, 58, 57, 54, 59, 56],
[54, 56, 54, 54, 54, 57, 54, 53, 56, 59, 54, 54, 54, 55, 54, 54, 57, 54],
[53, 54, 54, 54, 54, 54, 54, 50, 54, 59, 54, 54, 54, 54, 54, 53, 54, 54],
[49, 54, 54, 52, 54, 54, 53, 49, 54, 55, 52, 54, 49, 54, 54, 49, 54, 54],
[49, 52, 52, 49, 50, 54, 49, 49, 52, 54, 49, 51, 49, 53, 52, 49, 52, 52],
[49, 49, 49, 49, 49, 52, 49, 48, 49, 54, 49, 49, 49, 49, 49, 49, 49, 49],
[48, 49, 49, 49, 49, 49, 49, 46, 49, 52, 49, 49, 48, 49, 49, 48, 49, 49],
[44, 46, 47, 44, 45, 49, 44, 44, 47, 49, 44, 45, 44, 47, 47, 44, 46, 47],
[44, 44, 44, 44, 44, 49, 44, 44, 44, 49, 44, 44, 44, 44, 44, 44, 44, 44],
[43, 44, 44, 44, 44, 45, 44, 41, 44, 48, 44, 44, 43, 44, 44, 43, 44, 44],
[39, 44, 44, 42, 42, 44, 41, 39, 44, 44, 39, 44, 39, 44, 44, 39, 44, 44],
None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None,
[124, 133, 129, 129, 129, 129, 129, 124, 131, 134, 129, 129, 124, 129, 129, 124, 132, 129],
[124, 131, 128, 127, 129, 129, 129, 124, 129, 134, 129, 129, 124, 129, 129, 124, 130, 127]] ,
]
def get_addr_odly():
return {
'dlys':[[46, 49, 48, 47, 48, 49, 48, 45, 49, 50, 48, 48, 45, 48, 48, 46, 49, 48], [45, 48, 46, 45, 46, 48, 46, 44, 47, 49, 45, 46, 44, 46, 45, 45, 48, 46],
[44, 45, 44, 44, 44, 46, 44, 43, 45, 48, 44, 44, 43, 44, 44, 44, 46, 44], [43, 44, 44, 43, 44, 44, 44, 41, 44, 45, 44, 44, 41, 44, 44, 43, 44, 44],
[40, 44, 43, 40, 43, 44, 42, 39, 43, 44, 42, 43, 39, 43, 42, 40, 44, 43], [39, 42, 40, 39, 40, 43, 40, 39, 41, 43, 40, 40, 39, 40, 40, 39, 43, 40],
[39, 40, 39, 39, 39, 40, 39, 38, 39, 42, 39, 39, 38, 39, 39, 39, 40, 39], [37, 39, 38, 37, 38, 39, 38, 35, 39, 40, 38, 38, 35, 38, 38, 37, 39, 38],
[35, 38, 37, 35, 37, 38, 36, 34, 38, 39, 36, 37, 34, 37, 36, 35, 38, 37], [34, 36, 35, 34, 35, 37, 34, 33, 35, 38, 34, 35, 33, 35, 34, 34, 36, 35],
[33, 34, 34, 33, 34, 35, 34, 32, 34, 35, 34, 34, 32, 34, 34, 33, 34, 34], [32, 34, 33, 31, 33, 34, 33, 30, 33, 34, 33, 33, 30, 33, 33, 32, 34, 33],
[30, 33, 31, 29, 30, 33, 30, 29, 31, 33, 30, 30, 29, 31, 30, 30, 33, 31], [29, 30, 29, 29, 29, 31, 29, 28, 29, 32, 29, 29, 28, 29, 29, 29, 30, 29],
[28, 29, 29, 28, 29, 29, 28, 26, 29, 30, 28, 29, 26, 29, 28, 28, 29, 29], [26, 28, 28, 25, 27, 29, 26, 24, 28, 29, 27, 27, 24, 28, 27, 26, 28, 28],
[24, 26, 25, 24, 25, 28, 24, 24, 25, 28, 25, 25, 24, 25, 25, 24, 27, 25], [24, 24, 24, 23, 24, 25, 24, 23, 24, 25, 24, 24, 23, 24, 24, 24, 25, 24],
[23, 24, 23, 22, 23, 24, 23, 20, 23, 24, 23, 23, 20, 23, 23, 23, 24, 23], [20, 23, 22, 20, 21, 23, 20, 19, 22, 23, 20, 21, 19, 22, 20, 20, 23, 22],
[19, 20, 20, 19, 19, 22, 19, 18, 20, 22, 19, 19, 19, 20, 19, 19, 20, 20], [18, 19, 19, 18, 19, 20, 18, 17, 19, 20, 19, 19, 17, 19, 18, 18, 19, 19],
[17, 18, 18, 16, 18, 19, 16, 15, 18, 19, 17, 18, 15, 18, 17, 17, 18, 18], [15, 16, 16, 14, 15, 18, 14, 14, 15, 18, 15, 15, 14, 15, 15, 15, 17, 16],
[14, 14, 14, 14, 14, 16, 14, 13, 14, 15, 14, 14, 13, 14, 14, 14, 15, 14], [13, 14, 14, 12, 13, 15, 13, 11, 13, 14, 13, 13, 11, 14, 13, 13, 14, 14],
[11, 13, 13, 10, 12, 14, 10, 9, 12, 13, 11, 12, 10, 12, 10, 11, 13, 13], [9, 10, 10, 9, 10, 13, 9, 9, 10, 12, 9, 10, 9, 10, 9, 9, 10, 10],
[9, 9, 9, 8, 9, 10, 8, 8, 9, 10, 9, 9, 8, 9, 9, 9, 9, 9], [8, 8, 8, 6, 8, 9, 7, 5, 8, 9, 8, 8, 5, 8, 7, 8, 8, 8],
[5, 7, 7, 5, 6, 9, 5, 4, 5, 8, 5, 5, 4, 6, 5, 5, 7, 7], [4, 5, 5, 4, 4, 7, 4, 3, 4, 5, 4, 4, 4, 4, 4, 4, 5, 5],
[3, 4, 4, 3, 4, 5, 3, 2, 4, 4, 3, 3, 2, 4, 3, 3, 4, 4], [2, 3, 3, 0, 2, 4, 0, 0, 2, 4, 2, 2, 0, 3, 1, 2, 3, 3],
[0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [150, 158, 154, 153, 154, 154, 157, 150, 157, 159, 154, 154, 149, 154, 155, 150, 158, 153],
[149, 156, 152, 152, 153, 152, 155, 149, 155, 159, 153, 154, 149, 153, 154, 149, 156, 152], [148, 154, 150, 150, 152, 150, 154, 148, 154, 157, 151, 153, 147, 151, 153, 148, 154, 150],
[147, 154, 149, 149, 150, 149, 153, 145, 153, 155, 149, 150, 145, 149, 151, 147, 154, 149], [145, 153, 148, 148, 149, 148, 150, 144, 151, 154, 149, 149, 144, 149, 149, 145, 152, 148],
[144, 150, 146, 145, 148, 147, 149, 144, 149, 153, 148, 148, 143, 148, 149, 144, 150, 146], [143, 149, 145, 144, 145, 145, 148, 142, 149, 150, 145, 147, 141, 145, 148, 143, 149, 144],
[141, 148, 144, 144, 144, 144, 147, 140, 148, 149, 144, 145, 140, 144, 145, 141, 148, 144], [139, 146, 143, 142, 144, 143, 145, 139, 145, 149, 143, 144, 139, 143, 144, 139, 146, 143],
[139, 144, 140, 140, 142, 141, 144, 138, 144, 147, 142, 143, 138, 142, 143, 139, 144, 140], [138, 144, 139, 139, 140, 139, 143, 137, 143, 145, 140, 140, 135, 140, 141, 138, 144, 139],
[135, 143, 138, 138, 139, 139, 140, 135, 141, 144, 139, 139, 134, 139, 139, 135, 143, 138], [134, 140, 137, 136, 138, 138, 139, 134, 139, 143, 138, 139, 134, 138, 139, 134, 140, 137],
[133, 139, 135, 134, 136, 135, 138, 133, 139, 141, 135, 137, 132, 135, 138, 133, 139, 135], [132, 138, 134, 134, 134, 134, 137, 130, 138, 139, 134, 135, 130, 134, 135, 132, 138, 134],
[130, 137, 133, 133, 134, 133, 135, 129, 135, 139, 134, 134, 129, 134, 134, 130, 136, 133], [129, 135, 131, 130, 133, 132, 134, 129, 134, 137, 132, 133, 128, 132, 133, 129, 134, 131],
[128, 134, 129, 129, 130, 130, 133, 128, 133, 135, 130, 131, 127, 130, 132, 128, 134, 129], [126, 133, 129, 128, 129, 129, 130, 125, 132, 134, 129, 129, 125, 129, 130, 126, 133, 129],
[125, 130, 128, 127, 128, 128, 129, 124, 130, 133, 128, 129, 124, 128, 129, 124, 130, 128], [124, 129, 125, 125, 127, 126, 129, 123, 129, 131, 126, 128, 123, 126, 128, 124, 129, 125],
[123, 128, 124, 124, 125, 124, 127, 122, 128, 129, 124, 125, 121, 125, 125, 123, 128, 124], [120, 127, 123, 123, 124, 124, 125, 120, 125, 129, 124, 124, 119, 124, 124, 120, 127, 123],
[119, 125, 122, 121, 123, 123, 124, 119, 124, 127, 123, 123, 119, 123, 124, 119, 125, 122], [119, 124, 120, 119, 120, 120, 123, 118, 123, 125, 120, 122, 118, 120, 122, 118, 124, 120],
[117, 123, 119, 119, 119, 119, 121, 116, 122, 124, 119, 120, 115, 119, 120, 117, 123, 119], [115, 120, 118, 118, 119, 118, 119, 114, 120, 123, 118, 119, 114, 118, 119, 115, 120, 118],
[114, 119, 116, 115, 117, 117, 119, 114, 119, 121, 117, 118, 113, 117, 118, 114, 119, 116], [113, 118, 114, 114, 115, 115, 117, 113, 118, 119, 115, 115, 112, 115, 116, 113, 118, 114],
[112, 117, 114, 113, 114, 114, 115, 110, 115, 119, 114, 114, 110, 114, 114, 111, 117, 114], [110, 115, 113, 112, 113, 113, 114, 109, 114, 117, 113, 114, 109, 113, 114, 110, 115, 113],
[109, 114, 110, 110, 111, 111, 113, 108, 114, 115, 111, 112, 108, 111, 113, 109, 114, 110], [108, 113, 109, 109, 109, 109, 111, 107, 112, 114, 109, 110, 106, 109, 110, 108, 113, 109],
[105, 110, 108, 108, 109, 109, 109, 105, 110, 113, 109, 109, 104, 109, 109, 105, 110, 108], [104, 109, 107, 105, 108, 108, 109, 104, 109, 111, 108, 108, 104, 108, 108, 104, 109, 107],
[104, 109, 105, 104, 105, 105, 108, 103, 108, 109, 105, 106, 103, 105, 106, 104, 109, 105], [103, 107, 104, 104, 104, 104, 105, 101, 106, 109, 104, 104, 100, 104, 104, 102, 107, 104],
[100, 105, 103, 102, 103, 103, 104, 99, 104, 108, 103, 104, 99, 103, 104, 100, 105, 103], [99, 104, 101, 100, 102, 102, 103, 99, 104, 105, 101, 103, 98, 102, 103, 99, 104, 100],
[98, 103, 99, 99, 100, 100, 101, 98, 102, 104, 100, 100, 97, 100, 100, 98, 103, 99], [97, 101, 99, 98, 99, 99, 99, 95, 100, 103, 99, 99, 95, 99, 99, 97, 101, 99],
[95, 99, 98, 96, 98, 98, 99, 94, 99, 101, 98, 98, 94, 98, 98, 95, 99, 98], [94, 99, 95, 94, 96, 96, 98, 93, 98, 99, 95, 97, 93, 95, 97, 94, 99, 95],
[93, 97, 94, 94, 94, 95, 95, 92, 96, 99, 94, 95, 91, 94, 95, 93, 98, 94], [91, 95, 93, 93, 94, 94, 94, 90, 94, 98, 93, 94, 89, 94, 94, 90, 95, 93],
[89, 94, 92, 90, 93, 93, 93, 89, 94, 95, 92, 93, 89, 92, 93, 89, 94, 92], [89, 93, 90, 89, 90, 90, 91, 88, 93, 94, 90, 90, 88, 90, 90, 89, 93, 90],
[88, 91, 89, 88, 89, 89, 89, 86, 90, 93, 89, 89, 85, 89, 89, 88, 91, 89], [85, 89, 88, 87, 88, 89, 89, 84, 89, 91, 88, 88, 84, 88, 88, 85, 89, 88],
[84, 89, 85, 85, 86, 87, 88, 84, 88, 89, 86, 87, 84, 86, 87, 84, 89, 85], [83, 88, 84, 84, 85, 85, 85, 83, 86, 89, 84, 85, 82, 85, 85, 83, 88, 84],
[82, 85, 84, 83, 84, 84, 84, 80, 84, 88, 84, 84, 80, 84, 84, 82, 85, 84], [80, 84, 82, 80, 83, 83, 83, 79, 84, 85, 83, 83, 79, 83, 83, 80, 84, 82],
[79, 83, 80, 79, 80, 82, 82, 78, 83, 84, 80, 81, 78, 80, 81, 79, 83, 80], [78, 81, 79, 79, 79, 80, 80, 77, 80, 83, 79, 79, 76, 79, 79, 78, 82, 79],
[76, 79, 78, 77, 78, 79, 79, 75, 79, 81, 78, 79, 75, 78, 79, 76, 80, 78], [74, 79, 77, 75, 77, 78, 78, 74, 78, 79, 77, 78, 74, 77, 77, 74, 79, 76],
[74, 78, 75, 74, 75, 75, 75, 73, 77, 79, 75, 75, 73, 75, 75, 74, 78, 75], [73, 75, 74, 73, 74, 74, 74, 71, 75, 78, 74, 74, 70, 74, 74, 73, 75, 74],
[70, 74, 73, 71, 73, 74, 73, 69, 74, 75, 73, 73, 69, 73, 73, 70, 74, 73], [69, 73, 70, 70, 71, 73, 72, 69, 73, 74, 70, 71, 69, 71, 71, 69, 73, 70],
[68, 72, 69, 69, 69, 70, 70, 68, 70, 73, 69, 69, 67, 69, 69, 68, 72, 69], [67, 70, 69, 68, 69, 69, 69, 65, 69, 71, 69, 69, 65, 69, 69, 67, 70, 69],
[65, 69, 67, 65, 68, 68, 68, 64, 68, 69, 67, 68, 64, 68, 68, 65, 69, 67], [64, 68, 65, 64, 65, 67, 65, 63, 67, 69, 65, 65, 63, 65, 65, 64, 68, 65],
[63, 65, 64, 63, 64, 65, 64, 62, 65, 68, 64, 64, 62, 64, 64, 63, 65, 64], [61, 64, 63, 62, 63, 64, 63, 60, 64, 65, 63, 63, 60, 63, 63, 61, 64, 63],
[59, 63, 61, 60, 62, 63, 62, 59, 63, 64, 61, 62, 59, 62, 62, 59, 63, 61], [59, 62, 60, 59, 60, 61, 60, 58, 60, 63, 59, 60, 58, 60, 60, 59, 62, 59],
[58, 60, 59, 58, 59, 59, 59, 56, 59, 62, 59, 59, 56, 59, 59, 58, 60, 59], [55, 59, 58, 56, 58, 59, 58, 54, 59, 60, 58, 58, 54, 58, 58, 55, 59, 58],
[54, 58, 55, 54, 55, 58, 55, 54, 57, 59, 55, 55, 54, 55, 55, 54, 58, 55], [54, 55, 54, 54, 54, 55, 54, 53, 55, 58, 54, 54, 53, 54, 54, 54, 55, 54],
[52, 54, 53, 53, 54, 54, 54, 50, 54, 55, 53, 54, 50, 54, 53, 52, 54, 53], [50, 53, 52, 50, 52, 53, 52, 49, 53, 54, 52, 52, 49, 52, 52, 50, 54, 52],
[49, 52, 50, 49, 50, 52, 50, 48, 51, 53, 50, 50, 48, 50, 50, 49, 52, 50], [48, 50, 49, 48, 49, 50, 49, 47, 49, 52, 49, 49, 47, 49, 49, 48, 50, 49]] ,
'err': [13.962964335319754, 14.46429395531473, 14.75460153980027, 13.475517581958847, 13.284416516290385, 11.663797035212177, 13.653748010915642, 13.26165170209461, 13.24815971580258,
13.704740921594585, 13.721711458162027, 10.926952106844219, 13.867842460076481, 14.293172159036494, 14.579460380045766, 15.03997746648367, 14.201679362112287, 14.444065341711763,
11.902270769685195, 14.691612876379189, 14.370267185984012, 13.047294014283374, 12.169228459682493, 14.214054982108628, 14.937184479560138, 14.882721298587882, 14.130903608506884,
14.691101466192158, 12.788451840377483, 14.27987313699716, 14.877840276142166, 14.177382339396281, 14.252554270784621, 14.153712070169313, 32.15463688611945, 14.375792433964307,
14.47064949941523, 12.743269820884052, 13.631768130732326, 11.913216891477532, 12.919801879321767, 15.279078580885198, 14.464812795898979, 14.166895907396338, 14.231010953645637,
12.060641939813195, 14.931975247365244, 14.894368450250568, 15.06971394322909, 13.460529401296299, 12.562129828223988, 14.936693256444869, 14.13972897214262, 13.260296600784386,
15.151668447706925, 13.001226656316703, 14.699922303124367, 13.153026300941747, 14.022030075945622, 14.367512628437908, 13.321350576140958, 14.24115686407913, 11.60517732129847,
13.907016890931118, 11.318156851370532, 14.99552948232531, 13.675968792989352, 14.628795379333951, 13.11746192259443, 10.453520400424622, 13.26883790741158, 14.336915207258699,
14.433672210448094, 13.35445753477461, 14.946750782743038, 13.508349920166893, 13.155903701367151, 13.548932970055375, 15.14066196451904, 14.873022872787715, 12.050849264783665,
13.367169640438078, 14.90439925518558, 14.237414094496671, 14.303694905719112, 15.277141503528128, 14.593770304643385, 11.316277920408083, 11.287929747718408, 13.904513352755657,
14.891896781228297, 14.068586037783916, 14.519374974788207, 13.69447679097857, 12.20856370903175, 15.196749766163066, 14.898141003024193, 14.461878126555803, 14.769898671009742,
11.630730056896027, 13.579206090805656, 13.604613044049984, 15.245506993501749, 15.226149353881738, 12.115686678627299, 14.664276968544982, 12.028151996881661, 14.520569557289946,
14.509640286205013, 14.260103653888109, 12.974029693548346, 10.81030248279012]
}
......
......@@ -54,6 +54,7 @@ import x393_pio_sequences
import x393_mcntrl_timing
import x393_mcntrl_buffers
import x393_mcntrl_tests
import x393_mcntrl_eyepatterns
import x393_mcntrl_adjust
import vrlg
__all__ = []
......@@ -325,8 +326,9 @@ USAGE
x393tasks= x393_axi_control_status.X393AxiControlStatus(verbose,args.simulated)
x393Pio= x393_pio_sequences.X393PIOSequences(verbose,args.simulated)
x393Timing= x393_mcntrl_timing.X393McntrlTiming(verbose,args.simulated)
x393Buffers=x393_mcntrl_buffers.X393McntrlBuffers(verbose,args.simulated)
x393Buffers= x393_mcntrl_buffers.X393McntrlBuffers(verbose,args.simulated)
x393Tests= x393_mcntrl_tests.X393McntrlTests(verbose,args.simulated)
x393Eyepatterns= x393_mcntrl_eyepatterns.X393McntrlEyepattern(verbose,args.simulated)
x393Adjust= x393_mcntrl_adjust.X393McntrlAdjust(verbose,args.simulated)
'''
......@@ -350,6 +352,7 @@ USAGE
extractTasks(x393_mcntrl_timing.X393McntrlTiming,x393Timing)
extractTasks(x393_mcntrl_buffers.X393McntrlBuffers,x393Buffers)
extractTasks(x393_mcntrl_tests.X393McntrlTests,x393Tests)
extractTasks(x393_mcntrl_eyepatterns.X393McntrlEyepattern,x393Eyepatterns)
extractTasks(x393_mcntrl_adjust.X393McntrlAdjust,x393Adjust)
for cmdLine in commands:
......
......@@ -31,6 +31,7 @@ __status__ = "Development"
#import sys
#import x393_mem
#MCNTRL_TEST01_CHN4_STATUS_CNTRL=0
NUM_FINE_STEPS= 5
def hx(obj,length=None):
frmt="0x%x"
if (length):
......@@ -170,3 +171,79 @@ def smooth2d(arr2d):
smooth.append(row)
return smooth
def split_delay(dly):
"""
Convert hardware composite delay into continuous one
<dly> 8-bit (5+3) hardware delay value (or a list of delays)
Returns continuous delay value (or a list of delays)
"""
if isinstance(dly,list) or isinstance(dly,tuple):
rslt=[]
for d in dly:
rslt.append(split_delay(d))
return rslt
try:
if isinstance(dly,float):
dly=int(dly+0.5)
dly_int=dly>>3
dly_fine=dly & 0x7
if dly_fine > (NUM_FINE_STEPS-1):
dly_fine= NUM_FINE_STEPS-1
return dly_int*NUM_FINE_STEPS+dly_fine
except:
return None
def combine_delay(dly):
"""
Convert continuous delay value to the 5+3 bit encoded one
<dly> continuous (0..159) delay (or a list of delays)
Returns 8-bit (5+3) hardware delay value (or a list of delays)
"""
if isinstance(dly,list) or isinstance(dly,tuple):
rslt=[]
for d in dly:
rslt.append(combine_delay(d))
return rslt
try:
if isinstance(dly,float):
dly=int(dly+0.5)
return ((dly/NUM_FINE_STEPS)<<3)+(dly%NUM_FINE_STEPS)
except:
return None
def convert_mem16_to_w32(mem16):
"""
Convert a list of 16-bit memory words
into a list of 32-bit data as encoded in the buffer memory
Each 4 of the input words provide 2 of the output elements
<mem16> - a list of the memory data
Returns a list of 32-bit buffer data
"""
res32=[]
for i in range(0,len(mem16),4):
res32.append(((mem16[i+3] & 0xff) << 24) |
((mem16[i+2] & 0xff) << 16) |
((mem16[i+1] & 0xff) << 8) |
((mem16[i+0] & 0xff) << 0))
res32.append((((mem16[i+3]>>8) & 0xff) << 24) |
(((mem16[i+2]>>8) & 0xff) << 16) |
(((mem16[i+1]>>8) & 0xff) << 8) |
(((mem16[i+0]>>8) & 0xff) << 0))
return res32
def convert_w32_to_mem16(w32):
"""
Convert a list of 32-bit data as encoded in the buffer memory
into a list of 16-bit memory words (so each bit corresponds to DQ line
Each 2 of the input words provide 4 of the output elements
<w32> - a list of the 32-bit buffer data
Returns a list of 16-bit memory data
"""
mem16=[]
for i in range(0,len(w32),2):
mem16.append(((w32[i]>> 0) & 0xff) | (((w32[i+1] >> 0) & 0xff) << 8))
mem16.append(((w32[i]>> 8) & 0xff) | (((w32[i+1] >> 8) & 0xff) << 8))
mem16.append(((w32[i]>>16) & 0xff) | (((w32[i+1] >> 16) & 0xff) << 8))
mem16.append(((w32[i]>>24) & 0xff) | (((w32[i+1] >> 24) & 0xff) << 8))
return mem16
......@@ -1208,28 +1208,13 @@ class X393LMA(object):
bDQ=None
break
bDQ.append(bestDQ) #tuple(delay,signed error in ps)
"""
fullBitErr=bestDiff # +asym_err[b] #TODO: Restore the full error!
if (errDQ is None) or (abs(fullBitErr) > abs (errDQ)):
errDQ= fullBitErr
"""
fullBitErr=abs(bestDiff) +asym_err[b] #TODO: Restore the full error!
# dbg_errs[b]=abs(bestDiff)
if (errDQ is None) or (fullBitErr > errDQ):
errDQ= fullBitErr
# dbg_worstBit=b
someData=True
vDQ.append(bDQ)
vErr.append(errDQ)
## if dbg_worstBit is None:
## vErr.append(None)
## else:
# vErr.append(asym_err[dbg_worstBit])
# vErr.append(10*dbg_worstBit)
# vErr.append(dbg_errs[2])
## vErr.append(dbg_errs[5])
# print ("enl=%d, dly=%d, err=%s"%(enl,dly,str(errDQ)))
if someData:
dqForDqs.append(vDQ)
maxErrDqs.append(vErr)
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -38,12 +38,12 @@ import x393_axi_control_status
from x393_pio_sequences import X393PIOSequences
from x393_mcntrl_timing import X393McntrlTiming
from x393_mcntrl_buffers import X393McntrlBuffers
from x393_mcntrl_adjust import X393McntrlAdjust
#from x393_mcntrl_adjust import X393McntrlAdjust
#from verilog_utils import * # concat, bits
#from verilog_utils import hx, concat, bits, getParWidth
from verilog_utils import concat #, getParWidth
from verilog_utils import concat,convert_w32_to_mem16 #, getParWidth
#from x393_axi_control_status import concat, bits
from time import sleep
#from time import sleep
import vrlg
class X393McntrlTests(object):
DRY_MODE= True # True
......@@ -63,7 +63,7 @@ class X393McntrlTests(object):
self.x393_pio_sequences= X393PIOSequences(debug_mode,dry_mode)
self.x393_mcntrl_timing= X393McntrlTiming(debug_mode,dry_mode)
self.x393_mcntrl_buffers= X393McntrlBuffers(debug_mode,dry_mode)
self.x393_mcntrl_adjust= X393McntrlAdjust(debug_mode,dry_mode)
# self.x393_mcntrl_adjust= X393McntrlAdjust(debug_mode,dry_mode)
# self.__dict__.update(VerilogParameters.__dict__["_VerilogParameters__shared_state"]) # Add verilog parameters to the class namespace
try:
self.verbose=vrlg.VERBOSE
......@@ -334,7 +334,7 @@ class X393McntrlTests(object):
256, # num,
0, # show_rslt,
wait_complete) # Wait for operation to complete
read16=self.x393_mcntrl_adjust.convert_w32_to_mem16(rd_buf) # 512x16 bit, same as DDR3 DQ over time
read16=convert_w32_to_mem16(rd_buf) # 512x16 bit, same as DDR3 DQ over time
sum_read16=0
for d in read16:
sum_read16+=d
......
......@@ -336,6 +336,7 @@ class X393McntrlTiming(object):
List elements may be None, those values will not be overwritten
if delay is None will restore default values
@param indx if present, delay only applies to the specified index (delay should be int/long)
@param quiet reduce output
"""
if delay is None:
delay=[]
......@@ -357,13 +358,16 @@ class X393McntrlTiming(object):
def axi_set_bank_odelay(self,
delay=None, # input [7:0] delay;
indx=None): # address index
indx=None, # address index
quiet=1):
"""
Set output delays for bank lines only
@param delay 8-bit (5+3) delay value to use or list/tuple containing individual values
List elements may be None, those values will not be overwritten
if delay is None will restore default values
@param indx if present, delay only applies to the specified index (delay should be int/long)
@param quiet reduce output
"""
bank_offset=24
if delay is None:
......@@ -379,20 +383,22 @@ class X393McntrlTiming(object):
for i in range(len(delay)):
if (i != indx):
delay[i]=None
if self.DEBUG_MODE > 1:
if quiet < 2:
print("SET BANK ODELAY="+hexMultiple(delay))
self.axi_set_multiple_delays(vrlg.LD_DLY_CMDA, bank_offset, 0,delay, "DLY_CMDA") # length will be determined by len(delay)
self.x393_axi_tasks.write_contol_register(vrlg.DLY_SET,0) # set all delays
def axi_set_cmd_odelay(self,
delay=None, # input [7:0] delay;
indx=None): # address index
indx=None, # address index
quiet=1):
"""
Set output delays for command lines only. command=(we,ras,cas,cke,odt)
@param delay 8-bit (5+3) delay value to use or list/tuple containing individual values
List elements may be None, those values will not be overwritten
if delay is None will restore default values
@param indx if present, delay only applies to the specified index (delay should be int/long)
@param quiet reduce output
"""
command_offset=24+3
if delay is None:
......@@ -408,7 +414,7 @@ class X393McntrlTiming(object):
for i in range(len(delay)):
if (i != indx):
delay[i]=None
if self.DEBUG_MODE > 1:
if quiet < 2:
print("SET COMMAND ODELAY="+hexMultiple(delay))
self.axi_set_multiple_delays(vrlg.LD_DLY_CMDA, command_offset, 0,delay, "DLY_CMDA") # length will be determined by len(delay)
self.x393_axi_tasks.write_contol_register(vrlg.DLY_SET,0) # set all delays
......
......@@ -783,6 +783,8 @@ class X393PIOSequences(object):
t_rfc, # input[9:0]t_rfc; # =50 for tCK=2.5ns
t_refi, # input[7:0]t_refi; # 48/97 for normal, 8 - for simulation
en_refresh=0,
ra=0, # used only for calibration of the address line output delay
ba=0,
verbose=0):
"""
Setup refresh sequence at parameter defined address in the sequencer memory
......@@ -794,7 +796,7 @@ class X393PIOSequences(object):
print("**** SET REFRESH: tRFC=%d, tREFI=%d"%(t_rfc,t_refi))
cmd_addr = vrlg.MCONTR_CMD_WR_ADDR + vrlg.REFRESH_OFFSET
# addr bank RCW ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD NOP, B_RST
data=self.func_encode_cmd( 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
data=self.func_encode_cmd( ra, ba, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
self.x393_mem.axi_write_single_w(cmd_addr, data, verbose)
cmd_addr += 1
# =50 tREFI=260 ns before next ACTIVATE or REFRESH, @2.5ns clock, @5ns cycle
......@@ -1058,8 +1060,20 @@ class X393PIOSequences(object):
print()
return data
def manual_refresh(self,
wait_complete=1): # Wait for operation to complete
"""
Run refresh cycle
<wait_complete> wait read pattern operation to complete (0 - may initiate multiple PS PIO operations)
"""
self.schedule_ps_pio ( # schedule software-control memory operation (may need to check FIFO status first)
vrlg.REFRESH_OFFSET, # input [9:0] seq_addr; # sequence start address
0, # input [1:0] page; # buffer page number
0, # input urgent; # high priority request (only for competion with other channels, will not pass in this FIFO)
0, # input chn; # channel buffer to use: 0 - memory read, 1 - memory write
wait_complete) # `PS_PIO_WAIT_COMPLETE ) # wait_complete; # Do not request a newe transaction from the scheduler until previous memory transaction is finished
self.wait_ps_pio_done(vrlg.DEFAULT_STATUS_MODE,1) # wait previous memory transaction finished before changing delays (effective immediately)
def restart_ddr3(self,
wait_complete=True,
......
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