nmigen.git
5 years agoback.rtlil: remove useless condition. NFC.
whitequark [Sat, 22 Dec 2018 07:24:15 +0000 (07:24 +0000)]
back.rtlil: remove useless condition. NFC.

5 years agohdl.xfrm: implement LHSGroupAnalyzer.
whitequark [Sat, 22 Dec 2018 06:50:32 +0000 (06:50 +0000)]
hdl.xfrm: implement LHSGroupAnalyzer.

5 years agohdl.xfrm: Abstract*Transformer→*Visitor
whitequark [Sat, 22 Dec 2018 06:03:38 +0000 (06:03 +0000)]
hdl.xfrm: Abstract*Transformer→*Visitor

5 years agoback.rtlil: always initialize the entire memory.
whitequark [Sat, 22 Dec 2018 05:27:42 +0000 (05:27 +0000)]
back.rtlil: always initialize the entire memory.

This avoids reading 'x from the memory in simulation. In general,
FPGA memories can only be initialized in block granularity, and
zero-initializing is cheap, so this is not a significant issue with
resource consumption.

5 years agocompat: use nicer names for next_value/next_value_ce signals.
whitequark [Sat, 22 Dec 2018 02:05:49 +0000 (02:05 +0000)]
compat: use nicer names for next_value/next_value_ce signals.

5 years agohdl.mem: allow changing init value after creating memory.
whitequark [Sat, 22 Dec 2018 01:09:03 +0000 (01:09 +0000)]
hdl.mem: allow changing init value after creating memory.

5 years agoback.verilog: do not rename internal signals.
whitequark [Sat, 22 Dec 2018 00:53:40 +0000 (00:53 +0000)]
back.verilog: do not rename internal signals.

_0_ is not really any better than \$13, and the latter at least has
continuity between nMigen, RTLIL and Verilog.

5 years agocompat: fix confusing naming for memory port address signal.
whitequark [Sat, 22 Dec 2018 00:53:05 +0000 (00:53 +0000)]
compat: fix confusing naming for memory port address signal.

5 years agohdl.ir: fix port propagation between siblings, in the other direction.
whitequark [Sat, 22 Dec 2018 00:31:31 +0000 (00:31 +0000)]
hdl.ir: fix port propagation between siblings, in the other direction.

5 years agocompat: do not finalize native submodules twice.
whitequark [Sat, 22 Dec 2018 00:02:31 +0000 (00:02 +0000)]
compat: do not finalize native submodules twice.

5 years agohdl.mem: use more informative signal naming for ports.
whitequark [Fri, 21 Dec 2018 23:55:02 +0000 (23:55 +0000)]
hdl.mem: use more informative signal naming for ports.

5 years agohdl.ir: fix port propagation between siblings.
whitequark [Fri, 21 Dec 2018 23:53:18 +0000 (23:53 +0000)]
hdl.ir: fix port propagation between siblings.

5 years agocompat: provide verilog.convert shim.
whitequark [Fri, 21 Dec 2018 13:53:06 +0000 (13:53 +0000)]
compat: provide verilog.convert shim.

5 years agohdl.ir: do not flatten instances or collect ports from their statements.
whitequark [Fri, 21 Dec 2018 13:52:18 +0000 (13:52 +0000)]
hdl.ir: do not flatten instances or collect ports from their statements.

This results in absurd behavior for memories.

5 years agocompat: provide Memory shim.
whitequark [Fri, 21 Dec 2018 13:15:52 +0000 (13:15 +0000)]
compat: provide Memory shim.

5 years agohdl.mem: ensure transparent read port model has correct latency.
whitequark [Fri, 21 Dec 2018 13:01:08 +0000 (13:01 +0000)]
hdl.mem: ensure transparent read port model has correct latency.

5 years agoback.pysim: handle out of bounds ArrayProxy indexes.
whitequark [Fri, 21 Dec 2018 12:32:08 +0000 (12:32 +0000)]
back.pysim: handle out of bounds ArrayProxy indexes.

5 years agoback.pysim: give numeric names to unnamed subfragments in VCD.
whitequark [Fri, 21 Dec 2018 12:29:33 +0000 (12:29 +0000)]
back.pysim: give numeric names to unnamed subfragments in VCD.

5 years agohdl.mem: use different naming for array signals.
whitequark [Fri, 21 Dec 2018 12:26:49 +0000 (12:26 +0000)]
hdl.mem: use different naming for array signals.

It looks like [] is confusing gtkwave somehow.

5 years agohdl.mem: add simulation model for memory.
whitequark [Fri, 21 Dec 2018 11:00:42 +0000 (11:00 +0000)]
hdl.mem: add simulation model for memory.

5 years agoback.pysim: fix an issue with too few funclet slots.
whitequark [Fri, 21 Dec 2018 10:25:28 +0000 (10:25 +0000)]
back.pysim: fix an issue with too few funclet slots.

5 years agohdl.mem: add tests for all error conditions.
whitequark [Fri, 21 Dec 2018 06:07:16 +0000 (06:07 +0000)]
hdl.mem: add tests for all error conditions.

5 years agohdl.mem: tie rdport.en high for asynchronous or transparent ports.
whitequark [Fri, 21 Dec 2018 04:22:16 +0000 (04:22 +0000)]
hdl.mem: tie rdport.en high for asynchronous or transparent ports.

5 years agoback.rtlil: more consistent prefixing for subfragment port wires.
whitequark [Fri, 21 Dec 2018 04:21:11 +0000 (04:21 +0000)]
back.rtlil: more consistent prefixing for subfragment port wires.

5 years agohdl.ir: correctly handle named output and inout ports.
whitequark [Fri, 21 Dec 2018 04:03:03 +0000 (04:03 +0000)]
hdl.ir: correctly handle named output and inout ports.

5 years agoback.rtlil: implement memories.
whitequark [Fri, 21 Dec 2018 01:55:59 +0000 (01:55 +0000)]
back.rtlil: implement memories.

5 years agohdl.mem: implement memories.
whitequark [Fri, 21 Dec 2018 01:53:32 +0000 (01:53 +0000)]
hdl.mem: implement memories.

5 years agoback.rtlil: explicitly pad constants with zeroes.
whitequark [Fri, 21 Dec 2018 01:51:18 +0000 (01:51 +0000)]
back.rtlil: explicitly pad constants with zeroes.

I'm not sure what exactly RTLIL does when a constant isn't as long
as its bit width, and there's no reason to keep the ambiguity.

5 years agoback.rtlil: fix translation of Cat.
whitequark [Fri, 21 Dec 2018 01:48:02 +0000 (01:48 +0000)]
back.rtlil: fix translation of Cat.

5 years agoir: allow non-Signals in Instance ports.
whitequark [Thu, 20 Dec 2018 23:38:01 +0000 (23:38 +0000)]
ir: allow non-Signals in Instance ports.

5 years agosetup: update pyvcd dependency, for var_type="string".
whitequark [Wed, 19 Dec 2018 17:17:25 +0000 (17:17 +0000)]
setup: update pyvcd dependency, for var_type="string".

5 years agocompat: import genlib.record from Migen.
whitequark [Tue, 18 Dec 2018 20:04:22 +0000 (20:04 +0000)]
compat: import genlib.record from Migen.

5 years agocompat: add wrappers for Slice.stop, Cat.l, _ArrayProxy.choices.
whitequark [Tue, 18 Dec 2018 20:02:32 +0000 (20:02 +0000)]
compat: add wrappers for Slice.stop, Cat.l, _ArrayProxy.choices.

5 years agohdl.ast: Cat.{operands→parts}
whitequark [Tue, 18 Dec 2018 19:15:44 +0000 (19:15 +0000)]
hdl.ast: Cat.{operands→parts}

5 years agoback.pysim: implement *.
whitequark [Tue, 18 Dec 2018 18:02:21 +0000 (18:02 +0000)]
back.pysim: implement *.

5 years agotest.sim: add tests for sync functionality and errors.
whitequark [Tue, 18 Dec 2018 17:53:50 +0000 (17:53 +0000)]
test.sim: add tests for sync functionality and errors.

5 years agoback.pysim: eliminate most dictionary lookups.
whitequark [Tue, 18 Dec 2018 15:28:27 +0000 (15:28 +0000)]
back.pysim: eliminate most dictionary lookups.

This makes the Glasgow testsuite about 30% faster.

5 years agohdl.ast, hdl.xfrm: various microoptimizations to speed up pysim.
whitequark [Tue, 18 Dec 2018 15:06:02 +0000 (15:06 +0000)]
hdl.ast, hdl.xfrm: various microoptimizations to speed up pysim.

5 years agoback.pysim: use arrays instead of dicts for signal values.
whitequark [Tue, 18 Dec 2018 05:19:12 +0000 (05:19 +0000)]
back.pysim: use arrays instead of dicts for signal values.

This makes the Glasgow testsuite about 40% faster.

5 years agoback.pysim: naming. NFC.
whitequark [Tue, 18 Dec 2018 04:46:36 +0000 (04:46 +0000)]
back.pysim: naming. NFC.

5 years agoback.pysim: fix an off-by-1 in add_sync_process().
whitequark [Tue, 18 Dec 2018 04:43:04 +0000 (04:43 +0000)]
back.pysim: fix an off-by-1 in add_sync_process().

5 years agoback.pysim: trigger processes waiting on Tick() exactly at clock edge.
whitequark [Tue, 18 Dec 2018 04:37:39 +0000 (04:37 +0000)]
back.pysim: trigger processes waiting on Tick() exactly at clock edge.

5 years agoback.pysim: continue running simulator processes until they suspend.
whitequark [Tue, 18 Dec 2018 03:05:16 +0000 (03:05 +0000)]
back.pysim: continue running simulator processes until they suspend.

5 years agoTravis: cache Yosys installation explicitly.
whitequark [Mon, 17 Dec 2018 23:46:46 +0000 (23:46 +0000)]
Travis: cache Yosys installation explicitly.

5 years agofhdl.ir: add black-box fragments, fragment parameters, and Instance.
whitequark [Mon, 17 Dec 2018 22:55:30 +0000 (22:55 +0000)]
fhdl.ir: add black-box fragments, fragment parameters, and Instance.

5 years agoTravis: build and cache Yosys.
whitequark [Mon, 17 Dec 2018 15:51:55 +0000 (15:51 +0000)]
Travis: build and cache Yosys.

5 years agohdl, back: add and use SignalSet/SignalDict.
whitequark [Mon, 17 Dec 2018 17:21:12 +0000 (17:21 +0000)]
hdl, back: add and use SignalSet/SignalDict.

5 years agohdl.ast: factor out _MappedKeyDict, _MappedKeySet. NFC.
whitequark [Mon, 17 Dec 2018 17:13:08 +0000 (17:13 +0000)]
hdl.ast: factor out _MappedKeyDict, _MappedKeySet. NFC.

5 years agoback.rtlil: update for Yosys master.
whitequark [Mon, 17 Dec 2018 15:50:43 +0000 (15:50 +0000)]
back.rtlil: update for Yosys master.

5 years agoback.rtlil: implement Array.
whitequark [Mon, 17 Dec 2018 01:15:23 +0000 (01:15 +0000)]
back.rtlil: implement Array.

5 years agoback.rtlil: implement Part.
whitequark [Mon, 17 Dec 2018 01:05:08 +0000 (01:05 +0000)]
back.rtlil: implement Part.

5 years agoback.rtlil: handle reset_less domains.
whitequark [Sun, 16 Dec 2018 23:52:47 +0000 (23:52 +0000)]
back.rtlil: handle reset_less domains.

5 years agohdl.dsl: add clock domain support.
whitequark [Sun, 16 Dec 2018 23:51:24 +0000 (23:51 +0000)]
hdl.dsl: add clock domain support.

5 years agohdl.dsl: cleanup. NFC.
whitequark [Sun, 16 Dec 2018 23:44:00 +0000 (23:44 +0000)]
hdl.dsl: cleanup. NFC.

5 years agoback.rtlil: extract _StatementCompiler. NFC.
whitequark [Sun, 16 Dec 2018 22:26:58 +0000 (22:26 +0000)]
back.rtlil: extract _StatementCompiler. NFC.

5 years agoback.rtlil: simplify. NFC.
whitequark [Sun, 16 Dec 2018 21:00:00 +0000 (21:00 +0000)]
back.rtlil: simplify. NFC.

5 years agoback.rtlil: properly escape strings in attributes.
whitequark [Sun, 16 Dec 2018 20:27:15 +0000 (20:27 +0000)]
back.rtlil: properly escape strings in attributes.

5 years agoREADME: mention Yosys requirement.
whitequark [Sun, 16 Dec 2018 18:09:01 +0000 (18:09 +0000)]
README: mention Yosys requirement.

5 years agoback.rtlil: prepare for Yosys sigspec slicing improvements.
whitequark [Sun, 16 Dec 2018 18:03:14 +0000 (18:03 +0000)]
back.rtlil: prepare for Yosys sigspec slicing improvements.

See YosysHQ/yosys#741.

5 years agocompat.fhdl.structure: only convert to bool in If/Elif if necessary.
whitequark [Sun, 16 Dec 2018 17:41:42 +0000 (17:41 +0000)]
compat.fhdl.structure: only convert to bool in If/Elif if necessary.

5 years agoback.rtlil: avoid illegal slices.
whitequark [Sun, 16 Dec 2018 17:41:11 +0000 (17:41 +0000)]
back.rtlil: avoid illegal slices.

Not sure what to do with {} [] on LHS yet--fix Yosys?

5 years agoback.rtlil: use slicing to match shape when reducing width.
whitequark [Sun, 16 Dec 2018 16:20:45 +0000 (16:20 +0000)]
back.rtlil: use slicing to match shape when reducing width.

5 years agoback.rtlil: don't emit a slice if all bits are used.
whitequark [Sun, 16 Dec 2018 16:05:38 +0000 (16:05 +0000)]
back.rtlil: don't emit a slice if all bits are used.

5 years agoback.rtlil: reorganize value compiler into LHS/RHS.
whitequark [Sun, 16 Dec 2018 13:30:20 +0000 (13:30 +0000)]
back.rtlil: reorganize value compiler into LHS/RHS.

This also implements Cat on LHS.

5 years agoback.rtlil: fix naming. NFC.
whitequark [Sun, 16 Dec 2018 11:26:31 +0000 (11:26 +0000)]
back.rtlil: fix naming. NFC.

5 years agohdl.xfrm: separate AST traversal from AST identity mapping.
whitequark [Sun, 16 Dec 2018 11:24:23 +0000 (11:24 +0000)]
hdl.xfrm: separate AST traversal from AST identity mapping.

This is useful because backends don't generally want or need AST
identity mapping (unlike all other transforms) and when adding a new
node, it results in confusing type errors.

5 years agocompat.fhdl: reexport Array.
whitequark [Sun, 16 Dec 2018 10:38:25 +0000 (10:38 +0000)]
compat.fhdl: reexport Array.

5 years agoback.pysim: implement LHS for Part, Slice, Cat, ArrayProxy.
whitequark [Sun, 16 Dec 2018 10:31:42 +0000 (10:31 +0000)]
back.pysim: implement LHS for Part, Slice, Cat, ArrayProxy.

5 years agotest.sim: generalize assertOperator. NFC.
whitequark [Sat, 15 Dec 2018 21:08:29 +0000 (21:08 +0000)]
test.sim: generalize assertOperator. NFC.

5 years agoback.pysim: add (stub) LHSValueCompiler.
whitequark [Sat, 15 Dec 2018 21:01:38 +0000 (21:01 +0000)]
back.pysim: add (stub) LHSValueCompiler.

5 years agoback.pysim: implement Part.
whitequark [Sat, 15 Dec 2018 20:58:06 +0000 (20:58 +0000)]
back.pysim: implement Part.

5 years agoexamples: rename clkdiv/ctrl to ctr/ctr_ce.
whitequark [Sat, 15 Dec 2018 20:42:52 +0000 (20:42 +0000)]
examples: rename clkdiv/ctrl to ctr/ctr_ce.

5 years agodoc: update COMPAT_SUMMARY.
whitequark [Sat, 15 Dec 2018 20:40:51 +0000 (20:40 +0000)]
doc: update COMPAT_SUMMARY.

5 years agoback.pysim: implement ArrayProxy.
whitequark [Sat, 15 Dec 2018 19:37:36 +0000 (19:37 +0000)]
back.pysim: implement ArrayProxy.

5 years agohdl.ast: implement Array and ArrayProxy.
whitequark [Sat, 15 Dec 2018 17:16:22 +0000 (17:16 +0000)]
hdl.ast: implement Array and ArrayProxy.

5 years agoLower Python version requirement to 3.6.
whitequark [Sat, 15 Dec 2018 17:03:23 +0000 (17:03 +0000)]
Lower Python version requirement to 3.6.

5 years agohdl: appropriately rename tests. NFC.
whitequark [Sat, 15 Dec 2018 16:13:53 +0000 (16:13 +0000)]
hdl: appropriately rename tests. NFC.

5 years agohdl.ast: improve ClockSignal, ResetSignal documentation.
whitequark [Sat, 15 Dec 2018 14:58:31 +0000 (14:58 +0000)]
hdl.ast: improve ClockSignal, ResetSignal documentation.

5 years agoRename fhdl→hdl, genlib→lib.
whitequark [Sat, 15 Dec 2018 14:23:42 +0000 (14:23 +0000)]
Rename fhdl→hdl, genlib→lib.

5 years agoMove star imports to make `from nmigen import *` usable.
whitequark [Sat, 15 Dec 2018 14:20:10 +0000 (14:20 +0000)]
Move star imports to make `from nmigen import *` usable.

5 years agodoc: fix some Markdown awkwardness.
whitequark [Sat, 15 Dec 2018 12:07:56 +0000 (12:07 +0000)]
doc: fix some Markdown awkwardness.

5 years agodoc: update COMPAT_SUMMARY to reflect actual status.
whitequark [Sat, 15 Dec 2018 12:04:52 +0000 (12:04 +0000)]
doc: update COMPAT_SUMMARY to reflect actual status.

5 years agoDetermine Migen's API surface and document compatibility summary.
whitequark [Sat, 15 Dec 2018 11:51:09 +0000 (11:51 +0000)]
Determine Migen's API surface and document compatibility summary.

This also reorganizes README to more clearly describe what nMigen is,
since it was getting quite outdated.

5 years agopyback.sim: test Slice, Cat, Repl.
whitequark [Sat, 15 Dec 2018 10:09:14 +0000 (10:09 +0000)]
pyback.sim: test Slice, Cat, Repl.

5 years agofhdl.ast, back.pysim: implement shifts.
whitequark [Sat, 15 Dec 2018 09:58:30 +0000 (09:58 +0000)]
fhdl.ast, back.pysim: implement shifts.

5 years agofhdl.ast: refactor Operator.shape(). NFC.
whitequark [Sat, 15 Dec 2018 09:46:20 +0000 (09:46 +0000)]
fhdl.ast: refactor Operator.shape(). NFC.

5 years agoConsistently use '{!r}' in and only in TypeError messages.
whitequark [Sat, 15 Dec 2018 09:31:58 +0000 (09:31 +0000)]
Consistently use '{!r}' in and only in TypeError messages.

5 years agofhdl.ir: test iter_comb(), iter_sync() and iter_signals().
whitequark [Sat, 15 Dec 2018 09:26:36 +0000 (09:26 +0000)]
fhdl.ir: test iter_comb(), iter_sync() and iter_signals().

5 years agofhdl.ir: fix incorrect uses of positive to say non-negative.
whitequark [Sat, 15 Dec 2018 09:19:26 +0000 (09:19 +0000)]
fhdl.ir: fix incorrect uses of positive to say non-negative.

Also test Part and Slice properly.

5 years agocompat.fhdl.structure: handle If/Elif with multi-bit condition.
whitequark [Sat, 15 Dec 2018 00:10:54 +0000 (00:10 +0000)]
compat.fhdl.structure: handle If/Elif with multi-bit condition.

5 years agocompat.fhdl.module: allow adding native submodules to compat modules.
whitequark [Fri, 14 Dec 2018 23:40:15 +0000 (23:40 +0000)]
compat.fhdl.module: allow adding native submodules to compat modules.

5 years agoFix deprecations in Python 3.7.
whitequark [Fri, 14 Dec 2018 23:56:26 +0000 (23:56 +0000)]
Fix deprecations in Python 3.7.

5 years agoback.pysim: preserve process locations through add_sync_process().
whitequark [Fri, 14 Dec 2018 23:27:36 +0000 (23:27 +0000)]
back.pysim: preserve process locations through add_sync_process().

5 years agofhdl.ast: clean up stub error messages. NFC.
whitequark [Fri, 14 Dec 2018 22:54:07 +0000 (22:54 +0000)]
fhdl.ast: clean up stub error messages. NFC.

5 years agofhdl.ir: automatically flatten hierarchy to resolve driver conflicts.
whitequark [Fri, 14 Dec 2018 22:47:58 +0000 (22:47 +0000)]
fhdl.ir: automatically flatten hierarchy to resolve driver conflicts.

Fixes #5.

5 years agofhdl.ir: Fragment.{drive→add_driver}
whitequark [Fri, 14 Dec 2018 20:58:29 +0000 (20:58 +0000)]
fhdl.ir: Fragment.{drive→add_driver}

5 years agoback.pysim: count delta cycles separately to avoid clock drift.
whitequark [Fri, 14 Dec 2018 20:52:41 +0000 (20:52 +0000)]
back.pysim: count delta cycles separately to avoid clock drift.

5 years agoback.pysim: simplify.
whitequark [Fri, 14 Dec 2018 20:26:52 +0000 (20:26 +0000)]
back.pysim: simplify.

5 years agoback.pysim: revert 70ebc6f2.
whitequark [Fri, 14 Dec 2018 19:46:08 +0000 (19:46 +0000)]
back.pysim: revert 70ebc6f2.

5 years agoback.pysim: fix implicit boolean conversion.
whitequark [Fri, 14 Dec 2018 19:08:06 +0000 (19:08 +0000)]
back.pysim: fix implicit boolean conversion.