whitequark [Tue, 4 Jun 2019 08:37:52 +0000 (08:37 +0000)]
build.res: simplify emission of port constraints on individual bits.
whitequark [Tue, 4 Jun 2019 08:18:50 +0000 (08:18 +0000)]
Clean up imports.
This commit:
* moves lists of universally useful imports from `nmigen` to
`nmigen.hdl` and `nmigen.lib`, reimporting them in `nmigen`;
* replaces lots of imports from individual parts of `nmigen.hdl`
with a star import from `nmigen.hdl`;
* replaces imports in tests with what we expect downstream code
to use;
* adds some missing imports in `nmigen.formal`.
whitequark [Tue, 4 Jun 2019 07:53:34 +0000 (07:53 +0000)]
build.run: extract from build.plat.
whitequark [Tue, 4 Jun 2019 06:43:10 +0000 (06:43 +0000)]
vendor.board.tinyfpga_bx: clk16 pin does not have a global buffer.
Fixes #82.
whitequark [Tue, 4 Jun 2019 06:20:01 +0000 (06:20 +0000)]
vendor.board.tinyfpga_bx: fix typo.
whitequark [Mon, 3 Jun 2019 16:47:41 +0000 (16:47 +0000)]
vendor.conn.pmod: implement.
Fixes #79.
whitequark [Mon, 3 Jun 2019 16:16:44 +0000 (16:16 +0000)]
examples: reorganize into examples/basic and examples/board.
whitequark [Mon, 3 Jun 2019 16:14:59 +0000 (16:14 +0000)]
vendor.board: extract package.
whitequark [Mon, 3 Jun 2019 15:38:49 +0000 (15:38 +0000)]
vendor.tinyfpga_bx: add connectors.
whitequark [Mon, 3 Jun 2019 15:03:43 +0000 (15:03 +0000)]
vendor.icestick: add connectors.
whitequark [Mon, 3 Jun 2019 15:03:34 +0000 (15:03 +0000)]
vendor.ice40_hx1k_blink_evn: add (some) connectors.
I have no idea how to lay out the Arduino-like connectors best,
so they're just missing.
whitequark [Mon, 3 Jun 2019 15:02:15 +0000 (15:02 +0000)]
build.{plat,res}: add support for connectors.
Fixes #77.
whitequark [Mon, 3 Jun 2019 13:03:49 +0000 (13:03 +0000)]
build.dsl: add support for connectors.
whitequark [Mon, 3 Jun 2019 09:39:38 +0000 (09:39 +0000)]
compat.fhdl.specials: TSTriple is not an elaboratable.
whitequark [Mon, 3 Jun 2019 09:23:11 +0000 (09:23 +0000)]
vendor.fpga.lattice_ice40: implement differential output buffers.
whitequark [Mon, 3 Jun 2019 08:38:12 +0000 (08:38 +0000)]
vendor.fpga.lattice_ice40: implement differential input buffers.
whitequark [Mon, 3 Jun 2019 07:54:28 +0000 (07:54 +0000)]
vendor.fpga.lattice_ice40: allow instantiating SB_GB_IO via extras.
whitequark [Mon, 3 Jun 2019 07:43:02 +0000 (07:43 +0000)]
vendor.fpga.lattice_ice40: implement SDR and DDR I/O buffers.
whitequark [Mon, 3 Jun 2019 05:56:18 +0000 (05:56 +0000)]
lib.io: add i_clk and o_clk to pin layout with xdr>=1.
whitequark [Mon, 3 Jun 2019 07:16:09 +0000 (07:16 +0000)]
hdl.rec: unbreak hasattr(rec, ...).
hasattr() requires that AttributeError be raised. Change __getitem__
to raise AttributeError, too, since it is fundamentally just sugar
for getattr().
whitequark [Mon, 3 Jun 2019 04:39:05 +0000 (04:39 +0000)]
build.{dsl,plat,res}: allow dir="oe".
Although a dir="oe" pin is generally equivalent to dir="io" pin with
the i* signal(s) disconnected, they are not equivalent, because some
pins may not be able to support input buffers at all, either because
there are no input buffers, or because the input buffers are consumed
by some other resource.
E.g. this can happen on iCE40 when the input buffer is consumed by
a PLL.
whitequark [Mon, 3 Jun 2019 04:28:53 +0000 (04:28 +0000)]
lib.io: allow dir="oe".
Although a dir="oe" pin is generally equivalent to dir="io" pin with
the i* signal(s) disconnected, they are not equivalent, because some
pins may not be able to support input buffers at all, either because
there are no input buffers, or because the input buffers are consumed
by some other resource.
E.g. this can happen on iCE40 when the input buffer is consumed by
a PLL.
whitequark [Mon, 3 Jun 2019 03:32:30 +0000 (03:32 +0000)]
build.{res,plat}: use xdr=0 as default, not xdr=1.
The previous behavior was semantically incorrect.
whitequark [Mon, 3 Jun 2019 03:17:20 +0000 (03:17 +0000)]
build.res: allow requesting raw ports, with dir="-".
This provides an escape hatch for the case where the nMigen platform
code is not flexible enough, and a IO buffer primitive needs to be
instantiated directly.
whitequark [Mon, 3 Jun 2019 03:29:27 +0000 (03:29 +0000)]
lib.io: allow Pin(xdr=0), representing a combinatorial I/O buffer.
whitequark [Mon, 3 Jun 2019 03:01:56 +0000 (03:01 +0000)]
vendor.fpga.lattice_ice40: enable SystemVerilog when reading .sv files.
whitequark [Mon, 3 Jun 2019 02:54:17 +0000 (02:54 +0000)]
build.res: if not specified, request resource #0.
This markedly differs from oMigen system, which would request
consecutive resources. The difference is deliberate; most resources
are singular, so it does not matter for them, and for resources where
it does matter, which pins are requested should not depend on order
of execution of `platform.request`.
whitequark [Mon, 3 Jun 2019 02:48:55 +0000 (02:48 +0000)]
vendor.fpga.lattice_ice40: instantiate SB_IO and apply extras.
The PULLUP and PULLUP_RESISTOR extras are representable in the PCF
file. The IO_STANDARD extra, however, can only be an SB_IO parameter.
whitequark [Mon, 3 Jun 2019 02:39:14 +0000 (02:39 +0000)]
hdl.ir: accept LHS signals like slices as Instance io ports.
This is unlikely to work with anything except Slice and Cat, but
there's no especially good place to enforce it. (Maybe in Instance?)
whitequark [Mon, 3 Jun 2019 02:22:55 +0000 (02:22 +0000)]
hdl.dsl: allow adding submodules with computed name, like with domains.
whitequark [Mon, 3 Jun 2019 02:12:01 +0000 (02:12 +0000)]
hdl.ir: accept expanded (kind, name, value) tuples in Instance.
This is useful for e.g. programmatically generating parameters
without having to mess with kwargs dicts.
whitequark [Mon, 3 Jun 2019 01:58:43 +0000 (01:58 +0000)]
build.{res,plat}: propagate extras to pin fragment factories.
This is necessary because on some platforms, like iCE40, extras
become parameters on an IO primitive, since the constraint file
format is not expressive enough for all of them.
whitequark [Mon, 3 Jun 2019 01:28:34 +0000 (01:28 +0000)]
build.res: simplify. NFC.
whitequark [Sun, 2 Jun 2019 23:36:21 +0000 (23:36 +0000)]
build.dsl: require a dict for extras instead of a stringly array.
Fixes #72.
whitequark [Sun, 2 Jun 2019 04:12:50 +0000 (04:12 +0000)]
vendor.fpga.lattice_ice40: use .bin suffix for bitstream tempfiles.
whitequark [Sun, 2 Jun 2019 04:11:06 +0000 (04:11 +0000)]
vendor.tinyfpga_{b→bx}
whitequark [Sun, 2 Jun 2019 04:04:07 +0000 (04:04 +0000)]
vendor.tinyfpga_b: fix IO_STANDARD.
Simon Kirkby [Sun, 2 Jun 2019 01:20:09 +0000 (09:20 +0800)]
vendor.tinyfpga_b: implement.
whitequark [Sun, 2 Jun 2019 01:13:03 +0000 (01:13 +0000)]
vendor.icestick: fix typo.
whitequark [Sat, 1 Jun 2019 17:09:41 +0000 (17:09 +0000)]
Travis: update install script.
whitequark [Sat, 1 Jun 2019 16:47:47 +0000 (16:47 +0000)]
vendor.ice40_hx1k_blink_evn: implement.
whitequark [Sat, 1 Jun 2019 16:47:20 +0000 (16:47 +0000)]
vendor.icestick: implement.
whitequark [Sat, 1 Jun 2019 16:46:50 +0000 (16:46 +0000)]
vendor.fpga.lattice_ice40: implement.
whitequark [Sat, 1 Jun 2019 16:43:27 +0000 (16:43 +0000)]
build.plat: implement.
whitequark [Sat, 1 Jun 2019 16:41:30 +0000 (16:41 +0000)]
build.res: always return a Pin record.
In the simple cases, a Pin record consisting of exactly one field
is equivalent in every way to this single field. In the more complex
case however, it can be used as a record, making the code more robust
such that it works with both bidirectional and unidirectional pins.
whitequark [Sat, 1 Jun 2019 15:41:41 +0000 (15:41 +0000)]
build.res: accept a list of clocks in ConstraintManager constructor.
whitequark [Sun, 26 May 2019 17:10:56 +0000 (17:10 +0000)]
back.rtlil: allow specifying platform for convert().
whitequark [Sun, 26 May 2019 11:20:13 +0000 (11:20 +0000)]
Add versioneer.
whitequark [Sun, 26 May 2019 10:42:52 +0000 (10:42 +0000)]
hdl.ir: silence unused elaboratable warning on interpreter crash.
Jean-François Nguyen [Fri, 26 Apr 2019 12:37:08 +0000 (14:37 +0200)]
build.res: add ConstraintManager.
whitequark [Sat, 25 May 2019 22:37:32 +0000 (22:37 +0000)]
build.dsl: make Pins and DiffPairs iterable.
Returns pin names.
whitequark [Sat, 25 May 2019 22:23:03 +0000 (22:23 +0000)]
build.dsl: improve repr of Pins() and DiffPairs().
whitequark [Sat, 25 May 2019 21:57:07 +0000 (21:57 +0000)]
hdl.rec: allow providing fields during construction.
This allows creating records populated with e.g. signals with custom
names, or sub-records that are instances of Record subclasses.
whitequark [Sat, 25 May 2019 20:09:26 +0000 (20:09 +0000)]
Consider Instances a part of containing fragment for use-def purposes.
Fixes #70.
Chris Osterwood [Mon, 20 May 2019 14:39:21 +0000 (07:39 -0700)]
Add import so that Tristate.elaborate builds
whitequark [Wed, 15 May 2019 06:44:50 +0000 (06:44 +0000)]
hdl.ir: when adding sync domain to a design, also add it to ports.
Otherwise we end up in a situation where the examples don't have
clk and rst as ports, which is not nice.
Fixes #67.
whitequark [Mon, 13 May 2019 15:34:13 +0000 (15:34 +0000)]
hdl.ir: during port propagation, defs should take priority over uses.
whitequark [Mon, 13 May 2019 07:56:11 +0000 (07:56 +0000)]
back.rtlil: assign undriven signals to their reset value.
Fixes #35.
whitequark [Sun, 12 May 2019 05:36:35 +0000 (05:36 +0000)]
hdl: make all public Value classes other than Record final.
In some cases, nMigen uses type() instead of isinstance() to dispatch
on types. Make sure all such uses of type() are robust; in addition,
make it clear that nMigen AST classes are not meant to be subclassed.
(Record is an exception.)
Fixes #65.
whitequark [Sun, 12 May 2019 05:21:23 +0000 (05:21 +0000)]
hdl.ir: only pull explicitly specified ports to toplevel, if any.
Fixes #30.
Jean-François Nguyen [Wed, 24 Apr 2019 21:58:01 +0000 (23:58 +0200)]
lib.io: add a name argument to the Pin constructor.
whitequark [Wed, 24 Apr 2019 15:02:30 +0000 (15:02 +0000)]
build.dsl: style. NFC.
Jean-François Nguyen [Thu, 18 Apr 2019 18:11:15 +0000 (20:11 +0200)]
build: add DSL for defining platform resources.
whitequark [Mon, 22 Apr 2019 14:08:01 +0000 (14:08 +0000)]
back.verilog: allow stripping the src attribute, for cleaner output.
Alain Péteut [Mon, 22 Apr 2019 09:57:12 +0000 (11:57 +0200)]
compat.fhdl.specials: fix Tristate, TSTriple.
* fix TSTriple instance.
* TSTriple, Tristate: tag as Elaboratable
Alain Péteut [Mon, 22 Apr 2019 08:37:06 +0000 (10:37 +0200)]
compat.fhdl.specials: fix Tristate.
whitequark [Mon, 22 Apr 2019 08:15:03 +0000 (08:15 +0000)]
compat.fhdl.specials: fix TSTriple.
whitequark [Mon, 22 Apr 2019 07:46:47 +0000 (07:46 +0000)]
hdl.ir: rework named port handling for Instances.
The main purpose of this rework is cleanup, to avoid specifying
the direction of input ports in an implicit, ad-hoc way using
the named ports and ports dictionaries.
While working on this I realized that output ports can be connected
to anything that is valid on LHS, so this is now supported too.
whitequark [Sun, 21 Apr 2019 08:53:37 +0000 (08:53 +0000)]
Remove examples/tbuf.py.
This example predates the plans for nmigen.build, and indeed
get_tristate and TSTriple no longer exist.
whitequark [Sun, 21 Apr 2019 08:52:57 +0000 (08:52 +0000)]
hdl.ir: detect elaboratables that are created but not used.
Requres every elaboratable to inherit from Elaboratable, but still
accepts ones that do not, with a warning.
Fixes #3.
whitequark [Sun, 21 Apr 2019 07:55:08 +0000 (07:55 +0000)]
back.rtlil: emit `nmigen.hierarchy` attribute.
Fixes #54.
whitequark [Sun, 21 Apr 2019 07:20:00 +0000 (07:20 +0000)]
hdl.ast: improve tests for exceptional conditions.
whitequark [Sun, 21 Apr 2019 07:16:59 +0000 (07:16 +0000)]
hdl.ast: accept Signals with identical min/max bounds.
And produce a 0-bit signal.
Fixes #58.
whitequark [Sun, 21 Apr 2019 06:41:35 +0000 (06:41 +0000)]
back.rtlil: only expand legalized values in Array/Part context on RHS.
Otherwise the following code fails to compile:
index = Signal(1)
array = Array(range(2))
with m.If(0 == array[index]):
m.d.sync += index.eq(0)
Fixes #51.
whitequark [Sun, 21 Apr 2019 06:37:08 +0000 (06:37 +0000)]
hdl.rec: implement Record.connect.
Fixes #31.
whitequark [Sat, 20 Apr 2019 08:12:29 +0000 (08:12 +0000)]
back.rtlil: allow record slices on LHS.
whitequark [Fri, 19 Apr 2019 19:55:39 +0000 (19:55 +0000)]
hdl.rec: fix slicing of records.
whitequark [Thu, 18 Apr 2019 17:06:33 +0000 (17:06 +0000)]
hdl.xfrm: handle classes that inherit from Record.
whitequark [Mon, 15 Apr 2019 16:27:23 +0000 (16:27 +0000)]
lib.io: rework TSTriple/Tristate interface to use pin_layout/Pin.
whitequark [Wed, 10 Apr 2019 04:33:44 +0000 (04:33 +0000)]
hdl.ast: fix some type checks.
whitequark [Wed, 10 Apr 2019 00:23:11 +0000 (00:23 +0000)]
hdl.xfrm: allow using FragmentTransformer on any elaboratable.
Fixes #29.
whitequark [Tue, 9 Apr 2019 23:53:43 +0000 (23:53 +0000)]
hdl: remove deprecated get_fragment() and lower() methods.
whitequark [Wed, 3 Apr 2019 14:59:01 +0000 (14:59 +0000)]
hdl.ast: handle a common typo, such as Signal(1, True).
whitequark [Thu, 28 Mar 2019 17:50:14 +0000 (17:50 +0000)]
test_sim: add missing add_process().
Fixes #43.
Luke Wren [Tue, 19 Mar 2019 03:36:55 +0000 (03:36 +0000)]
lib.cdc: add optional reset to MultiReg, and document its use cases.
whitequark [Thu, 28 Mar 2019 05:12:02 +0000 (05:12 +0000)]
back.rtlil: fix off-by-one in Part legalization.
Fixes #52.
anuejn [Mon, 25 Mar 2019 14:26:00 +0000 (15:26 +0100)]
hdl.rec: separate record and signal name with __, not _.
This makes names of signals within records less ambiguous, in case
they themselves have underscores within them.
whitequark [Mon, 25 Mar 2019 10:49:29 +0000 (10:49 +0000)]
hdl.ast: fix typo.
Fixes #49.
Alain Péteut [Mon, 11 Mar 2019 17:11:51 +0000 (18:11 +0100)]
examples.por: fix typo
whitequark [Sun, 3 Mar 2019 18:23:51 +0000 (18:23 +0000)]
lib.fifo: register GrayEncoder output before CDC.
Without this register, static hazards in the encoder could cause
multiple encoder output bits to toggle, which would be incorrectly
sampled by the 2FF synchronizer.
Reported by @Wren6991.
whitequark [Fri, 15 Feb 2019 14:15:02 +0000 (14:15 +0000)]
tracer: factor out get_var_name(default=).
whitequark [Fri, 15 Feb 2019 14:00:42 +0000 (14:00 +0000)]
hdl.rec: remove __slots__.
Left in by mistake.
Alain Péteut [Fri, 22 Feb 2019 08:45:28 +0000 (09:45 +0100)]
setup.py: constrain Python version
Installation should be constraint to supported Python versions, using `python_requires`,
refer to [1] for details.
[1] https://packaging.python.org/guides/distributing-packages-using-setuptools/#python-requires
whitequark [Thu, 14 Feb 2019 20:52:42 +0000 (20:52 +0000)]
hdl.ir: raise a more descriptive error on non-elaboratable object.
whitequark [Sat, 26 Jan 2019 23:25:54 +0000 (23:25 +0000)]
back.rtlil: accept ast.Const as cell parameter.
whitequark [Sat, 26 Jan 2019 23:25:34 +0000 (23:25 +0000)]
hdl.ast: fix ValueKey for Cat.
whitequark [Sat, 26 Jan 2019 23:08:55 +0000 (23:08 +0000)]
compat.fhdl.module: fix typo.
whitequark [Sat, 26 Jan 2019 22:59:33 +0000 (22:59 +0000)]
compat.fhdl.specials: fix __all__ list.
whitequark [Sat, 26 Jan 2019 18:24:12 +0000 (18:24 +0000)]
compat.genlib.resetsync: add shim for AsyncResetSynchronizer.
whitequark [Sat, 26 Jan 2019 18:23:58 +0000 (18:23 +0000)]
compat.fifo: fix _FIFOInterface deprecation wrapper.