From 674ec78c41e98eb7c86c370d46ab28de2251e455 Mon Sep 17 00:00:00 2001
From: Stephan Philips <s.g.j.philips@tudelft.nl>
Date: Wed, 3 Jun 2020 14:23:07 +0200
Subject: [PATCH] spi rack driver

---
 .../HVI_single_shot.py                        |  98 ++++++++++++++++++
 .../HVI/AWG_parallel_test_no_dig/__init__.py  |   0
 .../single_shot_alike.HVI                     | Bin 0 -> 25486 bytes
 .../single_shot_alike.HVIprj                  | Bin 0 -> 12301 bytes
 .../single_shot_alike.HVIprj.bak              | Bin 0 -> 12301 bytes
 .../single_shot_exp/HVI_single_shot.HVIprj    | Bin 12118 -> 12118 bytes
 core_tools/drivers/spi_rack.py                |   9 ++
 7 files changed, 107 insertions(+)
 create mode 100644 core_tools/HVI/AWG_parallel_test_no_dig/HVI_single_shot.py
 create mode 100644 core_tools/HVI/AWG_parallel_test_no_dig/__init__.py
 create mode 100644 core_tools/HVI/AWG_parallel_test_no_dig/single_shot_alike.HVI
 create mode 100644 core_tools/HVI/AWG_parallel_test_no_dig/single_shot_alike.HVIprj
 create mode 100644 core_tools/HVI/AWG_parallel_test_no_dig/single_shot_alike.HVIprj.bak
 create mode 100644 core_tools/drivers/spi_rack.py

diff --git a/core_tools/HVI/AWG_parallel_test_no_dig/HVI_single_shot.py b/core_tools/HVI/AWG_parallel_test_no_dig/HVI_single_shot.py
new file mode 100644
index 00000000..8bbfdcb5
--- /dev/null
+++ b/core_tools/HVI/AWG_parallel_test_no_dig/HVI_single_shot.py
@@ -0,0 +1,98 @@
+"""
+define a function that loads the HVI file that will be used thoughout the experiments
+"""
+import keysightSD1
+import core_tools.HVI.AWG_parallel_test_no_dig as ct
+
+HVI_ID = "HVI_single_shot_no_dig.HVI"
+
+
+def load_HVI(AWGs, channel_map, *args,**kwargs):
+	"""
+	load a HVI file on the AWG.
+	Args:
+		AWGS (dict <str, QCoDeS Intrument>) : key is AWGname, value awg object. 
+		channel_map (dict <str, (tuple <str, int>)) : key is channelname, value is AWGname, channel number
+	Returns:
+		HVI (SD_HVI) : keyisight HVI object.	
+	"""
+	for channel, channel_loc in channel_map.items():
+		# 6 is the magic number of the arbitary waveform shape.
+		AWGs[channel_loc[0]].awg_stop(channel_loc[1])
+		AWGs[channel_loc[0]].set_channel_wave_shape(keysightSD1.SD_Waveshapes.AOU_AWG,channel_loc[1])
+		AWGs[channel_loc[0]].awg_queue_config(channel_loc[1], 1)
+
+			
+	HVI = keysightSD1.SD_HVI()
+	error = HVI.open(ct.__file__[:-11] + "single_shot_alike.HVI")
+	print(error)
+
+	error = HVI.assignHardwareWithUserNameAndSlot("Module 0",0,2)
+	print(error)
+	error = HVI.assignHardwareWithUserNameAndSlot("Module 1",0,3)
+	print(error)
+	error = HVI.assignHardwareWithUserNameAndSlot("Module 2",0,4)
+	print(error)
+	error = HVI.assignHardwareWithUserNameAndSlot("Module 3",0,5)
+	print(error)
+	error = HVI.assignHardwareWithUserNameAndSlot("Module 4",0,7)
+	print(error)
+
+	error = HVI.compile()
+	print(error)
+	error = HVI.load()
+	print(error)
+	
+
+	error = HVI.start()
+	print(error)
+
+	return HVI
+
+
+"""
+define a function that applies the settings to a HVI file and then compiles it before the experiment.
+"""
+
+def set_and_compile_HVI(HVI, playback_time, n_rep, *args, **kwargs):
+	"""
+	Function that set values to the currently loaded HVI script and then performs a compile step.
+	Args:
+		HVI (SD_HVI) : HVI object that is already loaded in the memory. Will be loaded by default.
+		playback_time (int) : #ns to play the sequence (assuming every point is one ns)
+		n_rep (int) : number of repertitions. This is the number of reperititons that you set in the pulselub object.
+	Returns:
+		None
+	"""
+	# No need ... We will overwrite the registers instead of a re-compile for updated speed :-)
+	pass
+
+"""
+Function to load the HVI on the AWG. This will be the last function that is executed in the play function.
+
+This function is optional, if not defined, there will be just two calls,
+	HVI.load()
+	HVI.start()
+So only define if you want to set custom settings just before the experiment starts. Note that you can access most settings via HVI itselves, so it is better to do it via there.
+"""
+
+def excute_HVI(HVI, AWGs, channel_map, playback_time, n_rep, *args, **kwargs):
+	"""
+	load HVI code.
+	Args:
+		AWGS (dict <str, QCoDeS Intrument>) : key is AWGname, value awg object. 
+		channel_map (dict <str, (tuple <str, int>)) : key is channelname, value is AWGname, channel number
+		playback_time (int) : #ns to play the sequence (assuming every point is one ns)
+		n_rep (int) : number of repertitions. This is the number of reperititons that you set in the pulselub object.
+	"""
+
+	nrep = int(n_rep)
+	length = int(playback_time/10 + 200) # extra delay, seems to be needef or the digitizer.
+
+	for awgname, awg in AWGs.items():
+		err = awg.awg.writeRegisterByNumber(2, int(nrep))
+		err = awg.awg.writeRegisterByNumber(3, int(length))
+		
+	# start sequence
+	err = AWGs['AWG1'].awg.writeRegisterByNumber(1, 0)
+	err = AWGs['AWG1'].awg.writeRegisterByNumber(0,int(1))
diff --git a/core_tools/HVI/AWG_parallel_test_no_dig/__init__.py b/core_tools/HVI/AWG_parallel_test_no_dig/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/core_tools/HVI/AWG_parallel_test_no_dig/single_shot_alike.HVI b/core_tools/HVI/AWG_parallel_test_no_dig/single_shot_alike.HVI
new file mode 100644
index 0000000000000000000000000000000000000000..4783835f6874099d115a7c88c6f21b8c42ff4627
GIT binary patch
literal 25486
zcmeI3NpBoQ6vul^0)#CIi`Zcx3l0z%+W`_*hma7KEF@tQLf9gfWe7>I9Rjxz2gHpF
z5*(1oN8rkGK;jE<;J_!~%$)=Lf7ShZ-ZVWEN17>nlzLK4E&cDRSFc`efA!p!W!V)9
z+ZB)<jWPW;vi161e4mmm`&Sa;2FNiz{qrXBS+-80p>UXt<Z6XOXHK3wHP>uW-lDRd
z6IW6^HQAcnt3-CU!qJJ=fr(b@(C(?JUAvC$k+fPzTCK@eYhvngYT@nc6_B9O9ZJyr
z93>KzLP(<q=?fcs$KZ0A{%RU<Ke<OpTD`7#g$T7N`<je|Mv-e2j?K+4EG^G1=DiNZ
z#S{9`g_xkkgeTP5g_x`&=yn%ks)}H=DEksvE^X^ygNN~@y}{aK^y5n#FG40|;6}D7
zq`loj!SH@c`!g`KZ$o3_!nl(jk_v5Wk4Z^eF$FtYKi7|yU5}=MZ(sdyY|OMW#FcXV
zw_yCnbZ9-+ICwwD{?U7%Wo=fiASlylgvGlk2@(D=EWN7ZuLg(Jl<$&Hw=L5sHj2_7
z_F#xH{kQfu6yr}>L?e{`KUMfYZO8I|HPu$gCHUWF%at+vQ@KZ#rGrV(q+5R**~W;L
z&%03CKOD-Unm#B{wm+r?XceTg|FZ{2m3G;h8ut6Ym17mwK+6v}F700~1OslMUv>BD
zA;-=iuIiw67D>i|XUCUk7neJa^OP9`(D%hd&X3e{eBYVVCz}%&zQ{+?;`Op_UXs_l
zMbPSzcdN>-RbWlDu&qcdDur7Rby;8zKcG;3m*<S%yaK{m6U@2OOLNQbEzZrJ{Os31
za-}TJU+Ji7lcK7sHBGe$DuDfwjD$SzEMdOi|H&J%n62gp^)N5Z`*E|%=rj6R=!N0F
zW1$y@TbYGkm>Yz#z{>lL0z%#Ba^T3ZP2c7guvn+GQf;#dF$<>!UbU_%8Eiq9&1S^d
zXPW|8o>`zS0<HS+v+@Y);$<fm7v|^Z7H8g}f-JL`YOYbG);w{YWqV=Fs>Ho8W>w-|
z7_%xdm+*rM2=^Owd~<eT`RwPp?iODwt-ao)F$E|KH!A(O0zw)y9^U`fiRR8GgS7#C
z=S+_Q=?O^EzbGJBgt;(#e!jW1eCBNHFP?VZL&ME0uwpNaw_-1hw_-1hw<6ZCrREK#
zJ4?;v-#?*nNBv$)4OLj!s&sX^*ru|4NR%kVmKw`r@Lo#|?@|XcqrhP7XDzhF#bRtf
zu7J!cm{Rtfa{4%<;IXX3U=hQT2TSa+Zx&^WN-Sx{9=yliqP*4HJgiJ1_>K9B>HDF|
z3~M;@U>SE`FP?8$+Xqw>W&wDQW&JViCM;YCKESN;SQZ+?9{sHVDx!Vx9*dtDcKSPI
z3Sl6t`r;5^30?>41MlnQOltMoSg0st8wBUEA1H728kRg*VvohItzK_4!?X3`Xe;FR
z0*{sWJ*>wFmJDFx_hgM2f^V;)bk5gu0e`+{9wF>}#6!}tjn@T{A@W_;3Wgu!_4Ex%
z{GN=_m<~pdH4fO{B=LJ;TZ>Jww9WpB-;*We{|rDZ|5sCOg<O~njl}PnIU>d7{<li}
zUO3xE>T6vy?Xs}4|6BR6_y2tN)%k)$dt_N{e$VfJoP!2^>BgLl-#iJ)Z3^7sBJg{B
z=fM4bB>BC&q&V)l2KhZc>EH@HqWoS{szXK%g5SGe^)PGt^LvaXNalg@d(1QLU6&ER
z7h|bm%3LzP_r6{VM<2z;{U}+>@0}~KJU1-w*7199*I;>%v9I!bC~XGv{2qQ|zA~;f
z@{xjJLqU-Ti?88VhTT#;Q<QnGs;NA9kG)TMtJiaDO!#I6%f4k;&+pMbcwaBydl}aA
zdo0jZeeZNwuLJuAcwg`B4r^nfqQKdK_t;Yf7Cj70x{lwwwZJOsvYFvIFW_h^<oCi?
zXo=s$dWqk|r(z59U=^jj->?WIelPAwFzd?uP5OQ>eZLp=)3xC1ZS(lV@5vI4#P69u
zM2b86Preay4T~vd`-$J{-v4b77!dX-%MUm%?SDD)dk|n=xJzEjM>U)u?BvcTAJuoM
zoAEP#Z@j=n;P)O>QzOgoJuKz9L#{!7?-8jr!u(!K>aSB61iv?_dM?iIF_s{i2gdL1
zQkw1NGUE4`i?&=4U+Pk$SAt;hUP}#A2C591QJ~F>e!n*-kSS)|kBVyfy-x}(&kf7F
zb^P8tHCWzb?5q6VV-D;2J^aReg|!noqd=Qp$b-e#@GHYkDQ#HK?=cI&d+db6dTxyg
z58h)Rby&~u(LQ*O-RZEN-(!KU>idwxdL8Hwcwg@hhqbX#QQ+*rd+g}~i!BUGx{lw&
zx$10Yc+Mg?+6wu-@E_8|?_oWrZu)*tMu;lRgH@Ey`C2ZJ_`SFz!K`DwLbM>J|L4Xv
zKdrUdD}pc>>HoP=ui2Q~?4SOhi~ptX_rhF^_fzhFiQntq|7{2ozc;%7&t(ifzqecY
zNZ;>0siwH!kL34zPfKz3r8UU!Ju9_FnBSY0`h(*4o>yJmS^Iy#$5?`79vHv(g3{c(
z62BMR99Jj6&Dn8G$spVH%Q4LagAbJ7n^%S5=&jhe9~y&$n^EvQ(Rt-f8N-sV<M-aJ
z!Kx@@?5q6Veuwq^9)4rKGOjf8v4ZIk3W_{fe9h~-uXv`Y>sz#G<-vRGUgfP`&#f`x
zrz_a!9M<!Dv=83b`;5bSevbvZs_#<{>vdq?0PpMF<FGasDhiw(c#l0>VCkP>N!Rgv
zPZU^1T{bg3cV(P(h5X(w-b?%*R!IDwj1XOz2dgOM{f5OQ@q2Mcf?3CUg=j%c{9au1
z(^|Vc&@dQ@-}~PIZ<s@Z$<6+W-^2eBzc);OtEs!({}R8~z5ko7#*_&AlNAg$F700~
z1cR-=Z*8mn|6B+#FI$zVeuLNV(jB%ez0>c~&G>PLMh+@O;`d%wQ*>`6`Mp=AIQ!BX
z<o6Cstr6z;j!OM?3WNB5@0jYr^ZWCAj3r3sf$@7Ml;+-*_`TrfxH_TVQlrN~`Ykn9
z2f!Hx=Kn>%-&+vK)-mILR8-6FeOh37Zdl%}<M-aH!SWtsU*-2+cUaHw;Wy?h<4Pk-
z3bg5kJXm}UzcTD`r48%9-(wbl_t@7Q)^lr2c<>&3#9=+ZNBiJC_K?GRevbvZs_!cf
o>vcG&a`3+1mmJo{LPdeI1Mjhm1r}QvmUJDz_hNxn)RW))58crzApigX

literal 0
HcmV?d00001

diff --git a/core_tools/HVI/AWG_parallel_test_no_dig/single_shot_alike.HVIprj b/core_tools/HVI/AWG_parallel_test_no_dig/single_shot_alike.HVIprj
new file mode 100644
index 0000000000000000000000000000000000000000..fcd2e5c1abb1cd27d077ba3ed775932ddc055a66
GIT binary patch
literal 12301
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

literal 0
HcmV?d00001

diff --git a/core_tools/HVI/AWG_parallel_test_no_dig/single_shot_alike.HVIprj.bak b/core_tools/HVI/AWG_parallel_test_no_dig/single_shot_alike.HVIprj.bak
new file mode 100644
index 0000000000000000000000000000000000000000..fcd2e5c1abb1cd27d077ba3ed775932ddc055a66
GIT binary patch
literal 12301
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

literal 0
HcmV?d00001

diff --git a/core_tools/HVI/single_shot_exp/HVI_single_shot.HVIprj b/core_tools/HVI/single_shot_exp/HVI_single_shot.HVIprj
index ed3c4ab426cfae488bdfaf096363e385b09e4ea7..c90507996b8758ab3a2e2f5e624938a6ca353083 100644
GIT binary patch
delta 161
zcmcZ>cP(xMr#55kWG-!A#`wt*+GUK1lg|U$$&+PuG=XHcvfSiUoxP0dlNANE8Pg^|
zkkXb+Wnf@n1Y!_S@Pp7GGI{buLE*`Mx;&Hb2=a&~14W{Nm;;D4fEWalCL0QiizWhD
eAX#LYgvkyv;*($L`b_Q-;$a2pi=AAo_ZR@=<{?u6

delta 135
zcmcZ>cP(xMr#55yWG-!A#@NXb+GULKlg|U$iIZh@G=XHcvfSiUoxO~ylNANE8B-=d
zkkXb+W?*1o1Y!_S@Pp7GGI8=mL1D(E$rlC1SrdW$=*jPOr6=16^Gp`g^O@`|!^4^m
X6pfv14;1YY;$e*j^3o?4>pcblc%C6`

diff --git a/core_tools/drivers/spi_rack.py b/core_tools/drivers/spi_rack.py
new file mode 100644
index 00000000..6b577a24
--- /dev/null
+++ b/core_tools/drivers/spi_rack.py
@@ -0,0 +1,9 @@
+from qcodes.instrument.base import Instrument
+
+import spirack
+
+class SPI_rack(Instrument):
+	def __init__(self, name, address, baud_rate='115200', timeout=1):
+		super().__init__(name)
+		self.spi_rack = spirack.SPI_rack(address, baud=baud_rate, timeout=timeout)
+		self.spi_rack.unlock()
-- 
GitLab