Skip to content

Commit 8cbb60b

Browse files
committedJan 21, 2016
Merge branch 'master' into ppp2
* master: add release notes/process targets/kc705: fix e664fe3 targets/kc705: fix DDS_RTIO_CLK_RATIO for AD9914. Closes #238 transforms.inferencer: give a suggestion on "raise Exception". pdq2/mediator: raise instances, not classes pdq2: wire up more of the pipeline doc: use actual version Fix formatting. doc: add artiq_flash versioneer: remote tag_prefix = v
2 parents 2bc2cd0 + 4dd0693 commit 8cbb60b

File tree

14 files changed

+119
-62
lines changed

14 files changed

+119
-62
lines changed
 

Diff for: ‎RELEASES

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
Release process
2+
===============
3+
4+
Maintain the release notes in this file with a list of new features and API changes in each major release.
5+
6+
Major releases:
7+
1. Create branch release-X from master.
8+
2. Remove any unfinished features.
9+
3. Test and fix any problems found.
10+
4. Tag X.0.
11+
12+
Minor (bugfix) releases:
13+
1. Backport bugfixes from the master branch or fix bugs specific to old releases into the currently maintained release-X branch(es).
14+
2. When significant bugs have been fixed, tag X.Y+1.
15+
3. To help dealing with regressions, no new features or refactorings should be implemented in release-X branches. Those happen in the master branch, and then a new release-X+1 branch is created.
16+
17+
18+
Release notes
19+
=============
20+
21+
1.0
22+
---
23+
* First release

Diff for: ‎artiq/_version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def get_config():
4141
cfg = VersioneerConfig()
4242
cfg.VCS = "git"
4343
cfg.style = "pep440"
44-
cfg.tag_prefix = "v"
44+
cfg.tag_prefix = ""
4545
cfg.parentdir_prefix = "artiq-"
4646
cfg.versionfile_source = "artiq/_version.py"
4747
cfg.verbose = False

Diff for: ‎artiq/compiler/transforms/inferencer.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -1221,10 +1221,19 @@ def visit_Raise(self, node):
12211221
if node.exc is not None:
12221222
exc_type = node.exc.type
12231223
if not types.is_var(exc_type) and not builtins.is_exception(exc_type):
1224+
if types.is_exn_constructor(exc_type):
1225+
notes = [diagnostic.Diagnostic("note",
1226+
"this value is an exception constructor; use {suggestion} instead",
1227+
{"suggestion": node.exc.loc.source() + "()"},
1228+
node.exc.loc)]
1229+
else:
1230+
notes = []
1231+
12241232
diag = diagnostic.Diagnostic("error",
12251233
"cannot raise a value of type {type}, which is not an exception",
12261234
{"type": types.TypePrinter().name(exc_type)},
1227-
node.exc.loc)
1235+
node.loc,
1236+
notes=notes)
12281237
self.engine.process(diag)
12291238

12301239
def visit_Assert(self, node):

Diff for: ‎artiq/devices/pdq2/driver.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ def write_segment(self, channel, segment):
193193

194194
def program_frame(self, frame_data):
195195
segments = [c.new_segment() for c in self.channels]
196+
for segment in segments:
197+
segment.line(typ=3, data=b"", trigger=True, duration=10, aux=1)
196198
for i, line in enumerate(frame_data): # segments are concatenated
197199
dac_divider = line.get("dac_divider", 1)
198200
shift = int(log(dac_divider, 2))
@@ -209,9 +211,11 @@ def program_frame(self, frame_data):
209211
shift=shift, duration=duration, trigger=trigger,
210212
**target_data)
211213
# append an empty line to stall the memory reader before jumping
212-
# through the frame table
214+
# through the frame table (`wait` does not prevent reading
215+
# the next line)
213216
for segment in segments:
214-
segment.line(typ=3, data=b"", trigger=True, duration=10)
217+
segment.line(typ=3, data=b"", trigger=True, duration=1,
218+
jump=True, aux=1)
215219
return segments
216220

217221
def program(self, program):

Diff for: ‎artiq/devices/pdq2/mediator.py

+15-14
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ def __init__(self, frame, segment_number):
4545

4646
def add_line(self, duration, channel_data, dac_divider=1):
4747
if self.frame.invalidated:
48-
raise InvalidatedError
48+
raise InvalidatedError()
4949
if self.frame.pdq.armed:
50-
raise ArmError
50+
raise ArmError()
5151
self.lines.append((dac_divider, duration, channel_data))
5252

5353
def get_duration(self):
@@ -59,13 +59,13 @@ def get_duration(self):
5959
@kernel
6060
def advance(self):
6161
if self.frame.invalidated:
62-
raise InvalidatedError
62+
raise InvalidatedError()
6363
if not self.frame.pdq.armed:
64-
raise ArmError
64+
raise ArmError()
6565
# If a frame is currently being played, check that we are next.
6666
if (self.frame.pdq.current_frame >= 0
6767
and self.frame.pdq.next_segment != self.segment_number):
68-
raise SegmentSequenceError
68+
raise SegmentSequenceError()
6969
self.frame.advance()
7070

7171

@@ -83,9 +83,9 @@ def __init__(self, pdq, frame_number):
8383

8484
def create_segment(self, name=None):
8585
if self.invalidated:
86-
raise InvalidatedError
86+
raise InvalidatedError()
8787
if self.pdq.armed:
88-
raise ArmError
88+
raise ArmError()
8989
segment = _Segment(self, self.segment_count)
9090
if name is not None:
9191
if hasattr(self, name):
@@ -111,6 +111,7 @@ def _get_program(self):
111111
"dac_divider": dac_divider,
112112
"duration": duration,
113113
"channel_data": channel_data,
114+
"trigger": False,
114115
} for dac_divider, duration, channel_data in segment.lines]
115116
segment_program[0]["trigger"] = True
116117
r += segment_program
@@ -119,17 +120,17 @@ def _get_program(self):
119120
@kernel
120121
def advance(self):
121122
if self.invalidated:
122-
raise InvalidatedError
123+
raise InvalidatedError()
123124
if not self.pdq.armed:
124-
raise ArmError
125+
raise ArmError()
125126

126127
call_t = now_mu()
127128
trigger_start_t = call_t - seconds_to_mu(trigger_duration/2)
128129

129130
if self.pdq.current_frame >= 0:
130131
# PDQ is in the middle of a frame. Check it is us.
131-
if self.frame.pdq.current_frame != self.frame_number:
132-
raise FrameActiveError
132+
if self.pdq.current_frame != self.frame_number:
133+
raise FrameActiveError()
133134
else:
134135
# PDQ is in the jump table - set the selection signals
135136
# to play our first segment.
@@ -156,7 +157,7 @@ def advance(self):
156157
class CompoundPDQ2:
157158
def __init__(self, dmgr, pdq2_devices, trigger_device, frame_devices):
158159
self.core = dmgr.get("core")
159-
self.pdq2s = [dmgr.get(d) for d in self.pdq2_devices]
160+
self.pdq2s = [dmgr.get(d) for d in pdq2_devices]
160161
self.trigger = dmgr.get(trigger_device)
161162
self.frame0 = dmgr.get(frame_devices[0])
162163
self.frame1 = dmgr.get(frame_devices[1])
@@ -175,7 +176,7 @@ def disarm(self):
175176

176177
def arm(self):
177178
if self.armed:
178-
raise ArmError
179+
raise ArmError()
179180
for frame in self.frames:
180181
frame._arm()
181182
self.armed = True
@@ -199,7 +200,7 @@ def arm(self):
199200

200201
def create_frame(self):
201202
if self.armed:
202-
raise ArmError
203+
raise ArmError()
203204
r = _Frame(self, len(self.frames))
204205
self.frames.append(r)
205206
return r

Diff for: ‎artiq/frontend/artiq_flash.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from artiq.frontend.bit2bin import bit2bin
1111

1212

13-
def main():
13+
def get_argparser():
1414
parser = argparse.ArgumentParser(
1515
formatter_class=argparse.RawDescriptionHelpFormatter,
1616
description="ARTIQ flashing/deployment tool",
@@ -43,6 +43,11 @@ def main():
4343
parser.add_argument("ACTION", nargs="*",
4444
default="proxy bitstream bios runtime start".split(),
4545
help="actions to perform, default: %(default)s")
46+
return parser
47+
48+
49+
def main():
50+
parser = get_argparser()
4651
opts = parser.parse_args()
4752

4853
config = {

Diff for: ‎artiq/gateware/targets/kc705.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,6 @@ def add_rtio(self, rtio_channels):
133133
self.submodules.rtio_crg = _RTIOCRG(self.platform, self.crg.cd_sys.clk)
134134
self.submodules.rtio = rtio.RTIO(rtio_channels)
135135
self.config["RTIO_FINE_TS_WIDTH"] = self.rtio.fine_ts_width
136-
assert self.rtio.fine_ts_width <= 3
137-
self.config["DDS_RTIO_CLK_RATIO"] = 8 >> self.rtio.fine_ts_width
138136
self.submodules.rtio_moninj = rtio.MonInj(rtio_channels)
139137

140138
if isinstance(self.platform.toolchain, XilinxVivadoToolchain):
@@ -210,6 +208,8 @@ def __init__(self, cpu_type="or1k", **kwargs):
210208
rtio_channels.append(rtio.LogChannel())
211209

212210
self.add_rtio(rtio_channels)
211+
assert self.rtio.fine_ts_width <= 3
212+
self.config["DDS_RTIO_CLK_RATIO"] = 8 >> self.rtio.fine_ts_width
213213

214214

215215
class NIST_QC2(_NIST_QCx):
@@ -259,6 +259,8 @@ def __init__(self, cpu_type="or1k", **kwargs):
259259
rtio_channels.append(rtio.LogChannel())
260260

261261
self.add_rtio(rtio_channels)
262+
assert self.rtio.fine_ts_width <= 3
263+
self.config["DDS_RTIO_CLK_RATIO"] = 24 >> self.rtio.fine_ts_width
262264

263265

264266
def main():

Diff for: ‎artiq/test/harness.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313

1414
def main():
1515
parser = argparse.ArgumentParser(description=__doc__)
16-
parser.add_argument('-m', metavar='mod', type=str,
17-
help='run library module as a script')
18-
parser.add_argument('args', type=str, nargs='+',
19-
help='arguments passed to program in sys.argv[1:]')
16+
parser.add_argument("-m", metavar="mod", type=str,
17+
help="run library module as a script")
18+
parser.add_argument("args", type=str, nargs="+",
19+
help="arguments passed to program in sys.argv[1:]")
2020
args = parser.parse_args(sys.argv[1:])
2121

22-
artiq_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
22+
artiq_path = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
2323
sys.path.insert(1, artiq_path)
2424

2525
if args.m:
@@ -28,7 +28,7 @@ def main():
2828
else:
2929
sys.argv[1:] = args.args[1:]
3030
with open(args.args[0]) as f:
31-
code = compile(f.read(), args.args[0], 'exec')
31+
code = compile(f.read(), args.args[0], "exec")
3232
exec(code, globals())
3333

3434
if __name__ == "__main__":

Diff for: ‎artiq/test/lit/exceptions/error_raise_class.py

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# RUN: %python -m artiq.compiler.testbench.signature +diag %s >%t
2+
# RUN: OutputCheck %s --file-to-check=%t
3+
4+
# CHECK-L: ${LINE:+1}: note: this value is an exception constructor; use IndexError() instead
5+
raise IndexError

Diff for: ‎artiq/wavesynth/coefficients.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,12 @@ def get_segment_data(self, start, stop, scale, *, cutoff=1e-12,
143143
return build_segment(durations, coefficients, target=target,
144144
variable=variable)
145145

146-
def extend_segment(self, segment, trigger=True, *args, **kwargs):
146+
def extend_segment(self, segment, *args, **kwargs):
147147
"""Extend a wavesynth segment.
148148
149149
See `get_segment()` for arguments.
150150
"""
151151
for i, line in enumerate(self.get_segment_data(*args, **kwargs)):
152-
if i == 0:
153-
line["trigger"] = trigger
154152
segment.add_line(**line)
155153

156154

Diff for: ‎doc/manual/conf.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ def __getattr__(cls, name):
3636
# If extensions (or modules to document with autodoc) are in another directory,
3737
# add these directories to sys.path here. If the directory is relative to the
3838
# documentation root, use os.path.abspath to make it absolute, like shown here.
39-
#sys.path.insert(0, os.path.abspath('.'))
39+
sys.path.insert(0, os.path.abspath('..'))
40+
41+
from artiq._version import get_versions
4042

4143
# -- General configuration ------------------------------------------------
4244

@@ -73,9 +75,11 @@ def __getattr__(cls, name):
7375
# built documents.
7476
#
7577
# The short X.Y version.
76-
version = 'prerelease'
78+
# version = 'prerelease'
7779
# The full version, including alpha/beta/rc tags.
78-
release = 'prerelease'
80+
# release = 'prerelease'
81+
release = get_versions()['version']
82+
version = release.split('+', 1)[0]
7983

8084
# The language for content autogenerated by Sphinx. Refer to documentation
8185
# for a list of supported languages.
@@ -120,7 +124,7 @@ def __getattr__(cls, name):
120124

121125
# The theme to use for HTML and HTML Help pages. See the documentation for
122126
# a list of builtin themes.
123-
html_theme = 'default'
127+
html_theme = 'classic'
124128

125129
# Theme options are theme-specific and customize the look and feel of a theme
126130
# further. For a list of options available for each theme, see the

Diff for: ‎doc/manual/utilities.rst

+11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
Utilities
22
=========
33

4+
.. Sort these tool by some subjective combination of their
5+
typical sequence and expected frequency of use.
6+
7+
48
Local running tool
59
------------------
610

@@ -93,6 +97,13 @@ This tool compiles key/value pairs into a binary image suitable for flashing int
9397
:ref: artiq.frontend.artiq_mkfs.get_argparser
9498
:prog: artiq_mkfs
9599

100+
Flashing/Loading tool
101+
---------------------
102+
103+
.. argparse::
104+
:ref: artiq.frontend.artiq_flash.get_argparser
105+
:prog: artiq_flash
106+
96107
.. _core-device-configuration-tool:
97108

98109
Core device configuration tool

0 commit comments

Comments
 (0)
Please sign in to comment.