Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Zurich instruments HDAWG driver #454

Merged
merged 82 commits into from Nov 27, 2019

Conversation

terrorfisch
Copy link
Member

@terrorfisch terrorfisch commented May 2, 2019

PROBLEMS:

  • Long programs take forever (approx.) to compile
  • Short waveforms lead to tiing issues if sequenced by a complex program with many instructions

TODO:

  • Offset handling
  • Utilize playWaveformIndexed with for loops to shorten seqc programs
  • Increase minimal Waveform length (to 192 samples?). The exact minimal length depends on the choosen translation pattern.
  • Basic tests for AWG class

Implements #431

@coveralls
Copy link

coveralls commented May 2, 2019

Pull Request Test Coverage Report for Build 1902

  • 510 of 890 (57.3%) changed or added relevant lines in 8 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-4.6%) to 85.291%

Changes Missing Coverage Covered Lines Changed/Added Lines %
qupulse/utils/types.py 18 19 94.74%
qupulse/_program/_loop.py 2 5 40.0%
qupulse/hardware/awgs/base.py 5 33 15.15%
qupulse/_program/seqc.py 309 480 64.38%
qupulse/hardware/awgs/zihdawg.py 171 348 49.14%
Totals Coverage Status
Change from base Build 1900: -4.6%
Covered Lines: 28605
Relevant Lines: 33060

💛 - Coveralls

@peendebak
Copy link
Contributor

peendebak commented May 14, 2019

@ekammerloher @terrorfisch The following example (modified from zihdawg.py) fails for me:

hdawg.reset()

entry_list_zero = [(0, 0), (100e-9, 0, 'hold')]
entry_list_step = [(0, 0), (50e-9, .5, 'hold'), (100e-9, 0, 'hold')]
marker_start = TablePT({'P1': entry_list_zero,  'marker': entry_list_step})
tpt1 = TablePT({'P1': entry_list_zero, 'marker': entry_list_zero})
spt2 = SequencePT(marker_start, tpt1)
    
p = spt2.create_program()

ch = ('P1', None)
mk = ('marker', None)
voltage_transform = (lambda x: x,)*len(ch)
hdawg.channel_pair_AB.upload('table_pulse_test5', p, ch, mk, voltage_transform) 

The error message is:

...
  File "d:\users\eendebakpt\projects\qupulse\qupulse\hardware\awgs\zihdawg.py", line 539, in to_file
    raise HDAWGIOError('{} already exists'.format(file_path))

HDAWGIOError: C:\Users\controller\Documents\Zurich Instruments\LabOne\WebServer\awg\waves\DEV8049_AB_7318615092299051717_m.csv already exists

Otherwise the PR itself works nice. I will continue testing.

Will there be besides the channel_pair_AB also a channel_pair_ABCDEFGH for when the channel grouping of the HDAWG8 is set to 8x1?

@terrorfisch
Copy link
Member Author

terrorfisch commented May 15, 2019

Will there be besides the channel_pair_AB also a channel_pair_ABCDEFGH for when the channel grouping of the HDAWG8 is set to 8x1?

As far as I remember from talking to a ZI engineer, the sequencer program will be duplicated to the 4 sequencers if one uses the 8x1 mode. I think the only downside of pushing the program to the four channel pairs seperatly is that we need to compile it four times (unless we optimize this and hash the program structure). Or is there anything that I miss?

@ekammerloher
Copy link
Member

ekammerloher commented May 15, 2019 via email

@peendebak
Copy link
Contributor

peendebak commented May 15, 2019

Will there be besides the channel_pair_AB also a channel_pair_ABCDEFGH for when the channel grouping of the HDAWG8 is set to 8x1?

As far as I remember from talking to a ZI engineer, the sequencer program will be duplicated to the 4 sequencers if one uses the 8x1 mode. I think the only downside of pushing the program to the four channel pairs seperatly is that we need to compile it four times (unless we optimize this and hash the program structure). Or is there anything that I miss?

@ekammerloher terrorfish For multi-device synchronization it might be essential to generalize the 2x4 concept. It also takes a little bit more effort from the user to use the 4 channel pairs, otherwise I am not yet aware of other downsides.

…ker information by redesigning sampled data handling
@peendebak
Copy link
Contributor

@terrorfisch @ekammerloher Is seems this driver accepts Pulses that are defined with seconds as the unit for the time domain. In general qupulse works with ns as the unit. Should we change this to ns? if not, iis there a method to change the unit of the time domian from ns to s (and back)?

And: is there already a slack channel for qupulse?

@terrorfisch
Copy link
Member Author

#483 tackles parts of this

@terrorfisch terrorfisch merged commit d5eced5 into master Nov 27, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants