Open mithro opened 6 years ago
So it seems <fc_override fc_type="abs" fc_val="2" port_name="RDATA[7:0]" segment_name="local"/>
and <loc side="right" xoffset="0" yoffset="0">
don't take partial pins, you can only specify the full port name.
I've reworked the code to;
<pb_type name="RAM" height="2">
<!-- Read port -->
<output name="RDATAT" num_pins="8" equivalent="false"/>
<output name="RDATAB" num_pins="8" equivalent="false"/>
<input name="RADDR" num_pins="11" equivalent="false"/>
<input name="RE" num_pins="1" equivalent="false"/>
<input name="RCLKE" num_pins="1" equivalent="false"/>
<clock name="RCLK" num_pins="1" equivalent="false"/>
<!-- Write port -->
<input name="WDATAT" num_pins="8" equivalent="false"/>
<input name="WDATAB" num_pins="8" equivalent="false"/>
<input name="MASKT" num_pins="8" equivalent="false"/>
<input name="MASKB" num_pins="8" equivalent="false"/>
<input name="WADDR" num_pins="11" equivalent="false"/>
<input name="WE" num_pins="1" equivalent="false"/>
<input name="WCLKE" num_pins="1" equivalent="false"/>
<clock name="WCLK" num_pins="1" equivalent="false"/>
<fc default_in_type="frac" default_in_val="0.0" default_out_type="frac" default_out_val="0.0">
<fc_override fc_type="abs" fc_val="2" port_name="RDATAT" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="RDATAB" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="RADDR" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="RE" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="RCLKE" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="RCLK" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="WDATAT" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="WDATAB" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="MASKT" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="MASKB" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="WADDR" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="WE" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="WCLKE" segment_name="local"/>
<fc_override fc_type="abs" fc_val="2" port_name="WCLK" segment_name="local"/>
</fc>
<pinlocations pattern="custom">
<!-- RAMB Tile -->
<loc side="right" xoffset="0" yoffset="0">
RAM.RDATAB
RAM.WADDR
RAM.MASKB
RAM.WDATAB
RAM.WCLKE
RAM.WCLK
RAM.WE
</loc>
<!-- RAMT Tile -->
<loc side="right" xoffset="0" yoffset="1">
RAM.RDATAT
RAM.RADDR
RAM.MASKT
RAM.WDATAT
RAM.RCLKE
RAM.RCLK
RAM.RE
</loc>
</pinlocations>
<switchblock_locations pattern="external_full_internal_straight"/>
</pb_type>
<!-- End RAM -->
But now I'm hitting the following;
vtr-verilog-to-routing/vpr/src/route/rr_graph2.cpp:900 is_cblock: Assertion 'ofs < length' failed.
Type: "RAM"
capacity: 1
width: 1
height: 2
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 0 1 2 3 4 5 6 7 8 9 10
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 11
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 12
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 13 14 15 16 17 18 19 20
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 21 22 23 24 25 26 27 28
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 29 30 31 32 33 34 35 36
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 37 38 39 40 41 42 43 44
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 45 46 47 48 49 50 51 52 53 54 55
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 56
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 57
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 58 59 60 61 62 63 64 65
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 66 67 68 69 70 71 72 73
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 74
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: global pins: 75
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 0 1 2 3 4 5 6 7 8 9 10
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 11
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 12
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 13 14 15 16 17 18 19 20
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 21 22 23 24 25 26 27 28
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 29 30 31 32 33 34 35 36
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 37 38 39 40 41 42 43 44
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 45 46 47 48 49 50 51 52 53 54 55
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 56
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 57
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 58 59 60 61 62 63 64 65
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 66 67 68 69 70 71 72 73
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 74
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span12 pins: 75
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 0 1 2 3 4 5 6 7 8 9 10
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 11
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 12
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 13 14 15 16 17 18 19 20
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 21 22 23 24 25 26 27 28
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 29 30 31 32 33 34 35 36
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 37 38 39 40 41 42 43 44
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 45 46 47 48 49 50 51 52 53 54 55
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 56
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 57
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 58 59 60 61 62 63 64 65
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 66 67 68 69 70 71 72 73
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 74
fc_value_type: FRACTIONAL fc_value: 0.000000 segment: span4 pins: 75
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 0 1 2 3 4 5 6 7 8 9 10
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 11
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 12
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 13 14 15 16 17 18 19 20
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 21 22 23 24 25 26 27 28
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 29 30 31 32 33 34 35 36
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 37 38 39 40 41 42 43 44
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 45 46 47 48 49 50 51 52 53 54 55
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 56
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 57
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 58 59 60 61 62 63 64 65
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 66 67 68 69 70 71 72 73
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 74
fc_value_type: ABSOLUTE fc_value: 2.000000 segment: local pins: 75
num_drivers: 16
num_receivers: 58
@kmurray - Any idea what is going on here?
I hit my head against it a bit yesterday but was unable to figure out the correct fix.
FYI When we fix this, then I should have blockrams on the iCE40. If you need more information (like the full arch.xml) I'm happy to provide.
Full architecture files would help debug the issue. VPR should not crash on invalid input.
A quick look through the code indicates that <fc_override>
only supports a single override per port.
I haven't looked at the <loc>
handling code, but I think it should support per-pin location specifications.
I'm trying to describe the dual-port ram in the iCE40 (as part of #245). The dual port ram takes up two vertical tiles in the design which you can see described here;
The IceStorm docs for the ram tile then describes the "pin layout" as shown here;
When I describe the architecture with the following, I get a segfault;
If I change the pinlocations to just use a single loc, it works;
If I change the fc_override values to be split up, it seems to stop the segfault;
But I get the following errors;
Your Environment