From 3b3a852229822827883d729d6d1c86faae793fba Mon Sep 17 00:00:00 2001 From: whitequark Date: Sat, 15 Dec 2018 11:51:09 +0000 Subject: [PATCH] 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. --- README.md | 292 ++++++-------------------------------- doc/COMPAT_SUMMARY.md | 190 +++++++++++++++++++++++++ doc/PROPOSAL.md | 241 +++++++++++++++++++++++++++++++ doc/nmigen_logo.png | Bin 0 -> 74931 bytes doc/nmigen_logo.svg | 224 +++++++++++++++++++++++++++++ doc/nmigen_logo_white.png | Bin 0 -> 37225 bytes nmigen/fhdl/cd.py | 8 +- 7 files changed, 700 insertions(+), 255 deletions(-) create mode 100644 doc/COMPAT_SUMMARY.md create mode 100644 doc/PROPOSAL.md create mode 100644 doc/nmigen_logo.png create mode 100644 doc/nmigen_logo.svg create mode 100644 doc/nmigen_logo_white.png diff --git a/README.md b/README.md index 722c039..418a7cf 100644 --- a/README.md +++ b/README.md @@ -1,251 +1,41 @@ -This repository contains a proposal for the design of nMigen in form of an implementation. This implementation deviates from the existing design of Migen by making several observations of its drawbacks: - - * Migen is strongly tailored towards Verilog, yet translation of Migen to Verilog is not straightforward, leaves much semantics implicit (e.g. signedness, width extension, combinatorial assignments, sub-signal assignments...); - * Hierarchical designs are useful for floorplanning and optimization, yet Migen does not support them at all; - * Migen's syntax is not easily composable, and something like an FSM requires extending Migen's syntax in non-orthogonal ways; - * Migen reimplements a lot of mature open-source tooling, such as conversion of RTL to Verilog (Yosys' Verilog backend), or simulation (Icarus Verilog, Verilator, etc.), and often lacks in features, speed, or corner case handling. - * Migen requires awkward specials for some FPGA features such as asynchronous resets. - -It also observes that Yosys' intermediate language, RTLIL, is an ideal target for Migen-style logic, as conversion of FHDL to RTLIL is essentially a 1:1 translation, with the exception of the related issues of naming and hierarchy. - -This proposal makes several major changes to Migen that hopefully solve all of these drawbacks: - - * nMigen changes FHDL's internal representation to closely match that of RTLIL; - * nMigen outputs RTLIL and relies on Yosys for conversion to Verilog, EDIF, etc; - * nMigen uses an exact mapping between FHDL signals and RTLIL names to off-load logic simulation to Icarus Verilog, Verilator, etc; - * nMigen uses an uniform, composable Python eHDL; - * nMigen outputs hierarchical RTLIL, automatically threading signals through the hierarchy; - * nMigen supports asynchronous reset directly; - * nMigen makes driving a signal from multiple clock domains a precise, hard error. - -This proposal keeps in mind but does not make the following major changes: - - * nMigen could be easily modified to flatten the hierarchy if a signal is driven simultaneously from multiple modules; - * nMigen could be easily modified to support `x` values (invalid / don't care) by relying on RTLIL's ability to directly represent them; - * nMigen could be easily modified to support negative edge triggered flip-flops by relying on RTLIL's ability to directly represent them; - * nMigen could be easily modified to track Python source locations of primitives and export them to RTLIL/Verilog through the `src` attribute, displaying the Python source locations in timing reports directly. - -This proposal also makes the following simplifications: - * Specials are eliminated. Primitives such as memory ports are represented directly, and primitives such as tristate buffers are lowered to a selectable implementation via ordinary dependency injection (`f.submodules += platform.get_tristate(triple, io)`). - -The internals of nMigen in this proposal are cleaned up, yet they are kept sufficiently close to Migen that \~all Migen code should be possible to run directly on nMigen using a syntactic compatibility layer. - -FHDL features currently missing from this implementation: - * self.clock_domains += - * Array - * Memory - * Tristate, TSTriple - * Instance - * FSM - * transformers: SplitMemory, FullMemoryWE - * transformers: ClockDomainsRenamer - -`migen.genlib`, `migen.sim` and `migen.build` are missing completely. - -One might reasonably expect that a roundtrip through RTLIL would result in unreadable Verilog. -However, this is not the case, e.g. consider the examples: - -
-alu.v - -```verilog -module \$1 (co, sel, a, b, o); - wire [17:0] _04_; - input [15:0] a; - input [15:0] b; - output co; - reg \co$next ; - output [15:0] o; - reg [15:0] \o$next ; - input [1:0] sel; - assign _04_ = $signed(+ a) + $signed(- b); - always @* begin - \o$next = 16'h0000; - \co$next = 1'h0; - casez ({ 1'h1, sel == 2'h2, sel == 1'h1, sel == 0'b0 }) - 4'bzzz1: - \o$next = a | b; - 4'bzz1z: - \o$next = a & b; - 4'bz1zz: - \o$next = a ^ b; - 4'b1zzz: - { \co$next , \o$next } = _04_[16:0]; - endcase - end - assign o = \o$next ; - assign co = \co$next ; -endmodule -``` -
- -
-alu_hier.v - -```verilog -module add(b, o, a); - wire [16:0] _0_; - input [15:0] a; - input [15:0] b; - output [15:0] o; - reg [15:0] \o$next ; - assign _0_ = a + b; - always @* begin - \o$next = 16'h0000; - \o$next = _0_[15:0]; - end - assign o = \o$next ; -endmodule - -module sub(b, o, a); - wire [16:0] _0_; - input [15:0] a; - input [15:0] b; - output [15:0] o; - reg [15:0] \o$next ; - assign _0_ = a - b; - always @* begin - \o$next = 16'h0000; - \o$next = _0_[15:0]; - end - assign o = \o$next ; -endmodule - -module top(a, b, o, add_o, sub_o, op); - input [15:0] a; - wire [15:0] add_a; - reg [15:0] \add_a$next ; - wire [15:0] add_b; - reg [15:0] \add_b$next ; - input [15:0] add_o; - input [15:0] b; - output [15:0] o; - reg [15:0] \o$next ; - input op; - wire [15:0] sub_a; - reg [15:0] \sub_a$next ; - wire [15:0] sub_b; - reg [15:0] \sub_b$next ; - input [15:0] sub_o; - add add ( - .a(add_a), - .b(add_b), - .o(add_o) - ); - sub sub ( - .a(sub_a), - .b(sub_b), - .o(sub_o) - ); - always @* begin - \o$next = 16'h0000; - \add_a$next = 16'h0000; - \add_b$next = 16'h0000; - \sub_a$next = 16'h0000; - \sub_b$next = 16'h0000; - \add_a$next = a; - \sub_a$next = a; - \add_b$next = b; - \sub_b$next = b; - casez ({ 1'h1, op }) - 2'bz1: - \o$next = sub_o; - 2'b1z: - \o$next = add_o; - endcase - end - assign o = \o$next ; - assign add_a = \add_a$next ; - assign add_b = \add_b$next ; - assign sub_a = \sub_a$next ; - assign sub_b = \sub_b$next ; -endmodule -``` -
-
-clkdiv.v - -```verilog -module \$1 (sys_clk, o); - wire [16:0] _0_; - output o; - reg \o$next ; - input sys_clk; - wire sys_rst; - (* init = 16'hffff *) - reg [15:0] v = 16'hffff; - reg [15:0] \v$next ; - assign _0_ = v + 1'h1; - always @(posedge sys_clk) - v <= \v$next ; - always @* begin - \o$next = 1'h0; - \v$next = _0_[15:0]; - \o$next = v[15]; - casez (sys_rst) - 1'h1: - \v$next = 16'hffff; - endcase - end - assign o = \o$next ; -endmodule -``` -
- -
-arst.v - -```verilog -module \$1 (o, sys_clk, sys_rst); - wire [16:0] _0_; - output o; - reg \o$next ; - input sys_clk; - input sys_rst; - (* init = 16'h0000 *) - reg [15:0] v = 16'h0000; - reg [15:0] \v$next ; - assign _0_ = v + 1'h1; - always @(posedge sys_clk or posedge sys_rst) - if (sys_rst) - v <= 16'h0000; - else - v <= \v$next ; - always @* begin - \o$next = 1'h0; - \v$next = _0_[15:0]; - \o$next = v[15]; - end - assign o = \o$next ; -endmodule -``` -
- -
-pmux.v - -```verilog -module \$1 (c, o, s, a, b); - input [15:0] a; - input [15:0] b; - input [15:0] c; - output [15:0] o; - reg [15:0] \o$next ; - input [2:0] s; - always @* begin - \o$next = 16'h0000; - casez (s) - 3'bzz1: - \o$next = a; - 3'bz1z: - \o$next = b; - 3'b1zz: - \o$next = c; - 3'hz: - \o$next = 16'h0000; - endcase - end - assign o = \o$next ; -endmodule -``` -
+# nMigen + +## A refreshed Python toolbox for building complex digital hardware + +**nMigen is incomplete and undergoes rapid development. The nMigen documentation refers to features that may not be implemented yet and compatibility guarantees that may not hold yet. Use at your own risk.** + +Despite being faster than schematics entry, hardware design with Verilog and VHDL remains tedious and inefficient for several reasons. The event-driven model introduces issues and manual coding that are unnecessary for synchronous circuits, which represent the lion's share of today's logic designs. Counterintuitive arithmetic rules result in steeper learning curves and provide a fertile ground for subtle bugs in designs. Finally, support for procedural generation of logic (metaprogramming) through "generate" statements is very limited and restricts the ways code can be made generic, reused and organized. + +To address those issues, we have developed the *nMigen FHDL*, a library that replaces the event-driven paradigm with the notions of combinatorial and synchronous statements, has arithmetic rules that make integers always behave like mathematical integers, and most importantly allows the design's logic to be constructed by a Python program. This last point enables hardware designers to take advantage of the richness of the Python language—object oriented programming, function parameters, generators, operator overloading, libraries, etc.—to build well organized, reusable and elegant designs. + +Other nMigen libraries are built on FHDL and provide various tools such as a system-on-chip interconnect infrastructure, a dataflow programming system, a more traditional high-level synthesizer that compiles Python routines into state machines with datapaths, and a simulator that allows test benches to be written in Python. + +See the [doc/](doc/) folder for more technical information. + +nMigen is a direct descendant of [Migen](https://m-labs.hk/migen) rewritten from scratch to address many issues that became clear in the many years Migen has been used in production. nMigen provides an extensive compatibility layer that makes it possible to build and simulate most Migen designs unmodified, as well as integrate modules written for Migen and nMigen. + +nMigen is designed for Python 3.7 and newer. Note that nMigen is **not** spelled nMiGen. + +### Introduction + +TBD + +### Links + +TBD + +### License + +nMigen is released under the very permissive two-clause BSD license. Under the terms of this license, you are authorized to use nMigen for closed-source proprietary designs. + +Even though we do not require you to do so, these things are awesome, so please do them if possible: + * tell us that you are using nMigen + * put the [nMigen logo](doc/nmigen_logo.svg) on the page of a product using it, with a link to https://m-labs.hk + * cite nMigen in publications related to research it has helped + * send us feedback and suggestions for improvements + * send us bug reports when something goes wrong + * send us the modifications and improvements you have done to nMigen as pull requests on GitHub + +See LICENSE file for full copyright and license info. + + "Electricity! It's like magic!" diff --git a/doc/COMPAT_SUMMARY.md b/doc/COMPAT_SUMMARY.md new file mode 100644 index 0000000..2c7051e --- /dev/null +++ b/doc/COMPAT_SUMMARY.md @@ -0,0 +1,190 @@ +Migen and nMigen compatibility summary +====================================== + +nMigen intends to provide as close to 100% compatibility to Migen as possible without compromising its other goals. However, Migen widely uses `*` imports, tends to expose implementation details, and in general does not have a well-defined interface. This document attempts to elucidate a well-defined Migen API surface (including, when necessary, private items that have been used downstream), and describes the intended nMigen replacements and their implementation status. + +API change legend: + - *id*: identical + - *obs*: removed or irreversibly changed with compatibility stub provided + - *obs →n*: removed or irreversibly changed with compatibility stub provided, use *n* instead + - *brk*: removed or irreversibly changed with no replacement provided + - *brk →n*: removed or irreversibly changed with no replacement provided, use *n* instead + - *→n*: renamed to *n* + - *⇒m*: merged into *m* + - *a=→b=*: parameter *a* renamed to *b* + - *a=∼*: parameter *a* removed + - *.a=→.b*: attribute *a* renamed to *b* + - *?*: no decision made yet + +When describing renames or replacements, `mod` refers to a 3rd-party package `mod` (no nMigen implementation provided), `.mod.item` refers to `nmigen.mod.item`, and "(import `.item`)" means that, while `item` is provided under `nmigen.mod.item`, it is aliased to, and should be imported from a shorter path for readability. + +Status legend: + - (×) Intended replacement (the API is decided on) + - (−) Implemented replacement (the API and compatibility shim are provided) + - (+) Verified replacement and/or compatibility shim (the compatibility shim is manually reviewed and has 100% coverage) + - (∼) No direct replacement or compatibility shim is provided + +Compatibility summary +--------------------- + + - (×) `fhdl` + - (×) `bitcontainer` ⇒ `.tools` + - (×) `log2_int` id + - (×) `bits_for` id + - (×) `value_bits_sign` → `Value.shape` + - (×) `conv_output` ? + - (×) `decorators` ⇒ `.fhdl.xfrm` + Note: `transform_*` methods not considered part of public API. + - (∼) `ModuleTransformer` **brk** + - (∼) `ControlInserter` **brk** + - (×) `CEInserter` id, `clock_domains=`→`controls=` + - (×) `ResetInserter` id, `clock_domains=`→`controls=` + - (×) `ClockDomainsRenamer` → `DomainRenamer`, `cd_remapping=`→`domain_map=` + - (∼) `edif` **brk** + - (×) `module` **obs** → `.fhdl.dsl` + - (×) `FinalizeError` **obs** + - (×) `Module` **obs** → `.fhdl.dsl.Module` + - (∼) `namer` **brk** + - (×) `simplify` ? + - (×) `FullMemoryWE` ? + - (×) `MemoryToArray` ? + - (×) `SplitMemory` ? + - (×) `specials` **obs** + - (×) `Special` ? + - (×) `Tristate` ? + - (×) `TSTriple` → `.genlib.io.TSTriple`, `bits_sign=`→`shape=` + - (×) `Instance` ? + - (×) `READ_FIRST`/`WRITE_FIRST`/`NO_CHANGE` ? + - (×) `_MemoryPort` ? + - (×) `Memory` ? + - (×) `structure` → `.fhdl.ast` + - (×) `DUID` id + - (×) `_Value` → `Value` + Note: values no longer valid as keys in `dict` and `set`; use `ValueDict` and `ValueSet` instead. + - (×) `wrap` → `Value.wrap` + - (×) `_Operator` → `Operator` + - (×) `Mux` → `Mux` + - (×) `_Slice` → `Slice`, `stop=`→`end=`, `.stop`→`.end` + - (×) `_Part` → `Part` + - (×) `Cat` id, `.l`→`.operands` + - (×) `Replicate` → `Repl`, `v=`→`value=`, `n=`→`count=`, `.v`→`.value`, `.n`→`.count` + - (×) `Constant` → `Const`, `bits_sign=`→`shape=` + - (×) `Signal` id, `bits_sign=`→`shape=`, `attr=`→`attrs=`, `name_override=`∼, `related=`, `variable=`∼ + - (×) `ClockSignal` id, `cd=`→`domain=` + - (×) `ResetSignal` id, `cd=`→`domain=` + - (×) `_Statement` → `Statement` + - (×) `_Assign` → `Assign`, `l=`→`lhs=`, `r=`→`rhs=` + - (×) `_check_statement` **obs** → `Statement.wrap` + - (×) `If` **obs** → `.fhdl.dsl.Module.If` + - (×) `Case` **obs** → `.fhdl.dsl.Module.Switch` + - (×) `_ArrayProxy` ? + - (×) `Array` ? + - (×) `ClockDomain` → `.fhdl.cd.ClockDomain` + - (×) `_ClockDomainList` ? + - (×) `SPECIAL_INPUT`/`SPECIAL_OUTPUT`/`SPECIAL_INOUT` ? + - (∼) `_Fragment` **brk** → `.fhdl.ir.Fragment` + - (×) `tools` **brk** + - (×) `list_signals` ? + - (×) `list_targets` ? + - (×) `list_inputs` ? + - (×) `group_by_targets` ? + - (∼) `list_special_ios` **brk** + - (∼) `list_clock_domains_expr` **brk** + - (×) `list_clock_domains` ? + - (×) `is_variable` ? + - (∼) `generate_reset` **brk** + - (∼) `insert_reset` **brk** + - (∼) `insert_resets` **brk** → `.fhdl.xfrm.ResetInserter` + - (∼) `lower_basics` **brk** + - (∼) `lower_complex_slices` **brk** + - (∼) `lower_complex_parts` **brk** + - (∼) `rename_clock_domain_expr` **brk** + - (∼) `rename_clock_domain` **brk** → `.fhdl.xfrm.DomainRenamer` + - (∼) `call_special_classmethod` **brk** + - (∼) `lower_specials` **brk** + - (×) `tracer` **brk** + - (×) `get_var_name` ? + - (×) `remove_underscore` ? + - (×) `get_obj_var_name` ? + - (×) `index_id` ? + - (×) `trace_back` ? + - (×) `verilog` + - (×) `DummyAttrTranslate` ? + - (×) `convert` **obs** → `.back.verilog.convert` + - (∼) `visit` **brk** → `.fhdl.xfrm` + - (∼) `NodeVisitor` **brk** + - (∼) `NodeTransformer` **brk** → `.fhdl.xfrm.ValueTransformer`/`.fhdl.xfrm.StatementTransformer` + - (×) `genlib` + - (×) `cdc` ? + - (×) `MultiRegImpl` ? + - (×) `MultiReg` id + - (×) `PulseSynchronizer` ? + - (×) `BusSynchronizer` ? + - (×) `GrayCounter` ? + - (×) `GrayDecoder` ? + - (×) `ElasticBuffer` ? + - (×) `lcm` ? + - (×) `Gearbox` ? + - (×) `coding` ? + - (×) `Encoder` ? + - (×) `PriorityEncoder` ? + - (×) `Decoder` ? + - (×) `PriorityDecoder` ? + - (×) `divider` ? + - (×) `Divider` + - (×) `fifo` ? + - (×) `SyncFIFO` ? + - (×) `SyncFIFOBuffered` ? + - (×) `AsyncFIFO` ? + - (×) `AsyncFIFOBuffered` ? + - (×) `_FIFOInterface` ? + - (×) `fsm` **obs** + - (×) `AnonymousState` **obs** + - (×) `NextState` **obs** + - (×) `NextValue` **obs** + - (×) `_LowerNext` **obs** + - (×) `FSM` **obs** + - (×) `io` ? + - (×) `DifferentialInput` ? + - (×) `DifferentialOutput` ? + - (×) `CRG` ? + - (×) `DDRInput` ? + - (×) `DDROutput` ? + - (×) `misc` ? + - (×) `split` ? + - (×) `displacer` ? + - (×) `chooser` ? + - (×) `timeline` ? + - (×) `WaitTimer` ? + - (×) `BitSlip` ? + - (×) `record` ? + - (×) `DIR_NONE` ? + - (×) `DIR_S_TO_M` ? + - (×) `DIR_M_TO_S` ? + - (×) `set_layout_parameters` ? + - (×) `layout_len` ? + - (×) `layout_get` ? + - (×) `layout_partial` ? + - (×) `Record` ? + - (×) `resetsync` ? + - (×) `AsyncResetSynchronizer` ? + - (×) `roundrobin` ? + - (×) `SP_WITHDRAW` ? + - (×) `SP_CE` ? + - (×) `RoundRobin` ? + - (×) `sort` ? + - (×) `BitonicSort` ? + - (×) `sim` **obs** → `.back.pysim` + - (∼) `core` **brk** + - (∼) `vcd` **brk** → `vcd` + Note: only items directly under `nmigen.compat.sim`, not submodules, are provided. + - (×) `Simulator` **brk** + - (×) `run_simulation` **obs** → `.back.pysim.Simulator` + - (×) `passive` **obs** → `.fhdl.ast.Passive` + - (×) `build` ? + - (×) `util` **obs** + - (×) `misc` ⇒ `.tools` + - (×) `flat_iteration` → `.flatten` + - (∼) `xdir` **brk** + - (∼) `gcd_multiple` **brk** + - (∼) `treeviz` **brk** diff --git a/doc/PROPOSAL.md b/doc/PROPOSAL.md new file mode 100644 index 0000000..91b8555 --- /dev/null +++ b/doc/PROPOSAL.md @@ -0,0 +1,241 @@ +*The text below is the original nMigen implementation proposal. It is provided for illustrative and historical purposes only.* + +This repository contains a proposal for the design of nMigen in form of an implementation. This implementation deviates from the existing design of Migen by making several observations of its drawbacks: + + * Migen is strongly tailored towards Verilog, yet translation of Migen to Verilog is not straightforward, leaves much semantics implicit (e.g. signedness, width extension, combinatorial assignments, sub-signal assignments...); + * Hierarchical designs are useful for floorplanning and optimization, yet Migen does not support them at all; + * Migen's syntax is not easily composable, and something like an FSM requires extending Migen's syntax in non-orthogonal ways; + * Migen reimplements a lot of mature open-source tooling, such as conversion of RTL to Verilog (Yosys' Verilog backend), or simulation (Icarus Verilog, Verilator, etc.), and often lacks in features, speed, or corner case handling. + * Migen requires awkward specials for some FPGA features such as asynchronous resets. + +It also observes that Yosys' intermediate language, RTLIL, is an ideal target for Migen-style logic, as conversion of FHDL to RTLIL is essentially a 1:1 translation, with the exception of the related issues of naming and hierarchy. + +This proposal makes several major changes to Migen that hopefully solve all of these drawbacks: + + * nMigen changes FHDL's internal representation to closely match that of RTLIL; + * nMigen outputs RTLIL and relies on Yosys for conversion to Verilog, EDIF, etc; + * nMigen uses an exact mapping between FHDL signals and RTLIL names to off-load logic simulation to Icarus Verilog, Verilator, etc; + * nMigen uses an uniform, composable Python eHDL; + * nMigen outputs hierarchical RTLIL, automatically threading signals through the hierarchy; + * nMigen supports asynchronous reset directly; + * nMigen makes driving a signal from multiple clock domains a precise, hard error. + +This proposal keeps in mind but does not make the following major changes: + + * nMigen could be easily modified to flatten the hierarchy if a signal is driven simultaneously from multiple modules; + * nMigen could be easily modified to support `x` values (invalid / don't care) by relying on RTLIL's ability to directly represent them; + * nMigen could be easily modified to support negative edge triggered flip-flops by relying on RTLIL's ability to directly represent them; + * nMigen could be easily modified to track Python source locations of primitives and export them to RTLIL/Verilog through the `src` attribute, displaying the Python source locations in timing reports directly. + +This proposal also makes the following simplifications: + * Specials are eliminated. Primitives such as memory ports are represented directly, and primitives such as tristate buffers are lowered to a selectable implementation via ordinary dependency injection (`f.submodules += platform.get_tristate(triple, io)`). + +The internals of nMigen in this proposal are cleaned up, yet they are kept sufficiently close to Migen that \~all Migen code should be possible to run directly on nMigen using a syntactic compatibility layer. + +One might reasonably expect that a roundtrip through RTLIL would result in unreadable Verilog. +However, this is not the case, e.g. consider the examples: + +
+alu.v + +```verilog +module \$1 (co, sel, a, b, o); + wire [17:0] _04_; + input [15:0] a; + input [15:0] b; + output co; + reg \co$next ; + output [15:0] o; + reg [15:0] \o$next ; + input [1:0] sel; + assign _04_ = $signed(+ a) + $signed(- b); + always @* begin + \o$next = 16'h0000; + \co$next = 1'h0; + casez ({ 1'h1, sel == 2'h2, sel == 1'h1, sel == 0'b0 }) + 4'bzzz1: + \o$next = a | b; + 4'bzz1z: + \o$next = a & b; + 4'bz1zz: + \o$next = a ^ b; + 4'b1zzz: + { \co$next , \o$next } = _04_[16:0]; + endcase + end + assign o = \o$next ; + assign co = \co$next ; +endmodule +``` +
+ +
+alu_hier.v + +```verilog +module add(b, o, a); + wire [16:0] _0_; + input [15:0] a; + input [15:0] b; + output [15:0] o; + reg [15:0] \o$next ; + assign _0_ = a + b; + always @* begin + \o$next = 16'h0000; + \o$next = _0_[15:0]; + end + assign o = \o$next ; +endmodule + +module sub(b, o, a); + wire [16:0] _0_; + input [15:0] a; + input [15:0] b; + output [15:0] o; + reg [15:0] \o$next ; + assign _0_ = a - b; + always @* begin + \o$next = 16'h0000; + \o$next = _0_[15:0]; + end + assign o = \o$next ; +endmodule + +module top(a, b, o, add_o, sub_o, op); + input [15:0] a; + wire [15:0] add_a; + reg [15:0] \add_a$next ; + wire [15:0] add_b; + reg [15:0] \add_b$next ; + input [15:0] add_o; + input [15:0] b; + output [15:0] o; + reg [15:0] \o$next ; + input op; + wire [15:0] sub_a; + reg [15:0] \sub_a$next ; + wire [15:0] sub_b; + reg [15:0] \sub_b$next ; + input [15:0] sub_o; + add add ( + .a(add_a), + .b(add_b), + .o(add_o) + ); + sub sub ( + .a(sub_a), + .b(sub_b), + .o(sub_o) + ); + always @* begin + \o$next = 16'h0000; + \add_a$next = 16'h0000; + \add_b$next = 16'h0000; + \sub_a$next = 16'h0000; + \sub_b$next = 16'h0000; + \add_a$next = a; + \sub_a$next = a; + \add_b$next = b; + \sub_b$next = b; + casez ({ 1'h1, op }) + 2'bz1: + \o$next = sub_o; + 2'b1z: + \o$next = add_o; + endcase + end + assign o = \o$next ; + assign add_a = \add_a$next ; + assign add_b = \add_b$next ; + assign sub_a = \sub_a$next ; + assign sub_b = \sub_b$next ; +endmodule +``` +
+
+clkdiv.v + +```verilog +module \$1 (sys_clk, o); + wire [16:0] _0_; + output o; + reg \o$next ; + input sys_clk; + wire sys_rst; + (* init = 16'hffff *) + reg [15:0] v = 16'hffff; + reg [15:0] \v$next ; + assign _0_ = v + 1'h1; + always @(posedge sys_clk) + v <= \v$next ; + always @* begin + \o$next = 1'h0; + \v$next = _0_[15:0]; + \o$next = v[15]; + casez (sys_rst) + 1'h1: + \v$next = 16'hffff; + endcase + end + assign o = \o$next ; +endmodule +``` +
+ +
+arst.v + +```verilog +module \$1 (o, sys_clk, sys_rst); + wire [16:0] _0_; + output o; + reg \o$next ; + input sys_clk; + input sys_rst; + (* init = 16'h0000 *) + reg [15:0] v = 16'h0000; + reg [15:0] \v$next ; + assign _0_ = v + 1'h1; + always @(posedge sys_clk or posedge sys_rst) + if (sys_rst) + v <= 16'h0000; + else + v <= \v$next ; + always @* begin + \o$next = 1'h0; + \v$next = _0_[15:0]; + \o$next = v[15]; + end + assign o = \o$next ; +endmodule +``` +
+ +
+pmux.v + +```verilog +module \$1 (c, o, s, a, b); + input [15:0] a; + input [15:0] b; + input [15:0] c; + output [15:0] o; + reg [15:0] \o$next ; + input [2:0] s; + always @* begin + \o$next = 16'h0000; + casez (s) + 3'bzz1: + \o$next = a; + 3'bz1z: + \o$next = b; + 3'b1zz: + \o$next = c; + 3'hz: + \o$next = 16'h0000; + endcase + end + assign o = \o$next ; +endmodule +``` +
diff --git a/doc/nmigen_logo.png b/doc/nmigen_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8c86fc04604c7c3113f61721b393a9a6d723701e GIT binary patch literal 74931 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 TgR8Hhl^4&OoGUy-xb;5(+tqtZ literal 0 HcmV?d00001 diff --git a/doc/nmigen_logo.svg b/doc/nmigen_logo.svg new file mode 100644 index 0000000..fdb855e --- /dev/null +++ b/doc/nmigen_logo.svg @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + migen + + + + diff --git a/doc/nmigen_logo_white.png b/doc/nmigen_logo_white.png new file mode 100644 index 0000000000000000000000000000000000000000..e2944b6bac61e78774b4510f1cce4c6fe2962539 GIT binary patch literal 37225 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

1`4iZLq60F{;lo)&FEuIxSAl+G&iyNqZa zU|ac>2F%2@zOJfvecO*Vf@Rs(dx~C77$vy-Z`sbiz>*0BB_!7*zbnG>_FjIb7tqaJ z09E*sAnZXL3Fop;!8&vivOQbCBJHvTxWgK7_oTAQs#M@DudyVXrjeS6%iua!Y)2K` ztBdg00$}&R8*uQ3Bz#v2p65zEDqXLyq;(Q5@7Nb{`Olb_onbaOL2bq|B8 zOfRO<27(O`qRCjC>!jV!d+vMDoKpvHP+h^ABe=&W(^3wOlR3eGaHdYr#u}oiwy(~O z4%>iBLrG|^;`yElF_@e@DUs(dK_P!~0Lc%QV*{ygU^dM7Lr zU4+Sm?6Qvv^GLH~g`dDYG&q*YHaqx`{y++y19mFP?*8-721j(5ZAr&~VXx?Dsm&~V zHE5ZQH;H@d_sL)_X3e8K?2RdVtn(6*WlcM7kCW=f{wc&m)1bP~NyE#IL@VU5zV=Y;Ya*P&`j&Cz?yn*8dg+oUWxmE_Z(Xa8Pgt5P!K8nS_-;1H*nXu=!~VlRRRlovA5lpKF6bs&PotI0Iv%1Px*w=XnGmE< zqE-4qKkkzpCtHHYE#U4WL(2$m1DP!&MdqcjrBxg<@zJ_Ovadf4Z%NX;lQ%iq=6Zo0f=` z##9}sV_N6(vD3|!c)72^Ow>MxFqAQYiTOhevX~%ddB7I3b#UEHx406}WcH^xSMHKU zf<(%-h(7DvXy4X+CLI8kxaP>>^GpK(6!u59ZtwjpnmGe> z)IBxD84{go`(U%fz$cUGIoUC_d^~fId9wnazp|4tUbq#^SI%L{s;&dr6vLIA5JNz~ q$UH?lfq#g9$Wze<7Y9(xZLv~~c19Ty_sb06pZ?|Rx}}#KAN*e*qPzhB literal 0 HcmV?d00001 diff --git a/nmigen/fhdl/cd.py b/nmigen/fhdl/cd.py index 941a9ba..4d2a33b 100644 --- a/nmigen/fhdl/cd.py +++ b/nmigen/fhdl/cd.py @@ -60,8 +60,8 @@ class ClockDomain: self.async_reset = async_reset - def rename(self, name): - self.name = name - self.clk.name = self._name_for(name, "clk") + def rename(self, new_name): + self.name = new_name + self.clk.name = self._name_for(new_name, "clk") if self.rst is not None: - self.rst.name = self._name_for(name, "rst") + self.rst.name = self._name_for(new_name, "rst") -- 2.30.2