Closed litghost closed 3 years ago
The issue is that in a minority of instances, logical cell pins can have a one-to-many mapping to physical pins. RapidWright uses two maps to provide fast pin mapping access in either direction and so the Logical-to-Physical map loses information when populated.
Perhaps it makes sense to simply remove the Logical-to-Physical map? Creating another list object for every pin in a design will negatively impact memory usage and runtime. A new API could be created that lazily builds the multi-map and returns the list of physical pins the logical pin maps to.
I'd argue what should happen is L2P should return null
when the logical pin is missing from the pinout. I'd also argue that a multimap is the right data structure here. Alternatively, the signature should be changed to Map<String, Set<String>>
This should be fixed in 2020.1.6. The internal data structure for logical to physical pins has been replaced with a lazily-built hash multimap. The return types of relevant APIs have also been updated accordingly:
public Map<String,String> getPinMappingsL2P()
--> Changed return type: public Map<String,Set<String>> getPinMappingsL2P()
public List<String> getAllPhysicalPinMappings(String logicalPin)
--> Changed return type: public Set<String> getAllPhysicalPinMappings(String logicalPin)
When
Cell.getPinMappingsL2P
is invoked on aRAMB36E1
with:getPinMappingsL2P
returns an incorrect pin mapping, output:getPinMappingsP2L
returns the correct subset of pins:So getPinMappingsL2P is reporting that WEBWE[1] should map to WEBWEU1, but for SDP WRITE_WIDTH_B=72, WEBWE[1] is actual unmapped.
From Vivado, run:
Returns: