diff options
author | gatecat <gatecat@ds0.me> | 2021-04-14 09:42:23 +0100 |
---|---|---|
committer | gatecat <gatecat@ds0.me> | 2021-04-19 19:49:52 +0100 |
commit | a25240d8c39e7260ef71ea8724dc2f4d09b54d08 (patch) | |
tree | 9709b44d954394d0e49f2274adc95c9c52cdfe0d /interchange/DeviceResources.capnp | |
parent | 71720ab240136076ea0d22424f1ab88be0ba00f9 (diff) | |
download | fpga-interchange-schema-a25240d8c39e7260ef71ea8724dc2f4d09b54d08.tar.gz fpga-interchange-schema-a25240d8c39e7260ef71ea8724dc2f4d09b54d08.tar.bz2 fpga-interchange-schema-a25240d8c39e7260ef71ea8724dc2f4d09b54d08.zip |
Add specification of default cell pin values
This adds structures for DeviceResources for the default values for cell
pins that are missing or disconnected.
Previously the contract was that the synthesis tool would always give
cell pins a value, but this has several problems:
- existing flows aren't doing this
- cells might want to be created by the PnR tool or anything else
reading the interchange format
- sometimes, floating is a valid default value (for example certain
dedicated pins) and the existing contract didn't recognise that
- setting all disconnected pins to ground is definitely not correct,
vendor tools usually connect disconnected clock enables to Vcc for
example.
Signed-off-by: gatecat <gatecat@ds0.me>
Diffstat (limited to 'interchange/DeviceResources.capnp')
-rw-r--r-- | interchange/DeviceResources.capnp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/interchange/DeviceResources.capnp b/interchange/DeviceResources.capnp index 0b22a41..5a52bec 100644 --- a/interchange/DeviceResources.capnp +++ b/interchange/DeviceResources.capnp @@ -339,6 +339,33 @@ struct Device { constant @2 : ConstantType; } + # These structures are used to define default constant values for unused + # or missing cell pins. For each cell type, we have a list of pins and + # what to do with those pins (which will be to tie it to 0 or 1 in most + # cases). + enum CellPinValue { + # leave floating + float @0; + # connect to ground + gnd @1; + # connect to vcc + vcc @2; + } + + struct DefaultCellConnection { + # What is the name of this cell pin? + name @0 : StringIdx $stringRef(); + # The default constant value for the pin if missing or disconnected + value @1 : CellPinValue; + } + + struct DefaultCellConnections { + # The type of the cell we're providing a list of defaults for + cellType @0 : StringIdx $stringRef(); + # The list of default cell pin values + pins @1 : List(DefaultCellConnection); + } + # When either constant signal can be routed to an input site pin, which # constant should be used by default? # @@ -383,6 +410,9 @@ struct Device { anyName @10 : Void; name @11 : StringIdx $stringRef(); } + + # How to treat missing/disconnected cell pins + defaultCellConns @12 : List(DefaultCellConnections); } ###################################### |