whitequark
7f6b3f93f5
back.pysim: fix simulation of Value.xor().
2019-09-20 10:12:59 +00:00
whitequark
4777a7b3a2
hdl.{ast,dsl}: add Signal.enum; coerce Enum to Value; accept Enum patterns.
...
Fixes #207 .
2019-09-16 19:22:12 +00:00
whitequark
e8f79c5539
hdl.ast: add Value.matches(), accepting same language as Case().
...
Fixes #202 .
2019-09-14 21:06:12 +00:00
whitequark
f292a1977c
hdl.dsl: improve error messages for Case().
2019-09-14 20:58:19 +00:00
whitequark
32310aecad
hdl.ast: add Value.xor, mapping to $reduce_xor.
...
Fixes #147 .
2019-09-13 14:29:46 +00:00
whitequark
b23a9794a4
hdl.ast: add Value.{any,all}, mapping to $reduce_{or,and}.
...
Refs #147 .
2019-09-13 13:14:52 +00:00
whitequark
bdb70ad45f
lib.fifo: adjust for new CDC primitive conventions.
...
Fixes #97 .
2019-09-13 12:36:51 +00:00
whitequark
da4b810fe1
lib.fifo: adjust properties to have consistent naming.
2019-09-13 12:33:41 +00:00
whitequark
9ea3ff7ae2
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.
2019-09-12 21:56:48 +00:00
whitequark
c8f8c09f29
vendor.xilinx_7series: Vivado requires bash on *nix as well.
2019-09-12 21:49:08 +00:00
whitequark
42805ad959
hdl.mem: use keyword-only arguments as appropriate.
2019-09-12 20:03:48 +00:00
whitequark
b92e967b78
lib.fifo: make fwft a keyword-only argument.
...
Because it accepts a boolean.
2019-09-12 19:38:18 +00:00
whitequark
1c091e67a4
lib.fifo: remove SyncFIFO.replace.
...
This obscure functionality was likely only ever used in old MiSoC
code, and doesn't justify the added complexity. It was also not
provided (and could not be reasonably provided) in SyncFIFOBuffered,
which made its utility extremely marginal.
2019-09-12 19:16:57 +00:00
whitequark
2d2ab6e09d
lib.cdc: make domain properties private.
...
It is not correct to access domain properties from user code, because
it will not match the reality if DomainRenamer has been applied to
the module.
2019-09-12 13:54:48 +00:00
whitequark
73244f2bd2
lib.io: style. NFC.
2019-09-12 13:51:18 +00:00
whitequark
9893e3c044
lib.cdc: adjust ResetSynchronizer for new CDC primitive conventions.
...
Refs #97 .
2019-09-12 13:48:45 +00:00
whitequark
8f659b6cd6
lib.cdc: adjust MultiReg for new CDC primitive conventions.
...
Refs #97 .
2019-09-12 13:48:24 +00:00
whitequark
8c30147e39
build.plat,vendor: allow clock constraints on arbitrary signals.
...
Currently only done for Synopsys based toolchains (i.e. not nextpnr).
Refs #88 .
2019-09-11 23:35:43 +00:00
whitequark
d1779bdb59
back: return name map from convert_fragment().
2019-09-11 23:22:12 +00:00
whitequark
7342662bee
hdl.ast: warn if reset value is truncated.
...
Fixes #183 .
2019-09-10 07:26:34 +00:00
Darrell Harmon
27cedf4302
vendor.lattice_ecp5: pass ecppack_opts to ecppack.
2019-09-10 03:32:36 +00:00
whitequark
9b398b502e
hdl.ast: check type of Sample(domain=...).
...
Fixes #199 .
2019-09-08 23:55:05 +00:00
whitequark
3f6abc0b7a
hdl.dsl: add Default(), an alias for Case() with no arguments.
...
Fixes #197 .
2019-09-08 12:24:18 +00:00
whitequark
eb04a2509e
hdl.mem,lib,examples: use Signal.range().
2019-09-08 12:19:13 +00:00
whitequark
ccfbccc044
hdl.ast: add Signal.range(...), to replace Signal(min=..., max=...).
...
Fixes #196 .
2019-09-08 12:10:31 +00:00
whitequark
5e9587bbbd
Remove nmigen.lib from prelude.
...
Currently it's just MultiReg, and there's no particularly good reason
to privilege this specific CDC primitive so much.
2019-09-06 06:53:06 +00:00
whitequark
284b533995
setup: replace versioneer with setuptools_scm.
...
Has the same problems with git-archive but is much less invasive.
2019-09-06 05:20:42 +00:00
whitequark
943ce317af
hdl.ast,back.rtlil: implement Cover.
...
Fixes #194 .
2019-09-03 01:32:24 +00:00
whitequark
2e20622046
hdl.cd: add negedge clock domains.
...
Fixes #185 .
2019-08-31 22:05:48 +00:00
Emily
c4e8ac734f
_toolchain,build.plat,vendor.*: add required_tools list and checks.
2019-08-31 00:05:47 +00:00
whitequark
4e91710933
vendor.lattice_ecp5: drive GSR synchronous to user clock by default.
...
Fixes #167 .
2019-08-30 14:26:49 +00:00
whitequark
a4b58cbf3a
build.dsl: allow both str and int resource attributes.
2019-08-30 08:35:52 +00:00
Emily
98278a044d
test.tools: use _toolchain.get_tool.
2019-08-28 11:52:16 +00:00
whitequark
b14f5572d8
_toolchain: new module, for injecting dependencies in e.g. Nix.
2019-08-28 11:32:18 +00:00
whitequark
2168ff512b
back.verilog: bump Yosys version requirement to 0.9.
...
Fixes #55 .
2019-08-26 09:59:40 +00:00
whitequark
b4b5d9e2ef
vendor.lattice_ecp5: revert default toolchain to Trellis.
...
This was unintentionally changed in 7fc1058e
.
2019-08-25 08:07:00 +00:00
whitequark
72cf4ca991
back.pysim: implement sim.add_clock(if_exists=True).
2019-08-23 08:53:48 +00:00
whitequark
906385c7f8
back.pysim: don't crash when trying to drive a nonexistent domain clock.
2019-08-23 08:37:59 +00:00
whitequark
9350620f89
build.run: add BuildPlan.digest(), useful for caching.
2019-08-23 01:10:51 +00:00
whitequark
7fc1058ed2
vendor.lattice_ecp5: add Diamond support.
2019-08-22 21:36:24 +00:00
whitequark
c77274c1ad
vendor: eliminate unnecessary LUT instantiation.
...
Fixes #165 .
2019-08-22 21:29:20 +00:00
whitequark
47bad3d20e
back.rtlil: print real parameters with maximum precision.
2019-08-22 04:42:30 +00:00
Darrell Harmon
aefde85031
back.rtlil: add support for real (float) parameters on Instances.
...
Required for Xilinx MMCME2_BASE, etc.
2019-08-22 04:13:05 +00:00
Darrell Harmon
6737ef79f9
vendor.xilinx_series7: use STARTUPE2, not STARTUPE3.
...
STARTUPE3 is for Ultrascale.
2019-08-21 22:25:55 +00:00
whitequark
5889e62668
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.
2019-08-21 21:32:38 +00:00
whitequark
531040d2fd
vendor: style. NFC.
2019-08-21 21:32:36 +00:00
whitequark
25b280dba1
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.
2019-08-21 21:02:13 +00:00
whitequark
1fc63a62c0
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.
2019-08-21 03:30:37 +00:00
William D. Jones
c934fc66e9
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.
2019-08-20 00:54:10 +00:00
whitequark
5ad409e897
back.verilog: parse output of yosys -V
.
...
See #55 .
2019-08-19 23:28:33 +00:00
whitequark
7ca29a5748
Fix nmigen.__version__ to work on git-archive artifacts.
...
Fixes #137 .
2019-08-19 23:14:41 +00:00
whitequark
13316053e3
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.
2019-08-19 22:52:01 +00:00
whitequark
77012fc143
vendor.lattice_ice40: use a local clock domain in create_missing_domain().
2019-08-19 21:46:44 +00:00
whitequark
a069d975b2
lib.cdc: use a local clock domain in ResetSynchronizer.
...
This reverts commit 779f3ee906
.
This reverts commit 300d47ca2e
.
This reverts commit 9c54d0c061
.
2019-08-19 21:45:08 +00:00
whitequark
003ba3b45f
hdl.cd: implement local clock domains.
...
Closes #175 .
2019-08-19 21:44:33 +00:00
whitequark
9bdadbff09
back.pysim: index domains by identity, not by name.
...
Changed in preparation for introducing local clock domains.
2019-08-19 21:44:33 +00:00
whitequark
69d36dc139
hdl.xfrm: lower resets in DomainLowerer as well.
...
Changed in preparation for introducing local clock domains.
Also makes elaboration about 15% faster.
2019-08-19 21:44:30 +00:00
whitequark
404f99f022
hdl.xfrm: consider fragment's own domains in DomainLowerer.
...
Changed in preparation for introducing local clock domains.
2019-08-19 21:07:02 +00:00
whitequark
32bfbb11cb
formal→asserts
...
Closes #171 .
2019-08-19 20:23:24 +00:00
whitequark
2770db6de8
tracer: fix typo.
...
Introduced in 62b3e366
.
2019-08-19 20:20:18 +00:00
whitequark
ada1d6a603
build.plat: do not prepare fragments twice.
...
Fixes #169 .
2019-08-19 19:49:51 +00:00
whitequark
a2241fcfdb
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.
2019-08-19 19:49:51 +00:00
Robin Heinemann
8e048c5a7c
build.dsl: add conn argument to Connector.
2019-08-18 19:56:25 +00:00
whitequark
84f2c3df2b
compat.fhdl.decorators: avoid using deprecated NativeCEInserter.
2019-08-18 16:27:11 +00:00
whitequark
d44ea4e9fe
hdl.xfrm: make deprecated CEInserter more well-behaved.
2019-08-18 16:26:45 +00:00
whitequark
ed7e07c6c1
hdl.ast: implement Initial.
...
This is the last remaining part for first-class formal support.
2019-08-15 02:53:07 +00:00
whitequark
40abaef858
hdl.xfrm: sample cache should be per-fragment.
2019-08-15 02:45:31 +00:00
whitequark
fa0fa056ba
hdl.xfrm: CEInserter→EnableInserter.
...
Fixes #166 .
2019-08-12 13:39:26 +00:00
whitequark
9d2cbbabb8
hdl.ast: hash-cons ValueKey.
...
This speeds up elaboration by ~10%.
2019-08-08 10:56:53 +00:00
whitequark
4ee82c9584
tracer: use sys._getframe directly.
...
This speeds up elaboration by ~30-40%.
2019-08-08 10:23:35 +00:00
whitequark
e6b1e3de1a
compat.fhdl.decorators: port from oMigen.
2019-08-08 08:09:28 +00:00
whitequark
5c626e33bf
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.
2019-08-08 07:45:34 +00:00
whitequark
1b379a513c
vendor.lattice_ice40: add iCE5LP2K support.
2019-08-07 09:25:20 +00:00
whitequark
cfbc678508
vendor.lattice_ice40: add iCE40UP3K support.
2019-08-07 09:06:27 +00:00
whitequark
9c35e44e4a
vendor.lattice_ice40: add iCE5LP1K support.
2019-08-07 09:01:11 +00:00
whitequark
434b686d5e
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.
2019-08-04 23:28:09 +00:00
whitequark
3d7214cb70
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.
2019-08-04 23:28:09 +00:00
whitequark
27063a3bd3
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.
2019-08-04 14:18:49 +00:00
whitequark
65da905c15
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.
2019-08-04 14:12:02 +00:00
whitequark
15e8dfe532
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.
2019-08-04 13:48:33 +00:00
whitequark
6b025df12c
vendor.xilinx_spartan_3_6: force use of bash on UNIX.
2019-08-04 13:20:54 +00:00
whitequark
5eb4e2ee51
build.plat: allow selecting a specific UNIX shell interpreter.
...
Mostly because vendor tools have bashisms.
2019-08-04 13:20:54 +00:00
whitequark
34a97b2751
vendor.lattice_ice40: avoid routing conflicts with SDR/DDR input pins.
2019-08-04 00:30:50 +00:00
whitequark
2e6627c4af
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.)
2019-08-04 00:12:08 +00:00
whitequark
d0ac8bf789
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))
2019-08-03 23:48:28 +00:00
whitequark
999a2f612a
vendor.lattice_ice40: add missing signal indexing.
2019-08-03 22:59:33 +00:00
whitequark
8dd54ac544
build.run: use keyword-only arguments where appropriate.
2019-08-03 22:52:58 +00:00
whitequark
0fe05188e8
compat.fhdl.specials: track changes in build.plat.
2019-08-03 22:52:34 +00:00
whitequark
99d205494a
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.
2019-08-03 18:52:24 +00:00
whitequark
8854ca03ae
build.plat,vendor: automatically create sync domain from default_clk.
...
But only if it is not defined by the programmer.
Closes #57 .
2019-08-03 18:36:58 +00:00
whitequark
e0b54b417e
hdl.ir: allow adding more than one domain in missing domain callback.
...
This is useful for injecting complex power-on reset logic.
2019-08-03 18:19:40 +00:00
whitequark
9c28b61d9f
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.
2019-08-03 16:39:21 +00:00
whitequark
21f2f8c46e
build.plat: add default_rst, to be used with default_clk.
2019-08-03 16:28:03 +00:00
whitequark
4dbb5352ad
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.
2019-08-03 16:18:46 +00:00
whitequark
cea92e9531
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 .
2019-08-03 15:44:02 +00:00
whitequark
fc846532c7
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.
2019-08-03 15:31:24 +00:00
whitequark
fdb0c5a6bc
hdl.ir: call back from Fragment.prepare if a clock domain is missing.
...
See #57 .
2019-08-03 14:54:20 +00:00
whitequark
ace2b5ff0a
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 .
2019-08-03 14:00:29 +00:00
whitequark
ab5426ce74
Improve test added in 29fee01f
to not leak warnings.
2019-08-03 13:44:44 +00:00
whitequark
ee03eab52f
back.rtlil: fix sim-synth mismatch with assigns following switches.
...
Closes #155 .
2019-08-03 13:27:47 +00:00
whitequark
0a603b3844
hdl.ast: fix typo.
2019-08-03 13:21:09 +00:00
whitequark
94e13effad
hdl.ast: deprecate Value.part, add Value.{bit,word}_select.
...
Fixes #148 .
2019-08-03 13:07:06 +00:00
whitequark
bcdc280a87
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().
2019-08-03 12:51:57 +00:00
whitequark
29fee01f86
hdl.ir: warn if .elaborate() returns None.
...
Fixes #164 .
2019-08-03 12:30:39 +00:00
whitequark
995e4adb8c
hdl.xfrm: handle mem.{Read,Write}Port in CEInserter.
...
Fixes #154 .
2019-07-31 05:20:05 +00:00
N. Engelhardt
5fd8a796ae
vendor: don't emit duplicate iobuf submodule names.
...
These are no longer allowed after commit 698b005
.
2019-07-21 07:49:21 +00:00
N. Engelhardt
698b005182
hdl.dsl: add getters to m.submodules.
2019-07-19 12:39:47 +00:00
Alain Péteut
81e59832fb
lib.fifo: fix typo.
2019-07-15 14:12:33 +00:00
Staf Verhaegen
ff343d5cf0
Pin: Add extra hierarchy level for name derivation
2019-07-14 19:30:12 +00:00
William D. Jones
b963449b41
build.run: Ensure batch script returns proper error code.
2019-07-14 17:43:33 +00:00
whitequark
ee15538cf0
back.pysim: correctly add gtkwave traces for signals with decoders.
2019-07-12 13:35:44 +00:00
William D. Jones
6ee760e83f
build.dsl: Add optional name_suffix to Resource.family.
2019-07-10 15:41:23 +00:00
whitequark
278b624c66
back.pysim: avoid malformed VCD files when a decoder uses tabs.
2019-07-10 12:54:59 +00:00
whitequark
2fa858b003
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.
2019-07-10 12:46:54 +00:00
whitequark
37f363e338
back.rtlil: add decodings to cases when switching on a signal.
...
Fixes #134 .
2019-07-09 19:48:15 +00:00
whitequark
10e56c75fb
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 .
2019-07-09 19:28:09 +00:00
whitequark
00c5209a47
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 .
2019-07-09 19:26:47 +00:00
Jacob Lifshay
62b3e36612
tracer: add PyPy support to get_var_name().
...
Fixes #141 .
2019-07-09 07:29:01 +00:00
whitequark
367ad5aee7
build.dsl: add Resource.family abstraction.
2019-07-09 02:44:03 +00:00
whitequark
7b4fbf8e01
build.{dsl,res}: allow platform-dependent attributes using callables.
...
Fixes #132 .
2019-07-08 11:15:04 +00:00
whitequark
0ab0a74ec1
hdl.rec: respect modifications to signals in Record.like().
...
Fixes #126 .
2019-07-08 10:59:15 +00:00
whitequark
bfbeca4584
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.
2019-07-08 10:48:07 +00:00
whitequark
0b844da4cf
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 .
2019-07-08 10:42:10 +00:00
whitequark
f0c1c2cfeb
build.dsl: allow assertions on subsignal widths.
...
This is useful when building abstractions around resources where
the pin names are user-specified.
Fixes #129 .
2019-07-08 10:42:06 +00:00
whitequark
a7fbff94d8
hdl.{ast,cd,dsl,xfrm}: reject inappropriately used comb domain.
...
Fixes #125 .
2019-07-08 10:26:49 +00:00
whitequark
5c63177fc2
test: generate examples to verilog as part of unit tests.
...
This is to make sure 806a62c2 doesn't happen again.
2019-07-08 10:12:26 +00:00
whitequark
447bfa6ad5
compat.genlib.fsm: fix after commit dac62754
.
2019-07-08 10:12:26 +00:00
whitequark
ec7fcd3697
hdl.xfrm: don't overwrite source locations on ClockDomain signals.
...
On the sample of examples/basic/*.py, there are no remaining
incorrectly inferred locations.
2019-07-08 09:58:12 +00:00
whitequark
8c9fdf907f
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.
2019-07-08 09:58:12 +00:00
whitequark
710a8d0bc1
back.rtlil: ignore empty source locations.
...
This was a bug introduced during refactoring in 2492f490
.
2019-07-08 09:58:12 +00:00
whitequark
dac6275493
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.
2019-07-08 09:58:12 +00:00
whitequark
70f3563b5f
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.
2019-07-08 09:10:09 +00:00
whitequark
2492f490f5
back.rtlil: use a more principled approach to attributes. NFC.
...
This also refactors the RTLIL builder to use a more aspect-oriented
approach.
2019-07-08 09:10:09 +00:00
Alain Péteut
31c54d32ef
vendor.xilinx_7series: generate also binary bitfile.
...
Fixes #139 .
2019-07-07 21:36:32 +00:00
William D. Jones
b404d603fb
vendor.xilinx_spartan_3_6: Add Spartan3A family support.
2019-07-07 20:44:48 +00:00
whitequark
cb02a452e9
vendor.lattice_ecp5: don't leave LUT inputs disconnected.
...
This causes YosysHQ/nextpnr#301.
Fixes #136 .
2019-07-07 02:34:22 +00:00
whitequark
da1f58b7ae
hdl.dsl: further clarify error message for incorrect nesting.
...
Fixes #133 .
2019-07-07 01:03:59 +00:00
whitequark
cb8be4a1b0
hdl.dsl: clarify error message for incorrect nesting.
...
Refs #133 .
2019-07-07 00:59:57 +00:00
whitequark
3388b5b085
hdl.dsl: gracefully handle FSM with no states.
2019-07-07 00:59:34 +00:00
whitequark
146f3cb684
build.plat: source a script with toolchain environment.
...
Fixes #131 .
2019-07-07 00:44:28 +00:00
whitequark
744154ebb5
build.run: only use os.path on the target OS.
...
Before this commit, BuildPlan.add_file would use os.path.normpath,
which would be the wrong thing for cross-builds.
2019-07-07 00:18:56 +00:00
whitequark
ba64eb2037
build.run: make BuildProducts abstract, add LocalBuildProducts.
...
This makes it clear that we plan to have remote builds as well.
Also, document everything in build.run.
2019-07-07 00:09:07 +00:00
whitequark
1ee21d2007
build.plat, vendor.*: don't join strings passed as _opts overrides.
...
Right now an array is expected in any _opts overrides, and if it is
actually a string (because it is passed via an environment variable,
usually), awkwardness results as each character is joined with ` `.
Fixes #130 .
2019-07-06 23:09:46 +00:00
whitequark
b6b9f0fc21
build.run: make sure BuildProducts._root is not easily accessible.
2019-07-06 18:52:48 +00:00
Staf Verhaegen
2829d04033
vendor.xilinx_{7series,spartan6}: Support extra VHDL files.
2019-07-04 21:13:33 +00:00
whitequark
2e4cc47fcb
hdl.dsl: fix src_loc_at for FSM state signal.
2019-07-03 16:34:31 +00:00
whitequark
82903e493a
back.rtlil: emit \src attributes for processes via Switch and Assign.
...
The locations are unfortunately not very precise, but they provide
some improvement over status quo.
2019-07-03 16:27:54 +00:00
whitequark
e351e27206
hdl.ast: fix src_loc_at for Mux().
2019-07-03 15:25:14 +00:00
whitequark
b471e33d7f
build.res: detect physical conflicts earlier.
...
This is useful for two reasons:
1. nMigen can provide better error messages than the platform and
do it earlier in the build pipeline.
2. Many platforms handle diffpairs by only constraining the P pin;
the N pin is completely ignored. If this is undetected,
downstream users (human or software) can rely on this
information assuming it is correct and introduce more errors.
(Of course, this will not catch every mistake, but the most
common is a copy-paste issue, and that will handle it.)
Fixes #124 .
2019-07-03 15:07:44 +00:00
whitequark
7059cb4931
hdl.rec: thread src_loc_at to all inner Signals and Records.
2019-07-03 14:49:20 +00:00
whitequark
33f21628bb
vendor: give names to IO buffer instances.
...
Fixes #123 .
2019-07-03 14:43:03 +00:00
whitequark
5800f00776
hdl.rec: accept Record(src_loc_at=...).
2019-07-03 14:35:48 +00:00
whitequark
668ff40a75
compat.fhdl.specials: mark CompatMemory as Elaboratable.
...
This suppresses a warning that is not useful in the compat context.
2019-07-03 13:28:57 +00:00
whitequark
eeb6aca93d
compat.fhdl.specials: use "sync" as default domain, not "sys".
...
In compat.fhdl.module, we already default to "sync" as the default
clocked domain. Using "sys" in memories only would be inconsistent
and result in more bugs.
2019-07-03 13:25:12 +00:00
whitequark
c98b8f7c07
compat.fhdl.specials: fix Memory.get_port() after 94e8f479
.
...
This also makes sure the native ports are instantiated for correct
clock domain.
2019-07-03 13:24:00 +00:00
whitequark
9eb81609d6
compat.fhdl.structure: fix If/Elif/Else after 32446831
.
2019-07-03 13:19:15 +00:00
Sebastien Bourdeauducq
9a1048af50
lattice_ecp5: fix get_input
2019-07-03 10:25:32 +08:00
whitequark
0ab215e5ed
hdl.ast: recognize a Enum used as decoder and format it better.
2019-07-02 19:34:44 +00:00
whitequark
7cc0b8cbf0
hdl.mem: fix naming of registers inside unnamed memories.
...
Before this commit, `None` would leak into the vcd file with pysim.
2019-07-02 18:45:35 +00:00
Alain Péteut
20553b1478
build.plat: add iter_extra_files method.
...
* vendor.*: employ iter_extra_files.
2019-07-02 18:25:29 +00:00
whitequark
ea25806971
back.rtlil: emit \sig$next wires instead of \$next\sig. NFC.
...
Just a bit more readable.
2019-07-02 18:06:50 +00:00
whitequark
dd5e513e42
back.rtlil: do not emit $next wires for comb signals.
...
According to RTLIL semantics (that was undocumented before today),
the only purpose of `sync always` is to enable inference of latches,
because there is no other way to express them in terms of RTLIL
processes without ending up with a combinatorial loop. But, nMigen
specifically avoids latches, so this is not necessary.
This change results in major improvements in Verilog readability.
See also #98 .
2019-07-02 18:05:34 +00:00
whitequark
6b843b5be6
hdl.rec: implement slicing by component names.
...
Fixes #121 .
2019-07-02 17:46:53 +00:00
whitequark
34f110100a
hdl.rec: implement Record.like.
...
Fixes #120 .
2019-07-02 17:46:53 +00:00
Alain Péteut
b67f5cfa65
vendor.xilinx_7series: read extra .xdc files.
2019-07-02 08:23:37 +00:00
whitequark
94e8f479a5
hdl.mem: use read_port(domain="comb") for asynchronous read ports.
...
This avoids the absurdity of the combination of arguments that is
read_port(domain="sync", synchronous=True).
Fixes #116 .
2019-07-01 19:56:49 +00:00
whitequark
f75a0163f9
back.rtlil: fix Array regression in 32446831
.
...
Fixes #117 .
2019-07-01 01:53:56 +00:00
whitequark
9c54d0c061
back.pysim: create unique ResetSynchronizer internal domains.
...
Commit 300d47ca
introduced the same bug commit 779f3ee9
was trying to
avoid, but now only in the simulator. Since the names in simulator
don't have to make any sense, just use DUID to generate them.
2019-06-28 08:34:43 +00:00
whitequark
300d47ca2e
back.pysim: override ResetSynchronizer implementation.
...
This was rewritten to use Yosys cells in 779f3ee9
to avoid leaking
the interior clock domain, but the simulator doesn't understand Yosys
cells. So, use the old implementation in the simulator.
2019-06-28 07:49:14 +00:00
whitequark
779f3ee906
lib.cdc: avoid interior clock domains in ResetSynchronizer.
...
Such clock domains will "leak" into the enclosing scope, which is
generally undesirable. Also, this is instructive for a platform
overriding the behavior, since it provides guidance on how to
correctly instantiate platform-specific flops.
I've considered also doing this for MultiReg(), but it is very
challenging in presence of non-reset-less CDC FFs, since Yosys'
$dffsr primitive has separate set and clear inputs, and reshuffling
the reset value for those results in quite a bit of additional logic.
(That said, it might have to be done anyway, precisely because
letting Yosys generate this additional logic might prove too much
for the toolchain to cope with, and again, platform-independent
code should provide guidance to platform-specific code.)
2019-06-28 07:34:10 +00:00
whitequark
21379dd44b
lib.cdc: eliminate no_retiming attributes.
...
See #115 for rationale.
2019-06-28 07:22:54 +00:00
whitequark
6454378fe7
vendor.lattice_ice40: fix instance of negedge FF due to a typo.
2019-06-28 07:05:20 +00:00
Alain Péteut
1609a5ba54
build.plat: fix dedent overrides.
2019-06-28 06:52:52 +00:00
whitequark
32446831b4
hdl.{ast,dsl}, back.{pysim,rtlil}: allow multiple case values.
...
This means that instead of:
with m.Case(0b00):
<body>
with m.Case(0b01):
<body>
it is legal to write:
with m.Case(0b00, 0b01):
<body>
with no change in semantics, and slightly nicer RTLIL or Verilog
output.
Fixes #103 .
2019-06-28 04:37:08 +00:00
whitequark
48d4ee4031
hdl.ir, back.rtlil: allow specifying attributes on instances.
...
Fixes #107 .
2019-06-28 04:14:38 +00:00
whitequark
6f4e3156d8
back.pysim: fix scope screwup.
2019-06-26 05:22:09 +00:00
whitequark
2f7e52369c
compat.fhdl.structure: fix typo.
2019-06-25 22:01:14 +00:00
whitequark
b1af0601fa
compat.fhdl.structure: simplify handling of default case.
2019-06-25 22:01:14 +00:00
whitequark
e5e23644a4
hdl.{ast,dst}: directly represent RTLIL default case.
...
This makes RTLIL mildly nicer:
casez ({ \$5 , \$3 , \$1 })
3'bzz1:
\$next\o = \$7 ;
3'bz1z:
\$next\o = \$9 ;
3'b1zz:
\$next\o = \$11 ;
- 3'bz:
+ default:
{ \$next\co , \$next\o } = \$13 ;
endcase
2019-06-25 22:01:14 +00:00
whitequark
f60ceb349b
vendor.xilinx_{spartan6,7series}: speedgrade→speed.
...
For consistency with ECP5.
2019-06-25 15:51:52 +00:00
whitequark
0a145ed2d9
vendor.lattice_ecp5: implement.
...
Note that because of issues with Yosys and nextpnr, it is not yet
possible to use either SDR or DDR I/O.
2019-06-25 15:48:07 +00:00
whitequark
23ed888857
vendor.lattice_ice40: use different --package for 4k devices.
2019-06-19 06:09:08 +00:00
Jean-François Nguyen
b3c5ff7e95
vendor.xilinx_7series: fix IOB packing.
2019-06-17 20:48:46 +00:00
whitequark
3fc5f170e6
vendor.xilinx_{7series,spartan6}: emit IBUF/OBUF explicitly.
...
Do this to make sure all buffers, tristate/differential or not, are
instantiated the exact same way, and are subject to the same set of
toolchain bugs, if any.
2019-06-17 15:47:56 +00:00
whitequark
2a8e7bc6f2
vendor.xilinx_{7series,spartan6}: cleanup. NFC.
...
Eliminate some intermediate signals if they are not necessary.
Do not even return i, o, or t if the pin does not have them.
2019-06-17 15:47:56 +00:00
whitequark
8b34602d91
vendor.xilinx_{7series,spartan6}: connect FCDE and IOB directly.
...
Before this commit, in some cases there will be an inverter, which is
not allowed on an FDCE with IOB attribute set to true, as it will
interfere with packing.
2019-06-17 15:47:56 +00:00
Alain Péteut
04c07715b4
build.plat: dedent overrides.
2019-06-16 12:40:52 +00:00
whitequark
70bbfecf6d
vendor.lattice_ice40: never place an inverter on global buffer output.
...
This would make `pin.i` not a global network anymore, which is likely
undesirable if an explicit Attrs(GLOBAL=1) is specified.
2019-06-14 20:44:02 +00:00
Jean-François Nguyen
01a3101fd3
vendor.xilinx_7series: implement inverters.
2019-06-13 15:14:09 +00:00
Jean-François Nguyen
412781e0c3
vendor.xilinx_spartan6: implement DDR I/O buffers and inverters.
2019-06-13 15:13:31 +00:00
whitequark
2566747061
compat.fhdl.structure: fix Case().makedefault().
...
Fixes #100 .
2019-06-13 03:56:57 +00:00
whitequark
f689b777b4
compat.fhdl.structure: always order default case as the very last.
2019-06-13 03:56:57 +00:00
whitequark
f1174655b1
hdl.ast: tighten assertion in Switch().
2019-06-13 03:56:57 +00:00
whitequark
6beba3a48b
Simplify code by using Signal.like(name_suffix="..") appropriately.
2019-06-12 22:28:45 +00:00
whitequark
e52b15d236
hdl.ast: add name_suffix=".." option to Signal.like().
...
This simplifies creation of related signals with nice names during
metaprogramming, e.g.
def make_ff(m, sig):
sig_ff = Signal.like(sig, name_suffix="_ff")
m.d.sync += sig_ff.eq(sig)
return sig_ff
2019-06-12 22:26:57 +00:00
Jean-François Nguyen
3b303c3334
vendor.xilinx_7series: implement DDR I/O buffers.
2019-06-12 19:55:10 +00:00
whitequark
d3ed390b9d
vendor.lattice_ice40: fix typo.
2019-06-12 17:38:14 +00:00
whitequark
efb2d773c3
build.{dsl,res,plat}: add PinsN and DiffPairsN.
2019-06-12 14:42:39 +00:00
whitequark
ad1a40c934
hdl.ast: implement values with custom lowering.
2019-06-11 07:01:44 +00:00
whitequark
066dd799e8
back.pysim: check for a clock being added twice.
...
This commit adds a best-effort error for a common mistake of adding
a clock driving the same domain twice, such as a result of
a copy-paste error.
Fixes #27 .
2019-06-11 03:54:22 +00:00
whitequark
d2d8c2b8bf
back.rtlil: mask memory init values.
...
This handles both init values that are too wide, which happens if
their magnitude is too high, or if they're negative.
Fixes #96 .
2019-06-11 03:43:09 +00:00
whitequark
58e39f90ce
hdl.mem: coerce memory init values to integers.
...
The coercion is carefully chosen to accept (other than normal ints)
instances of e.g. np.int64, but reject instances of e.g. float.
See https://stackoverflow.com/a/48940855/254415 for details.
Fixes #93 .
2019-06-11 03:38:44 +00:00
Simon Kirkby
2423eabc15
lib.cdc: fix typo.
2019-06-09 10:24:01 +00:00
Jean-François Nguyen
d5ba26b174
vendor.xilinx_spartan6: implement.
2019-06-07 08:58:41 +00:00
Jean-François Nguyen
2b3a0e9fa0
vendor.xilinx_7series: fix typos.
2019-06-07 07:33:20 +00:00
whitequark
12e8fe484d
build.dsl: fix precondition check in Pins.
2019-06-06 20:40:49 +00:00
Jean-François Nguyen
f26e612899
vendor.xilinx_7series: implement.
2019-06-06 13:22:15 +00:00
whitequark
b45c5119f5
build.res: allow querying frequency of a previously constrained clock.
2019-06-05 12:51:53 +00:00
whitequark
c9879c795b
build.{dsl,res,plat}: apply clock constraints to signals, not resources.
...
This adds the Clock() build DSL element, and adds a resource manager
function add_clock_constraint() that takes a Pin or a Signal.
Note that not all platforms, in particular not any nextpnr platforms
at the moment, can add constraints on arbitrary signals.
Fixes #86 .
2019-06-05 08:52:30 +00:00
whitequark
ab3f103e5a
build.dsl: replace extras= with Attrs().
...
This change proved more tricky than expected due to downstream
dependencies, so it also includes some secondary refactoring.
2019-06-05 07:02:08 +00:00
whitequark
c52cd72d3e
Typos and style fixes. NFC.
2019-06-05 02:48:41 +00:00
whitequark
452c4b380b
vendor.lattice_ice40: normalize device names.
...
Right now the device name in the board file is just the option
nextpnr uses, but that's overnormalized and doesn't quite match
the chip names used elsewhere. It is even worse for ECP5 in terms
of mismatch with chip names, and for ECP5 we need to support other
toolchains as well, so let's handle this uniformly everywhere.
2019-06-04 16:09:08 +00:00
whitequark
4379a5d6fe
hdl.ir: rephrase elaboratable warning to not look like an error.
2019-06-04 13:11:15 +00:00
whitequark
537d91851d
compat.fhdl.module: silence "unused elaboratable" warnings.
2019-06-04 13:09:36 +00:00
whitequark
38917e4523
compat.fhdl.specials: fix platform lowering for TSTriple again.
2019-06-04 13:03:56 +00:00
whitequark
79a3710255
compat.fhdl.specials: fix platform lowering.
...
get_tristate only has O/OE; the triple is created by get_input_output.
2019-06-04 12:26:09 +00:00
whitequark
0cbb743df9
compat.fhdl.module: implement some TODO'd deprecation warnings.
2019-06-04 12:00:02 +00:00
whitequark
3adce21ce3
build.run: fix product extraction to work on Windows.
...
Before this commit, it would fail with a "Permission denied" error.
2019-06-04 11:40:56 +00:00
whitequark
63c4123f6e
build.plat: hide executed commands in quiet builds on Windows.
2019-06-04 11:34:18 +00:00
whitequark
1d3e9c8331
build.plat: allow (easily) overriding with an empty string on Windows.
2019-06-04 11:33:51 +00:00
whitequark
39ca0e6fa6
compat.fhdl.module: CompatModule should be elaboratable.
...
Fixes #83 .
2019-06-04 11:11:31 +00:00
whitequark
4310254103
build.res: use ConstraintError iff a constraint invariant is violated.
...
In particular don't use it for type errors.
2019-06-04 11:00:11 +00:00
whitequark
51c03ca391
hdl.xfrm: handle empty lhs in LHSGroup{Analyzer,Filter}.
2019-06-04 10:26:01 +00:00
whitequark
1b54eb80da
vendor.board: split off into nmigen-boards package.
...
The iCE40 programmers are also moved, since they're board-specific.
(It looks like iceprog isn't, but it only works with Lattice
evaluation kits.)
Fixes #80 .
2019-06-04 09:52:33 +00:00
whitequark
316ba10207
build.run: simplify using build products locally, e.g. for programming.
2019-06-04 09:13:24 +00:00
whitequark
2763b403f1
build.res: simplify emission of port constraints on individual bits.
2019-06-04 08:39:03 +00:00
whitequark
9f643ce005
Clean up imports.
...
This commit:
* moves lists of universally useful imports from `nmigen` to
`nmigen.hdl` and `nmigen.lib`, reimporting them in `nmigen`;
* replaces lots of imports from individual parts of `nmigen.hdl`
with a star import from `nmigen.hdl`;
* replaces imports in tests with what we expect downstream code
to use;
* adds some missing imports in `nmigen.formal`.
2019-06-04 08:18:50 +00:00
whitequark
3194b5c90b
build.run: extract from build.plat.
2019-06-04 07:53:34 +00:00
whitequark
c89c2ce941
vendor.board.tinyfpga_bx: clk16 pin does not have a global buffer.
...
Fixes #82 .
2019-06-04 06:43:10 +00:00
whitequark
45d1dc1d54
vendor.board.tinyfpga_bx: fix typo.
2019-06-04 06:20:01 +00:00
whitequark
6426b90e4a
vendor.conn.pmod: implement.
...
Fixes #79 .
2019-06-03 16:49:59 +00:00
whitequark
0fa45b5e14
vendor.board: extract package.
2019-06-03 16:14:59 +00:00
whitequark
2ca0834d41
vendor.tinyfpga_bx: add connectors.
2019-06-03 15:40:57 +00:00
whitequark
7c5461d210
vendor.icestick: add connectors.
2019-06-03 15:15:45 +00:00
whitequark
f351e2bd1e
vendor.ice40_hx1k_blink_evn: add (some) connectors.
...
I have no idea how to lay out the Arduino-like connectors best,
so they're just missing.
2019-06-03 15:03:49 +00:00
whitequark
ed64880cc4
build.{plat,res}: add support for connectors.
...
Fixes #77 .
2019-06-03 15:02:15 +00:00
whitequark
a013eb1f59
build.dsl: add support for connectors.
2019-06-03 13:47:00 +00:00
whitequark
4c443a7ef5
compat.fhdl.specials: TSTriple is not an elaboratable.
2019-06-03 09:39:38 +00:00
whitequark
639e64c388
vendor.fpga.lattice_ice40: implement differential output buffers.
2019-06-03 09:28:27 +00:00
whitequark
41adcc3f97
vendor.fpga.lattice_ice40: implement differential input buffers.
2019-06-03 08:38:12 +00:00
whitequark
3116d4add2
vendor.fpga.lattice_ice40: allow instantiating SB_GB_IO via extras.
2019-06-03 07:54:28 +00:00
whitequark
185abb492d
vendor.fpga.lattice_ice40: implement SDR and DDR I/O buffers.
2019-06-03 07:43:31 +00:00
whitequark
b42043f764
lib.io: add i_clk and o_clk to pin layout with xdr>=1.
2019-06-03 07:43:31 +00:00
whitequark
a1940c5528
hdl.rec: unbreak hasattr(rec, ...).
...
hasattr() requires that AttributeError be raised. Change __getitem__
to raise AttributeError, too, since it is fundamentally just sugar
for getattr().
2019-06-03 07:43:31 +00:00
whitequark
6fae06aea9
build.{dsl,plat,res}: allow dir="oe".
...
Although a dir="oe" pin is generally equivalent to dir="io" pin with
the i* signal(s) disconnected, they are not equivalent, because some
pins may not be able to support input buffers at all, either because
there are no input buffers, or because the input buffers are consumed
by some other resource.
E.g. this can happen on iCE40 when the input buffer is consumed by
a PLL.
2019-06-03 04:42:55 +00:00
whitequark
1eee7cd76f
lib.io: allow dir="oe".
...
Although a dir="oe" pin is generally equivalent to dir="io" pin with
the i* signal(s) disconnected, they are not equivalent, because some
pins may not be able to support input buffers at all, either because
there are no input buffers, or because the input buffers are consumed
by some other resource.
E.g. this can happen on iCE40 when the input buffer is consumed by
a PLL.
2019-06-03 04:28:53 +00:00
whitequark
9ba2efd86b
build.{res,plat}: use xdr=0 as default, not xdr=1.
...
The previous behavior was semantically incorrect.
2019-06-03 03:36:32 +00:00
whitequark
cd6488c782
build.res: allow requesting raw ports, with dir="-".
...
This provides an escape hatch for the case where the nMigen platform
code is not flexible enough, and a IO buffer primitive needs to be
instantiated directly.
2019-06-03 03:36:32 +00:00
whitequark
c30617fc05
lib.io: allow Pin(xdr=0), representing a combinatorial I/O buffer.
2019-06-03 03:36:32 +00:00
whitequark
3327deae92
vendor.fpga.lattice_ice40: enable SystemVerilog when reading .sv files.
2019-06-03 03:01:56 +00:00
whitequark
f417725b10
build.res: if not specified, request resource #0 .
...
This markedly differs from oMigen system, which would request
consecutive resources. The difference is deliberate; most resources
are singular, so it does not matter for them, and for resources where
it does matter, which pins are requested should not depend on order
of execution of `platform.request`.
2019-06-03 02:54:17 +00:00
whitequark
dc17d06fe9
vendor.fpga.lattice_ice40: instantiate SB_IO and apply extras.
...
The PULLUP and PULLUP_RESISTOR extras are representable in the PCF
file. The IO_STANDARD extra, however, can only be an SB_IO parameter.
2019-06-03 02:51:59 +00:00
whitequark
c6a0761b3a
hdl.ir: accept LHS signals like slices as Instance io ports.
...
This is unlikely to work with anything except Slice and Cat, but
there's no especially good place to enforce it. (Maybe in Instance?)
2019-06-03 02:39:14 +00:00
whitequark
b8a61edc2f
hdl.dsl: allow adding submodules with computed name, like with domains.
2019-06-03 02:22:55 +00:00
whitequark
b64a31255c
hdl.ir: accept expanded (kind, name, value) tuples in Instance.
...
This is useful for e.g. programmatically generating parameters
without having to mess with kwargs dicts.
2019-06-03 02:12:01 +00:00
whitequark
fb01854372
build.{res,plat}: propagate extras to pin fragment factories.
...
This is necessary because on some platforms, like iCE40, extras
become parameters on an IO primitive, since the constraint file
format is not expressive enough for all of them.
2019-06-03 01:58:43 +00:00
whitequark
268fe6330e
build.res: simplify. NFC.
2019-06-03 01:29:20 +00:00
whitequark
98497b2075
build.dsl: require a dict for extras instead of a stringly array.
...
Fixes #72 .
2019-06-02 23:36:21 +00:00
whitequark
e4ebe03115
vendor.fpga.lattice_ice40: use .bin suffix for bitstream tempfiles.
2019-06-02 04:12:50 +00:00
whitequark
37152c733e
vendor.tinyfpga_{b→bx}
2019-06-02 04:11:28 +00:00
whitequark
bff08c5016
vendor.tinyfpga_b: fix IO_STANDARD.
2019-06-02 04:04:07 +00:00
Simon Kirkby
358b98e5de
vendor.tinyfpga_b: implement.
2019-06-02 01:20:09 +00:00
whitequark
39fad9a955
vendor.icestick: fix typo.
2019-06-02 01:13:03 +00:00
whitequark
ba0fcddb2c
vendor.ice40_hx1k_blink_evn: implement.
2019-06-01 16:48:07 +00:00
whitequark
eab372383a
vendor.icestick: implement.
2019-06-01 16:47:20 +00:00
whitequark
321d245e95
vendor.fpga.lattice_ice40: implement.
2019-06-01 16:47:01 +00:00
whitequark
b1eab9fb3b
build.plat: implement.
2019-06-01 16:43:27 +00:00
whitequark
53ddff9f33
build.res: always return a Pin record.
...
In the simple cases, a Pin record consisting of exactly one field
is equivalent in every way to this single field. In the more complex
case however, it can be used as a record, making the code more robust
such that it works with both bidirectional and unidirectional pins.
2019-06-01 16:41:30 +00:00
whitequark
8c1b5a26b3
build.res: accept a list of clocks in ConstraintManager constructor.
2019-06-01 15:41:41 +00:00
whitequark
f17375a60b
back.rtlil: allow specifying platform for convert().
2019-05-26 17:10:56 +00:00
whitequark
578dba263f
Add versioneer.
2019-05-26 11:20:13 +00:00
whitequark
b0ba960296
hdl.ir: silence unused elaboratable warning on interpreter crash.
2019-05-26 10:48:39 +00:00
Jean-François Nguyen
d393c5ec64
build.res: add ConstraintManager.
2019-05-26 01:26:58 +00:00
whitequark
3a9fe31133
build.dsl: make Pins and DiffPairs iterable.
...
Returns pin names.
2019-05-25 22:43:48 +00:00
whitequark
48145cee02
build.dsl: improve repr of Pins() and DiffPairs().
2019-05-25 22:43:23 +00:00
whitequark
2b7dc37ffe
hdl.rec: allow providing fields during construction.
...
This allows creating records populated with e.g. signals with custom
names, or sub-records that are instances of Record subclasses.
2019-05-25 22:06:56 +00:00
whitequark
3392708e2b
Consider Instances a part of containing fragment for use-def purposes.
...
Fixes #70 .
2019-05-25 20:13:43 +00:00
Chris Osterwood
699fe5a675
Add import so that Tristate.elaborate builds
2019-05-20 16:34:31 +00:00
whitequark
c337246fc5
hdl.ir: when adding sync domain to a design, also add it to ports.
...
Otherwise we end up in a situation where the examples don't have
clk and rst as ports, which is not nice.
Fixes #67 .
2019-05-15 06:44:50 +00:00
whitequark
39bc59c924
hdl.ir: during port propagation, defs should take priority over uses.
2019-05-13 15:34:13 +00:00
whitequark
921f506e69
back.rtlil: assign undriven signals to their reset value.
...
Fixes #35 .
2019-05-13 08:33:55 +00:00
whitequark
744e33f42d
hdl: make all public Value classes other than Record final.
...
In some cases, nMigen uses type() instead of isinstance() to dispatch
on types. Make sure all such uses of type() are robust; in addition,
make it clear that nMigen AST classes are not meant to be subclassed.
(Record is an exception.)
Fixes #65 .
2019-05-12 05:40:17 +00:00
whitequark
958cb18b88
hdl.ir: only pull explicitly specified ports to toplevel, if any.
...
Fixes #30 .
2019-05-12 05:21:23 +00:00
Jean-François Nguyen
6a77122c2e
lib.io: add a name argument to the Pin constructor.
2019-04-24 22:02:20 +00:00
whitequark
a982fbe377
build.dsl: style. NFC.
2019-04-24 15:02:30 +00:00
Jean-François Nguyen
dd5bd1c88d
build: add DSL for defining platform resources.
2019-04-24 11:49:01 +00:00
whitequark
97af266645
back.verilog: allow stripping the src attribute, for cleaner output.
2019-04-22 14:59:53 +00:00
Alain Péteut
c8e92c0612
compat.fhdl.specials: fix Tristate, TSTriple.
...
* fix TSTriple instance.
* TSTriple, Tristate: tag as Elaboratable
2019-04-22 09:57:12 +00:00
Alain Péteut
371dc8bebe
compat.fhdl.specials: fix Tristate.
2019-04-22 08:49:08 +00:00
whitequark
93d15abcf1
compat.fhdl.specials: fix TSTriple.
2019-04-22 08:15:03 +00:00
whitequark
585514e6ed
hdl.ir: rework named port handling for Instances.
...
The main purpose of this rework is cleanup, to avoid specifying
the direction of input ports in an implicit, ad-hoc way using
the named ports and ports dictionaries.
While working on this I realized that output ports can be connected
to anything that is valid on LHS, so this is now supported too.
2019-04-22 07:46:47 +00:00
whitequark
44711b7d08
hdl.ir: detect elaboratables that are created but not used.
...
Requres every elaboratable to inherit from Elaboratable, but still
accepts ones that do not, with a warning.
Fixes #3 .
2019-04-21 08:52:57 +00:00
whitequark
85ae99c1b4
back.rtlil: emit nmigen.hierarchy
attribute.
...
Fixes #54 .
2019-04-21 07:55:08 +00:00
whitequark
360bc9b5b4
hdl.ast: improve tests for exceptional conditions.
2019-04-21 07:20:00 +00:00
whitequark
33f9bd2a1d
hdl.ast: accept Signals with identical min/max bounds.
...
And produce a 0-bit signal.
Fixes #58 .
2019-04-21 07:16:59 +00:00
whitequark
083016d747
back.rtlil: only expand legalized values in Array/Part context on RHS.
...
Otherwise the following code fails to compile:
index = Signal(1)
array = Array(range(2))
with m.If(0 == array[index]):
m.d.sync += index.eq(0)
Fixes #51 .
2019-04-21 06:43:31 +00:00
whitequark
ce1eff5464
hdl.rec: implement Record.connect.
...
Fixes #31 .
2019-04-21 06:37:08 +00:00
whitequark
f22106e5ef
back.rtlil: allow record slices on LHS.
2019-04-20 08:12:29 +00:00
whitequark
611c25f909
hdl.rec: fix slicing of records.
2019-04-19 19:55:39 +00:00
whitequark
dda8f34d39
hdl.xfrm: handle classes that inherit from Record.
2019-04-18 17:06:33 +00:00