nmigen.git
5 years agobuild.res: allow requesting raw ports, with dir="-".
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.

5 years agolib.io: allow Pin(xdr=0), representing a combinatorial I/O buffer.
whitequark [Mon, 3 Jun 2019 03:29:27 +0000 (03:29 +0000)]
lib.io: allow Pin(xdr=0), representing a combinatorial I/O buffer.

5 years agovendor.fpga.lattice_ice40: enable SystemVerilog when reading .sv files.
whitequark [Mon, 3 Jun 2019 03:01:56 +0000 (03:01 +0000)]
vendor.fpga.lattice_ice40: enable SystemVerilog when reading .sv files.

5 years agobuild.res: if not specified, request resource #0.
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`.

5 years agovendor.fpga.lattice_ice40: instantiate SB_IO and apply extras.
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.

5 years agohdl.ir: accept LHS signals like slices as Instance io ports.
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?)

5 years agohdl.dsl: allow adding submodules with computed name, like with domains.
whitequark [Mon, 3 Jun 2019 02:22:55 +0000 (02:22 +0000)]
hdl.dsl: allow adding submodules with computed name, like with domains.

5 years agohdl.ir: accept expanded (kind, name, value) tuples in Instance.
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.

5 years agobuild.{res,plat}: propagate extras to pin fragment factories.
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.

5 years agobuild.res: simplify. NFC.
whitequark [Mon, 3 Jun 2019 01:28:34 +0000 (01:28 +0000)]
build.res: simplify. NFC.

5 years agobuild.dsl: require a dict for extras instead of a stringly array.
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.

5 years agovendor.fpga.lattice_ice40: use .bin suffix for bitstream tempfiles.
whitequark [Sun, 2 Jun 2019 04:12:50 +0000 (04:12 +0000)]
vendor.fpga.lattice_ice40: use .bin suffix for bitstream tempfiles.

5 years agovendor.tinyfpga_{b→bx}
whitequark [Sun, 2 Jun 2019 04:11:06 +0000 (04:11 +0000)]
vendor.tinyfpga_{b→bx}

5 years agovendor.tinyfpga_b: fix IO_STANDARD.
whitequark [Sun, 2 Jun 2019 04:04:07 +0000 (04:04 +0000)]
vendor.tinyfpga_b: fix IO_STANDARD.

5 years agovendor.tinyfpga_b: implement.
Simon Kirkby [Sun, 2 Jun 2019 01:20:09 +0000 (09:20 +0800)]
vendor.tinyfpga_b: implement.

5 years agovendor.icestick: fix typo.
whitequark [Sun, 2 Jun 2019 01:13:03 +0000 (01:13 +0000)]
vendor.icestick: fix typo.

5 years agoTravis: update install script.
whitequark [Sat, 1 Jun 2019 17:09:41 +0000 (17:09 +0000)]
Travis: update install script.

5 years agovendor.ice40_hx1k_blink_evn: implement.
whitequark [Sat, 1 Jun 2019 16:47:47 +0000 (16:47 +0000)]
vendor.ice40_hx1k_blink_evn: implement.

5 years agovendor.icestick: implement.
whitequark [Sat, 1 Jun 2019 16:47:20 +0000 (16:47 +0000)]
vendor.icestick: implement.

5 years agovendor.fpga.lattice_ice40: implement.
whitequark [Sat, 1 Jun 2019 16:46:50 +0000 (16:46 +0000)]
vendor.fpga.lattice_ice40: implement.

5 years agobuild.plat: implement.
whitequark [Sat, 1 Jun 2019 16:43:27 +0000 (16:43 +0000)]
build.plat: implement.

5 years agobuild.res: always return a Pin record.
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.

5 years agobuild.res: accept a list of clocks in ConstraintManager constructor.
whitequark [Sat, 1 Jun 2019 15:41:41 +0000 (15:41 +0000)]
build.res: accept a list of clocks in ConstraintManager constructor.

5 years agoback.rtlil: allow specifying platform for convert().
whitequark [Sun, 26 May 2019 17:10:56 +0000 (17:10 +0000)]
back.rtlil: allow specifying platform for convert().

5 years agoAdd versioneer.
whitequark [Sun, 26 May 2019 11:20:13 +0000 (11:20 +0000)]
Add versioneer.

5 years agohdl.ir: silence unused elaboratable warning on interpreter crash.
whitequark [Sun, 26 May 2019 10:42:52 +0000 (10:42 +0000)]
hdl.ir: silence unused elaboratable warning on interpreter crash.

5 years agobuild.res: add ConstraintManager.
Jean-François Nguyen [Fri, 26 Apr 2019 12:37:08 +0000 (14:37 +0200)]
build.res: add ConstraintManager.

5 years agobuild.dsl: make Pins and DiffPairs iterable.
whitequark [Sat, 25 May 2019 22:37:32 +0000 (22:37 +0000)]
build.dsl: make Pins and DiffPairs iterable.

Returns pin names.

5 years agobuild.dsl: improve repr of Pins() and DiffPairs().
whitequark [Sat, 25 May 2019 22:23:03 +0000 (22:23 +0000)]
build.dsl: improve repr of Pins() and DiffPairs().

5 years agohdl.rec: allow providing fields during construction.
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.

5 years agoConsider Instances a part of containing fragment for use-def purposes.
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.

5 years agoAdd import so that Tristate.elaborate builds
Chris Osterwood [Mon, 20 May 2019 14:39:21 +0000 (07:39 -0700)]
Add import so that Tristate.elaborate builds

5 years agohdl.ir: when adding sync domain to a design, also add it to ports.
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.

5 years agohdl.ir: during port propagation, defs should take priority over uses.
whitequark [Mon, 13 May 2019 15:34:13 +0000 (15:34 +0000)]
hdl.ir: during port propagation, defs should take priority over uses.

5 years agoback.rtlil: assign undriven signals to their reset value.
whitequark [Mon, 13 May 2019 07:56:11 +0000 (07:56 +0000)]
back.rtlil: assign undriven signals to their reset value.

Fixes #35.

5 years agohdl: make all public Value classes other than Record final.
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.

5 years agohdl.ir: only pull explicitly specified ports to toplevel, if any.
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.

5 years agolib.io: add a name argument to the Pin constructor.
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.

5 years agobuild.dsl: style. NFC.
whitequark [Wed, 24 Apr 2019 15:02:30 +0000 (15:02 +0000)]
build.dsl: style. NFC.

5 years agobuild: add DSL for defining platform resources.
Jean-François Nguyen [Thu, 18 Apr 2019 18:11:15 +0000 (20:11 +0200)]
build: add DSL for defining platform resources.

5 years agoback.verilog: allow stripping the src attribute, for cleaner output.
whitequark [Mon, 22 Apr 2019 14:08:01 +0000 (14:08 +0000)]
back.verilog: allow stripping the src attribute, for cleaner output.

5 years agocompat.fhdl.specials: fix Tristate, TSTriple.
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

5 years agocompat.fhdl.specials: fix Tristate.
Alain Péteut [Mon, 22 Apr 2019 08:37:06 +0000 (10:37 +0200)]
compat.fhdl.specials: fix Tristate.

5 years agocompat.fhdl.specials: fix TSTriple.
whitequark [Mon, 22 Apr 2019 08:15:03 +0000 (08:15 +0000)]
compat.fhdl.specials: fix TSTriple.

5 years agohdl.ir: rework named port handling for Instances.
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.

5 years agoRemove examples/tbuf.py.
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.

5 years agohdl.ir: detect elaboratables that are created but not used.
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.

5 years agoback.rtlil: emit `nmigen.hierarchy` attribute.
whitequark [Sun, 21 Apr 2019 07:55:08 +0000 (07:55 +0000)]
back.rtlil: emit `nmigen.hierarchy` attribute.

Fixes #54.

5 years agohdl.ast: improve tests for exceptional conditions.
whitequark [Sun, 21 Apr 2019 07:20:00 +0000 (07:20 +0000)]
hdl.ast: improve tests for exceptional conditions.

5 years agohdl.ast: accept Signals with identical min/max bounds.
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.

5 years agoback.rtlil: only expand legalized values in Array/Part context on RHS.
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.

5 years agohdl.rec: implement Record.connect.
whitequark [Sun, 21 Apr 2019 06:37:08 +0000 (06:37 +0000)]
hdl.rec: implement Record.connect.

Fixes #31.

5 years agoback.rtlil: allow record slices on LHS.
whitequark [Sat, 20 Apr 2019 08:12:29 +0000 (08:12 +0000)]
back.rtlil: allow record slices on LHS.

5 years agohdl.rec: fix slicing of records.
whitequark [Fri, 19 Apr 2019 19:55:39 +0000 (19:55 +0000)]
hdl.rec: fix slicing of records.

5 years agohdl.xfrm: handle classes that inherit from Record.
whitequark [Thu, 18 Apr 2019 17:06:33 +0000 (17:06 +0000)]
hdl.xfrm: handle classes that inherit from Record.

5 years agolib.io: rework TSTriple/Tristate interface to use pin_layout/Pin.
whitequark [Mon, 15 Apr 2019 16:27:23 +0000 (16:27 +0000)]
lib.io: rework TSTriple/Tristate interface to use pin_layout/Pin.

5 years agohdl.ast: fix some type checks.
whitequark [Wed, 10 Apr 2019 04:33:44 +0000 (04:33 +0000)]
hdl.ast: fix some type checks.

5 years agohdl.xfrm: allow using FragmentTransformer on any elaboratable.
whitequark [Wed, 10 Apr 2019 00:23:11 +0000 (00:23 +0000)]
hdl.xfrm: allow using FragmentTransformer on any elaboratable.

Fixes #29.

5 years agohdl: remove deprecated get_fragment() and lower() methods.
whitequark [Tue, 9 Apr 2019 23:53:43 +0000 (23:53 +0000)]
hdl: remove deprecated get_fragment() and lower() methods.

5 years agohdl.ast: handle a common typo, such as Signal(1, True).
whitequark [Wed, 3 Apr 2019 14:59:01 +0000 (14:59 +0000)]
hdl.ast: handle a common typo, such as Signal(1, True).

5 years agotest_sim: add missing add_process().
whitequark [Thu, 28 Mar 2019 17:50:14 +0000 (17:50 +0000)]
test_sim: add missing add_process().

Fixes #43.

5 years agolib.cdc: add optional reset to MultiReg, and document its use cases.
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.

5 years agoback.rtlil: fix off-by-one in Part legalization.
whitequark [Thu, 28 Mar 2019 05:12:02 +0000 (05:12 +0000)]
back.rtlil: fix off-by-one in Part legalization.

Fixes #52.

5 years agohdl.rec: separate record and signal name with __, not _.
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.

5 years agohdl.ast: fix typo.
whitequark [Mon, 25 Mar 2019 10:49:29 +0000 (10:49 +0000)]
hdl.ast: fix typo.

Fixes #49.

5 years agoexamples.por: fix typo
Alain Péteut [Mon, 11 Mar 2019 17:11:51 +0000 (18:11 +0100)]
examples.por: fix typo

5 years agolib.fifo: register GrayEncoder output before CDC.
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.

5 years agotracer: factor out get_var_name(default=).
whitequark [Fri, 15 Feb 2019 14:15:02 +0000 (14:15 +0000)]
tracer: factor out get_var_name(default=).

5 years agohdl.rec: remove __slots__.
whitequark [Fri, 15 Feb 2019 14:00:42 +0000 (14:00 +0000)]
hdl.rec: remove __slots__.

Left in by mistake.

5 years agosetup.py: constrain Python version
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

5 years agohdl.ir: raise a more descriptive error on non-elaboratable object.
whitequark [Thu, 14 Feb 2019 20:52:42 +0000 (20:52 +0000)]
hdl.ir: raise a more descriptive error on non-elaboratable object.

5 years agoback.rtlil: accept ast.Const as cell parameter.
whitequark [Sat, 26 Jan 2019 23:25:54 +0000 (23:25 +0000)]
back.rtlil: accept ast.Const as cell parameter.

5 years agohdl.ast: fix ValueKey for Cat.
whitequark [Sat, 26 Jan 2019 23:25:34 +0000 (23:25 +0000)]
hdl.ast: fix ValueKey for Cat.

5 years agocompat.fhdl.module: fix typo.
whitequark [Sat, 26 Jan 2019 23:08:55 +0000 (23:08 +0000)]
compat.fhdl.module: fix typo.

5 years agocompat.fhdl.specials: fix __all__ list.
whitequark [Sat, 26 Jan 2019 22:59:33 +0000 (22:59 +0000)]
compat.fhdl.specials: fix __all__ list.

5 years agocompat.genlib.resetsync: add shim for AsyncResetSynchronizer.
whitequark [Sat, 26 Jan 2019 18:24:12 +0000 (18:24 +0000)]
compat.genlib.resetsync: add shim for AsyncResetSynchronizer.

5 years agocompat.fifo: fix _FIFOInterface deprecation wrapper.
whitequark [Sat, 26 Jan 2019 18:23:58 +0000 (18:23 +0000)]
compat.fifo: fix _FIFOInterface deprecation wrapper.

5 years agolib.cdc: add ResetSynchronizer.
whitequark [Sat, 26 Jan 2019 18:07:59 +0000 (18:07 +0000)]
lib.cdc: add ResetSynchronizer.

5 years agoback.pysim: support async reset.
whitequark [Sat, 26 Jan 2019 18:07:43 +0000 (18:07 +0000)]
back.pysim: support async reset.

5 years agoback.pysim: give better names to unnamed fragments and their signals.
whitequark [Sat, 26 Jan 2019 18:07:16 +0000 (18:07 +0000)]
back.pysim: give better names to unnamed fragments and their signals.

Was: top.#0, top.None_clk
Now: top.U0, top.U0_clk

(U for Unnamed, or similarly, an unit refdes.)

5 years agoexamples: update for newer API.
whitequark [Sat, 26 Jan 2019 16:25:05 +0000 (16:25 +0000)]
examples: update for newer API.

5 years agoback.rtlil: accept any elaboratable, not just fragments.
whitequark [Sat, 26 Jan 2019 16:11:29 +0000 (16:11 +0000)]
back.rtlil: accept any elaboratable, not just fragments.

5 years agocompat: suppress deprecation warnings that are internal or during test.
whitequark [Sat, 26 Jan 2019 15:43:00 +0000 (15:43 +0000)]
compat: suppress deprecation warnings that are internal or during test.

5 years agotest.compat: reenable tests converting to Verilog.
whitequark [Sat, 26 Jan 2019 15:29:09 +0000 (15:29 +0000)]
test.compat: reenable tests converting to Verilog.

5 years agocompat.sim: fix deprecated stdlib import.
whitequark [Sat, 26 Jan 2019 15:26:54 +0000 (15:26 +0000)]
compat.sim: fix deprecated stdlib import.

5 years agohdl.ir: rename .get_fragment() to .elaborate().
whitequark [Sat, 26 Jan 2019 02:31:12 +0000 (02:31 +0000)]
hdl.ir: rename .get_fragment() to .elaborate().

Closes #9.

5 years agotest.compat: import tests from Migen as appropriate.
whitequark [Tue, 18 Dec 2018 18:05:37 +0000 (18:05 +0000)]
test.compat: import tests from Migen as appropriate.

test_signed and test_coding are adjusted slightly to account for
differences in comb propagation between the simulators; we might want
to revert that eventually.

5 years agohdl.ast: fix shape calculation for *.
whitequark [Sat, 26 Jan 2019 00:54:02 +0000 (00:54 +0000)]
hdl.ast: fix shape calculation for *.

This was carried over from Migen, and is wrong there too.
Counterexample: 1'sd-1 * 4'sd-4 = 4'sd-4 (but should be 5'sd4).

5 years agoback.pysim: fix behavior of initial cycle for sync processes.
whitequark [Tue, 22 Jan 2019 17:51:44 +0000 (17:51 +0000)]
back.pysim: fix behavior of initial cycle for sync processes.

The current behavior was introduced in 65702719, which was a wrong
fix for an issue that was actually fixed in 12e04e4e. This commit
effectively reverts 65702719 and 1782b841.

5 years agolib.fifo: in FIFOInterface.read(), check readable on the right cycle.
whitequark [Tue, 22 Jan 2019 07:03:46 +0000 (07:03 +0000)]
lib.fifo: in FIFOInterface.read(), check readable on the right cycle.

5 years agocompat.genlib.fifo: adjust _FIFOInterface shim to not require fwft=.
whitequark [Tue, 22 Jan 2019 06:56:46 +0000 (06:56 +0000)]
compat.genlib.fifo: adjust _FIFOInterface shim to not require fwft=.

5 years agolib.fifo: fix typo in AsyncFIFO documentation.
whitequark [Tue, 22 Jan 2019 05:47:50 +0000 (05:47 +0000)]
lib.fifo: fix typo in AsyncFIFO documentation.

5 years agolib.fifo: add AsyncFIFO and AsyncFIFOBuffered.
whitequark [Mon, 21 Jan 2019 16:02:46 +0000 (16:02 +0000)]
lib.fifo: add AsyncFIFO and AsyncFIFOBuffered.

5 years agoback.pysim: wake up processes before ever committing any values.
whitequark [Mon, 21 Jan 2019 16:00:25 +0000 (16:00 +0000)]
back.pysim: wake up processes before ever committing any values.

Otherwise, the contract of the simulator to sync processes is not
always fulfilled.

5 years agocompat.genlib.cdc: add missing import.
whitequark [Sun, 20 Jan 2019 03:03:48 +0000 (03:03 +0000)]
compat.genlib.cdc: add missing import.

5 years agocompat.genlib.cdc: add GrayCounter and GrayDecoder shims.
whitequark [Sun, 20 Jan 2019 02:29:08 +0000 (02:29 +0000)]
compat.genlib.cdc: add GrayCounter and GrayDecoder shims.

5 years agolib.coding: add GrayEncoder and GrayDecoder.
whitequark [Sun, 20 Jan 2019 02:20:34 +0000 (02:20 +0000)]
lib.coding: add GrayEncoder and GrayDecoder.

Unlike the Migen ones, these are purely combinatorial.

5 years agolib.coding: add width as attribute to all coders.
whitequark [Sun, 20 Jan 2019 01:59:09 +0000 (01:59 +0000)]
lib.coding: add width as attribute to all coders.

5 years agolib.fifo: use memory in the FIFO model.
whitequark [Sat, 19 Jan 2019 09:27:13 +0000 (09:27 +0000)]
lib.fifo: use memory in the FIFO model.

This is unfortunately more complicated, but results in a much faster
proof.

5 years agolib.fifo: use model equivalence to simplify formal specification.
whitequark [Sat, 19 Jan 2019 08:57:18 +0000 (08:57 +0000)]
lib.fifo: use model equivalence to simplify formal specification.

This is unfortunately slow, and should probably be using theory
of arrays.