hdl.mem: remove WritePort(priority=) argument.
authorwhitequark <whitequark@whitequark.org>
Sat, 28 Sep 2019 01:29:56 +0000 (01:29 +0000)
committerwhitequark <whitequark@whitequark.org>
Sat, 28 Sep 2019 01:29:56 +0000 (01:29 +0000)
commita02e3750bfeba44bcaad4c5de8d9eb0ef055d9c6
treee7ac3be52a59a7a57d6e86aa0a888445d3d00ed6
parente3a1d05f233ddc266c7920e9904492ea43d34810
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