
This also reorganizes README to more clearly describe what nMigen is, since it was getting quite outdated.
7.7 KiB
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 indict
andset
; useValueDict
andValueSet
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 undernmigen.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
- (×)