hdl.mem: remove WritePort(priority=) argument.
authorwhitequark <cz@m-labs.hk>
Sat, 28 Sep 2019 01:29:56 +0000 (01:29 +0000)
committerwhitequark <cz@m-labs.hk>
Sat, 28 Sep 2019 01:29:56 +0000 (01:29 +0000)
commit7d72acbfe98def6a7dba06d0b1eba3e4f0014822
treee7ac3be52a59a7a57d6e86aa0a888445d3d00ed6
parent0d61404e1ced0e7f39a5527630b32bd703f11618
hdl.mem: remove WritePort(priority=) argument.

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

In the future we should extend nMigen's formal verification to assert
that a write collision does not happen.
nmigen/hdl/mem.py
nmigen/test/test_hdl_mem.py