nmigen.git
4 years agoback.pysim: implement sim.add_clock(if_exists=True). locally_working
whitequark [Fri, 23 Aug 2019 08:53:48 +0000 (08:53 +0000)]
back.pysim: implement sim.add_clock(if_exists=True).

4 years agoback.pysim: don't crash when trying to drive a nonexistent domain clock.
whitequark [Fri, 23 Aug 2019 08:37:59 +0000 (08:37 +0000)]
back.pysim: don't crash when trying to drive a nonexistent domain clock.

4 years agobuild.run: add BuildPlan.digest(), useful for caching.
whitequark [Fri, 23 Aug 2019 01:10:51 +0000 (01:10 +0000)]
build.run: add BuildPlan.digest(), useful for caching.

4 years agovendor.lattice_ecp5: add Diamond support.
whitequark [Tue, 20 Aug 2019 12:27:19 +0000 (12:27 +0000)]
vendor.lattice_ecp5: add Diamond support.

4 years agovendor: eliminate unnecessary LUT instantiation.
whitequark [Thu, 22 Aug 2019 20:54:42 +0000 (20:54 +0000)]
vendor: eliminate unnecessary LUT instantiation.

Fixes #165.

4 years agoexamples/basic/uart: document `divisor` parameter.
Reto Kramer [Thu, 22 Aug 2019 19:28:40 +0000 (12:28 -0700)]
examples/basic/uart: document `divisor` parameter.

4 years agoback.rtlil: print real parameters with maximum precision.
whitequark [Thu, 22 Aug 2019 04:42:30 +0000 (04:42 +0000)]
back.rtlil: print real parameters with maximum precision.

4 years agoback.rtlil: add support for real (float) parameters on Instances.
Darrell Harmon [Thu, 22 Aug 2019 04:13:05 +0000 (22:13 -0600)]
back.rtlil: add support for real (float) parameters on Instances.

Required for Xilinx MMCME2_BASE, etc.

4 years agovendor.xilinx_series7: use STARTUPE2, not STARTUPE3.
Darrell Harmon [Wed, 21 Aug 2019 22:25:55 +0000 (16:25 -0600)]
vendor.xilinx_series7: use STARTUPE2, not STARTUPE3.

STARTUPE3 is for Ultrascale.

4 years agovendor.lattice_ice40: remove `--placer heap` default option.
whitequark [Wed, 21 Aug 2019 21:32:12 +0000 (21:32 +0000)]
vendor.lattice_ice40: remove `--placer heap` default option.

It is not the place of nMigen to decide on this default, since both
SA and HeAP have valid uses that are not covered by the other.

4 years agovendor: style. NFC.
whitequark [Wed, 21 Aug 2019 21:31:19 +0000 (21:31 +0000)]
vendor: style. NFC.

4 years agobuild.plat: remove TemplatedPlatform.unix_interpreter.
whitequark [Wed, 21 Aug 2019 21:02:05 +0000 (21:02 +0000)]
build.plat: remove TemplatedPlatform.unix_interpreter.

Vendor toolchains generally require far more workarounds than this,
and we already have a perfectly fine way of overriding templates.

4 years agoback.pysim: allow coroutines as processes.
whitequark [Wed, 21 Aug 2019 03:28:48 +0000 (03:28 +0000)]
back.pysim: allow coroutines as processes.

This is a somewhat obscure use case, but it is possible to use async
functions with pysim by carefully using @asyncio.coroutine. That is,
async functions can call back into pysim if they are declared in
a specific way:

  @asyncio.coroutine
  def do_something(self, value):
    yield self.reg.eq(value)

which may then be called from elsewhere with:

  async def test_case(self):
    await do_something(0x1234)

This approach is unfortunately limited in that async functions
cannot yield directly. It should likely be improved by using async
generators, but supporting coroutines in pysim is unobtrustive and
allows existing code that made use of this feature in oMigen to work.

4 years agotest.test_examples: Convert pathlib-specific class to string.
William D. Jones [Mon, 5 Aug 2019 01:52:23 +0000 (21:52 -0400)]
test.test_examples: Convert pathlib-specific class to string.

subprocess.check_call iterates over its arguments to check for spaces
and tabs, and on Windows, the pathlib-specific WindowsPath is not
iterable.

4 years agoback.verilog: parse output of `yosys -V`.
whitequark [Mon, 19 Aug 2019 23:28:33 +0000 (23:28 +0000)]
back.verilog: parse output of `yosys -V`.

See #55.

4 years agoFix nmigen.__version__ to work on git-archive artifacts.
whitequark [Mon, 19 Aug 2019 23:14:41 +0000 (23:14 +0000)]
Fix nmigen.__version__ to work on git-archive artifacts.

Fixes #137.

4 years agobuild.plat, hdl.ir: coordinate missing domain creation.
whitequark [Mon, 19 Aug 2019 22:32:50 +0000 (22:32 +0000)]
build.plat, hdl.ir: coordinate missing domain creation.

Platform.prepare() was completely broken after addition of local
clock domains, and only really worked before by a series of
accidents because there was a circular dependency between creation
of missing domains, fragment preparation, and insertion of pin
subfragments.

This commit untangles the dependency by adding a separate public
method Fragment.create_missing_domains(), used in build.plat.

It also makes DomainCollector consider both used and defined domains,
such that it will work on fragments before domain propagation, since
create_missing_domains() can be called by user code before prepare().

The fragment driving missing clock domain is not flattened anymore,
because flattening does not work well combined with local domains.

4 years agovendor.lattice_ice40: use a local clock domain in create_missing_domain().
whitequark [Mon, 19 Aug 2019 21:46:44 +0000 (21:46 +0000)]
vendor.lattice_ice40: use a local clock domain in create_missing_domain().

4 years agolib.cdc: use a local clock domain in ResetSynchronizer.
whitequark [Mon, 19 Aug 2019 20:47:40 +0000 (20:47 +0000)]
lib.cdc: use a local clock domain in ResetSynchronizer.

This reverts commit 779f3ee906190b92e5a07e5adcd62b20213bb936.
This reverts commit 300d47ca2ebbabb31d2f191acf80c9b89659c4f0.
This reverts commit 9c54d0c061884317d1558de9f9be52d1ec8dea68.

4 years agoREADME: fix typos.
whitequark [Mon, 19 Aug 2019 21:44:23 +0000 (21:44 +0000)]
README: fix typos.

4 years agohdl.cd: implement local clock domains.
whitequark [Mon, 19 Aug 2019 20:46:46 +0000 (20:46 +0000)]
hdl.cd: implement local clock domains.

Closes #175.

4 years agoback.pysim: index domains by identity, not by name.
whitequark [Mon, 19 Aug 2019 21:29:53 +0000 (21:29 +0000)]
back.pysim: index domains by identity, not by name.

Changed in preparation for introducing local clock domains.

4 years agohdl.xfrm: lower resets in DomainLowerer as well.
whitequark [Mon, 19 Aug 2019 21:32:48 +0000 (21:32 +0000)]
hdl.xfrm: lower resets in DomainLowerer as well.

Changed in preparation for introducing local clock domains.

Also makes elaboration about 15% faster.

4 years agohdl.xfrm: consider fragment's own domains in DomainLowerer.
whitequark [Mon, 19 Aug 2019 21:06:54 +0000 (21:06 +0000)]
hdl.xfrm: consider fragment's own domains in DomainLowerer.

Changed in preparation for introducing local clock domains.

4 years agoformal→asserts
whitequark [Mon, 19 Aug 2019 20:23:24 +0000 (20:23 +0000)]
formal→asserts

Closes #171.

4 years agotracer: fix typo.
whitequark [Mon, 19 Aug 2019 20:20:18 +0000 (20:20 +0000)]
tracer: fix typo.

Introduced in 62b3e366.

4 years agobuild.plat: do not prepare fragments twice.
whitequark [Mon, 19 Aug 2019 19:29:47 +0000 (19:29 +0000)]
build.plat: do not prepare fragments twice.

Fixes #169.

4 years agoback.{rtlil,verilog}: split convert_fragment() off convert().
whitequark [Mon, 19 Aug 2019 19:27:02 +0000 (19:27 +0000)]
back.{rtlil,verilog}: split convert_fragment() off convert().

Because Fragment.prepare is not (currently) idempotent, it is useful
to be able to avoid calling it when converting. Even if it is made
idempotent, it can be slow on large designs, so it is advantageous
regardless of that.

4 years agobuild.dsl: add conn argument to Connector.
Robin Heinemann [Sun, 18 Aug 2019 19:56:25 +0000 (21:56 +0200)]
build.dsl: add conn argument to Connector.

4 years agocompat.fhdl.decorators: avoid using deprecated NativeCEInserter.
whitequark [Sun, 18 Aug 2019 16:27:11 +0000 (16:27 +0000)]
compat.fhdl.decorators: avoid using deprecated NativeCEInserter.

4 years agohdl.xfrm: make deprecated CEInserter more well-behaved.
whitequark [Sun, 18 Aug 2019 16:26:45 +0000 (16:26 +0000)]
hdl.xfrm: make deprecated CEInserter more well-behaved.

4 years agohdl.ast: implement Initial.
whitequark [Thu, 15 Aug 2019 02:53:07 +0000 (02:53 +0000)]
hdl.ast: implement Initial.

This is the last remaining part for first-class formal support.

4 years agohdl.xfrm: sample cache should be per-fragment.
whitequark [Thu, 15 Aug 2019 02:42:14 +0000 (02:42 +0000)]
hdl.xfrm: sample cache should be per-fragment.

4 years agohdl.xfrm: CEInserter→EnableInserter.
whitequark [Mon, 12 Aug 2019 13:37:18 +0000 (13:37 +0000)]
hdl.xfrm: CEInserter→EnableInserter.

Fixes #166.

4 years agohdl.ast: hash-cons ValueKey.
whitequark [Thu, 8 Aug 2019 10:56:23 +0000 (10:56 +0000)]
hdl.ast: hash-cons ValueKey.

This speeds up elaboration by ~10%.

4 years agotracer: use sys._getframe directly.
whitequark [Thu, 8 Aug 2019 10:23:35 +0000 (10:23 +0000)]
tracer: use sys._getframe directly.

This speeds up elaboration by ~30-40%.

4 years agocompat.fhdl.decorators: port from oMigen.
whitequark [Thu, 8 Aug 2019 08:09:28 +0000 (08:09 +0000)]
compat.fhdl.decorators: port from oMigen.

4 years agocompat.fhdl.module: fix finalization of transformed compat submodules.
whitequark [Thu, 8 Aug 2019 07:45:34 +0000 (07:45 +0000)]
compat.fhdl.module: fix finalization of transformed compat submodules.

Before this commit, the TransformedElaboratable of a CompatModule
would be ignored, and .get_fragment() would be used to retrieve
the CompatModule within.

After this commit, the finalization process is reworked to match
oMigen's finalization closely, and all submodules, native and compat,
are added in the same way that preserves applied transforms.

4 years agovendor.lattice_ice40: add iCE5LP2K support.
whitequark [Wed, 7 Aug 2019 09:25:20 +0000 (09:25 +0000)]
vendor.lattice_ice40: add iCE5LP2K support.

4 years agovendor.lattice_ice40: add iCE40UP3K support.
whitequark [Wed, 7 Aug 2019 09:06:27 +0000 (09:06 +0000)]
vendor.lattice_ice40: add iCE40UP3K support.

4 years agovendor.lattice_ice40: add iCE5LP1K support.
whitequark [Wed, 7 Aug 2019 09:00:41 +0000 (09:00 +0000)]
vendor.lattice_ice40: add iCE5LP1K support.

4 years agovendor.xilinx_{spartan_3_6,7series}: reconsider default reset logic.
whitequark [Sun, 4 Aug 2019 23:27:47 +0000 (23:27 +0000)]
vendor.xilinx_{spartan_3_6,7series}: reconsider default reset logic.

On Xilinx devices, flip-flops are reset to their initial state with
an internal global reset network, but this network is deasserted
asynchronously to user clocks. Use BUFGCE and STARTUP to hold default
clock low until after GWE is deasserted.

4 years agovendor.xilinx_spartan_3_6: reconsider bitgen defaults.
whitequark [Sun, 4 Aug 2019 23:23:06 +0000 (23:23 +0000)]
vendor.xilinx_spartan_3_6: reconsider bitgen defaults.

Previously changed in 27063a3b.

I haven't realized the .bin file is the same as the .bit file without
a small header. That means generating it is free and it's just easier
to let programming tools to be able to always rely on its existence.

4 years agovendor.xilinx_spartan_3_6: set bitgen defaults to `-g Binary:Yes -g Compress`.
whitequark [Sun, 4 Aug 2019 14:16:02 +0000 (14:16 +0000)]
vendor.xilinx_spartan_3_6: set bitgen defaults to `-g Binary:Yes -g Compress`.

  * `-g Binary:Yes` should be overridable.
  * `-g Compress` is a good default.

4 years agovendor.xilinx_spartan_3_6: always use -w for map/par/bitgen.
whitequark [Sun, 4 Aug 2019 14:12:02 +0000 (14:12 +0000)]
vendor.xilinx_spartan_3_6: always use -w for map/par/bitgen.

-w stands for "override output file", and supplying user options
should not remove it.

4 years agovendor.xilinx_spartan_3_6: do not use retiming by default.
whitequark [Sun, 4 Aug 2019 13:48:33 +0000 (13:48 +0000)]
vendor.xilinx_spartan_3_6: do not use retiming by default.

This was added in b404d603, probably by mistake, and is certainly
wrong given that we do not (yet) correctly mark CDC FFs.

4 years agovendor.xilinx_spartan_3_6: force use of bash on UNIX.
whitequark [Sun, 4 Aug 2019 13:19:50 +0000 (13:19 +0000)]
vendor.xilinx_spartan_3_6: force use of bash on UNIX.

4 years agobuild.plat: allow selecting a specific UNIX shell interpreter.
whitequark [Sun, 4 Aug 2019 13:18:29 +0000 (13:18 +0000)]
build.plat: allow selecting a specific UNIX shell interpreter.

Mostly because vendor tools have bashisms.

4 years agovendor.lattice_ice40: avoid routing conflicts with SDR/DDR input pins.
whitequark [Sun, 4 Aug 2019 00:30:50 +0000 (00:30 +0000)]
vendor.lattice_ice40: avoid routing conflicts with SDR/DDR input pins.

4 years agoback.rtlil: use a dummy wire, not 'x, when assigning to shorter LHS.
whitequark [Sat, 3 Aug 2019 23:57:50 +0000 (23:57 +0000)]
back.rtlil: use a dummy wire, not 'x, when assigning to shorter LHS.

Using 'x is legal RTLIL, in theory, but in practice it crashes Yosys
and when it doesn't, it causes Yosys to produce invalid Verilog.
Using a dummy wire is always safe and is not a major readability
issue as this is a rare corner case.

(It is not trivial to shorten the RHS in this case, because during
expansion of an ArrayProxy, match_shape() could be called in
a context far from the RHS handling logic.)

4 years agoback.rtlil: actually match shape of left hand side.
whitequark [Sat, 3 Aug 2019 23:43:57 +0000 (23:43 +0000)]
back.rtlil: actually match shape of left hand side.

This comes up in code such as:
  Array([Signal(1), Signal(8)]).eq(Const(0, 8))

4 years agovendor.lattice_ice40: add missing signal indexing.
whitequark [Sat, 3 Aug 2019 22:59:33 +0000 (22:59 +0000)]
vendor.lattice_ice40: add missing signal indexing.

4 years agobuild.run: use keyword-only arguments where appropriate.
whitequark [Sat, 3 Aug 2019 22:52:58 +0000 (22:52 +0000)]
build.run: use keyword-only arguments where appropriate.

4 years agocompat.fhdl.specials: track changes in build.plat.
whitequark [Sat, 3 Aug 2019 22:52:34 +0000 (22:52 +0000)]
compat.fhdl.specials: track changes in build.plat.

4 years agohdl.dsl: reword m.If(~True) warning to be more clear.
whitequark [Sat, 3 Aug 2019 18:52:24 +0000 (18:52 +0000)]
hdl.dsl: reword m.If(~True) warning to be more clear.

Before this commit, it only suggested one thing (silencing it) and
that's wrong almost all of the time, so suggest the right thing
instead.

4 years agobuild.plat,vendor: automatically create sync domain from default_clk.
whitequark [Sat, 3 Aug 2019 18:36:58 +0000 (18:36 +0000)]
build.plat,vendor: automatically create sync domain from default_clk.

But only if it is not defined by the programmer.

Closes #57.

4 years agohdl.ir: allow adding more than one domain in missing domain callback.
whitequark [Sat, 3 Aug 2019 18:19:40 +0000 (18:19 +0000)]
hdl.ir: allow adding more than one domain in missing domain callback.

This is useful for injecting complex power-on reset logic.

4 years agohdl.ir: don't expose as ports missing domains added via elaboratables.
whitequark [Sat, 3 Aug 2019 16:39:21 +0000 (16:39 +0000)]
hdl.ir: don't expose as ports missing domains added via elaboratables.

The elaboratable is already likely driving the clk/rst signals in
some way appropriate for the platform; if we expose them as ports
nevertheless it will cause problems downstream.

4 years agobuild.plat: add default_rst, to be used with default_clk.
whitequark [Sat, 3 Aug 2019 16:28:03 +0000 (16:28 +0000)]
build.plat: add default_rst, to be used with default_clk.

4 years agobuild.plat: add default_clk{,_constraint,_frequency}.
whitequark [Sat, 3 Aug 2019 16:18:46 +0000 (16:18 +0000)]
build.plat: add default_clk{,_constraint,_frequency}.

This is the equivalent of oMigen's default_clk and default_clk_period
except the period is taken from the resource.

4 years agohdl.ir: allow returning elaboratables from missing domain callback.
whitequark [Sat, 3 Aug 2019 15:44:02 +0000 (15:44 +0000)]
hdl.ir: allow returning elaboratables from missing domain callback.

This allows e.g. injecting a clock/reset generator in platform build
code on demand (i.e. if the domain is not instantiated manually).

See #57.

4 years agohdl.ir: raise DomainError if a domain is used but not defined.
whitequark [Sat, 3 Aug 2019 15:31:00 +0000 (15:31 +0000)]
hdl.ir: raise DomainError if a domain is used but not defined.

Before this commit, a KeyError would be raised elsewhere in guts of
hdl.ir, which is not helpful.

4 years agohdl.ir: call back from Fragment.prepare if a clock domain is missing.
whitequark [Sat, 3 Aug 2019 14:54:20 +0000 (14:54 +0000)]
hdl.ir: call back from Fragment.prepare if a clock domain is missing.

See #57.

4 years agohdl.dsl: warn on suspicious statements like `m.If(~True):`.
whitequark [Sat, 3 Aug 2019 14:00:29 +0000 (14:00 +0000)]
hdl.dsl: warn on suspicious statements like `m.If(~True):`.

This pattern usually produces an extremely hard to notice bug that
will usually break a design when it is triggered, but will also be
hidden unless the pathological value of a boolean switch is used.

Fixes #159.

4 years agoImprove test added in 29fee01f to not leak warnings.
whitequark [Sat, 3 Aug 2019 13:44:44 +0000 (13:44 +0000)]
Improve test added in 29fee01f to not leak warnings.

4 years agoback.rtlil: fix sim-synth mismatch with assigns following switches.
whitequark [Sat, 3 Aug 2019 13:27:47 +0000 (13:27 +0000)]
back.rtlil: fix sim-synth mismatch with assigns following switches.

Closes #155.

4 years agohdl.ast: fix typo.
whitequark [Sat, 3 Aug 2019 13:21:09 +0000 (13:21 +0000)]
hdl.ast: fix typo.

4 years agohdl.ast: deprecate Value.part, add Value.{bit,word}_select.
whitequark [Sat, 3 Aug 2019 13:05:41 +0000 (13:05 +0000)]
hdl.ast: deprecate Value.part, add Value.{bit,word}_select.

Fixes #148.

4 years agohdl.ast, back.rtlil: add source locations to anonymous wires.
whitequark [Sat, 3 Aug 2019 12:44:52 +0000 (12:44 +0000)]
hdl.ast, back.rtlil: add source locations to anonymous wires.

This might help with propagation of locations through optimizer
passes, since not all of them take care to preserve cells at all,
but usually wires stay intact when possible.

Also fixes incorrect source location on value.part().

4 years agohdl.ir: warn if .elaborate() returns None.
whitequark [Sat, 3 Aug 2019 12:30:39 +0000 (12:30 +0000)]
hdl.ir: warn if .elaborate() returns None.

Fixes #164.

4 years agohdl.xfrm: handle mem.{Read,Write}Port in CEInserter.
whitequark [Wed, 31 Jul 2019 05:19:24 +0000 (05:19 +0000)]
hdl.xfrm: handle mem.{Read,Write}Port in CEInserter.

Fixes #154.

4 years agovendor: don't emit duplicate iobuf submodule names.
N. Engelhardt [Sun, 21 Jul 2019 07:49:21 +0000 (15:49 +0800)]
vendor: don't emit duplicate iobuf submodule names.

These are no longer allowed after commit 698b005.

4 years agohdl.dsl: add getters to m.submodules.
N. Engelhardt [Fri, 19 Jul 2019 12:39:47 +0000 (20:39 +0800)]
hdl.dsl: add getters to m.submodules.

4 years agolib.fifo: fix typo.
Alain Péteut [Sun, 14 Jul 2019 22:28:06 +0000 (00:28 +0200)]
lib.fifo: fix typo.

4 years agoPin: Add extra hierarchy level for name derivation
Staf Verhaegen [Sun, 14 Jul 2019 19:15:09 +0000 (21:15 +0200)]
Pin: Add extra hierarchy level for name derivation

4 years agobuild.run: Ensure batch script returns proper error code.
William D. Jones [Sun, 14 Jul 2019 17:28:19 +0000 (13:28 -0400)]
build.run: Ensure batch script returns proper error code.

4 years agoback.pysim: correctly add gtkwave traces for signals with decoders.
whitequark [Fri, 12 Jul 2019 12:17:18 +0000 (12:17 +0000)]
back.pysim: correctly add gtkwave traces for signals with decoders.

4 years agobuild.dsl: Add optional name_suffix to Resource.family.
William D. Jones [Wed, 10 Jul 2019 15:29:09 +0000 (11:29 -0400)]
build.dsl: Add optional name_suffix to Resource.family.

4 years agoback.pysim: avoid malformed VCD files when a decoder uses tabs.
whitequark [Wed, 10 Jul 2019 12:54:59 +0000 (12:54 +0000)]
back.pysim: avoid malformed VCD files when a decoder uses tabs.

4 years agohdl.ir: make UnusedElaboratable a real warning.
whitequark [Wed, 10 Jul 2019 12:46:46 +0000 (12:46 +0000)]
hdl.ir: make UnusedElaboratable a real warning.

Before this commit, it was a print statement, and therefore, command
interpreter options like -Wignore did not affect it. There is no API
to access the warning filter list, so it was turned into a real
warning; and further, since Python 3.6, tracemalloc can be used
as a standard method to display traceback to allocation site instead
of the ad-hoc traceback logic that was used in Elaboratable before.

4 years agoback.rtlil: add decodings to cases when switching on a signal.
whitequark [Tue, 9 Jul 2019 19:45:15 +0000 (19:45 +0000)]
back.rtlil: add decodings to cases when switching on a signal.

Fixes #134.

4 years agoback.verilog: run proc_prune for much cleaner output.
whitequark [Tue, 9 Jul 2019 19:28:09 +0000 (19:28 +0000)]
back.verilog: run proc_prune for much cleaner output.

This is a very new Yosys feature, and will require a Yosys build
newer than YosysHQ/yosys@44bcb7a1.

4 years agohdl.{ast,dsl},back.rtlil: track source locations for switch cases.
whitequark [Tue, 9 Jul 2019 19:18:02 +0000 (19:18 +0000)]
hdl.{ast,dsl},back.rtlil: track source locations for switch cases.

This is a very new Yosys feature, and will require a Yosys build
newer than YosysHQ/yosys@93bc5aff.

4 years agotracer: add PyPy support to get_var_name().
Jacob Lifshay [Tue, 9 Jul 2019 07:29:01 +0000 (00:29 -0700)]
tracer: add PyPy support to get_var_name().

Fixes #141.

4 years agobuild.dsl: add Resource.family abstraction.
whitequark [Tue, 9 Jul 2019 02:44:03 +0000 (02:44 +0000)]
build.dsl: add Resource.family abstraction.

4 years agobuild.{dsl,res}: allow platform-dependent attributes using callables.
whitequark [Mon, 8 Jul 2019 11:15:04 +0000 (11:15 +0000)]
build.{dsl,res}: allow platform-dependent attributes using callables.

Fixes #132.

4 years agohdl.rec: respect modifications to signals in Record.like().
whitequark [Mon, 8 Jul 2019 10:59:15 +0000 (10:59 +0000)]
hdl.rec: respect modifications to signals in Record.like().

Fixes #126.

4 years agoback.rtlil: don't name-prefix signals connected to instance ports.
whitequark [Mon, 8 Jul 2019 10:48:07 +0000 (10:48 +0000)]
back.rtlil: don't name-prefix signals connected to instance ports.

This gives particularly pathological results on IO buffers, like:
  connect \D_OUT_0 \user_led_0_user_led_0__o

Since subfragment signals are name-prefixed because this works well
for signals propagated upwards across hierarchy, this is never
desirable for instances.

4 years agobuild.{dsl,res}: allow removing attributes from subsignals.
whitequark [Mon, 8 Jul 2019 10:41:45 +0000 (10:41 +0000)]
build.{dsl,res}: allow removing attributes from subsignals.

This is useful when most attributes in a large composite resource
are the same, but a few signals are different, and also when building
abstractions around resources.

Fixes #128.

4 years agobuild.dsl: allow assertions on subsignal widths.
whitequark [Mon, 8 Jul 2019 10:32:41 +0000 (10:32 +0000)]
build.dsl: allow assertions on subsignal widths.

This is useful when building abstractions around resources where
the pin names are user-specified.

Fixes #129.

4 years agohdl.{ast,cd,dsl,xfrm}: reject inappropriately used comb domain.
whitequark [Mon, 8 Jul 2019 10:26:49 +0000 (10:26 +0000)]
hdl.{ast,cd,dsl,xfrm}: reject inappropriately used comb domain.

Fixes #125.

4 years agotest: fix Travis.
whitequark [Mon, 8 Jul 2019 10:20:24 +0000 (10:20 +0000)]
test: fix Travis.

4 years agotest: generate examples to verilog as part of unit tests.
whitequark [Mon, 8 Jul 2019 10:12:15 +0000 (10:12 +0000)]
test: generate examples to verilog as part of unit tests.

This is to make sure 806a62c2 doesn't happen again.

4 years agoexamples/basic/ctr_ce: fix outdated syntax.
whitequark [Mon, 8 Jul 2019 10:00:16 +0000 (10:00 +0000)]
examples/basic/ctr_ce: fix outdated syntax.

4 years agocompat.genlib.fsm: fix after commit dac62754.
whitequark [Mon, 8 Jul 2019 10:03:20 +0000 (10:03 +0000)]
compat.genlib.fsm: fix after commit dac62754.

4 years agohdl.xfrm: don't overwrite source locations on ClockDomain signals.
whitequark [Mon, 8 Jul 2019 09:57:14 +0000 (09:57 +0000)]
hdl.xfrm: don't overwrite source locations on ClockDomain signals.

On the sample of examples/basic/*.py, there are no remaining
incorrectly inferred locations.

4 years agohdl.{dsl,mem,xfrm}: inject appropriate source locations.
whitequark [Mon, 8 Jul 2019 09:50:07 +0000 (09:50 +0000)]
hdl.{dsl,mem,xfrm}: inject appropriate source locations.

This primarily fixes the problem with source location precision in
Module (which used to trace locations from __exit__ of the context
managers, by which point everything interesting has been lost), but
also improves memory port and control inserter source locations.

On the sample of examples/basic/*.py, the only incorrectly inferred
remaining location is clk pointing to hdl/mem.py:166.

4 years agoback.rtlil: ignore empty source locations.
whitequark [Mon, 8 Jul 2019 09:33:01 +0000 (09:33 +0000)]
back.rtlil: ignore empty source locations.

This was a bug introduced during refactoring in 2492f490.

4 years agohdl.ast: use keyword-only arguments as appropriate.
whitequark [Mon, 8 Jul 2019 09:23:33 +0000 (09:23 +0000)]
hdl.ast: use keyword-only arguments as appropriate.

As a motivation/related refactor, make sure each AST node exposes
src_loc_at in the constructor.

4 years agoback.rtlil: attach source locations to switches, not processes.
whitequark [Mon, 8 Jul 2019 09:09:40 +0000 (09:09 +0000)]
back.rtlil: attach source locations to switches, not processes.

This effectively reverts and reimplements half of commit 82903e49.
I was confused and did not realize that RTLIL does, in fact, have
attributes on switches.

After this commit, processes no longer have any source locations.
This is semantically fine, as the processes we emit are purely
artificial (because of LHS grouping), but I have not checked how
downstream tooling handles this.