| // | |
| // yosys -- Yosys Open SYnthesis Suite | |
| // | |
| // Copyright (C) 2018 Serge Bazanski <q3k@symbioticeda.com> | |
| // | |
| // Permission to use, copy, modify, and/or distribute this software for any | |
| // purpose with or without fee is hereby granted, provided that the above | |
| // copyright notice and this permission notice appear in all copies. | |
| // | |
| // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
| // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
| // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
| // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
| // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
| // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
| // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
| // | |
| /// Protobuf definition of Yosys RTLIL dump/restore format for RTL designs. | |
| syntax = "proto3"; | |
| package yosys.pb; | |
| // Port direction. | |
| enum Direction { | |
| DIRECTION_INVALID = 0; | |
| DIRECTION_INPUT = 1; | |
| DIRECTION_OUTPUT = 2; | |
| DIRECTION_INOUT = 3; | |
| } | |
| // A freeform parameter/attribute value. | |
| message Parameter { | |
| oneof value { | |
| int64 int = 1; | |
| string str = 2; | |
| } | |
| } | |
| // A signal in the design - either a unique identifier for one, or a constant | |
| // driver (low or high). | |
| message Signal { | |
| // A constant signal driver in the design. | |
| enum ConstantDriver { | |
| CONSTANT_DRIVER_INVALID = 0; | |
| CONSTANT_DRIVER_LOW = 1; | |
| CONSTANT_DRIVER_HIGH = 2; | |
| CONSTANT_DRIVER_Z = 3; | |
| CONSTANT_DRIVER_X = 4; | |
| } | |
| oneof type { | |
| // Signal uniquely identified by ID number. | |
| int64 id = 1; | |
| // Constant driver. | |
| ConstantDriver constant = 2; | |
| } | |
| } | |
| // A vector of signals. | |
| message BitVector { | |
| repeated Signal signal = 1; | |
| } | |
| // A netlist module. | |
| message Module { | |
| // Freeform attributes. | |
| map<string, Parameter> attribute = 1; | |
| // Named ports in this module. | |
| message Port { | |
| Direction direction = 1; | |
| BitVector bits = 2; | |
| } | |
| map<string, Port> port = 2; | |
| // Named cells in this module. | |
| message Cell { | |
| // Set to true when the name of this cell is automatically created and | |
| // likely not of interest for a regular user. | |
| bool hide_name = 1; | |
| string type = 2; | |
| // Set if this module has an AIG model available. | |
| string model = 3; | |
| // Freeform parameters. | |
| map<string, Parameter> parameter = 4; | |
| // Freeform attributes. | |
| map<string, Parameter> attribute = 5; | |
| /// Ports of the cell. | |
| // Direction of the port, if interface is known. | |
| map<string, Direction> port_direction = 6; | |
| // Connection of named port to signal(s). | |
| map<string, BitVector> connection = 7; | |
| } | |
| map<string, Cell> cell = 3; | |
| // Nets in this module. | |
| message Netname { | |
| // Set to true when the name of this net is automatically created and | |
| // likely not of interest for a regular user. | |
| bool hide_name = 1; | |
| // Signal(s) that make up this net. | |
| BitVector bits = 2; | |
| // Freeform attributes. | |
| map<string, Parameter> attributes = 3; | |
| } | |
| repeated Netname netname = 4; | |
| } | |
| // And-Inverter-Graph model. | |
| message Model { | |
| message Node { | |
| // Type of AIG node - or, what its' value is. | |
| enum Type { | |
| TYPE_INVALID = 0; | |
| // The node's value is the value of the specified input port bit. | |
| TYPE_PORT = 1; | |
| // The node's value is the inverted value of the specified input | |
| // port bit. | |
| TYPE_NPORT = 2; | |
| // The node's value is the ANDed value of specified nodes. | |
| TYPE_AND = 3; | |
| // The node's value is the NANDed value of specified nodes. | |
| TYPE_NAND = 4; | |
| // The node's value is a constant 1. | |
| TYPE_TRUE = 5; | |
| // The node's value is a constant 0. | |
| TYPE_FALSE = 6; | |
| }; | |
| Type type = 1; | |
| message Port { | |
| // Name of port. | |
| string portname = 1; | |
| // Bit index in port. | |
| int64 bitindex = 2; | |
| } | |
| message Gate { | |
| // Node index of left side of operation. | |
| int64 left = 1; | |
| // Node index of right side of operation. | |
| int64 right = 2; | |
| } | |
| oneof node { | |
| // Set for PORT, NPORT | |
| Port port = 2; | |
| // Set for AND, NAND. | |
| Gate gate = 3; | |
| } | |
| // Set when the node drives given output port(s). | |
| message OutPort { | |
| // Name of port. | |
| string name = 1; | |
| // Bit index in port. | |
| int64 bit_index = 2; | |
| } | |
| repeated OutPort out_port = 4; | |
| } | |
| // List of AIG nodes - each is explicitely numbered by its' index in this | |
| // array. | |
| repeated Node node = 1; | |
| } | |
| // A Yosys design netlist dumped from RTLIL. | |
| message Design { | |
| // Human-readable freeform 'remark' string. | |
| string creator = 1; | |
| // List of named modules in design. | |
| map<string, Module> modules = 2; | |
| // List of named AIG models in design (if AIG export enabled). | |
| map<string, Model> models = 3; | |
| } |