nmigen.git
5 years ago{,_}tools→{,_}utils
whitequark [Sun, 13 Oct 2019 18:53:38 +0000 (18:53 +0000)]
{,_}tools→{,_}utils

In context of nMigen, "tools" means "parts of toolchain", so it is
confusing to have a completely unrelated module also called "tools".

5 years agovendor.lattice_{ice40,ecp5}: emit Verilog as well, for debugging.
whitequark [Sun, 13 Oct 2019 18:04:33 +0000 (18:04 +0000)]
vendor.lattice_{ice40,ecp5}: emit Verilog as well, for debugging.

5 years agobuild.plat: fold emit_prelude() into emit_commands().
whitequark [Sun, 13 Oct 2019 13:57:48 +0000 (13:57 +0000)]
build.plat: fold emit_prelude() into emit_commands().

Commit a783e464 broke all toolchains using bash.

5 years agoRefactor build script toolchain lookups.
Emily [Sun, 13 Oct 2019 13:53:24 +0000 (14:53 +0100)]
Refactor build script toolchain lookups.

Now environment variable overrides no longer infect the build scripts.

_toolchain.overrides is dropped as probably misguided in the first place.

Fixes #251.

5 years agohdl.ir: allow ClockSignal and ResetSignal in ports.
whitequark [Sun, 13 Oct 2019 03:39:56 +0000 (03:39 +0000)]
hdl.ir: allow ClockSignal and ResetSignal in ports.

Fixes #248.

5 years agohdl.ir: cast instance port connections to Values.
whitequark [Sun, 13 Oct 2019 03:19:17 +0000 (03:19 +0000)]
hdl.ir: cast instance port connections to Values.

Fixes #249.

5 years agocompat.fhdl.decorators: improve backwards compatibility.
whitequark [Sun, 13 Oct 2019 01:38:09 +0000 (01:38 +0000)]
compat.fhdl.decorators: improve backwards compatibility.

5 years agocompat.fhdl.bitcontainer: update Value.wrap call.
whitequark [Sun, 13 Oct 2019 01:37:11 +0000 (01:37 +0000)]
compat.fhdl.bitcontainer: update Value.wrap call.

5 years agodoc: bring COMPAT_SUMMARY up to date.
whitequark [Sat, 12 Oct 2019 23:15:09 +0000 (23:15 +0000)]
doc: bring COMPAT_SUMMARY up to date.

Fixes #112.

5 years agocompat.genlib.fsm: add migration warning.
whitequark [Sat, 12 Oct 2019 22:48:08 +0000 (22:48 +0000)]
compat.genlib.fsm: add migration warning.

5 years agocompat.fhdl.decorators: add migration warnings.
whitequark [Sat, 12 Oct 2019 22:44:12 +0000 (22:44 +0000)]
compat.fhdl.decorators: add migration warnings.

5 years agohdl.ast: rename Slice.end back to Slice.stop.
whitequark [Sat, 12 Oct 2019 22:40:30 +0000 (22:40 +0000)]
hdl.ast: rename Slice.end back to Slice.stop.

It used to be called .stop in oMigen, and it's also called .stop in
Python range and slice objects, so keep that.

5 years agocompat.fhdl.structure: remove SPECIAL_* constants.
whitequark [Sat, 12 Oct 2019 22:35:43 +0000 (22:35 +0000)]
compat.fhdl.structure: remove SPECIAL_* constants.

They cannot be used with nMigen designs since nMigen does not have
specials.

5 years ago_tools: extract most utility methods to a private package.
whitequark [Sat, 12 Oct 2019 22:27:43 +0000 (22:27 +0000)]
_tools: extract most utility methods to a private package.

We don't want to guarantee backwards compatibility for most of them.

5 years agoback.rtlil: fix DeprecationWarning. NFC.
Jean-François Nguyen [Sat, 12 Oct 2019 21:44:39 +0000 (23:44 +0200)]
back.rtlil: fix DeprecationWarning. NFC.

5 years agoRename remaining `wrap` methods to `cast`.
whitequark [Fri, 11 Oct 2019 13:28:26 +0000 (13:28 +0000)]
Rename remaining `wrap` methods to `cast`.

Following commit d72d4a55.

5 years agohdl.ast: deprecate shapes like `(1, True)` in favor of `signed(1)`.
whitequark [Fri, 11 Oct 2019 13:22:08 +0000 (13:22 +0000)]
hdl.ast: deprecate shapes like `(1, True)` in favor of `signed(1)`.

This is a great improvement in clarity.

5 years agohdl.ast: deprecate Signal.{range,enum}.
whitequark [Fri, 11 Oct 2019 13:07:42 +0000 (13:07 +0000)]
hdl.ast: deprecate Signal.{range,enum}.

Although constructor methods can improve clarity, there are many
contexts in which it is useful to use range() as a shape: notably
Layout, but also Const and AnyConst/AnyValue. Instead of duplicating
these constructor methods everywhere (which is not even easily
possible for Layout), use casting to Shape, introduced in 6aabdc0a.

Fixes #225.

5 years agohdl.ast: add an explicit Shape class, included in prelude.
whitequark [Fri, 11 Oct 2019 12:52:41 +0000 (12:52 +0000)]
hdl.ast: add an explicit Shape class, included in prelude.

Shapes have long been a part of nMigen, but represented using tuples.
This commit adds a Shape class (using namedtuple for backwards
compatibility), and accepts anything castable to Shape (including
enums, ranges, etc) anywhere a tuple was accepted previously.

In addition, `signed(n)` and `unsigned(n)` are added as aliases for
`Shape(n, signed=True)` and `Shape(n, signed=False)`, transforming
code such as `Signal((8, True))` to `Signal(signed(8))`.
These aliases are also included in prelude.

Preparation for #225.

5 years agoConsistently use {!r}, not '{!r}' in diagnostics.
whitequark [Fri, 11 Oct 2019 11:47:42 +0000 (11:47 +0000)]
Consistently use {!r}, not '{!r}' in diagnostics.

This can cause confusion:
  * If the erroneous object is None, it is printed as 'None', which
    appears as a string (and could be the result of converting None
    to a string.)
  * If the erroneous object is a string, it is printed as ''<val>'',
    which is a rather strange combination of quotes.

5 years agohdl.ast: Operator.{op→operator}
whitequark [Fri, 11 Oct 2019 11:37:26 +0000 (11:37 +0000)]
hdl.ast: Operator.{op→operator}

Both "operator" and "operand" were shortened to "op" in different
places in code, which caused confusion.

5 years agohdl.ast: simplify enum handling.
whitequark [Fri, 11 Oct 2019 11:16:00 +0000 (11:16 +0000)]
hdl.ast: simplify enum handling.

5 years agohdl.ast: Value.{wrap→cast}
whitequark [Fri, 11 Oct 2019 10:49:34 +0000 (10:49 +0000)]
hdl.ast: Value.{wrap→cast}

Preparation for #225.

5 years agovendor.xilinx_ultrascale: new supported family.
whitequark [Thu, 10 Oct 2019 16:35:48 +0000 (16:35 +0000)]
vendor.xilinx_ultrascale: new supported family.

5 years agoxilinx_7series: add grade platform property.
whitequark [Thu, 10 Oct 2019 16:25:10 +0000 (16:25 +0000)]
xilinx_7series: add grade platform property.

For some devices grade has to be omitted, so it is optional.

5 years agovendor.lattice_machxo2: new supported family.
whitequark [Thu, 10 Oct 2019 15:33:01 +0000 (15:33 +0000)]
vendor.lattice_machxo2: new supported family.

5 years agovendor: yosys is a required tool for all Verilog-based flows.
whitequark [Thu, 10 Oct 2019 14:38:09 +0000 (14:38 +0000)]
vendor: yosys is a required tool for all Verilog-based flows.

5 years agoREADME: add device support matrix.
whitequark [Thu, 10 Oct 2019 00:50:01 +0000 (00:50 +0000)]
README: add device support matrix.

5 years agovendor.intel: add Quartus support.
whitequark [Wed, 21 Aug 2019 22:14:33 +0000 (22:14 +0000)]
vendor.intel: add Quartus support.

Co-authored-by: Dan Ravensloft <dan.ravensloft@gmail.com>
5 years agoexamples: update blinky, add some explanatory text about domains.
whitequark [Wed, 9 Oct 2019 23:19:19 +0000 (23:19 +0000)]
examples: update blinky, add some explanatory text about domains.

5 years agobuild.plat: elaborate result of create_missing_domain() against platform.
whitequark [Wed, 9 Oct 2019 21:16:14 +0000 (21:16 +0000)]
build.plat: elaborate result of create_missing_domain() against platform.

Before this commit, the result was elaborated without platform, which
caused generic implementation of e.g. ResetSynchronizer to be used.

5 years agobuild.plat: don't create default sync domain as reset-less.
whitequark [Wed, 9 Oct 2019 20:44:07 +0000 (20:44 +0000)]
build.plat: don't create default sync domain as reset-less.

5 years agobuild.plat,vendor: always synchronize reset in default sync domain.
whitequark [Wed, 9 Oct 2019 20:02:33 +0000 (20:02 +0000)]
build.plat,vendor: always synchronize reset in default sync domain.

This change achieves two related goals.

First, default_rst is no longer assumed to be synchronous to
default_clk, which is  the safer option, since it can be connected to
e.g. buttons on some evaluation boards.

Second, since the power-on / configuration reset is inherently
asynchronous to any user clock, the default create_missing_domain()
behavior is to use a reset synchronizer with `0` as input. Since,
like all reset synchronizers, it uses Signal(reset=1) for its
synchronization stages, after power-on reset it keeps its subordinate
clock domain in reset, and releases it after fabric flops start
toggling.

The latter change is helpful to architectures that lack an end-of-
configuration signal, i.e. most of them. ECP5 was already using
a similar scheme (and is not changed here). Xilinx devices with EOS
use EOS to drive a BUFGMUX, which is more efficient than using
a global reset when the design does not need one; Xilinx devices
without EOS use the new scheme. iCE40 requires a post-configuration
timer because of BRAM silicon bug, and was changed to add a reset
synchronizer if user clock is provided.

5 years agoback.rtlil: don't crash legalizing values with no branches.
whitequark [Sun, 6 Oct 2019 08:52:49 +0000 (08:52 +0000)]
back.rtlil: don't crash legalizing values with no branches.

Fixes #239.

5 years agoback.rtlil: avoid unsoundness for division by zero.
whitequark [Fri, 4 Oct 2019 07:56:06 +0000 (07:56 +0000)]
back.rtlil: avoid unsoundness for division by zero.

Fixes #238.

5 years agohdl.ast: prohibit signed divisors.
whitequark [Fri, 4 Oct 2019 07:49:24 +0000 (07:49 +0000)]
hdl.ast: prohibit signed divisors.

See #238.

5 years agobuild.dsl: accept Pins(invert=True).
whitequark [Thu, 3 Oct 2019 02:44:43 +0000 (02:44 +0000)]
build.dsl: accept Pins(invert=True).

The PinsN() form is still preferred, but Pins(invert=) form is useful
for code generic over pin polarity.

5 years agohdl.ast: don't crash on Mux(<bool>, ...).
whitequark [Wed, 2 Oct 2019 08:24:37 +0000 (08:24 +0000)]
hdl.ast: don't crash on Mux(<bool>, ...).

Fixes #240.

5 years agoback.rtlil: don't cache wires for legalized switch tests.
whitequark [Wed, 2 Oct 2019 07:51:49 +0000 (07:51 +0000)]
back.rtlil: don't cache wires for legalized switch tests.

This causes miscompilation of code such as:

  r = Array([self.a, self.b])
  m = Module()
  with m.If(r[self.s]):
      m.d.comb += self.o.eq(1)
  return m

5 years agoback.rtlil: sign of rhs and lhs of ${sshr,sshl,pow} don't need to match.
whitequark [Wed, 2 Oct 2019 03:50:20 +0000 (03:50 +0000)]
back.rtlil: sign of rhs and lhs of ${sshr,sshl,pow} don't need to match.

5 years agoback.rtlil: it is not necessary to match binop operand width.
whitequark [Wed, 2 Oct 2019 03:38:58 +0000 (03:38 +0000)]
back.rtlil: it is not necessary to match binop operand width.

5 years agorpc: add public Records as module ports.
Jean-François Nguyen [Sun, 29 Sep 2019 22:12:17 +0000 (00:12 +0200)]
rpc: add public Records as module ports.

5 years agorpc: add support for Yosys RPC protocol.
whitequark [Fri, 27 Sep 2019 02:35:45 +0000 (02:35 +0000)]
rpc: add support for Yosys RPC protocol.

5 years agohdl.ast: actually implement the // operator.
whitequark [Sat, 28 Sep 2019 19:33:24 +0000 (19:33 +0000)]
hdl.ast: actually implement the // operator.

5 years agohdl.dsl: add a diagnostic for `m.d.submodules += ...`.
whitequark [Sat, 28 Sep 2019 17:50:24 +0000 (17:50 +0000)]
hdl.dsl: add a diagnostic for `m.d.submodules += ...`.

5 years agohdl.mem: remove WritePort(priority=) argument.
whitequark [Sat, 28 Sep 2019 01:29:56 +0000 (01:29 +0000)]
hdl.mem: remove WritePort(priority=) argument.

The write port priority in Yosys is derived directly from the order
in which the ports are declared in the Verilog frontend. It is being
removed for several reasons:
  1. It is not clear if it works correctly for all cases (FFRAM,
     LUTRAM, BRAM).
  2. Although it is roundtripped via Verilog with correct simulation
     semantics, the resulting code has a high chance of being
     interpreted incorrectly by Xilinx tools.
  3. It cannot be roundtripped via FIRRTL, which is an alternative
     backend that is an interesting future option. (FIRRTL leaves
     write collision completely undefined.)
  3. It is a niche feature that, if it is needed, can be completely
     replaced using an explicit comparator, priority encoder, and
     write enable gating circuit. (This is what Xilinx recommends
     for handling this case.)

In the future we should extend nMigen's formal verification to assert
that a write collision does not happen.

5 years agoback.rtlil: fix handling of certain nested arrays.
whitequark [Tue, 24 Sep 2019 18:32:26 +0000 (18:32 +0000)]
back.rtlil: fix handling of certain nested arrays.

This triggers on code like:

c1 = Signal()
c2 = Signal()
c3 = Signal()
v1 = Array([Const(1, 8), Const(2, 8)])[c1]
v2 = Array([Const(3, 8), Const(4, 8)])[c2]
v3 = Array([v1, v2])[c3]

Fixes #226.

5 years agobuild.plat: strip internal attributes from Verilog output.
whitequark [Tue, 24 Sep 2019 14:54:22 +0000 (14:54 +0000)]
build.plat: strip internal attributes from Verilog output.

Although useful for debugging, most external tools often complain
about such attributes (with notable exception of Vivado). As such,
it is better to emit Verilog with these attributes into a separate
file such as `design.debug.v` and only emit the attributes that were
explicitly placed by the user to `design.v`.

This still leaves the (*init*) attribute. See #220 for details.

5 years agobuild.plat,lib.cdc,vendor: unify platform related diagnostics. NFC.
whitequark [Tue, 24 Sep 2019 14:14:45 +0000 (14:14 +0000)]
build.plat,lib.cdc,vendor: unify platform related diagnostics. NFC.

5 years agolib.cdc: specify maximum input delay in seconds.
whitequark [Tue, 24 Sep 2019 12:30:02 +0000 (12:30 +0000)]
lib.cdc: specify maximum input delay in seconds.

Since we use hertz elsewhere, this provides for easy conversions.

Also, cast the delay to string before applying it in xilinx_7series,
to avoid stripping the fractional digits.

Closes #234.

5 years agovendor.xilinx_spartan_3_6: explain why ASYNC_REG is used. NFC.
whitequark [Tue, 24 Sep 2019 12:22:29 +0000 (12:22 +0000)]
vendor.xilinx_spartan_3_6: explain why ASYNC_REG is used. NFC.

5 years agovendor.lattice_ecp5: correct a typo in tristate buffer generation
Kate Temkin [Tue, 24 Sep 2019 06:55:00 +0000 (00:55 -0600)]
vendor.lattice_ecp5: correct a typo in tristate buffer generation

5 years agovendor.xilinx_7series: apply false path / max delay constraints.
Darrell Harmon [Tue, 24 Sep 2019 00:47:54 +0000 (18:47 -0600)]
vendor.xilinx_7series: apply false path / max delay constraints.

5 years agovendor.xilinx_7series: simplify. NFC.
whitequark [Mon, 23 Sep 2019 20:27:42 +0000 (20:27 +0000)]
vendor.xilinx_7series: simplify. NFC.

5 years agovendor.xilinx_7series: override reset synchronizer.
whitequark [Mon, 23 Sep 2019 20:15:29 +0000 (20:15 +0000)]
vendor.xilinx_7series: override reset synchronizer.

5 years agolib.cdc: add diagnostic checks for synchronization stage count.
whitequark [Mon, 23 Sep 2019 19:38:21 +0000 (19:38 +0000)]
lib.cdc: add diagnostic checks for synchronization stage count.

5 years agolib.cdc: expand ResetSynchronizer documentation.
whitequark [Mon, 23 Sep 2019 19:31:23 +0000 (19:31 +0000)]
lib.cdc: expand ResetSynchronizer documentation.

Loosely based on work by @Wren6991.

5 years agolib.cdc: avoid modifying synchronizers in their elaborate() method.
whitequark [Mon, 23 Sep 2019 16:42:44 +0000 (16:42 +0000)]
lib.cdc: avoid modifying synchronizers in their elaborate() method.

5 years agovendor.xilinx_spartan_3_6: override reset synchronizer.
Darrell Harmon [Mon, 23 Sep 2019 16:28:15 +0000 (10:28 -0600)]
vendor.xilinx_spartan_3_6: override reset synchronizer.

5 years agoREADME: add a section on migrating from Migen.
whitequark [Mon, 23 Sep 2019 16:01:59 +0000 (16:01 +0000)]
README: add a section on migrating from Migen.

5 years agolib.cdc: MultiReg→FFSynchronizer.
whitequark [Mon, 23 Sep 2019 14:17:44 +0000 (14:17 +0000)]
lib.cdc: MultiReg→FFSynchronizer.

Fixes #229.

5 years agohdl.ast: cast Mux() selector to bool if it is not a 1-bit value.
whitequark [Mon, 23 Sep 2019 13:39:31 +0000 (13:39 +0000)]
hdl.ast: cast Mux() selector to bool if it is not a 1-bit value.

Fixes #232.

5 years agoback.rtlil: give predictable names to anonymous subfragments.
whitequark [Mon, 23 Sep 2019 12:48:02 +0000 (12:48 +0000)]
back.rtlil: give predictable names to anonymous subfragments.

This is required for applying constraints to clocks in anonymous
subfragments in build.plat.

5 years agolib.fifo: handle depth=0, elaborating to a dummy FIFO with no logic.
whitequark [Mon, 23 Sep 2019 12:27:59 +0000 (12:27 +0000)]
lib.fifo: handle depth=0, elaborating to a dummy FIFO with no logic.

5 years agohdl.mem,lib.fifo: use keyword-only arguments for memory geometry.
whitequark [Mon, 23 Sep 2019 11:18:01 +0000 (11:18 +0000)]
hdl.mem,lib.fifo: use keyword-only arguments for memory geometry.

Fixes #230.

5 years agohdl.mem: simplify. NFC.
whitequark [Mon, 23 Sep 2019 11:16:29 +0000 (11:16 +0000)]
hdl.mem: simplify. NFC.

5 years agohdl.ast: make Signal(name=) a keyword-only argument.
whitequark [Mon, 23 Sep 2019 11:08:43 +0000 (11:08 +0000)]
hdl.ast: make Signal(name=) a keyword-only argument.

Almost no code would specify Signal(_, name) as a positional argument
on purpose, but forgetting parens and accidentally placing signedness
into the name position is so common that we had a test for it.

5 years agolib.fifo: change FIFOInterface() diagnostics to follow Memory().
whitequark [Mon, 23 Sep 2019 11:03:50 +0000 (11:03 +0000)]
lib.fifo: change FIFOInterface() diagnostics to follow Memory().

5 years agolib.fifo: round up AsyncFIFO{,Buffered} depth to lowest valid value.
whitequark [Mon, 23 Sep 2019 10:57:30 +0000 (10:57 +0000)]
lib.fifo: round up AsyncFIFO{,Buffered} depth to lowest valid value.

Unless exact_depth=True is specified.

The logic introduced in this commit is idempotent: that is, if one
uses the depth of one AsyncFIFOBuffered in the constructor of another
AsyncFIFOBuffered, they will end up with the same depth. More naive
logic would result in an unbounded, quadratic growth with each such
step.

Fixes #219.

5 years agolib.fifo: make simulation read() and write() functions compat-only.
whitequark [Mon, 23 Sep 2019 08:45:58 +0000 (08:45 +0000)]
lib.fifo: make simulation read() and write() functions compat-only.

These functions were originally changed in 3ed51938, in an attempt
to make them take one cycle instead of two. However, this does not
actually work because of drawbacks of the simulator interface.

Avoid committing to any specific implementation for now, and instead
make them compat-only extensions.

5 years agohdl.rec: fix using Enum subclass as shape if direction is specified.
whitequark [Sun, 22 Sep 2019 17:23:32 +0000 (17:23 +0000)]
hdl.rec: fix using Enum subclass as shape if direction is specified.

Also improves error messages.

Fixes #224.

5 years agohdl.rec: allow using Enum subclass as shape.
whitequark [Sun, 22 Sep 2019 15:16:36 +0000 (15:16 +0000)]
hdl.rec: allow using Enum subclass as shape.

Fixes #223.

5 years agolib.fifo: add more compatibility shims.
whitequark [Sun, 22 Sep 2019 11:56:03 +0000 (11:56 +0000)]
lib.fifo: add more compatibility shims.

Some downstream code was broken by renames in da4b810f.

5 years agovendor.lattice_ice40: fix required tool list for iCECube2. NFC.
whitequark [Sun, 22 Sep 2019 07:18:37 +0000 (07:18 +0000)]
vendor.lattice_ice40: fix required tool list for iCECube2. NFC.

5 years agovendor.lattice_ecp5: simplify quoting. NFC.
whitequark [Sun, 22 Sep 2019 07:17:12 +0000 (07:17 +0000)]
vendor.lattice_ecp5: simplify quoting. NFC.

See commit ee1ad2da.

5 years agobuild.plat: restrict design names to alphanumeric to avoid quoting issues.
whitequark [Sun, 22 Sep 2019 06:57:28 +0000 (06:57 +0000)]
build.plat: restrict design names to alphanumeric to avoid quoting issues.

5 years agovendor.lattice_ice40: add iCECube support.
whitequark [Sat, 21 Sep 2019 14:27:35 +0000 (14:27 +0000)]
vendor.lattice_ice40: add iCECube support.

This also makes some iCE40 and ECP5 overrides more consistent.

5 years agobuild.res: simplify clock constraints.
whitequark [Sat, 21 Sep 2019 14:12:29 +0000 (14:12 +0000)]
build.res: simplify clock constraints.

Before this commit, it was possible to set and get clock constraints
placed on Pin objects. This was not a very good implementation, since
it relied on matching the identity of the provided Pin object to
a previously requested one. The only reason it worked like that is
deficiencies in nextpnr.

Since then, nextpnr has been fixed to allow setting constraints on
arbitrary nets. Correspondingly, backends that are using Synplify
were changed to use [get_nets] instead of [get_ports] in SDC files.
However, in some situations, Synplify does not allow specifying
ports in [get_nets]. (In fact, nextpnr had a similar problem, but
it has also been fixed.)

The simplest way to address this is to refer to the interior net
(after the input buffer), which always works. The only downside
of this is that requesting a clock as a raw pin using
    platform.request("clk", dir="-")
and directly applying a constraint to it could fail in some cases.
This is not a significant issue.

5 years agobuild.plat: NMIGEN_<toolchain>_env→NMIGEN_ENV_<toolchain>
whitequark [Sat, 21 Sep 2019 12:23:53 +0000 (12:23 +0000)]
build.plat: NMIGEN_<toolchain>_env→NMIGEN_ENV_<toolchain>

This is more consistent with other environment variables nMigen uses.

5 years agolib.fifo: update docs. NFC.
whitequark [Sat, 21 Sep 2019 06:53:39 +0000 (06:53 +0000)]
lib.fifo: update docs. NFC.

5 years agohdl.ast: update docs. NFC.
whitequark [Sat, 21 Sep 2019 06:53:13 +0000 (06:53 +0000)]
hdl.ast: update docs. NFC.

5 years agolib.fifo: simplify. NFC.
whitequark [Sat, 21 Sep 2019 06:09:30 +0000 (06:09 +0000)]
lib.fifo: simplify. NFC.

5 years agolib.fifo: fix doc typo. NFC.
whitequark [Fri, 20 Sep 2019 19:50:43 +0000 (19:50 +0000)]
lib.fifo: fix doc typo. NFC.

5 years agolib.fifo: work around Yosys issue with handling of \TRANSPARENT.
whitequark [Fri, 20 Sep 2019 19:38:42 +0000 (19:38 +0000)]
lib.fifo: work around Yosys issue with handling of \TRANSPARENT.

Because of YosysHQ/yosys#1390, using a transparent port in AsyncFIFO,
instead of being a no-op (as the semantics of \TRANSPARENT would
require it to be in this case), results in a failure to infer BRAM.

This can be easily avoided by using a non-transparent port instead,
which produces the desirable result with Yosys. It does not affect
the semantics on Xilinx platforms, since the interaction between
the two ports in case of address collision is undefined in either
transparent (WRITE_FIRST) or non-transparent (READ_FIRST) case, and
the data out of the write port is not used at all.

Fixes #172.

5 years agohdl.mem: use 1 as reset value for ReadPort.en.
whitequark [Fri, 20 Sep 2019 19:36:19 +0000 (19:36 +0000)]
hdl.mem: use 1 as reset value for ReadPort.en.

This is necessary for consistency, since for transparent read ports,
we currently do not support .en at all (it is fixed at 1) due to
YosysHQ/yosys#760. Before this commit, changing port transparency
would require adding or removing an assignment to .en, which is
confusing and error-prone.

Also, most read ports are always enabled, so this behavior is also
convenient.

5 years agovendor.lattice_{ecp5,ice40}: allow clock constraints on arbitrary signals.
whitequark [Fri, 20 Sep 2019 16:11:01 +0000 (16:11 +0000)]
vendor.lattice_{ecp5,ice40}: allow clock constraints on arbitrary signals.

Fixes #88.

5 years agohdl.ast: rename `nbits` to `width`.
whitequark [Fri, 20 Sep 2019 15:35:55 +0000 (15:35 +0000)]
hdl.ast: rename `nbits` to `width`.

Also, replace `bits, sign = x.shape()` with more idiomatic
`width, signed = x.shape()`.

This unifies all properties corresponding to `len(x)` to `x.width`.
(Not all values have a `width` property.)

Fixes #210.

5 years agovendor.xilinx_{7series,spartan3_6}: specialize MultiReg.
Darrell Harmon [Fri, 20 Sep 2019 15:13:27 +0000 (09:13 -0600)]
vendor.xilinx_{7series,spartan3_6}: specialize MultiReg.

Vivado/ISE would otherwise infer an SRL16 from a MultiReg in some cases.

5 years agosetup: improve repository detection.
Emily [Fri, 20 Sep 2019 13:48:08 +0000 (14:48 +0100)]
setup: improve repository detection.

5 years agosetup: add setuptools dependency.
Emily [Fri, 20 Sep 2019 13:48:03 +0000 (14:48 +0100)]
setup: add setuptools dependency.

5 years agotest.test_lib_fifo: fix typo.
whitequark [Fri, 20 Sep 2019 11:53:05 +0000 (11:53 +0000)]
test.test_lib_fifo: fix typo.

5 years agoback.pysim: fix simulation of Value.xor().
whitequark [Fri, 20 Sep 2019 10:12:59 +0000 (10:12 +0000)]
back.pysim: fix simulation of Value.xor().

5 years agohdl.{ast,dsl}: add Signal.enum; coerce Enum to Value; accept Enum patterns.
whitequark [Mon, 16 Sep 2019 18:59:28 +0000 (18:59 +0000)]
hdl.{ast,dsl}: add Signal.enum; coerce Enum to Value; accept Enum patterns.

Fixes #207.

5 years agohdl.ast: add Value.matches(), accepting same language as Case().
whitequark [Sat, 14 Sep 2019 21:06:12 +0000 (21:06 +0000)]
hdl.ast: add Value.matches(), accepting same language as Case().

Fixes #202.

5 years agohdl.dsl: improve error messages for Case().
whitequark [Sat, 14 Sep 2019 20:46:10 +0000 (20:46 +0000)]
hdl.dsl: improve error messages for Case().

5 years agohdl.ast: add Value.xor, mapping to $reduce_xor.
whitequark [Fri, 13 Sep 2019 14:28:43 +0000 (14:28 +0000)]
hdl.ast: add Value.xor, mapping to $reduce_xor.

Fixes #147.

5 years agohdl.ast: add Value.{any,all}, mapping to $reduce_{or,and}.
whitequark [Fri, 13 Sep 2019 13:14:52 +0000 (13:14 +0000)]
hdl.ast: add Value.{any,all}, mapping to $reduce_{or,and}.

Refs #147.

5 years agolib.fifo: adjust for new CDC primitive conventions.
whitequark [Thu, 12 Sep 2019 20:01:28 +0000 (20:01 +0000)]
lib.fifo: adjust for new CDC primitive conventions.

Fixes #97.

5 years agolib.fifo: adjust properties to have consistent naming.
whitequark [Thu, 12 Sep 2019 19:51:01 +0000 (19:51 +0000)]
lib.fifo: adjust properties to have consistent naming.

5 years agobuild.plat: bypass tool detection if NMIGEN_*_env is set.
whitequark [Thu, 12 Sep 2019 21:56:48 +0000 (21:56 +0000)]
build.plat: bypass tool detection if NMIGEN_*_env is set.

It's not practical to detect tools within the toolchain environment
for various reasons, so just assume the tools are there if the user
says they are.

Before this commit, the tools would be searched outside the toolchain
environment, which of course would always fail for Vivado, ISE, etc.