diff --git a/README.md b/README.md index 3b4bafa8f2a..d36660e8401 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Welcome to HAL! -[![Ubuntu 20.04](https://github.com/emsec/hal/actions/workflows/ubuntu20.04.yml/badge.svg)](https://github.com/emsec/hal/actions/workflows/ubuntu20.04.yml) [![Ubuntu 22.04](https://github.com/emsec/hal/actions/workflows/ubuntu22.04.yml/badge.svg)](https://github.com/emsec/hal/actions/workflows/ubuntu22.04.yml) [![macOS](https://github.com/emsec/hal/actions/workflows/macOS.yml/badge.svg)](https://github.com/emsec/hal/actions/workflows/macOS.yml) [![Deploy Documentation](https://github.com/emsec/hal/actions/workflows/releaseDoc.yml/badge.svg)](https://github.com/emsec/hal/actions/workflows/releaseDoc.yml) [![Doc: C++](https://img.shields.io/badge/doc-c%2B%2B-orange)](https://emsec.github.io/hal/doc/) [![Doc: Python](https://img.shields.io/badge/doc-python-red)](https://emsec.github.io/hal/pydoc/) +[![Ubuntu 22.04](https://github.com/emsec/hal/actions/workflows/ubuntu22.04.yml/badge.svg)](https://github.com/emsec/hal/actions/workflows/ubuntu22.04.yml) [![Ubuntu 24.04](https://github.com/emsec/hal/actions/workflows/ubuntu24.04.yml/badge.svg)](https://github.com/emsec/hal/actions/workflows/ubuntu24.04.yml) [![macOS](https://github.com/emsec/hal/actions/workflows/macOS.yml/badge.svg)](https://github.com/emsec/hal/actions/workflows/macOS.yml) [![Deploy Documentation](https://github.com/emsec/hal/actions/workflows/releaseDoc.yml/badge.svg)](https://github.com/emsec/hal/actions/workflows/releaseDoc.yml) [![Doc: C++](https://img.shields.io/badge/doc-c%2B%2B-orange)](https://emsec.github.io/hal/doc/) [![Doc: Python](https://img.shields.io/badge/doc-python-red)](https://emsec.github.io/hal/pydoc/) HAL \[/hel/\] is a comprehensive netlist reverse engineering and manipulation framework. diff --git a/include/hal_core/netlist/decorators/netlist_traversal_decorator.h b/include/hal_core/netlist/decorators/netlist_traversal_decorator.h index 650cb4cf988..5b7225efddc 100644 --- a/include/hal_core/netlist/decorators/netlist_traversal_decorator.h +++ b/include/hal_core/netlist/decorators/netlist_traversal_decorator.h @@ -51,8 +51,6 @@ namespace hal * Traverse over gates that do not meet the `target_gate_filter` condition. * Stop traversal if (1) `continue_on_match` is `false` the `target_gate_filter` evaluates to `true`, (2) the `exit_endpoint_filter` evaluates to `false` on a fan-in/out endpoint (i.e., when exiting the current gate during traversal), or (3) the `entry_endpoint_filter` evaluates to `false` on a successor/predecessor endpoint (i.e., when entering the next gate during traversal). * Both the `entry_endpoint_filter` and the `exit_endpoint_filter` may be omitted. - * Provide a cache to speed up traversal when calling this function multiple times on the same netlist using the same forbidden pins. - * Do not use a cache if the filter functions operate on the `current_depth`. * * @param[in] net - Start net. * @param[in] successors - Set `true` to get successors, set `false` to get predecessors. @@ -60,7 +58,6 @@ namespace hal * @param[in] continue_on_match - Set `true` to continue even if `target_gate_filter` evaluated to `true`, `false` otherwise. Defaults to `false`. * @param[in] exit_endpoint_filter - Filter condition that determines whether to stop traversal on a fan-in/out endpoint. * @param[in] entry_endpoint_filter - Filter condition that determines whether to stop traversal on a successor/predecessor endpoint. - * @param[inout] cache - An optional cache that can be used for better performance on repeated calls. Defaults to a `nullptr`. * @returns The next gates fulfilling the target gate filter condition on success, an error otherwise. */ Result> get_next_matching_gates(const Net* net, @@ -68,15 +65,13 @@ namespace hal const std::function& target_gate_filter, bool continue_on_match = false, const std::function& exit_endpoint_filter = nullptr, - const std::function& entry_endpoint_filter = nullptr, - std::unordered_map>* cache = nullptr) const; + const std::function& entry_endpoint_filter = nullptr) const; /** * Starting from the given gate, traverse the netlist and return only the successor/predecessor gates for which the `target_gate_filter` evaluates to `true`. * Traverse over gates that do not meet the `target_gate_filter` condition. * Stop traversal if (1) `continue_on_match` is `false` the `target_gate_filter` evaluates to `true`, (2) the `exit_endpoint_filter` evaluates to `false` on a fan-in/out endpoint (i.e., when exiting the current gate during traversal), or (3) the `entry_endpoint_filter` evaluates to `false` on a successor/predecessor endpoint (i.e., when entering the next gate during traversal). * Both the `entry_endpoint_filter` and the `exit_endpoint_filter` may be omitted. - * Do not use a cache if the filter functions operate on the `current_depth`. * * @param[in] gate - Start gate. * @param[in] successors - Set `true` to get successors, set `false` to get predecessors. @@ -84,7 +79,6 @@ namespace hal * @param[in] continue_on_match - Set `true` to continue even if `target_gate_filter` evaluated to `true`, `false` otherwise. Defaults to `false`. * @param[in] exit_endpoint_filter - Filter condition that determines whether to stop traversal on a fan-in/out endpoint. * @param[in] entry_endpoint_filter - Filter condition that determines whether to stop traversal on a successor/predecessor endpoint. - * @param[inout] cache - An optional cache that can be used for better performance on repeated calls. Defaults to a `nullptr`. * @returns The next gates fulfilling the target gate filter condition on success, an error otherwise. */ Result> get_next_matching_gates(const Gate* gate, @@ -92,8 +86,7 @@ namespace hal const std::function& target_gate_filter, bool continue_on_match = false, const std::function& exit_endpoint_filter = nullptr, - const std::function& entry_endpoint_filter = nullptr, - std::unordered_map>* cache = nullptr) const; + const std::function& entry_endpoint_filter = nullptr) const; /** * Starting from the given net, traverse the netlist and return only the successor/predecessor gates for which the `target_gate_filter` evaluates to `true`. diff --git a/include/hal_core/netlist/gate_library/enums/gate_type_property.h b/include/hal_core/netlist/gate_library/enums/gate_type_property.h index 47ffd859a8b..af06120f698 100644 --- a/include/hal_core/netlist/gate_library/enums/gate_type_property.h +++ b/include/hal_core/netlist/gate_library/enums/gate_type_property.h @@ -32,34 +32,36 @@ namespace hal */ enum class GateTypeProperty { - combinational, /**< Combinational gate type. **/ - sequential, /**< Sequential gate type. **/ - tristate, /**< Tristate gate type. **/ - power, /**< Power gate type. **/ - ground, /**< Ground gate type. **/ - ff, /**< Flip-flop gate type. **/ - latch, /**< Latch gate type. **/ - ram, /**< RAM gate type. **/ - io, /**< IO gate type. **/ - dsp, /**< DSP gate type. **/ - pll, /**< PLL gate type. **/ - oscillator, /**< Oscillator gate type. **/ - scan, /**< Scan gate type. **/ - c_buffer, /**< Buffer gate type. **/ - c_inverter, /**< Inverter gate type. **/ - c_and, /**< AND gate type. **/ - c_nand, /**< NAND gate type. **/ - c_or, /**< OR gate type. **/ - c_nor, /**< NOR gate type. **/ - c_xor, /**< XOR gate type. **/ - c_xnor, /**< XNOR gate type. **/ - c_aoi, /**< AOI gate type. **/ - c_oai, /**< OAI gate type. **/ - c_mux, /**< MUX gate type. **/ - c_carry, /**< Carry gate type. **/ - c_half_adder, /**< Half adder gate type. **/ - c_full_adder, /**< Full adder gate type. **/ - c_lut /**< LUT gate type. **/ + combinational, /**< Combinational gate type. **/ + sequential, /**< Sequential gate type. **/ + tristate, /**< Tristate gate type. **/ + power, /**< Power gate type. **/ + ground, /**< Ground gate type. **/ + ff, /**< Flip-flop gate type. **/ + latch, /**< Latch gate type. **/ + ram, /**< RAM gate type. **/ + fifo, /**< FIFO gate type. **/ + shift_register, /**< Shift register gate type. **/ + io, /**< IO gate type. **/ + dsp, /**< DSP gate type. **/ + pll, /**< PLL gate type. **/ + oscillator, /**< Oscillator gate type. **/ + scan, /**< Scan gate type. **/ + c_buffer, /**< Buffer gate type. **/ + c_inverter, /**< Inverter gate type. **/ + c_and, /**< AND gate type. **/ + c_nand, /**< NAND gate type. **/ + c_or, /**< OR gate type. **/ + c_nor, /**< NOR gate type. **/ + c_xor, /**< XOR gate type. **/ + c_xnor, /**< XNOR gate type. **/ + c_aoi, /**< AOI gate type. **/ + c_oai, /**< OAI gate type. **/ + c_mux, /**< MUX gate type. **/ + c_carry, /**< Carry gate type. **/ + c_half_adder, /**< Half adder gate type. **/ + c_full_adder, /**< Full adder gate type. **/ + c_lut /**< LUT gate type. **/ }; template<> diff --git a/include/hal_core/netlist/gate_library/enums/pin_type.h b/include/hal_core/netlist/gate_library/enums/pin_type.h index b8a35ef1a03..5c0a2b3556e 100644 --- a/include/hal_core/netlist/gate_library/enums/pin_type.h +++ b/include/hal_core/netlist/gate_library/enums/pin_type.h @@ -34,22 +34,27 @@ namespace hal */ enum class PinType { - none, /**< Default pin. **/ - power, /**< Power pin. **/ - ground, /**< Ground pin. **/ - lut, /**< Pin that generates output from LUT initialization string. **/ - state, /**< Pin that generates output from internal state. **/ - neg_state, /**< Pin that generates output from negated internal state. **/ - clock, /**< Clock pin. **/ - enable, /**< Enable pin. **/ - set, /**< Set/preset pin. **/ - reset, /**< Reset/clear pin. **/ - data, /**< Data pin. **/ - address, /**< Address pin. **/ - io_pad, /**< IO pad pin. **/ - select, /**< Select pin. **/ - carry, /**< Carry pin. **/ - sum /**< Sum pin. **/ + none, /**< Default pin. **/ + power, /**< Power pin. **/ + ground, /**< Ground pin. **/ + lut, /**< Pin that generates output from LUT initialization string. **/ + state, /**< Pin that generates output from internal state. **/ + neg_state, /**< Pin that generates output from negated internal state. **/ + clock, /**< Clock pin. **/ + enable, /**< Enable pin. **/ + set, /**< Set/preset pin. **/ + reset, /**< Reset/clear pin. **/ + data, /**< Data pin. **/ + address, /**< Address pin. **/ + io_pad, /**< IO pad pin. **/ + select, /**< Select pin. **/ + carry, /**< Carry pin. **/ + sum, /**< Sum pin. **/ + status, /**< Status pin.*/ + error, /**< Error pin.*/ + error_detection, /**< Error detection pin.*/ + done, /**< Done pin.*/ + control /**< Control pin.*/ }; template<> diff --git a/include/hal_core/netlist/gate_library/gate_type.h b/include/hal_core/netlist/gate_library/gate_type.h index 17fcdf81893..3760d374ce1 100644 --- a/include/hal_core/netlist/gate_library/gate_type.h +++ b/include/hal_core/netlist/gate_library/gate_type.h @@ -50,6 +50,13 @@ namespace hal class NETLIST_API GateType { public: + /** + * Hash function for python binding. + * + * @return Pybind11 compatible hash. + */ + ssize_t get_hash() const; + /** * Get all components matching the filter condition (if provided) as a vector. * Returns an empty vector if (i) the gate type does not contain any components or (ii) no component matches the filter condition. diff --git a/include/hal_core/netlist/net.h b/include/hal_core/netlist/net.h index 4cb0d14ca27..3b5985068fc 100644 --- a/include/hal_core/netlist/net.h +++ b/include/hal_core/netlist/net.h @@ -210,10 +210,12 @@ namespace hal /** * Get the number of sources of the net. + * The optional filter is evaluated on every candidate such that the result only contains those matching the specified condition. * + * @param[in] filter - An optional filter. * @returns The number of sources. */ - u32 get_num_of_sources() const; + u32 get_num_of_sources(const std::function& filter = nullptr) const; /** * Get a vector of sources of the net. @@ -318,10 +320,12 @@ namespace hal /** * Get the number of destinations of the net. + * The optional filter is evaluated on every candidate such that the result only contains those matching the specified condition. * + * @param[in] filter - An optional filter. * @returns The number of destinations. */ - u32 get_num_of_destinations() const; + u32 get_num_of_destinations(const std::function& filter = nullptr) const; /** * Get a vector of destinations of the net. diff --git a/plugins/.gitignore b/plugins/.gitignore index d4a380aef01..b88558e8765 100644 --- a/plugins/.gitignore +++ b/plugins/.gitignore @@ -15,14 +15,16 @@ !gui/**/* !gui_extension_demo* !gui_extension_demo/**/* -!liberty_parser* -!liberty_parser/**/* -!netlist_preprocessing* -!netlist_preprocessing/**/* +!hawkeye* +!hawkeye/**/* !hgl_parser* !hgl_parser/**/* !hgl_writer* !hgl_writer/**/* +!liberty_parser* +!liberty_parser/**/* +!netlist_preprocessing* +!netlist_preprocessing/**/* !python_shell* !python_shell/**/* !simulator diff --git a/plugins/gate_libraries/definitions/XILINX_UNISIM.hgl b/plugins/gate_libraries/definitions/XILINX_UNISIM.hgl index cfa0df6217d..8b49f5edbcd 100644 --- a/plugins/gate_libraries/definitions/XILINX_UNISIM.hgl +++ b/plugins/gate_libraries/definitions/XILINX_UNISIM.hgl @@ -565,722 +565,722 @@ "name": "FIFO18E1", "types": [ "sequential", - "ram" + "fifo" ], "pin_groups": [ { "name": "DI", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DI(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DIP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "RDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "RDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "RDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "RDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RST", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RST", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREG", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREG", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "WRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ALMOSTEMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "ALMOSTEMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "ALMOSTFULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "ALMOSTFULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "DO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DO(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DOP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "EMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "EMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "FULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "FULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "RDCOUNT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 11, "pins": [ { "name": "RDCOUNT(11)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(10)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(9)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(8)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(7)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(6)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(5)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(4)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(3)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(2)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(1)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(0)", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "RDERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "RDERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "WRCOUNT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 11, "pins": [ { "name": "WRCOUNT(11)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(10)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(9)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(8)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(7)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(6)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(5)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(4)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(3)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(2)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(1)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(0)", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "WRERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "WRERR", "direction": "output", - "type": "none" + "type": "error" } ] } @@ -4729,196 +4729,196 @@ { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "I", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "I", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "RADR0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -4934,126 +4934,126 @@ { "name": "ADR0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "I", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "I", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -5062,90 +5062,91 @@ { "name": "IDDRE1", "types": [ - "combinational" + "sequential", + "ff" ], "pin_groups": [ { "name": "C", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "C", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "CB", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CB", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "R", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "R", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "Q1", "direction": "output", - "type": "none", + "type": "state", "ascending": false, "start_index": 0, "pins": [ { "name": "Q1", "direction": "output", - "type": "none" + "type": "state" } ] }, { "name": "Q2", "direction": "output", - "type": "none", + "type": "state", "ascending": false, "start_index": 0, "pins": [ { "name": "Q2", "direction": "output", - "type": "none" + "type": "state" } ] } @@ -5161,2381 +5162,2381 @@ { "name": "ADDRARDADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 14, "pins": [ { "name": "ADDRARDADDR(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRBWRADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 14, "pins": [ { "name": "ADDRBWRADDR(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRENA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ADDRENA", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ADDRENB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ADDRENB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASDIMUXA", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDIMUXA", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDIMUXB", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDIMUXB", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDINA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "CASDINA(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CASDINB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "CASDINB(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CASDINPA", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "CASDINPA(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINPA(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINPA(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINPA(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASDINPB", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "CASDINPB(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINPB(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINPB(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINPB(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASDOMUXA", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXA", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDOMUXB", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXB", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDOMUXEN_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXEN_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASDOMUXEN_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXEN_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASINDBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CASINDBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "CASINSBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CASINSBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "CASOREGIMUXA", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXA", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASOREGIMUXB", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXB", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASOREGIMUXEN_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXEN_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASOREGIMUXEN_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXEN_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CLKARDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKARDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "CLKBWRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKBWRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "DINADIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DINADIN(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DINBDIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DINBDIN(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DINPADINP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DINPADINP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINPADINP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINPADINP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINPADINP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "DINPBDINP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DINPBDINP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINPBDINP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINPBDINP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINPBDINP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "ECCPIPECE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ECCPIPECE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ENARDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENARDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ENBWREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENBWREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "INJECTDBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECTDBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECTSBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECTSBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "REGCEAREGCE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEAREGCE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCEB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RSTRAMARSTRAM", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTRAMARSTRAM", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTRAMB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTRAMB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREGARSTREG", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREGARSTREG", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREGB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREGB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "SLEEP", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "SLEEP", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "WEA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 3, "pins": [ { "name": "WEA(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "WEBWE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 7, "pins": [ { "name": "WEBWE(7)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(6)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(5)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(4)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASDOUTA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "CASDOUTA(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CASDOUTB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "CASDOUTB(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CASDOUTPA", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "CASDOUTPA(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTPA(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTPA(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTPA(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASDOUTPB", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "CASDOUTPB(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTPB(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTPB(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTPB(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASOUTDBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOUTDBITERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "CASOUTSBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOUTSBITERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "DBITERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DOUTADOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DOUTADOUT(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOUTBDOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DOUTBDOUT(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOUTPADOUTP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DOUTPADOUTP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTPADOUTP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTPADOUTP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTPADOUTP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "DOUTPBDOUTP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DOUTPBDOUTP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTPBDOUTP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTPBDOUTP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTPBDOUTP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "ECCPARITY", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "ECCPARITY(7)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(6)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(5)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(4)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "RDADDRECC", "direction": "output", - "type": "none", + "type": "address", "ascending": false, "start_index": 8, "pins": [ { "name": "RDADDRECC(8)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "RDADDRECC(7)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "RDADDRECC(6)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "RDADDRECC(5)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "RDADDRECC(4)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "RDADDRECC(3)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "RDADDRECC(2)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "RDADDRECC(1)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "RDADDRECC(0)", "direction": "output", - "type": "none" + "type": "address" } ] }, { "name": "SBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "SBITERR", "direction": "output", - "type": "none" + "type": "error" } ] } @@ -7544,7 +7545,7 @@ { "name": "IDELAYE3", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -195658,7 +195659,7 @@ { "name": "MMCME2_ADV", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -196315,182 +196316,182 @@ { "name": "ADR0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR5", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR5", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "I", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "I", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WADR6", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR6", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR7", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR7", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR8", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR8", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -196500,1197 +196501,1197 @@ "name": "FIFO36E1", "types": [ "sequential", - "ram" + "fifo" ], "pin_groups": [ { "name": "DI", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 63, "pins": [ { "name": "DI(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DI(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "DIP(7)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(6)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(5)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(4)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "INJECTDBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECTDBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECTSBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECTSBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "RDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "RDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "RDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "RDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RST", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RST", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREG", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREG", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "WRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ALMOSTEMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "ALMOSTEMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "ALMOSTFULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "ALMOSTFULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "DBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "DBITERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 63, "pins": [ { "name": "DO(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DO(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "DOP(7)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(6)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(5)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(4)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "ECCPARITY", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "ECCPARITY(7)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(6)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(5)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(4)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "EMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "EMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "FULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "FULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "RDCOUNT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 12, "pins": [ { "name": "RDCOUNT(12)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(11)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(10)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(9)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(8)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(7)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(6)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(5)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(4)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(3)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(2)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(1)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(0)", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "RDERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "RDERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "SBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "SBITERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "WRCOUNT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 12, "pins": [ { "name": "WRCOUNT(12)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(11)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(10)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(9)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(8)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(7)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(6)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(5)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(4)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(3)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(2)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(1)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(0)", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "WRERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "WRERR", "direction": "output", - "type": "none" + "type": "error" } ] } @@ -197699,7 +197700,7 @@ { "name": "DCM_ADV", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -198564,296 +198565,296 @@ { "name": "ADDRA", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRA(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRB", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRB(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRC", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRC(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRD", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRD(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIA", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIB", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIC", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIC", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DID", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DID", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DOA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOA", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOB", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOC", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOC", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOD", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOD", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -199010,7 +199011,8 @@ { "name": "O", "direction": "output", - "type": "none" + "type": "none", + "function": "(I & CE)" } ] } @@ -199019,7 +199021,7 @@ { "name": "ILKN", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -233836,7 +233838,7 @@ { "name": "HBM_SNGLBLI_INTF_APB", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -234437,7 +234439,7 @@ { "name": "PHASER_OUT_PHY", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -234923,7 +234925,7 @@ { "name": "SYSMONE4", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -238260,210 +238262,210 @@ { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "I", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "I", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "RADR0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR5", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR5", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -238472,7 +238474,7 @@ { "name": "PCIE4CE4", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -284765,7 +284767,7 @@ { "name": "ILKNE4", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -370022,1392 +370024,1392 @@ { "name": "ADDRARDADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 13, "pins": [ { "name": "ADDRARDADDR(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRBWRADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 13, "pins": [ { "name": "ADDRBWRADDR(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRENA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ADDRENA", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ADDRENB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ADDRENB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASDIMUXA", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDIMUXA", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDIMUXB", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDIMUXB", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDINA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "CASDINA(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINA(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CASDINB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "CASDINB(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDINB(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CASDINPA", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "CASDINPA(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINPA(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASDINPB", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "CASDINPB(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINPB(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASDOMUXA", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXA", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDOMUXB", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXB", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDOMUXEN_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXEN_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASDOMUXEN_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXEN_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASOREGIMUXA", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXA", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASOREGIMUXB", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXB", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASOREGIMUXEN_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXEN_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASOREGIMUXEN_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXEN_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CLKARDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKARDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "CLKBWRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKBWRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "DINADIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DINADIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINADIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DINBDIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DINBDIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DINBDIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DINPADINP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DINPADINP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINPADINP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "DINPBDINP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DINPBDINP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINPBDINP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "ENARDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENARDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ENBWREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENBWREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCEAREGCE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEAREGCE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCEB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RSTRAMARSTRAM", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTRAMARSTRAM", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTRAMB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTRAMB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREGARSTREG", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREGARSTREG", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREGB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREGB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "SLEEP", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "SLEEP", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "WEA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 1, "pins": [ { "name": "WEA(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "WEBWE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 3, "pins": [ { "name": "WEBWE(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASDOUTA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "CASDOUTA(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTA(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CASDOUTB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "CASDOUTB(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUTB(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CASDOUTPA", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "CASDOUTPA(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTPA(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASDOUTPB", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "CASDOUTPB(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTPB(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "DOUTADOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DOUTADOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTADOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOUTBDOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DOUTBDOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUTBDOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOUTPADOUTP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DOUTPADOUTP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTPADOUTP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "DOUTPBDOUTP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DOUTPBDOUTP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTPBDOUTP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] } @@ -371416,7 +371418,7 @@ { "name": "HSADC", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -375598,158 +375600,158 @@ { "name": "A", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 6, "pins": [ { "name": "A(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DPRA", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 6, "pins": [ { "name": "DPRA(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DPO", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "SPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "SPO", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -375758,62 +375760,63 @@ { "name": "SRL16E", "types": [ - "sequential" + "sequential", + "shift_register" ], "pin_groups": [ { "name": "A0", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A0", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "A1", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A1", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "A2", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A2", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "A3", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A3", "direction": "input", - "type": "none" + "type": "control" } ] }, @@ -375827,7 +375830,7 @@ { "name": "CE", "direction": "input", - "type": "none" + "type": "enable" } ] }, @@ -375841,35 +375844,35 @@ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "Q", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "Q", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -375942,7 +375945,7 @@ { "name": "ISERDESE2", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -376349,168 +376352,168 @@ { "name": "A", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 7, "pins": [ { "name": "A(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DPRA", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 7, "pins": [ { "name": "DPRA(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "DPRA(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DPO", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "SPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "SPO", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -376525,28 +376528,28 @@ { "name": "CE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CLR", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "CLR", "direction": "input", - "type": "none" + "type": "reset" } ] }, @@ -377583,7 +377586,8 @@ { "name": "O", "direction": "output", - "type": "none" + "type": "none", + "function": "I" } ] } @@ -377592,7 +377596,7 @@ { "name": "ODELAYE2_FINEDELAY", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -458202,34 +458206,34 @@ { "name": "STARTUPE2", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "GSR", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "GSR", "direction": "input", - "type": "none" + "type": "reset" } ] }, @@ -458250,140 +458254,140 @@ { "name": "KEYCLEARB", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "KEYCLEARB", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "PACK", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "PACK", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "USRCCLKO", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "USRCCLKO", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "USRCCLKTS", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "USRCCLKTS", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "USRDONEO", "direction": "input", - "type": "none", + "type": "done", "ascending": false, "start_index": 0, "pins": [ { "name": "USRDONEO", "direction": "input", - "type": "none" + "type": "done" } ] }, { "name": "USRDONETS", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "USRDONETS", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CFGCLK", "direction": "output", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CFGCLK", "direction": "output", - "type": "none" + "type": "clock" } ] }, { "name": "CFGMCLK", "direction": "output", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CFGMCLK", "direction": "output", - "type": "none" + "type": "clock" } ] }, { "name": "EOS", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "EOS", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "PREQ", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "PREQ", "direction": "output", - "type": "none" + "type": "status" } ] } @@ -458941,7 +458945,7 @@ { "name": "HSDAC", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -465627,1910 +465631,1910 @@ { "name": "A", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "A(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "B", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "B(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "C", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "C(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "D(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "OPMODE", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 7, "pins": [ { "name": "OPMODE(7)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(6)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(5)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(4)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(3)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(2)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(1)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(0)", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "PCIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "PCIN(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CARRYIN", "direction": "input", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CARRYIN", "direction": "input", - "type": "none" + "type": "carry" } ] }, { "name": "CEA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEA", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEC", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEC", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CECARRYIN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CECARRYIN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CED", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CED", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEM", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEM", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEOPMODE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEOPMODE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEP", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEP", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "RSTA", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTA", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTC", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTC", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTCARRYIN", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTCARRYIN", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTD", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTD", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTM", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTM", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTOPMODE", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTOPMODE", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTP", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTP", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "BCOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "BCOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "M", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 35, "pins": [ { "name": "M(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "M(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "PCOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "PCOUT(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "P", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "P(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CARRYOUT", "direction": "output", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CARRYOUT", "direction": "output", - "type": "none" + "type": "carry" } ] }, { "name": "CARRYOUTF", "direction": "output", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CARRYOUTF", "direction": "output", - "type": "none" + "type": "carry" } ] } @@ -467546,2526 +467550,2526 @@ { "name": "A", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 29, "pins": [ { "name": "A(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "ACIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 29, "pins": [ { "name": "ACIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "ALUMODE", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 3, "pins": [ { "name": "ALUMODE(3)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "ALUMODE(2)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "ALUMODE(1)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "ALUMODE(0)", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "B", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "B(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "BCIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "BCIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "C", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "C(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CARRYCASCIN", "direction": "input", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CARRYCASCIN", "direction": "input", - "type": "none" + "type": "carry" } ] }, { "name": "CARRYIN", "direction": "input", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CARRYIN", "direction": "input", - "type": "none" + "type": "carry" } ] }, { "name": "CARRYINSEL", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 2, "pins": [ { "name": "CARRYINSEL(2)", "direction": "input", - "type": "none" + "type": "select" }, { "name": "CARRYINSEL(1)", "direction": "input", - "type": "none" + "type": "select" }, { "name": "CARRYINSEL(0)", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CEA1", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEA1", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEA2", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEA2", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEAD", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEAD", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEALUMODE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEALUMODE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEB1", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEB1", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEB2", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEB2", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEC", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEC", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CECARRYIN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CECARRYIN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CECTRL", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CECTRL", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CED", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CED", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEINMODE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEINMODE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEM", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEM", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEP", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEP", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 24, "pins": [ { "name": "D(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "INMODE", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 4, "pins": [ { "name": "INMODE(4)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "INMODE(3)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "INMODE(2)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "INMODE(1)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "INMODE(0)", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "MULTSIGNIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "MULTSIGNIN", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "OPMODE", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 6, "pins": [ { "name": "OPMODE(6)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(5)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(4)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(3)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(2)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(1)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(0)", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "PCIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "PCIN(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "RSTA", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTA", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTALLCARRYIN", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTALLCARRYIN", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTALUMODE", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTALUMODE", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTC", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTC", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTCTRL", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTCTRL", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTD", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTD", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTINMODE", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTINMODE", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTM", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTM", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTP", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTP", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "ACOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 29, "pins": [ { "name": "ACOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "BCOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "BCOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CARRYCASCOUT", "direction": "output", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CARRYCASCOUT", "direction": "output", - "type": "none" + "type": "carry" } ] }, { "name": "CARRYOUT", "direction": "output", - "type": "none", + "type": "carry", "ascending": false, "start_index": 3, "pins": [ { "name": "CARRYOUT(3)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CARRYOUT(2)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CARRYOUT(1)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CARRYOUT(0)", "direction": "output", - "type": "none" + "type": "carry" } ] }, { "name": "MULTSIGNOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "MULTSIGNOUT", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "OVERFLOW", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "OVERFLOW", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "P", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "P(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "PATTERNBDETECT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "PATTERNBDETECT", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "PATTERNDETECT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "PATTERNDETECT", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "PCOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "PCOUT(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "UNDERFLOW", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "UNDERFLOW", "direction": "output", - "type": "none" + "type": "status" } ] } @@ -470138,7 +470142,7 @@ { "name": "IDELAYCTRL", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -472764,604 +472768,604 @@ { "name": "ADDRA", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRA(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRB", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRB(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRC", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRC(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRD", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRD(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRE", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRE(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRF", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRF(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRG", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRG(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRH", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRH(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIA(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIB(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIC", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIC(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIC(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DID", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DID(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DID(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIE", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIE(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIE(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIF", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIF(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIF(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIG", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIG(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIG(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIH", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIH(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIH(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DOA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOA", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOB", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOC", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOC", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOD", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOD", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOE", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOE", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOF", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOF", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOG", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOG", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOH", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOH(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOH(0)", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -473377,1403 +473381,1403 @@ { "name": "CLKARDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKARDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "CLKBWRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKBWRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "ENARDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENARDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ENBWREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENBWREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCEAREGCE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEAREGCE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCEB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RSTRAMARSTRAM", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTRAMARSTRAM", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTRAMB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTRAMB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREGARSTREG", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREGARSTREG", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREGB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREGB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "CASCADEINA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "CASCADEINA", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CASCADEINB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "CASCADEINB", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "INJECTDBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECTDBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECTSBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECTSBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "ADDRARDADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 15, "pins": [ { "name": "ADDRARDADDR(15)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRBWRADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 15, "pins": [ { "name": "ADDRBWRADDR(15)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIADI", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DIADI(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIBDI", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DIBDI(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIPADIP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DIPADIP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPADIP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPADIP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPADIP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "DIPBDIP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DIPBDIP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPBDIP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPBDIP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPBDIP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "WEA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 3, "pins": [ { "name": "WEA(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "WEBWE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 7, "pins": [ { "name": "WEBWE(7)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(6)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(5)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(4)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASCADEOUTA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "CASCADEOUTA", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CASCADEOUTB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "CASCADEOUTB", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "DBITERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DOADO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DOADO(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOBDO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DOBDO(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOPADOP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DOPADOP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPADOP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPADOP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPADOP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "DOPBDOP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DOPBDOP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPBDOP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPBDOP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPBDOP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "ECCPARITY", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "ECCPARITY(7)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(6)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(5)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(4)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "RDADDRECC", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 8, "pins": [ { "name": "RDADDRECC(8)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "RDADDRECC(7)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "RDADDRECC(6)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "RDADDRECC(5)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "RDADDRECC(4)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "RDADDRECC(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "RDADDRECC(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "RDADDRECC(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "RDADDRECC(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "SBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "SBITERR", "direction": "output", - "type": "none" + "type": "error" } ] } @@ -474860,7 +474864,7 @@ { "name": "SIM_CONFIGE2", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -475271,126 +475275,126 @@ { "name": "CE0", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CE0", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CE1", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CE1", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "I0", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "I0", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "I1", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "I1", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "IGNORE0", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "IGNORE0", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "IGNORE1", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "IGNORE1", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "S0", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "S0", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "S1", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "S1", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "clock" } ] } @@ -475406,238 +475410,238 @@ { "name": "A0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A5", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A5", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DPRA0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA5", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA5", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DPO", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "SPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "SPO", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -475646,7 +475650,7 @@ { "name": "CAPTUREE2", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -475666,14 +475670,14 @@ { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] } @@ -475683,1282 +475687,1282 @@ "name": "FIFO18E2", "types": [ "sequential", - "ram" + "fifo" ], "pin_groups": [ { "name": "CASDIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "CASDIN(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CASDINP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "CASDINP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASDOMUX", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUX", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDOMUXEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASNXTRDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASNXTRDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASOREGIMUX", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUX", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASOREGIMUXEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASPRVEMPTY", "direction": "input", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "CASPRVEMPTY", "direction": "input", - "type": "none" + "type": "status" } ] }, { "name": "DIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DIN(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DINP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DINP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "RDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "RDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "RDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "RDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RST", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RST", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREG", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREG", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "SLEEP", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "SLEEP", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "WRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASDOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "CASDOUT(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CASDOUTP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "CASDOUTP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASNXTEMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "CASNXTEMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "CASPRVRDEN", "direction": "output", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASPRVRDEN", "direction": "output", - "type": "none" + "type": "enable" } ] }, { "name": "DOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DOUT(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOUTP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DOUTP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "EMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "EMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "FULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "FULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "PROGEMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "PROGEMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "PROGFULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "PROGFULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "RDCOUNT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 12, "pins": [ { "name": "RDCOUNT(12)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(11)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(10)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(9)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(8)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(7)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(6)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(5)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(4)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(3)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(2)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(1)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(0)", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "RDERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "RDERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "RDRSTBUSY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "RDRSTBUSY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "WRCOUNT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 12, "pins": [ { "name": "WRCOUNT(12)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(11)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(10)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(9)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(8)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(7)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(6)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(5)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(4)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(3)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(2)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(1)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(0)", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "WRERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "WRERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "WRRSTBUSY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "WRRSTBUSY", "direction": "output", - "type": "none" + "type": "status" } ] } @@ -485791,110 +485795,111 @@ { "name": "SRLC32E", "types": [ - "sequential" + "sequential", + "shift_register" ], "pin_groups": [ { "name": "A", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 4, "pins": [ { "name": "A(4)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "A(3)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "A(2)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "A(1)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "A(0)", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "CE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "Q", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "Q", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q31", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "Q31", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -485903,76 +485908,76 @@ { "name": "ODDRE1", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { "name": "C", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "C", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "D1", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D1", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D2", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D2", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "SR", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "SR", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "Q", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "Q", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -486262,154 +486267,154 @@ { "name": "A", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "A(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "WSEL", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 2, "pins": [ { "name": "WSEL(2)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "WSEL(1)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "WSEL(0)", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "O(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "O(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "O(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "O(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "O(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "O(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "O(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "O(0)", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -486418,7 +486423,7 @@ { "name": "FE", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -495672,132 +495677,133 @@ { "name": "SRLC16E", "types": [ - "sequential" + "sequential", + "shift_register" ], "pin_groups": [ { "name": "A0", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A0", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "A1", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A1", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "A2", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A2", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "A3", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A3", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "CE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "Q", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "Q", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q15", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "Q15", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -495806,7 +495812,7 @@ { "name": "DNA_PORTE2", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -519364,252 +519370,252 @@ { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "I", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "I", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "RADR0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "RADR5", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "RADR5", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR5", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR5", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR6", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR6", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR7", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR7", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -519625,778 +519631,778 @@ { "name": "CLKARDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKARDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "CLKBWRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKBWRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "ENARDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENARDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ENBWREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENBWREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCEAREGCE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEAREGCE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCEB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RSTRAMARSTRAM", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTRAMARSTRAM", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTRAMB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTRAMB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREGARSTREG", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREGARSTREG", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREGB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREGB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "ADDRARDADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 13, "pins": [ { "name": "ADDRARDADDR(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRARDADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRBWRADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 13, "pins": [ { "name": "ADDRBWRADDR(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBWRADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIADI", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DIADI(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIBDI", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DIBDI(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIPADIP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DIPADIP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPADIP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "DIPBDIP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DIPBDIP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPBDIP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "WEA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 1, "pins": [ { "name": "WEA(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "WEBWE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 3, "pins": [ { "name": "WEBWE(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWE(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DOADO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DOADO(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOBDO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DOBDO(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOPADOP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DOPADOP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPADOP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "DOPBDOP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DOPBDOP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPBDOP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] } @@ -520412,1092 +520418,1092 @@ { "name": "CLKA", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKA", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "CLKB", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKB", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "ENA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENA", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ENB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "SSRA", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "SSRA", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "SSRB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "SSRB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "ADDRA", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 13, "pins": [ { "name": "ADDRA(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRB", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 13, "pins": [ { "name": "ADDRB(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DIA(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DIB(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIPA", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DIPA(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPA(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPA(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPA(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "DIPB", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DIPB(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPB(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPB(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPB(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "WEA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 3, "pins": [ { "name": "WEA(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEA(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "WEB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 3, "pins": [ { "name": "WEB(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEB(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEB(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEB(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DOA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DOA(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DOB(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOPA", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DOPA(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPA(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPA(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPA(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "DOPB", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 3, "pins": [ { "name": "DOPB(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPB(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPB(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPB(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] } @@ -521773,730 +521779,730 @@ { "name": "CLKAWRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKAWRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "CLKBRDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKBRDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "ENAWREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENAWREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ENBRDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENBRDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCEBREGCE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEBREGCE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCEA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCEA", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RSTA", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTA", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTBRST", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTBRST", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "ADDRAWRADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 12, "pins": [ { "name": "ADDRAWRADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRAWRADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRBRDADDR", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 12, "pins": [ { "name": "ADDRBRDADDR(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRBRDADDR(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIADI", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DIADI(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIADI(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIBDI", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DIBDI(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIBDI(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIPADIP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DIPADIP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPADIP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "DIPBDIP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DIPBDIP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DIPBDIP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "WEAWEL", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 1, "pins": [ { "name": "WEAWEL(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEAWEL(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "WEBWEU", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 1, "pins": [ { "name": "WEBWEU(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "WEBWEU(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DOADO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DOADO(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOADO(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOBDO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 15, "pins": [ { "name": "DOBDO(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOBDO(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOPADOP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DOPADOP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPADOP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "DOPBDOP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 1, "pins": [ { "name": "DOPBDOP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOPBDOP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] } @@ -522505,322 +522511,323 @@ { "name": "RAMB4_S2_S2", "types": [ - "combinational" + "sequential", + "ram" ], "pin_groups": [ { "name": "CLKA", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKA", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "CLKB", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLKB", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "ENA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENA", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ENB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "ENB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RSTA", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTA", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "WEA", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WEA", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "WEB", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WEB", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "ADDRA", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 10, "pins": [ { "name": "ADDRA(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRB", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 10, "pins": [ { "name": "ADDRB(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIA(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIB(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DOA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOA(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOB(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(0)", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -524433,2117 +524440,2118 @@ { "name": "FIFO36E2", "types": [ - "combinational" + "sequential", + "fifo" ], "pin_groups": [ { "name": "CASDIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 63, "pins": [ { "name": "CASDIN(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CASDIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CASDINP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "CASDINP(7)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(6)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(5)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(4)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "CASDINP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASDOMUX", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUX", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASDOMUXEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASDOMUXEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASNXTRDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASNXTRDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASOREGIMUX", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUX", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CASOREGIMUXEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASOREGIMUXEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASPRVEMPTY", "direction": "input", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "CASPRVEMPTY", "direction": "input", - "type": "none" + "type": "status" } ] }, { "name": "DIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 63, "pins": [ { "name": "DIN(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DINP", "direction": "input", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "DINP(7)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(6)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(5)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(4)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(3)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(2)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(1)", "direction": "input", - "type": "none" + "type": "error_detection" }, { "name": "DINP(0)", "direction": "input", - "type": "none" + "type": "error_detection" } ] }, { "name": "INJECTDBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECTDBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECTSBITERR", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECTSBITERR", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "RDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "RDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "RDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "RDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "REGCE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "REGCE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RST", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RST", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTREG", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTREG", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "SLEEP", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "SLEEP", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "WRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CASDOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 63, "pins": [ { "name": "CASDOUT(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CASDOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CASDOUTP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "CASDOUTP(7)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(6)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(5)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(4)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "CASDOUTP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "CASNXTEMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "CASNXTEMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "CASPRVRDEN", "direction": "output", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CASPRVRDEN", "direction": "output", - "type": "none" + "type": "enable" } ] }, { "name": "DBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "DBITERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 63, "pins": [ { "name": "DOUT(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOUTP", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "DOUTP(7)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(6)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(5)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(4)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "DOUTP(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "ECCPARITY", "direction": "output", - "type": "none", + "type": "error_detection", "ascending": false, "start_index": 7, "pins": [ { "name": "ECCPARITY(7)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(6)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(5)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(4)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(3)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(2)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(1)", "direction": "output", - "type": "none" + "type": "error_detection" }, { "name": "ECCPARITY(0)", "direction": "output", - "type": "none" + "type": "error_detection" } ] }, { "name": "EMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "EMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "FULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "FULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "PROGEMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "PROGEMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "PROGFULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "PROGFULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "RDCOUNT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 13, "pins": [ { "name": "RDCOUNT(13)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(12)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(11)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(10)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(9)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(8)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(7)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(6)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(5)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(4)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(3)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(2)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(1)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "RDCOUNT(0)", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "RDERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "RDERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "RDRSTBUSY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "RDRSTBUSY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "SBITERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "SBITERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "WRCOUNT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 13, "pins": [ { "name": "WRCOUNT(13)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(12)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(11)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(10)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(9)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(8)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(7)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(6)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(5)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(4)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(3)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(2)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(1)", "direction": "output", - "type": "none" + "type": "status" }, { "name": "WRCOUNT(0)", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "WRERR", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "WRERR", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "WRRSTBUSY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "WRRSTBUSY", "direction": "output", - "type": "none" + "type": "status" } ] } @@ -526552,7 +526560,8 @@ { "name": "INV", "types": [ - "combinational" + "combinational", + "c_inverter" ], "pin_groups": [ { @@ -536523,7 +536532,8 @@ { "name": "XORCY", "types": [ - "combinational" + "combinational", + "c_xor" ], "pin_groups": [ { @@ -536581,2595 +536591,2595 @@ { "name": "A", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 29, "pins": [ { "name": "A(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "A(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "ACIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 29, "pins": [ { "name": "ACIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "ACIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "ALUMODE", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 3, "pins": [ { "name": "ALUMODE(3)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "ALUMODE(2)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "ALUMODE(1)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "ALUMODE(0)", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "B", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "B(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "B(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "BCIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "BCIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "BCIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "C", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "C(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "C(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CARRYCASCIN", "direction": "input", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CARRYCASCIN", "direction": "input", - "type": "none" + "type": "carry" } ] }, { "name": "CARRYIN", "direction": "input", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CARRYIN", "direction": "input", - "type": "none" + "type": "carry" } ] }, { "name": "CARRYINSEL", "direction": "input", - "type": "none", + "type": "select", "ascending": false, "start_index": 2, "pins": [ { "name": "CARRYINSEL(2)", "direction": "input", - "type": "none" + "type": "select" }, { "name": "CARRYINSEL(1)", "direction": "input", - "type": "none" + "type": "select" }, { "name": "CARRYINSEL(0)", "direction": "input", - "type": "none" + "type": "select" } ] }, { "name": "CEA1", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEA1", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEA2", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEA2", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEAD", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEAD", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEALUMODE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEALUMODE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEB1", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEB1", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEB2", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEB2", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEC", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEC", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CECARRYIN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CECARRYIN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CECTRL", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CECTRL", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CED", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CED", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEINMODE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEINMODE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEM", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEM", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CEP", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CEP", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 26, "pins": [ { "name": "D(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "INMODE", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 4, "pins": [ { "name": "INMODE(4)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "INMODE(3)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "INMODE(2)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "INMODE(1)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "INMODE(0)", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "MULTSIGNIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "MULTSIGNIN", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "OPMODE", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 8, "pins": [ { "name": "OPMODE(8)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(7)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(6)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(5)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(4)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(3)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(2)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(1)", "direction": "input", - "type": "none" + "type": "control" }, { "name": "OPMODE(0)", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "PCIN", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "PCIN(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "PCIN(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "RSTA", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTA", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTALLCARRYIN", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTALLCARRYIN", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTALUMODE", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTALUMODE", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTB", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTB", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTC", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTC", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTCTRL", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTCTRL", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTD", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTD", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTINMODE", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTINMODE", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTM", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTM", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RSTP", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RSTP", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "ACOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 29, "pins": [ { "name": "ACOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "ACOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "BCOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 17, "pins": [ { "name": "BCOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "BCOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CARRYCASCOUT", "direction": "output", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CARRYCASCOUT", "direction": "output", - "type": "none" + "type": "carry" } ] }, { "name": "CARRYOUT", "direction": "output", - "type": "none", + "type": "carry", "ascending": false, "start_index": 3, "pins": [ { "name": "CARRYOUT(3)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CARRYOUT(2)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CARRYOUT(1)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CARRYOUT(0)", "direction": "output", - "type": "none" + "type": "carry" } ] }, { "name": "MULTSIGNOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "MULTSIGNOUT", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "OVERFLOW", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "OVERFLOW", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "P", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "P(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "P(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "PATTERNBDETECT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "PATTERNBDETECT", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "PATTERNDETECT", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "PATTERNDETECT", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "PCOUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 47, "pins": [ { "name": "PCOUT(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "PCOUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "UNDERFLOW", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "UNDERFLOW", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "XOROUT", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "XOROUT(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "XOROUT(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "XOROUT(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "XOROUT(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "XOROUT(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "XOROUT(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "XOROUT(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "XOROUT(0)", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -559807,210 +559817,210 @@ { "name": "A0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DPRA0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DPO", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "SPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "SPO", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -560026,182 +560036,182 @@ { "name": "A0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DPRA0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DPRA3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "DPRA3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DPO", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "SPO", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "SPO", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -617972,203 +617982,203 @@ { "name": "USR_ACCESSE2", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { "name": "CFGCLK", "direction": "output", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CFGCLK", "direction": "output", - "type": "none" + "type": "clock" } ] }, { "name": "DATAVALID", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "DATAVALID", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "DATA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 31, "pins": [ { "name": "DATA(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DATA(0)", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -618184,126 +618194,126 @@ { "name": "A0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -618312,7 +618322,8 @@ { "name": "BUFGP", "types": [ - "combinational" + "combinational", + "c_buffer" ], "pin_groups": [ { @@ -618349,952 +618360,953 @@ { "name": "OUT_FIFO", "types": [ - "combinational" + "sequential", + "fifo" ], "pin_groups": [ { "name": "RDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "RDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "RDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "RDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RESET", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RESET", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "WRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "D0", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D0(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D1", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D1(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D2", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D2(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D3", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D3(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D4", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D4(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D5", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D5(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D6", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D6(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D7", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D7(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D8", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D8(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D9", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D9(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "ALMOSTEMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "ALMOSTEMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "ALMOSTFULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "ALMOSTFULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "EMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "EMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "FULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "FULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "Q0", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "Q0(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q1", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "Q1(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q2", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "Q2(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q3", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "Q3(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q4", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "Q4(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q7", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "Q7(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q8", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "Q8(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q9", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "Q9(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q5", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q5(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q6", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q6(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(0)", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -619805,7 +619817,8 @@ { "name": "IBUF", "types": [ - "combinational" + "combinational", + "c_buffer" ], "pin_groups": [ { @@ -620183,34 +620196,35 @@ { "name": "CARRY8", "types": [ - "combinational" + "combinational", + "c_carry" ], "pin_groups": [ { "name": "CI", "direction": "input", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CI", "direction": "input", - "type": "none" + "type": "carry" } ] }, { "name": "CI_TOP", "direction": "input", - "type": "none", + "type": "carry", "ascending": false, "start_index": 0, "pins": [ { "name": "CI_TOP", "direction": "input", - "type": "none" + "type": "carry" } ] }, @@ -620315,49 +620329,49 @@ { "name": "CO", "direction": "output", - "type": "none", + "type": "carry", "ascending": false, "start_index": 7, "pins": [ { "name": "CO(7)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CO(6)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CO(5)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CO(4)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CO(3)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CO(2)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CO(1)", "direction": "output", - "type": "none" + "type": "carry" }, { "name": "CO(0)", "direction": "output", - "type": "none" + "type": "carry" } ] }, @@ -620415,7 +620429,8 @@ { "name": "BUFH", "types": [ - "combinational" + "combinational", + "c_buffer" ], "pin_groups": [ { @@ -662007,168 +662022,168 @@ { "name": "ADR0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADR5", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "ADR5", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "I", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "I", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WADR6", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR6", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WADR7", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "WADR7", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -662184,110 +662199,110 @@ { "name": "A", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 8, "pins": [ { "name": "A(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -662718,7 +662733,8 @@ { "name": "O", "direction": "output", - "type": "none" + "type": "none", + "function": "(DI & !SRI)" } ] } @@ -662987,7 +663003,7 @@ { "name": "MMCME4_ADV", "types": [ - "combinational" + "sequential" ], "pin_groups": [ { @@ -666586,6090 +666602,6091 @@ { "name": "URAM288", "types": [ - "combinational" + "sequential", + "ram" ], "pin_groups": [ { "name": "ADDR_A", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 22, "pins": [ { "name": "ADDR_A(22)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(21)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(20)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(19)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(18)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(17)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(16)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(15)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDR_B", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 22, "pins": [ { "name": "ADDR_B(22)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(21)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(20)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(19)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(18)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(17)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(16)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(15)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "BWE_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 8, "pins": [ { "name": "BWE_A(8)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(7)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(6)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(5)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(4)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "BWE_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 8, "pins": [ { "name": "BWE_B(8)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(7)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(6)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(5)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(4)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CAS_IN_ADDR_A", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 22, "pins": [ { "name": "CAS_IN_ADDR_A(22)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(21)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(20)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(19)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(18)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(17)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(16)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(15)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_A(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "CAS_IN_ADDR_B", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 22, "pins": [ { "name": "CAS_IN_ADDR_B(22)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(21)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(20)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(19)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(18)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(17)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(16)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(15)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "CAS_IN_ADDR_B(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "CAS_IN_BWE_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 8, "pins": [ { "name": "CAS_IN_BWE_A(8)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_A(7)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_A(6)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_A(5)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_A(4)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_A(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_A(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_A(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_A(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CAS_IN_BWE_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 8, "pins": [ { "name": "CAS_IN_BWE_B(8)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_B(7)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_B(6)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_B(5)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_B(4)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_B(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_B(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_B(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "CAS_IN_BWE_B(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CAS_IN_DBITERR_A", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_DBITERR_A", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "CAS_IN_DBITERR_B", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_DBITERR_B", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "CAS_IN_DIN_A", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "CAS_IN_DIN_A(71)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(70)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(69)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(68)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(67)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(66)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(65)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(64)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_A(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CAS_IN_DIN_B", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "CAS_IN_DIN_B(71)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(70)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(69)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(68)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(67)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(66)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(65)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(64)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DIN_B(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CAS_IN_DOUT_A", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "CAS_IN_DOUT_A(71)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(70)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(69)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(68)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(67)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(66)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(65)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(64)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_A(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CAS_IN_DOUT_B", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "CAS_IN_DOUT_B(71)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(70)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(69)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(68)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(67)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(66)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(65)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(64)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "CAS_IN_DOUT_B(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "CAS_IN_EN_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_EN_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CAS_IN_EN_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_EN_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CAS_IN_RDACCESS_A", "direction": "input", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_RDACCESS_A", "direction": "input", - "type": "none" + "type": "status" } ] }, { "name": "CAS_IN_RDACCESS_B", "direction": "input", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_RDACCESS_B", "direction": "input", - "type": "none" + "type": "status" } ] }, { "name": "CAS_IN_RDB_WR_A", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_RDB_WR_A", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "CAS_IN_RDB_WR_B", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_RDB_WR_B", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "CAS_IN_SBITERR_A", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_SBITERR_A", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "CAS_IN_SBITERR_B", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_IN_SBITERR_B", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "DIN_A", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "DIN_A(71)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(70)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(69)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(68)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(67)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(66)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(65)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(64)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIN_B", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "DIN_B(71)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(70)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(69)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(68)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(67)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(66)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(65)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(64)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "EN_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "EN_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "EN_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "EN_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "INJECT_DBITERR_A", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECT_DBITERR_A", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECT_DBITERR_B", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECT_DBITERR_B", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECT_SBITERR_A", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECT_SBITERR_A", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECT_SBITERR_B", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECT_SBITERR_B", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "OREG_CE_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "OREG_CE_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "OREG_CE_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "OREG_CE_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "OREG_ECC_CE_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "OREG_ECC_CE_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "OREG_ECC_CE_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "OREG_ECC_CE_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RDB_WR_A", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "RDB_WR_A", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "RDB_WR_B", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "RDB_WR_B", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "RST_A", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RST_A", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RST_B", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RST_B", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "SLEEP", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "SLEEP", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "CAS_OUT_ADDR_A", "direction": "output", - "type": "none", + "type": "address", "ascending": false, "start_index": 22, "pins": [ { "name": "CAS_OUT_ADDR_A(22)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(21)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(20)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(19)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(18)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(17)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(16)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(15)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(14)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(13)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(12)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(11)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(10)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(9)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(8)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(7)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(6)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(5)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(4)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(3)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(2)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(1)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_A(0)", "direction": "output", - "type": "none" + "type": "address" } ] }, { "name": "CAS_OUT_ADDR_B", "direction": "output", - "type": "none", + "type": "address", "ascending": false, "start_index": 22, "pins": [ { "name": "CAS_OUT_ADDR_B(22)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(21)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(20)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(19)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(18)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(17)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(16)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(15)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(14)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(13)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(12)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(11)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(10)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(9)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(8)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(7)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(6)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(5)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(4)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(3)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(2)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(1)", "direction": "output", - "type": "none" + "type": "address" }, { "name": "CAS_OUT_ADDR_B(0)", "direction": "output", - "type": "none" + "type": "address" } ] }, { "name": "CAS_OUT_BWE_A", "direction": "output", - "type": "none", + "type": "enable", "ascending": false, "start_index": 8, "pins": [ { "name": "CAS_OUT_BWE_A(8)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_A(7)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_A(6)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_A(5)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_A(4)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_A(3)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_A(2)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_A(1)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_A(0)", "direction": "output", - "type": "none" + "type": "enable" } ] }, { "name": "CAS_OUT_BWE_B", "direction": "output", - "type": "none", + "type": "enable", "ascending": false, "start_index": 8, "pins": [ { "name": "CAS_OUT_BWE_B(8)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_B(7)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_B(6)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_B(5)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_B(4)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_B(3)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_B(2)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_B(1)", "direction": "output", - "type": "none" + "type": "enable" }, { "name": "CAS_OUT_BWE_B(0)", "direction": "output", - "type": "none" + "type": "enable" } ] }, { "name": "CAS_OUT_DBITERR_A", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_DBITERR_A", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "CAS_OUT_DBITERR_B", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_DBITERR_B", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "CAS_OUT_DIN_A", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "CAS_OUT_DIN_A(71)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(70)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(69)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(68)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(67)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(66)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(65)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(64)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_A(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CAS_OUT_DIN_B", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "CAS_OUT_DIN_B(71)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(70)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(69)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(68)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(67)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(66)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(65)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(64)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DIN_B(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CAS_OUT_DOUT_A", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "CAS_OUT_DOUT_A(71)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(70)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(69)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(68)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(67)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(66)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(65)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(64)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_A(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CAS_OUT_DOUT_B", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "CAS_OUT_DOUT_B(71)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(70)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(69)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(68)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(67)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(66)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(65)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(64)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "CAS_OUT_DOUT_B(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "CAS_OUT_EN_A", "direction": "output", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_EN_A", "direction": "output", - "type": "none" + "type": "enable" } ] }, { "name": "CAS_OUT_EN_B", "direction": "output", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_EN_B", "direction": "output", - "type": "none" + "type": "enable" } ] }, { "name": "CAS_OUT_RDACCESS_A", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_RDACCESS_A", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "CAS_OUT_RDACCESS_B", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_RDACCESS_B", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "CAS_OUT_RDB_WR_A", "direction": "output", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_RDB_WR_A", "direction": "output", - "type": "none" + "type": "control" } ] }, { "name": "CAS_OUT_RDB_WR_B", "direction": "output", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_RDB_WR_B", "direction": "output", - "type": "none" + "type": "control" } ] }, { "name": "CAS_OUT_SBITERR_A", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_SBITERR_A", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "CAS_OUT_SBITERR_B", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "CAS_OUT_SBITERR_B", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DBITERR_A", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "DBITERR_A", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DBITERR_B", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "DBITERR_B", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DOUT_A", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "DOUT_A(71)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(70)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(69)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(68)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(67)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(66)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(65)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(64)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOUT_B", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "DOUT_B(71)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(70)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(69)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(68)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(67)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(66)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(65)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(64)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "RDACCESS_A", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "RDACCESS_A", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "RDACCESS_B", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "RDACCESS_B", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "SBITERR_A", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "SBITERR_A", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "SBITERR_B", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "SBITERR_B", "direction": "output", - "type": "none" + "type": "error" } ] } @@ -673217,140 +673234,140 @@ { "name": "A0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A5", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A5", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -673473,2118 +673490,2119 @@ { "name": "URAM288_BASE", "types": [ - "combinational" + "sequential", + "ram" ], "pin_groups": [ { "name": "ADDR_A", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 22, "pins": [ { "name": "ADDR_A(22)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(21)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(20)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(19)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(18)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(17)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(16)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(15)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_A(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDR_B", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 22, "pins": [ { "name": "ADDR_B(22)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(21)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(20)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(19)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(18)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(17)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(16)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(15)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(14)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(13)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(12)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(11)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(10)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(9)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(8)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDR_B(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "BWE_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 8, "pins": [ { "name": "BWE_A(8)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(7)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(6)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(5)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(4)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_A(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "BWE_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 8, "pins": [ { "name": "BWE_B(8)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(7)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(6)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(5)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(4)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(3)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(2)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(1)", "direction": "input", - "type": "none" + "type": "enable" }, { "name": "BWE_B(0)", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "CLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "CLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "DIN_A", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "DIN_A(71)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(70)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(69)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(68)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(67)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(66)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(65)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(64)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_A(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIN_B", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "DIN_B(71)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(70)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(69)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(68)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(67)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(66)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(65)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(64)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(63)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(62)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(61)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(60)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(59)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(58)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(57)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(56)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(55)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(54)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(53)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(52)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(51)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(50)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(49)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(48)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(47)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(46)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(45)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(44)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(43)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(42)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(41)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(40)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(39)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(38)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(37)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(36)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(35)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(34)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(33)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(32)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(31)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(30)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(29)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(28)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(27)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(26)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(25)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(24)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(23)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(22)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(21)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(20)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(19)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(18)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(17)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(16)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(15)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(14)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(13)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(12)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(11)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(10)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(9)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(8)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIN_B(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "EN_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "EN_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "EN_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "EN_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "INJECT_DBITERR_A", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECT_DBITERR_A", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECT_DBITERR_B", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECT_DBITERR_B", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECT_SBITERR_A", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECT_SBITERR_A", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "INJECT_SBITERR_B", "direction": "input", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "INJECT_SBITERR_B", "direction": "input", - "type": "none" + "type": "error" } ] }, { "name": "OREG_CE_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "OREG_CE_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "OREG_CE_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "OREG_CE_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "OREG_ECC_CE_A", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "OREG_ECC_CE_A", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "OREG_ECC_CE_B", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "OREG_ECC_CE_B", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RDB_WR_A", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "RDB_WR_A", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "RDB_WR_B", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "RDB_WR_B", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "RST_A", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RST_A", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "RST_B", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RST_B", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "SLEEP", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "SLEEP", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "DBITERR_A", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "DBITERR_A", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DBITERR_B", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "DBITERR_B", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "DOUT_A", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "DOUT_A(71)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(70)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(69)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(68)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(67)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(66)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(65)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(64)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_A(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOUT_B", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 71, "pins": [ { "name": "DOUT_B(71)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(70)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(69)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(68)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(67)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(66)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(65)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(64)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(63)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(62)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(61)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(60)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(59)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(58)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(57)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(56)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(55)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(54)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(53)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(52)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(51)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(50)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(49)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(48)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(47)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(46)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(45)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(44)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(43)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(42)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(41)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(40)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(39)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(38)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(37)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(36)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(35)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(34)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(33)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(32)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(31)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(30)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(29)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(28)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(27)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(26)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(25)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(24)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(23)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(22)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(21)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(20)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(19)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(18)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(17)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(16)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(15)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(14)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(13)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(12)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(11)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(10)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(9)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(8)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOUT_B(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "SBITERR_A", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "SBITERR_A", "direction": "output", - "type": "none" + "type": "error" } ] }, { "name": "SBITERR_B", "direction": "output", - "type": "none", + "type": "error", "ascending": false, "start_index": 0, "pins": [ { "name": "SBITERR_B", "direction": "output", - "type": "none" + "type": "error" } ] } @@ -675593,104 +675611,105 @@ { "name": "IDDR", "types": [ - "combinational" + "sequential", + "ff" ], "pin_groups": [ { "name": "C", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "C", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "CE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "R", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "R", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "S", "direction": "input", - "type": "none", + "type": "set", "ascending": false, "start_index": 0, "pins": [ { "name": "S", "direction": "input", - "type": "none" + "type": "set" } ] }, { "name": "Q1", "direction": "output", - "type": "none", + "type": "state", "ascending": false, "start_index": 0, "pins": [ { "name": "Q1", "direction": "output", - "type": "none" + "type": "state" } ] }, { "name": "Q2", "direction": "output", - "type": "none", + "type": "state", "ascending": false, "start_index": 0, "pins": [ { "name": "Q2", "direction": "output", - "type": "none" + "type": "state" } ] } @@ -714017,105 +714036,105 @@ { "name": "A", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 7, "pins": [ { "name": "A(7)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(6)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "A(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -714357,154 +714376,154 @@ { "name": "A0", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A0", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A1", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A1", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A2", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A2", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A3", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A3", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A4", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A4", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A5", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A5", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "A6", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 0, "pins": [ { "name": "A6", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "O", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "O", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -731812,316 +731831,316 @@ { "name": "ADDRA", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRA(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRB", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRB(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRC", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRC(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRD", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRD(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIA(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIB(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIC", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIC(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIC(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DID", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DID(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DID(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DOA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOA(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOB(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOC", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOC(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOC(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOD", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOD(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOD(0)", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -739088,604 +739107,604 @@ { "name": "ADDRA", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRA(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRB", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRB(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRC", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRC(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRD", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRD(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRE", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRE(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRF", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRF(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRG", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRG(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRH", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 4, "pins": [ { "name": "ADDRH(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIA(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIA(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIB(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIB(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIC", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIC(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIC(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DID", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DID(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DID(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIE", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIE(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIE(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIF", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIF(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIF(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIG", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIG(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIG(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIH", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DIH(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "DIH(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DOA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOA(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOA(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOB(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOB(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOC", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOC(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOC(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOD", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOD(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOD(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOE", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOE(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOE(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOF", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOF(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOF(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOG", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOG(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOG(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOH", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 1, "pins": [ { "name": "DOH(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "DOH(0)", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -740552,952 +740571,953 @@ { "name": "IN_FIFO", "types": [ - "combinational" + "sequential", + "fifo" ], "pin_groups": [ { "name": "RDCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "RDCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "RDEN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "RDEN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "RESET", "direction": "input", - "type": "none", + "type": "reset", "ascending": false, "start_index": 0, "pins": [ { "name": "RESET", "direction": "input", - "type": "none" + "type": "reset" } ] }, { "name": "WRCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WRCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WREN", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WREN", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "D0", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "D0(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D0(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D1", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "D1(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D1(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D2", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "D2(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D2(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D3", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "D3(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D3(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D4", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "D4(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D4(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D7", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "D7(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D7(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D8", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "D8(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D8(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D9", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 3, "pins": [ { "name": "D9(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D9(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D5", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D5(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D5(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "D6", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "D6(7)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(6)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(5)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(4)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(3)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(2)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(1)", "direction": "input", - "type": "none" + "type": "data" }, { "name": "D6(0)", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "ALMOSTEMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "ALMOSTEMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "ALMOSTFULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "ALMOSTFULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "EMPTY", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "EMPTY", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "FULL", "direction": "output", - "type": "none", + "type": "status", "ascending": false, "start_index": 0, "pins": [ { "name": "FULL", "direction": "output", - "type": "none" + "type": "status" } ] }, { "name": "Q0", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q0(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q0(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q1", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q1(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q1(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q2", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q2(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q2(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q3", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q3(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q3(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q4", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q4(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q4(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q5", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q5(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q5(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q6", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q6(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q6(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q7", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q7(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q7(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q8", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q8(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q8(0)", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "Q9", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 7, "pins": [ { "name": "Q9(7)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(6)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(5)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(4)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(3)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(2)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(1)", "direction": "output", - "type": "none" + "type": "data" }, { "name": "Q9(0)", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -766707,76 +766727,77 @@ { "name": "SRL16", "types": [ - "sequential" + "sequential", + "shift_register" ], "pin_groups": [ { "name": "A0", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A0", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "A1", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A1", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "A2", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A2", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "A3", "direction": "input", - "type": "none", + "type": "control", "ascending": false, "start_index": 0, "pins": [ { "name": "A3", "direction": "input", - "type": "none" + "type": "control" } ] }, { "name": "CE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "CE", "direction": "input", - "type": "none" + "type": "enable" } ] }, @@ -766797,28 +766818,28 @@ { "name": "D", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "D", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "Q", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "Q", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -770822,564 +770843,564 @@ { "name": "ADDRA", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRA(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRA(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRB", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRB(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRB(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRC", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRC(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRC(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRD", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRD(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRD(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRE", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRE(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRE(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRF", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRF(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRF(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRG", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRG(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRG(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "ADDRH", "direction": "input", - "type": "none", + "type": "address", "ascending": false, "start_index": 5, "pins": [ { "name": "ADDRH(5)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(4)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(3)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(2)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(1)", "direction": "input", - "type": "none" + "type": "address" }, { "name": "ADDRH(0)", "direction": "input", - "type": "none" + "type": "address" } ] }, { "name": "DIA", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIA", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIB", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIB", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIC", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIC", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DID", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DID", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIE", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIE", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIF", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIF", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIG", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIG", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "DIH", "direction": "input", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DIH", "direction": "input", - "type": "none" + "type": "data" } ] }, { "name": "WCLK", "direction": "input", - "type": "none", + "type": "clock", "ascending": false, "start_index": 0, "pins": [ { "name": "WCLK", "direction": "input", - "type": "none" + "type": "clock" } ] }, { "name": "WE", "direction": "input", - "type": "none", + "type": "enable", "ascending": false, "start_index": 0, "pins": [ { "name": "WE", "direction": "input", - "type": "none" + "type": "enable" } ] }, { "name": "DOA", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOA", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOB", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOB", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOC", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOC", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOD", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOD", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOE", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOE", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOF", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOF", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOG", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOG", "direction": "output", - "type": "none" + "type": "data" } ] }, { "name": "DOH", "direction": "output", - "type": "none", + "type": "data", "ascending": false, "start_index": 0, "pins": [ { "name": "DOH", "direction": "output", - "type": "none" + "type": "data" } ] } @@ -771991,7 +772012,8 @@ { "name": "MULT_AND", "types": [ - "combinational" + "combinational", + "c_and" ], "pin_groups": [ { diff --git a/plugins/graph_algorithm/include/graph_algorithm/algorithms/components.h b/plugins/graph_algorithm/include/graph_algorithm/algorithms/components.h index 10387ae96d6..76202b039f3 100644 --- a/plugins/graph_algorithm/include/graph_algorithm/algorithms/components.h +++ b/plugins/graph_algorithm/include/graph_algorithm/algorithms/components.h @@ -46,6 +46,6 @@ namespace hal * @param[in] min_size - Minimal size of a connected component to be part of the result. Set to `0` to include all components. Defaults to `0`. * @returns A vector of strongly connected components on success, an error otherwise. */ - Result>> get_connected_components(NetlistGraph* graph, bool strong, u32 min_size = 0); + Result>> get_connected_components(const NetlistGraph* graph, bool strong, u32 min_size = 0); } // namespace graph_algorithm } // namespace hal \ No newline at end of file diff --git a/plugins/graph_algorithm/include/graph_algorithm/algorithms/subgraph.h b/plugins/graph_algorithm/include/graph_algorithm/algorithms/subgraph.h index 0c3cf57b9af..3466512f42a 100644 --- a/plugins/graph_algorithm/include/graph_algorithm/algorithms/subgraph.h +++ b/plugins/graph_algorithm/include/graph_algorithm/algorithms/subgraph.h @@ -46,7 +46,16 @@ namespace hal * @param[in] subgraph_gates - A vector of gates that make up the subgraph. * @returns The subgraph as a new netlist graph on success, an error otherwise. */ - Result> get_subgraph(NetlistGraph* graph, const std::vector& subgraph_gates); + Result> get_subgraph(const NetlistGraph* graph, const std::vector& subgraph_gates); + + /** + * Compute the subgraph induced by the specified gates, including all edges between the corresponding vertices. + * + * @param[in] graph - The netlist graph. + * @param[in] subgraph_gates - A set of gates that make up the subgraph. + * @returns The subgraph as a new netlist graph on success, an error otherwise. + */ + Result> get_subgraph(const NetlistGraph* graph, const std::set& subgraph_gates); /** * Compute the subgraph induced by the specified vertices, including all edges between these vertices. @@ -55,7 +64,16 @@ namespace hal * @param[in] subgraph_vertices - A vector of vertices that make up the subgraph. * @returns The subgraph as a new netlist graph on success, an error otherwise. */ - Result> get_subgraph(NetlistGraph* graph, const std::vector& subgraph_vertices); + Result> get_subgraph(const NetlistGraph* graph, const std::vector& subgraph_vertices); + + /** + * Compute the subgraph induced by the specified vertices, including all edges between these vertices. + * + * @param[in] graph - The netlist graph. + * @param[in] subgraph_vertices - A set of vertices that make up the subgraph. + * @returns The subgraph as a new netlist graph on success, an error otherwise. + */ + Result> get_subgraph(const NetlistGraph* graph, const std::set& subgraph_vertices); /** * Compute the subgraph induced by the specified vertices, including all edges between these vertices. @@ -64,6 +82,6 @@ namespace hal * @param[in] subgraph_vertices - An igraph vector of vertices that make up the subgraph. * @returns The subgraph as a new netlist graph on success, an error otherwise. */ - Result> get_subgraph_igraph(NetlistGraph* graph, const igraph_vector_int_t* subgraph_vertices); + Result> get_subgraph_igraph(const NetlistGraph* graph, const igraph_vector_int_t* subgraph_vertices); } // namespace graph_algorithm } // namespace hal \ No newline at end of file diff --git a/plugins/graph_algorithm/include/graph_algorithm/netlist_graph.h b/plugins/graph_algorithm/include/graph_algorithm/netlist_graph.h index 57d964e36c0..2f0d74a28fd 100644 --- a/plugins/graph_algorithm/include/graph_algorithm/netlist_graph.h +++ b/plugins/graph_algorithm/include/graph_algorithm/netlist_graph.h @@ -74,9 +74,17 @@ namespace hal * Create an empty directed graph from a netlist, i.e., vertices for all gates are created, but no edges are added. * * @param[in] nl - The netlist. + * @param[in] gates - The gates to include in the graph. If omitted, all gates of the netlist will be included. * @returns The netlist graph on success, an error otherwise. */ - static Result> from_netlist_no_edges(Netlist* nl); + static Result> from_netlist_no_edges(Netlist* nl, const std::vector& gates = {}); + + /** + * Creates a deep copy of the netlist graph. + * + * @returns The copied netlist graph on success, an error otherwise. + */ + Result> copy() const; /** * Get the netlist associated with the netlist graph. @@ -90,7 +98,7 @@ namespace hal * * @returns The graph object. */ - igraph_t* get_graph(); + igraph_t* get_graph() const; /** * Get the gates corresponding to the specified vertices. @@ -119,6 +127,30 @@ namespace hal */ Result> get_gates_from_vertices_igraph(const igraph_vector_int_t* vertices) const; + /** + * Get the gates corresponding to the specified vertices. + * + * @param[in] vertices - A vector of vertices. + * @returns A set of gates on success, an error otherwise. + */ + Result> get_gates_set_from_vertices(const std::vector& vertices) const; + + /** + * Get the gates corresponding to the specified vertices. + * + * @param[in] vertices - A set of vertices. + * @returns A set of gates on success, an error otherwise. + */ + Result> get_gates_set_from_vertices(const std::set& vertices) const; + + /** + * Get the gates corresponding to the specified vertices. + * + * @param[in] vertices - An igraph vector of vertices. + * @returns A set of gates on success, an error otherwise. + */ + Result> get_gates_set_from_vertices_igraph(const igraph_vector_int_t* vertices) const; + /** * Get the gate corresponding to the specified vertex. * @@ -151,6 +183,14 @@ namespace hal */ Result get_vertices_from_gates_igraph(const std::vector& gates) const; + /** + * Get the vertices corresponding to the specified gates. + * + * @param[in] gates - A set of gates. + * @returns An igraph vector of vertices on success, an error otherwise. + */ + Result get_vertices_from_gates_igraph(const std::set& gates) const; + /** * Get the vertex corresponding to the specified gate. * @@ -250,6 +290,7 @@ namespace hal Netlist* m_nl; igraph_t m_graph; + igraph_t* m_graph_ptr; std::unordered_map m_nodes_to_gates; std::unordered_map m_gates_to_nodes; }; diff --git a/plugins/graph_algorithm/python/python_bindings.cpp b/plugins/graph_algorithm/python/python_bindings.cpp index f474e657b38..cfdef9cce52 100644 --- a/plugins/graph_algorithm/python/python_bindings.cpp +++ b/plugins/graph_algorithm/python/python_bindings.cpp @@ -111,8 +111,8 @@ namespace hal py_netlist_graph.def_static( "from_netlist_no_edges", - [](Netlist* nl) -> std::unique_ptr { - auto res = graph_algorithm::NetlistGraph::from_netlist_no_edges(nl); + [](Netlist* nl, const std::vector& gates = {}) -> std::unique_ptr { + auto res = graph_algorithm::NetlistGraph::from_netlist_no_edges(nl, gates); if (res.is_ok()) { return res.get(); @@ -124,13 +124,36 @@ namespace hal } }, py::arg("nl"), + py::arg("gates") = std::vector(), R"(Create an empty directed graph from a netlist, i.e., vertices for all gates are created, but no edges are added. :param hal_py.Netlist nl: The netlist. + :param list[hal_py.Gate] gates: The gates to include in the graph. If omitted, all gates of the netlist will be included. :returns: The netlist graph on success, ``None`` otherwise. :rtype: graph_algorithm.NetlistGraph or None )"); + py_netlist_graph.def( + "copy", + [](const graph_algorithm::NetlistGraph& self) -> std::unique_ptr { + auto res = self.copy(); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "error encountered while copying netlist graph:\n{}", res.get_error().get()); + return nullptr; + } + }, + R"( + Creates a deep copy of the netlist graph. + + :returns: The copied netlist graph on success, ``None`` otherwise. + :rtype: graph_algorithm.NetlistGraph or None + )"); + py_netlist_graph.def("get_netlist", &graph_algorithm::NetlistGraph::get_netlist, R"( Get the netlist associated with the netlist graph. @@ -186,6 +209,52 @@ namespace hal :rtype: list[hal_py.Gate] or None )"); + py_netlist_graph.def( + "get_gates_set_from_vertices", + [](const graph_algorithm::NetlistGraph& self, const std::vector& vertices) -> std::optional> { + auto res = self.get_gates_set_from_vertices(vertices); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "error encountered while getting gates from vertices:\n{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("vertices"), + R"( + Get the gates corresponding to the specified list of vertices. + + :param list[int] vertices: A list of vertices. + :returns: A list of gates on success, ``None`` otherwise. + :rtype: set[hal_py.Gate] or None + )"); + + py_netlist_graph.def( + "get_gates_set_from_vertices", + [](const graph_algorithm::NetlistGraph& self, const std::set& vertices) -> std::optional> { + const auto res = self.get_gates_set_from_vertices(vertices); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "error encountered while getting gates from vertices:\n{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("vertices"), + R"( + Get the gates corresponding to the specified set of vertices. + + :param set[int] vertices: A set of vertices. + :returns: A list of gates on success, ``None`` otherwise. + :rtype: set[hal_py.Gate] or None + )"); + py_netlist_graph.def( "get_gate_from_vertex", [](const graph_algorithm::NetlistGraph& self, const u32 vertex) -> Gate* { @@ -706,7 +775,7 @@ namespace hal m.def( "get_subgraph", - [](graph_algorithm::NetlistGraph* graph, const std::vector& subgraph_gates) -> std::optional> { + [](const graph_algorithm::NetlistGraph* graph, const std::vector& subgraph_gates) -> std::optional> { auto res = graph_algorithm::get_subgraph(graph, subgraph_gates); if (res.is_ok()) { @@ -731,7 +800,32 @@ namespace hal m.def( "get_subgraph", - [](graph_algorithm::NetlistGraph* graph, const std::vector& subgraph_vertices) -> std::optional> { + [](const graph_algorithm::NetlistGraph* graph, const std::set& subgraph_gates) -> std::optional> { + auto res = graph_algorithm::get_subgraph(graph, subgraph_gates); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "error encountered while computing subgraph:\n{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("graph"), + py::arg("subgraph_gates"), + R"( + Compute the subgraph induced by the specified gates, including all edges between the corresponding vertices. + + :param graph_algorithm.NetlistGraph graph: The netlist graph. + :param set[hal_py.Gate] subgraph_gates: A set of gates that make up the subgraph. + :returns: The subgraph as a new netlist graph on success, ``None`` otherwise. + :rtype: graph_algorithm.NetlistGraph or None + )"); + + m.def( + "get_subgraph", + [](const graph_algorithm::NetlistGraph* graph, const std::vector& subgraph_vertices) -> std::optional> { auto res = graph_algorithm::get_subgraph(graph, subgraph_vertices); if (res.is_ok()) { @@ -754,6 +848,31 @@ namespace hal :rtype: graph_algorithm.NetlistGraph or None )"); + m.def( + "get_subgraph", + [](const graph_algorithm::NetlistGraph* graph, const std::set& subgraph_vertices) -> std::optional> { + auto res = graph_algorithm::get_subgraph(graph, subgraph_vertices); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "error encountered while computing subgraph:\n{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("graph"), + py::arg("subgraph_vertices"), + R"( + Compute the subgraph induced by the specified vertices, including all edges between these vertices. + + :param graph_algorithm.NetlistGraph graph: The netlist graph. + :param set[int] subgraph_vertices: A set of vertices that make up the subgraph. + :returns: The subgraph as a new netlist graph on success, ``None`` otherwise. + :rtype: graph_algorithm.NetlistGraph or None + )"); + #ifndef PYBIND11_MODULE return m.ptr(); #endif // PYBIND11_MODULE diff --git a/plugins/graph_algorithm/src/algorithms/components.cpp b/plugins/graph_algorithm/src/algorithms/components.cpp index aad3d904d14..8f2115edd13 100644 --- a/plugins/graph_algorithm/src/algorithms/components.cpp +++ b/plugins/graph_algorithm/src/algorithms/components.cpp @@ -8,7 +8,7 @@ namespace hal { namespace graph_algorithm { - Result>> get_connected_components(NetlistGraph* graph, bool strong, u32 min_size) + Result>> get_connected_components(const NetlistGraph* graph, bool strong, u32 min_size) { if (graph == nullptr) { diff --git a/plugins/graph_algorithm/src/algorithms/neighborhood.cpp b/plugins/graph_algorithm/src/algorithms/neighborhood.cpp index bde526fd9a7..d07967cb0e4 100644 --- a/plugins/graph_algorithm/src/algorithms/neighborhood.cpp +++ b/plugins/graph_algorithm/src/algorithms/neighborhood.cpp @@ -75,14 +75,14 @@ namespace hal return res; } - Result>> get_neighborhood_igraph(NetlistGraph* graph, const igraph_vector_int_t* start_gates, u32 order, NetlistGraph::Direction direction, u32 min_dist) + Result>> get_neighborhood_igraph(NetlistGraph* graph, const igraph_vector_int_t* start_vertices, u32 order, NetlistGraph::Direction direction, u32 min_dist) { if (!graph) { return ERR("graph is a nullptr"); } - igraph_vs_t v_sel = igraph_vss_vector(start_gates); + igraph_vs_t v_sel = igraph_vss_vector(start_vertices); igraph_neimode_t mode; switch (direction) { diff --git a/plugins/graph_algorithm/src/algorithms/subgraph.cpp b/plugins/graph_algorithm/src/algorithms/subgraph.cpp index d11f8242133..83227b42317 100644 --- a/plugins/graph_algorithm/src/algorithms/subgraph.cpp +++ b/plugins/graph_algorithm/src/algorithms/subgraph.cpp @@ -7,7 +7,7 @@ namespace hal { namespace graph_algorithm { - Result> get_subgraph(NetlistGraph* graph, const std::vector& subgraph_gates) + Result> get_subgraph(const NetlistGraph* graph, const std::vector& subgraph_gates) { if (graph == nullptr) { @@ -41,7 +41,41 @@ namespace hal return res; } - Result> get_subgraph(NetlistGraph* graph, const std::vector& subgraph_vertices) + Result> get_subgraph(const NetlistGraph* graph, const std::set& subgraph_gates) + { + if (graph == nullptr) + { + return ERR("graph is a nullptr"); + } + + if (subgraph_gates.empty()) + { + return ERR("no subgraph gates provided"); + } + + igraph_vector_int_t i_gates; + if (auto res = graph->get_vertices_from_gates_igraph(subgraph_gates); res.is_ok()) + { + i_gates = std::move(res.get()); + } + else + { + return ERR(res.get_error()); + } + + auto res = get_subgraph_igraph(graph, &i_gates); + + igraph_vector_int_destroy(&i_gates); + + if (res.is_error()) + { + return ERR(res.get_error()); + } + + return res; + } + + Result> get_subgraph(const NetlistGraph* graph, const std::vector& subgraph_vertices) { if (graph == nullptr) { @@ -76,7 +110,44 @@ namespace hal return res; } - Result> get_subgraph_igraph(NetlistGraph* graph, const igraph_vector_int_t* subgraph_vertices) + Result> get_subgraph(const NetlistGraph* graph, const std::set& subgraph_vertices) + { + if (graph == nullptr) + { + return ERR("graph is a nullptr"); + } + + if (subgraph_vertices.empty()) + { + return ERR("no subgraph vertices provided"); + } + + igraph_vector_int_t i_gates; + if (auto res = igraph_vector_int_init(&i_gates, subgraph_vertices.size()); res != IGRAPH_SUCCESS) + { + return ERR(igraph_strerror(res)); + } + + u32 i = 0; + for (auto it = subgraph_vertices.begin(); it != subgraph_vertices.end(); it++) + { + VECTOR(i_gates)[i] = *it; + i++; + } + + auto res = get_subgraph_igraph(graph, &i_gates); + + igraph_vector_int_destroy(&i_gates); + + if (res.is_error()) + { + return ERR(res.get_error()); + } + + return res; + } + + Result> get_subgraph_igraph(const NetlistGraph* graph, const igraph_vector_int_t* subgraph_vertices) { if (graph == nullptr) { diff --git a/plugins/graph_algorithm/src/netlist_graph.cpp b/plugins/graph_algorithm/src/netlist_graph.cpp index 3f9f3a5dd7f..4c90111093a 100644 --- a/plugins/graph_algorithm/src/netlist_graph.cpp +++ b/plugins/graph_algorithm/src/netlist_graph.cpp @@ -16,6 +16,8 @@ namespace hal NetlistGraph::NetlistGraph(Netlist* nl, igraph_t&& graph, std::unordered_map&& nodes_to_gates) : m_nl(nl), m_graph(std::move(graph)), m_nodes_to_gates(std::move(nodes_to_gates)) { + m_graph_ptr = &m_graph; + for (const auto& [node, gate] : m_nodes_to_gates) { if (gate) @@ -142,7 +144,9 @@ namespace hal } } - err = igraph_create(&(graph->m_graph), &edges, node_counter, IGRAPH_DIRECTED); + graph->m_graph_ptr = &(graph->m_graph); + err = igraph_create(graph->m_graph_ptr, &edges, node_counter, IGRAPH_DIRECTED); + igraph_vector_int_destroy(&edges); if (err != IGRAPH_SUCCESS) @@ -153,7 +157,7 @@ namespace hal return OK(std::move(graph)); } - Result> NetlistGraph::from_netlist_no_edges(Netlist* nl) + Result> NetlistGraph::from_netlist_no_edges(Netlist* nl, const std::vector& gates) { if (!nl) { @@ -162,15 +166,18 @@ namespace hal auto graph = std::unique_ptr(new NetlistGraph(nl)); + const auto& graph_gates = gates.empty() ? graph->m_nl->get_gates() : gates; + u32 node_counter = 0; - for (auto* g : graph->m_nl->get_gates()) + for (auto* g : graph_gates) { const u32 node = node_counter++; graph->m_gates_to_nodes[g] = node; graph->m_nodes_to_gates[node] = g; } - auto err = igraph_empty(&(graph->m_graph), node_counter, IGRAPH_DIRECTED); + graph->m_graph_ptr = &(graph->m_graph); + auto err = igraph_empty(graph->m_graph_ptr, node_counter, IGRAPH_DIRECTED); if (err != IGRAPH_SUCCESS) { return ERR(igraph_strerror(err)); @@ -179,14 +186,30 @@ namespace hal return OK(std::move(graph)); } + Result> NetlistGraph::copy() const + { + auto graph = std::unique_ptr(new NetlistGraph(m_nl)); + + if (const auto res = igraph_copy(&(graph->m_graph), &(this->m_graph)); res != IGRAPH_SUCCESS) + { + return ERR(igraph_strerror(res)); + } + + graph->m_graph_ptr = &(graph->m_graph); + graph->m_gates_to_nodes = this->m_gates_to_nodes; + graph->m_nodes_to_gates = this->m_nodes_to_gates; + + return OK(std::move(graph)); + } + Netlist* NetlistGraph::get_netlist() const { return m_nl; } - igraph_t* NetlistGraph::get_graph() + igraph_t* NetlistGraph::get_graph() const { - return &m_graph; + return m_graph_ptr; } Result> NetlistGraph::get_gates_from_vertices(const std::vector& vertices) const @@ -201,12 +224,12 @@ namespace hal res.push_back(g); if (!g) { - log_warning("graph_algorithm", "no gate exists for dummy node {}, added nullptr", vertex); + log_warning("graph_algorithm", "no gate exists for dummy vertex {}, added nullptr", vertex); } } else { - return ERR("no gate for node " + std::to_string(vertex) + " exists in netlist with ID " + std::to_string(m_nl->get_id())); + return ERR("no gate for vertex " + std::to_string(vertex) + " exists in netlist with ID " + std::to_string(m_nl->get_id())); } } return OK(res); @@ -224,12 +247,12 @@ namespace hal res.push_back(g); if (!g) { - log_warning("graph_algorithm", "no gate exists for dummy node {}, added nullptr", vertex); + log_warning("graph_algorithm", "no gate exists for dummy vertex {}, added nullptr", vertex); } } else { - return ERR("no gate for node " + std::to_string(vertex) + " exists in netlist with ID " + std::to_string(m_nl->get_id())); + return ERR("no gate for vertex " + std::to_string(vertex) + " exists in netlist with ID " + std::to_string(m_nl->get_id())); } } return OK(res); @@ -249,12 +272,86 @@ namespace hal res.push_back(g); if (!g) { - log_warning("graph_algorithm", "no gate exists for dummy node {}, added nullptr", vertex); + log_warning("graph_algorithm", "no gate exists for dummy vertex {}, added nullptr", vertex); + } + } + else + { + return ERR("no gate for vertex " + std::to_string(vertex) + " exists in netlist with ID " + std::to_string(m_nl->get_id())); + } + } + return OK(res); + } + + Result> NetlistGraph::get_gates_set_from_vertices(const std::vector& vertices) const + { + std::set res; + for (const auto& vertex : vertices) + { + if (const auto it = m_nodes_to_gates.find(vertex); it != m_nodes_to_gates.end()) + { + Gate* g = it->second; + + if (!g) + { + log_warning("graph_algorithm", "no gate exists for dummy vertex {}, skipping vertex", vertex); + continue; + } + res.insert(g); + } + else + { + return ERR("no gate for vertex " + std::to_string(vertex) + " exists in netlist with ID " + std::to_string(m_nl->get_id())); + } + } + return OK(res); + } + + Result> NetlistGraph::get_gates_set_from_vertices(const std::set& vertices) const + { + std::set res; + for (const auto& vertex : vertices) + { + if (const auto it = m_nodes_to_gates.find(vertex); it != m_nodes_to_gates.end()) + { + Gate* g = it->second; + + if (!g) + { + log_warning("graph_algorithm", "no gate exists for dummy vertex {}, skipping vertex", vertex); + continue; } + res.insert(g); } else { - return ERR("no gate for node " + std::to_string(vertex) + " exists in netlist with ID " + std::to_string(m_nl->get_id())); + return ERR("no gate for vertex " + std::to_string(vertex) + " exists in netlist with ID " + std::to_string(m_nl->get_id())); + } + } + return OK(res); + } + + Result> NetlistGraph::get_gates_set_from_vertices_igraph(const igraph_vector_int_t* vertices) const + { + std::set res; + const u32 num_vertices = igraph_vector_int_size(vertices); + for (u32 i = 0; i < num_vertices; i++) + { + u32 vertex = VECTOR(*vertices)[i]; + if (const auto it = m_nodes_to_gates.find(vertex); it != m_nodes_to_gates.end()) + { + Gate* g = it->second; + + if (!g) + { + log_warning("graph_algorithm", "no gate exists for dummy vertex {}, skipping vertex", vertex); + continue; + } + res.insert(g); + } + else + { + return ERR("no gate for vertex " + std::to_string(vertex) + " exists in netlist with ID " + std::to_string(m_nl->get_id())); } } return OK(res); @@ -346,6 +443,38 @@ namespace hal return OK(std::move(out)); } + Result NetlistGraph::get_vertices_from_gates_igraph(const std::set& gates) const + { + igraph_vector_int_t out; + if (auto res = igraph_vector_int_init(&out, gates.size()); res != IGRAPH_SUCCESS) + { + return ERR(igraph_strerror(res)); + } + + u32 i = 0; + for (auto gates_it = gates.begin(); gates_it != gates.end(); gates_it++) + { + auto* g = *gates_it; + + if (!g) + { + return ERR("gate at index " + std::to_string(i) + " is a nullptr"); + } + + if (const auto nodes_it = m_gates_to_nodes.find(g); nodes_it != m_gates_to_nodes.end()) + { + VECTOR(out)[i] = nodes_it->second; + } + else + { + return ERR("no node for gate '" + g->get_name() + "' with ID " + std::to_string(g->get_id()) + " exists in graph for netlist with ID " + std::to_string(m_nl->get_id())); + } + + i++; + } + return OK(std::move(out)); + } + Result NetlistGraph::get_vertex_from_gate(Gate* g) const { const auto res = get_vertices_from_gates(std::vector({g})); diff --git a/plugins/hawkeye/.gitignore b/plugins/hawkeye/.gitignore new file mode 100644 index 00000000000..3ab9044d6ce --- /dev/null +++ b/plugins/hawkeye/.gitignore @@ -0,0 +1,12 @@ +* +!include* +!include/**/* +!src* +!src/**/* +!python* +!python/**/* +!documentation* +!documentation/**/* +!scripts* +!scripts/**/* +!.gitignore \ No newline at end of file diff --git a/plugins/hawkeye/CMakeLists.txt b/plugins/hawkeye/CMakeLists.txt new file mode 100644 index 00000000000..254023e0b55 --- /dev/null +++ b/plugins/hawkeye/CMakeLists.txt @@ -0,0 +1,18 @@ +option(PL_HAWKEYE "PL_HAWKEYE" OFF) + +if(PL_HAWKEYE OR BUILD_ALL_PLUGINS) + + file(GLOB_RECURSE HAWKEYE_INC ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h) + file(GLOB_RECURSE HAWKEYE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) + file(GLOB_RECURSE HAWKEYE_PYTHON_SRC ${CMAKE_CURRENT_SOURCE_DIR}/python/*.cpp) + + hal_add_plugin(hawkeye + SHARED + HEADER ${HAWKEYE_INC} + SOURCES ${HAWKEYE_SRC} ${HAWKEYE_PYTHON_SRC} + PYDOC SPHINX_DOC_INDEX_FILE ${CMAKE_CURRENT_SOURCE_DIR}/documentation/hawkeye.rst + LINK_LIBRARIES graph_algorithm + COMPILE_OPTIONS "-march=native" + ) + +endif() diff --git a/plugins/hawkeye/documentation/hawkeye.rst b/plugins/hawkeye/documentation/hawkeye.rst new file mode 100644 index 00000000000..5dcfa3a7e76 --- /dev/null +++ b/plugins/hawkeye/documentation/hawkeye.rst @@ -0,0 +1,2 @@ +HAWKEYE +========================== \ No newline at end of file diff --git a/plugins/hawkeye/include/hawkeye/candidate_search.h b/plugins/hawkeye/include/hawkeye/candidate_search.h new file mode 100644 index 00000000000..d33b0816790 --- /dev/null +++ b/plugins/hawkeye/include/hawkeye/candidate_search.h @@ -0,0 +1,80 @@ +// MIT License +// +// Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved. +// Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved. +// Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved. +// Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#pragma once + +#include "hal_core/utilities/enums.h" +#include "hal_core/utilities/result.h" +#include "hawkeye/register_candidate.h" + +#include + +namespace hal +{ + class Netlist; + class Gate; + + namespace hawkeye + { + struct DetectionConfiguration + { + enum class Control + { + CHECK_FF, + CHECK_TYPE, + CHECK_PINS, + CHECK_NETS + } control = Control::CHECK_NETS; + + enum class Components + { + NONE, + CHECK_SCC + } components = Components::NONE; + + std::vector> equivalent_types; + + u32 timeout = 10; + u32 min_register_size = 10; + }; + + /** + * TODO description + * + * @param[in] nl - The netlist to operate on. + * @param[in] config - The configurations of the detection approaches to be executed one after another on each start flip-flop. + * @param[in] min_state_size - The minimum size of a register candidate to be considered a cryptographic state register. Defaults to `40`. + * @param[in] start_ffs - The flip-flops to analyze. Defaults to an empty vector, i.e., all flip-flops in the netlist will be analyzed. + * @returns Ok() and a vector of candidates on success, an error otherwise. + */ + Result> detect_candidates(Netlist* nl, const std::vector& configs, u32 min_state_size = 40, const std::vector& start_ffs = {}); + } // namespace hawkeye + + template<> + std::map EnumStrings::data; + + template<> + std::map EnumStrings::data; +} // namespace hal \ No newline at end of file diff --git a/plugins/hawkeye/include/hawkeye/plugin_hawkeye.h b/plugins/hawkeye/include/hawkeye/plugin_hawkeye.h new file mode 100644 index 00000000000..28b10b75634 --- /dev/null +++ b/plugins/hawkeye/include/hawkeye/plugin_hawkeye.h @@ -0,0 +1,75 @@ +// MIT License +// +// Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved. +// Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved. +// Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved. +// Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#pragma once + +#include "hal_core/plugin_system/plugin_interface_base.h" + +namespace hal +{ + class Gate; + class Netlist; + + class PLUGIN_API HawkeyePlugin : public BasePluginInterface + { + public: + /** constructor (= default) */ + HawkeyePlugin() = default; + + /** destructor (= default) */ + ~HawkeyePlugin() = default; + + /* + * interface implementations + */ + + /** + * Get the name of the plugin. + * + * @returns The name of the plugin. + */ + std::string get_name() const override; + + /** + * Get short description for plugin. + * + * @return The short description. + */ + std::string get_description() const override; + + /** + * Get the version of the plugin. + * + * @returns The version of the plugin. + */ + std::string get_version() const override; + + /** + * Get plugin dependencies. + * @return Set of plugins that this plugin depends on. + */ + std::set get_dependencies() const override; + }; +} // namespace hal diff --git a/plugins/hawkeye/include/hawkeye/register_candidate.h b/plugins/hawkeye/include/hawkeye/register_candidate.h new file mode 100644 index 00000000000..573fb3dc614 --- /dev/null +++ b/plugins/hawkeye/include/hawkeye/register_candidate.h @@ -0,0 +1,141 @@ +// MIT License +// +// Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved. +// Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved. +// Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved. +// Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#pragma once + +#include "hal_core/utilities/result.h" + +#include + +namespace hal +{ + class Netlist; + class Gate; + class Net; + + namespace hawkeye + { + class RegisterCandidate + { + public: + RegisterCandidate() = default; + ~RegisterCandidate() = default; + + /** + * Construct a state register candidate from the state register of a round-based implementation. + * + * @param[in] round_reg - The state register. + */ + RegisterCandidate(const std::set& round_reg); + + /** + * Construct a state register candidate from the state register of a round-based implementation. + * + * @param[in] round_reg - The state register. + */ + RegisterCandidate(std::set&& round_reg); + + /** + * Construct a state register candidate from the input and output registers from a round of a pipelined implementation. + * + * @param[in] in_reg - The input register. + * @param[in] out_reg - The output register. + */ + RegisterCandidate(const std::set& in_reg, const std::set& out_reg); + + /** + * Construct a state register candidate from the input and output registers from a round of a pipelined implementation. + * + * @param[in] in_reg - The input register. + * @param[in] out_reg - The output register. + */ + RegisterCandidate(std::set&& in_reg, std::set&& out_reg); + + bool operator==(const RegisterCandidate& rhs) const; + bool operator<(const RegisterCandidate& rhs) const; + + /** + * Get the netlist associated with the candidate. + * + * @return The netlist of the candidate. + */ + Netlist* get_netlist() const; + + /** + * Get the size of the candidate, i.e., the width of its registers. + * + * @returns The size of the candidate. + */ + u32 get_size() const; + + /** + * Check if the candidate is round-based, i.e., input and output register are the same. + * + * @returns `true` if the candidate is round-based, `false` otherwise. + */ + bool is_round_based() const; + + /** + * Get the candidate's input register. + * + * @returns The input register of the candidate. + */ + const std::set& get_input_reg() const; + + /** + * Get the candidate's output register. + * + * @returns The output register of the candidate. + */ + const std::set& get_output_reg() const; + + private: + /** + * The netlist to which the candidate belongs. + */ + Netlist* m_netlist; + + /** + * The bit-size of the candidate. + */ + u32 m_size; + + /** + * Is `true` when the the candidate is round-based, i.e., input and output register are the same. + */ + bool m_is_round_based; + + /** + * The candidate input register. + */ + std::set m_in_reg; + + /** + * The candidate output register. May be equal to `m_in_reg` for round-based implementations. + */ + std::set m_out_reg; + }; + } // namespace hawkeye +} // namespace hal \ No newline at end of file diff --git a/plugins/hawkeye/include/hawkeye/round_candidate.h b/plugins/hawkeye/include/hawkeye/round_candidate.h new file mode 100644 index 00000000000..deb7ac1ae4c --- /dev/null +++ b/plugins/hawkeye/include/hawkeye/round_candidate.h @@ -0,0 +1,194 @@ +// MIT License +// +// Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved. +// Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved. +// Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved. +// Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#pragma once + +#include "graph_algorithm/netlist_graph.h" +#include "hal_core/defines.h" +#include "hawkeye/register_candidate.h" + +#include +#include + +namespace hal +{ + namespace hawkeye + { + class RoundCandidate + { + public: + RoundCandidate() = default; + ~RoundCandidate() = default; + + /** + * Computes a state candidate from the previously identified register candidate. + * The netlist of this candidate will be a partial copy of the original netlist, comprising only the gates belonging to the registers and the logic computing the next state. + * + * @param[in] candidate - The register candidate. + * @returns The state candidate on success, an error otherwise. + */ + static Result> from_register_candidate(RegisterCandidate* candidate); + + /** + * Get the netlist of the state candidate. The netlist will be a partial copy of the netlist of the register candidate. + * + * @returns The netlist. + */ + Netlist* get_netlist() const; + + /** + * Get the netlist graph of the state candidate. + * + * @returns The netlist graph. + */ + graph_algorithm::NetlistGraph* get_graph() const; + + /** + * Get the size of the candidate, i.e., the width of its registers. + * + * @returns The size of the candidate. + */ + u32 get_size() const; + + /** + * Get the candidate's input register. + * + * @returns The input register of the candidate. + */ + const std::set& get_input_reg() const; + + /** + * Get the candidate's output register. + * + * @returns The output register of the candidate. + */ + const std::set& get_output_reg() const; + + /** + * Get the candidate's combinational logic computing the next state. + * + * @returns The state logic of the candidate. + */ + const std::set& get_state_logic() const; + + /** + * Get the candidate's state inputs to the logic computing the next state. + * + * @returns The state inputs of the candidate. + */ + const std::set& get_state_inputs() const; + + /** + * Get the candidate's control inputs to the logic computing the next state. + * + * @returns The control inputs of the candidate. + */ + const std::set& get_control_inputs() const; + + /** + * Get the candidate's other inputs to the logic computing the next state. + * + * @returns The other inputs of the candidate. + */ + const std::set& get_other_inputs() const; + + /** + * Get the candidate's state outputs from the logic computing the next state. + * + * @returns The state outputs of the candidate. + */ + const std::set& get_state_outputs() const; + + /** + * Get a map from each combinational gate of the round function to all the input flip-flops it depends on. + * + * @returns A map from gates to sets of input flip-flops. + */ + const std::map>& get_input_ffs_of_gate() const; + + /** + * Get a map from an integer distance to all gates that are reachable within at most that distance when starting at any input flip-flop. + * + * @returns A map from longest distance to a set of gates being reachable in at most that distance. + */ + const std::map>& get_longest_distance_to_gate() const; + + private: + /** + * The netlist to which the candidate belongs. + */ + std::unique_ptr m_netlist; + + /** + * The netlist to which the candidate belongs. + */ + std::unique_ptr m_graph; + + /** + * The bit-size of the candidate. + */ + u32 m_size; + + /** + * The candidate input register. + */ + std::set m_in_reg; + + /** + * The candidate output register. May be equal to `m_in_reg` for round-based implementations. + */ + std::set m_out_reg; + + /** + * The combinational logic computing the next state. + */ + std::set m_state_logic; + + /** + * The state inputs to the combinational logic computing the next state. + */ + std::set m_state_inputs; + + /** + * The control inputs to the combinational logic computing the next state. + */ + std::set m_control_inputs; + + /** + * All other inputs to the combinational logic computing the next state. + */ + std::set m_other_inputs; + + /** + * The state outputs from the combinational logic computing the next state. + */ + std::set m_state_outputs; + + std::map> m_input_ffs_of_gate; + + std::map> m_longest_distance_to_gate; + }; + } // namespace hawkeye +} // namespace hal \ No newline at end of file diff --git a/plugins/hawkeye/include/hawkeye/sbox_database.h b/plugins/hawkeye/include/hawkeye/sbox_database.h new file mode 100644 index 00000000000..d1e5e025a2c --- /dev/null +++ b/plugins/hawkeye/include/hawkeye/sbox_database.h @@ -0,0 +1,129 @@ +// MIT License +// +// Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved. +// Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved. +// Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved. +// Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#pragma once + +#include "hal_core/defines.h" +#include "hal_core/utilities/result.h" + +#include +#include + +namespace hal +{ + namespace hawkeye + { + /** + * Database of known S-boxes. + */ + class SBoxDatabase + { + public: + /** + * Constructs an empty S-box database. + */ + SBoxDatabase() = default; + + /** + * Constructs an S-box database from the given S-boxes. + * + * @param[in] sboxes - A map from S-box name to the respective S-box. + */ + SBoxDatabase(const std::map>& sboxes); + + /** + * Destructs the S-box database. + */ + ~SBoxDatabase() = default; + + /** + * Constructs an S-box database from file. + * + * @param[in] file_path - The path from which to load the S-box database file. + * @returns The S-box database on success, an error otherwise. + */ + static Result from_file(const std::filesystem::path& file_path); + + /** + * Compute the linear representative of the given S-box. + * + * @param[in] sbox - The S-box. + * @returns The linear representative. + */ + static std::vector compute_linear_representative(const std::vector& sbox); + + /** + * Add an S-box to the database. + * + * @param[in] name - The name of the S-box. + * @param[in] sbox - The S-box. + * @returns Ok() on success, an error otherwise. + */ + Result add(const std::string& name, const std::vector& sbox); + + /** + * Add multiple S-boxes to the database. + * + * @param[in] sboxes - A map from S-box name to the respective S-box. + * @returns Ok() on success, an error otherwise. + */ + Result add(const std::map>& sboxes); + + /** + * Load S-boxes to the database from a file. + * + * @param[in] file_path - The path from which to load the S-box database file. + * @param[in] overwrite - Set `true` to overwrite existing database, `false` otherwise. Defaults to `true`. + * @returns Ok() on success, an error otherwise. + */ + Result load(const std::filesystem::path& file_path, bool overwrite = true); + + /** + * Store the S-box database to a database file. + * + * @param[in] file_path - The path to where to store the S-box database file. + * @returns Ok() on success, an error otherwise. + */ + Result store(const std::filesystem::path& file_path) const; + + /** + * Attempt to look up an S-box in the database. + * + * @param[in] sbox - The S-box to look for. + * @returns Ok() and the S-box name on success, an error otherwise. + */ + Result lookup(const std::vector& sbox) const; + + /** + * Print the database. + */ + void print() const; + + private: + std::map, std::vector>>> m_data; + }; + } // namespace hawkeye + +} // namespace hal diff --git a/plugins/hawkeye/include/hawkeye/sbox_lookup.h b/plugins/hawkeye/include/hawkeye/sbox_lookup.h new file mode 100644 index 00000000000..192ae9e2e35 --- /dev/null +++ b/plugins/hawkeye/include/hawkeye/sbox_lookup.h @@ -0,0 +1,88 @@ +// MIT License +// +// Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved. +// Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved. +// Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved. +// Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#pragma once + +#include "hal_core/defines.h" +#include "hal_core/utilities/result.h" +#include "hawkeye/sbox_database.h" + +#include +#include + +namespace hal +{ + class Gate; + + namespace hawkeye + { + + class RoundCandidate; + + /** + * Stores all information related to an S-box candidate such as the `RoundCandidate` it belongs to, the connected component it is part of, and its input and output gates. + */ + class SBoxCandidate + { + public: + /** + * The `RoundCandidate` that the S-box candidate belongs to. + */ + const RoundCandidate* m_candidate; + + /** + * The gates of the component which the S-box candidate is part of. + */ + std::vector m_component; + + /** + * The input gates of the S-box candidate (will be flip-flops). + */ + std::set m_input_gates; + + /** + * The output gates of the S-box candidate (usually combinational logic that is input to the linear layer). + */ + std::set m_output_gates; + }; + + /** + * Tries to locate S-box candidates within the combinational next-state logic of the round function candidate. + * + * @param[in] candidate - A round function candidate. + * @returns A vector of S-box candidates on success, an error otherwise. + */ + Result> locate_sboxes(const RoundCandidate* candidate); + + /** + * Tries to identify an S-box candidate by matching it against a database of known S-boxes under affine equivalence. + * + * @param[in] sbox_candidate - An S-box candidate. + * @param[in] db - A database of known S-boxes. + * @returns The name of the S-box on success, an error otherwise. + */ + Result identify_sbox(const SBoxCandidate& sbox_candidate, const SBoxDatabase& db); + } // namespace hawkeye +} // namespace hal \ No newline at end of file diff --git a/plugins/hawkeye/python/python_bindings.cpp b/plugins/hawkeye/python/python_bindings.cpp new file mode 100644 index 00000000000..12a322a06d2 --- /dev/null +++ b/plugins/hawkeye/python/python_bindings.cpp @@ -0,0 +1,536 @@ +#include "hal_core/python_bindings/python_bindings.h" + +#include "hawkeye/candidate_search.h" +#include "hawkeye/plugin_hawkeye.h" +#include "hawkeye/round_candidate.h" +#include "hawkeye/sbox_database.h" +#include "hawkeye/sbox_lookup.h" +#include "pybind11/operators.h" +#include "pybind11/pybind11.h" +#include "pybind11/stl.h" +#include "pybind11/stl_bind.h" + +namespace py = pybind11; + +namespace hal +{ + + // the name in PYBIND11_MODULE/PYBIND11_PLUGIN *MUST* match the filename of the output library (without extension), + // otherwise you will get "ImportError: dynamic module does not define module export function" when importing the module + +#ifdef PYBIND11_MODULE + PYBIND11_MODULE(hawkeye, m) + { + m.doc() = "hal HawkeyePlugin python bindings"; +#else + PYBIND11_PLUGIN(hawkeye) + { + py::module m("hawkeye", "hal HawkeyePlugin python bindings"); +#endif // ifdef PYBIND11_MODULE + + py::class_, BasePluginInterface> py_hawkeye_plugin(m, "HawkeyePlugin"); + py_hawkeye_plugin.def_property_readonly("name", &HawkeyePlugin::get_name, R"( + The name of the plugin. + + :type: str + )"); + + py_hawkeye_plugin.def("get_name", &HawkeyePlugin::get_name, R"( + Get the name of the plugin. + + :returns: Plugin name. + :rtype: str + )"); + + py_hawkeye_plugin.def_property_readonly("description", &HawkeyePlugin::get_description, R"( + The description of the plugin. + + :type: str + )"); + + py_hawkeye_plugin.def("get_description", &HawkeyePlugin::get_description, R"( + Get the description of the plugin. + + :returns: The description of the plugin. + :rtype: str + )"); + + py_hawkeye_plugin.def_property_readonly("version", &HawkeyePlugin::get_version, R"( + The version of the plugin. + + :type: str + )"); + + py_hawkeye_plugin.def("get_version", &HawkeyePlugin::get_version, R"( + Get the version of the plugin. + + :returns: Plugin version. + :rtype: str + )"); + + py::class_> py_hawkeye_sbox_database(m, "SBoxDatabase", R"( + Database of known S-boxes. + )"); + + py_hawkeye_sbox_database.def(py::init<>(), R"( + Constructs an empty S-box database. + )"); + + py_hawkeye_sbox_database.def(py::init>&>(), py::arg("sboxes"), R"( + Constructs an S-box database from the given S-boxes. + + :param dict[str,list[int]] sboxes: A dict from S-box name to the respective S-box. + )"); + + py_hawkeye_sbox_database.def_static( + "from_file", + [](const std::filesystem::path& file_path) -> std::optional { + auto res = hawkeye::SBoxDatabase::from_file(file_path); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("file_path"), + R"( + Constructs an S-box database from file. + + :param pathlib.Path file_path: The path from which to load the S-box database file. + :returns: The S-box database on success, an error otherwise. + :rtype: hawkeye.SBoxDatabase or None + )"); + + py_hawkeye_sbox_database.def_static("compute_linear_representative", &hawkeye::SBoxDatabase::compute_linear_representative, py::arg("sbox"), R"( + Compute the linear representative of the given S-box. + + :param list[int] sbox: The S-box. + :returns: The linear representative. + :rtype: list[int] + )"); + + py_hawkeye_sbox_database.def( + "add", + [](hawkeye::SBoxDatabase& self, const std::string& name, const std::vector& sbox) -> bool { + auto res = self.add(name, sbox); + if (res.is_ok()) + { + return true; + } + else + { + log_error("python_context", "{}", res.get_error().get()); + return false; + } + }, + py::arg("name"), + py::arg("sbox"), + R"( + Add multiple S-boxes to the database. + + :param str name: The name of the S-box. + :patam list[int] sbox: The S-box. + :returns: ``True`` on success, ``False`` otherwise. + :rtype: bool + )"); + + py_hawkeye_sbox_database.def( + "add", + [](hawkeye::SBoxDatabase& self, const std::map>& sboxes) -> bool { + auto res = self.add(sboxes); + if (res.is_ok()) + { + return true; + } + else + { + log_error("python_context", "{}", res.get_error().get()); + return false; + } + }, + py::arg("sboxes"), + R"( + Add multiple S-boxes to the database. + + :param dict[str,list[int]] sboxes: A dict from S-box name to the respective S-box. + :returns: ``True`` on success, ``False`` otherwise. + :rtype: bool + )"); + + py_hawkeye_sbox_database.def( + "load", + [](hawkeye::SBoxDatabase& self, const std::filesystem::path& file_path, bool overwrite = true) -> bool { + auto res = self.load(file_path, overwrite); + if (res.is_ok()) + { + return true; + } + else + { + log_error("python_context", "{}", res.get_error().get()); + return false; + } + }, + py::arg("file_path"), + py::arg("overwrite") = true, + R"( + Load S-boxes to the database from a file. + + :param pathlib.Path file_path: The path from which to load the S-box database file. + :returns: ``True`` on success, ``False`` otherwise. + :rtype: bool + )"); + + py_hawkeye_sbox_database.def( + "store", + [](const hawkeye::SBoxDatabase& self, const std::filesystem::path& file_path) -> bool { + auto res = self.store(file_path); + if (res.is_ok()) + { + return true; + } + else + { + log_error("python_context", "{}", res.get_error().get()); + return false; + } + }, + py::arg("file_path"), + R"( + Store the S-box database to a database file. + + :param pathlib.Path file_path: The path to where to store the S-box database file. + :returns: ``True`` on success, ``False`` otherwise. + :rtype: bool + )"); + + py_hawkeye_sbox_database.def( + "lookup", + [](const hawkeye::SBoxDatabase& self, const std::vector& sbox) -> std::optional { + auto res = self.lookup(sbox); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("sbox"), + R"( + Attempt to look up an S-box in the database. + + :param list[int] sbox: The S-box to look for. + :returns: The S-box name on success, ``None`` otherwise. + :rtype: str or None + )"); + + py_hawkeye_sbox_database.def("print", &hawkeye::SBoxDatabase::print, R"( + Print the database. + )"); + + py::class_> py_hawkeye_detection_configuration(m, "DetectionConfiguration", R"(TODO)"); + + py_hawkeye_detection_configuration.def(py::init<>(), R"( + Constructs a default DetectionConfiguration. + )"); + + py::enum_ py_hawkeye_detection_configuration_control(py_hawkeye_detection_configuration, "Control", R"(TODO)"); + + py_hawkeye_detection_configuration_control.value("CHECK_FF", hawkeye::DetectionConfiguration::Control::CHECK_FF, R"(TODO)") + .value("CHECK_TYPE", hawkeye::DetectionConfiguration::Control::CHECK_TYPE, R"(TODO)") + .value("CHECK_PINS", hawkeye::DetectionConfiguration::Control::CHECK_PINS, R"(TODO)") + .value("CHECK_NETS", hawkeye::DetectionConfiguration::Control::CHECK_NETS, R"(TODO)") + .export_values(); + + py_hawkeye_detection_configuration.def_readwrite("control", &hawkeye::DetectionConfiguration::control, R"( + TODO + + :type: hawkeye.DetectionConfiguration.Control + )"); + + py::enum_ py_hawkeye_detection_configuration_components(py_hawkeye_detection_configuration, "Components", R"(TODO)"); + + py_hawkeye_detection_configuration_components.value("NONE", hawkeye::DetectionConfiguration::Components::NONE, R"(TODO)") + .value("CHECK_SCC", hawkeye::DetectionConfiguration::Components::CHECK_SCC, R"(TODO)") + .export_values(); + + py_hawkeye_detection_configuration.def_readwrite("components", &hawkeye::DetectionConfiguration::components, R"( + TODO + + :type: hawkeye.DetectionConfiguration.Components + )"); + + py_hawkeye_detection_configuration.def_readwrite("equivalent_types", &hawkeye::DetectionConfiguration::equivalent_types, R"( + TODO + + :type: list[list[str]] + )"); + + py_hawkeye_detection_configuration.def_readwrite("timeout", &hawkeye::DetectionConfiguration::timeout, R"( + TODO + + :type: int + )"); + + py_hawkeye_detection_configuration.def_readwrite("min_register_size", &hawkeye::DetectionConfiguration::min_register_size, R"( + TODO + + :type: int + )"); + + py::class_> py_hawkeye_register_candidate(m, "RegisterCandidate", R"( + Holds all information on a crypto candidate. + )"); + + py_hawkeye_register_candidate.def("get_netlist", &hawkeye::RegisterCandidate::get_netlist, R"( + Get the netlist associated with the candidate. + + :returns: The netlist of the candidate. + :rtype: hal_py.Netlist + )"); + + py_hawkeye_register_candidate.def("get_size", &hawkeye::RegisterCandidate::get_size, R"( + Get the size of the candidate, i.e., the width of its registers. + + :returns: The size of the candidate. + :rtype: int + )"); + + py_hawkeye_register_candidate.def("is_round_based", &hawkeye::RegisterCandidate::is_round_based, R"( + Check if the candidate is round-based, i.e., input and output register are the same. + + :returns: ``True`` if the candidate is round-based, ``False`` otherwise. + :rtype: bool + )"); + + py_hawkeye_register_candidate.def("get_input_reg", &hawkeye::RegisterCandidate::get_input_reg, R"( + Get the candidate's input register. + + :returns: The input register of the candidate. + :rtype: set[hal_py.Gate] + )"); + + py_hawkeye_register_candidate.def("get_output_reg", &hawkeye::RegisterCandidate::get_output_reg, R"( + Get the candidate's output register. + + :returns: The output register of the candidate. + :rtype: set[hal_py.Gate] + )"); + + py::class_> py_hawkeye_state_candidate(m, "RoundCandidate", R"( + Holds all information on a crypto candidate. + )"); + + py_hawkeye_state_candidate.def_static( + "from_register_candidate", + [](hawkeye::RegisterCandidate* candidate) -> std::unique_ptr { + auto res = hawkeye::RoundCandidate::from_register_candidate(candidate); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "{}", res.get_error().get()); + return nullptr; + } + }, + py::arg("candidate"), + R"( + Computes a state candidate from the previously identified register candidate. + The netlist of this candidate will be a partial copy of the original netlist, comprising only the gates belonging to the registers and the logic computing the next state. + + :param hawkeye.RegisterCandidate candidate: The register candidate. + :returns: The state candidate on success, ``None`` otherwise. + :rtype: hawkeye.RoundCandidate or None + )"); + + py_hawkeye_state_candidate.def("get_netlist", &hawkeye::RoundCandidate::get_netlist, R"( + Get the netlist of the state candidate. The netlist will be a partial copy of the netlist of the register candidate. + + :returns: The netlist of the candidate. + :rtype: hal_py.Netlist + )"); + + py_hawkeye_state_candidate.def("get_graph", &hawkeye::RoundCandidate::get_graph, R"( + Get the netlist graph of the state candidate. + + :returns: The netlist graph of the candidate. + :rtype: graph_algorithm.NetlistGraph + )"); + + py_hawkeye_state_candidate.def("get_size", &hawkeye::RoundCandidate::get_size, R"( + Get the size of the candidate, i.e., the width of its registers. + + :returns: The size of the candidate. + :rtype: int + )"); + + py_hawkeye_state_candidate.def("get_input_reg", &hawkeye::RoundCandidate::get_input_reg, R"( + Get the candidate's input register. + + :returns: The input register of the candidate. + :rtype: set[hal_py.Gate] + )"); + + py_hawkeye_state_candidate.def("get_output_reg", &hawkeye::RoundCandidate::get_output_reg, R"( + Get the candidate's output register. + + :returns: The output register of the candidate. + :rtype: set[hal_py.Gate] + )"); + + py_hawkeye_state_candidate.def("get_state_logic", &hawkeye::RoundCandidate::get_state_logic, R"( + Get the candidate's combinational logic computing the next state. + + :returns: The state logic of the candidate. + :rtype: set[hal_py.Gate] + )"); + + py_hawkeye_state_candidate.def("get_state_inputs", &hawkeye::RoundCandidate::get_state_inputs, R"( + Get the candidate's state inputs to the logic computing the next state. + + :returns: The state inputs of the candidate. + :rtype: set[hal_py.Net] + )"); + + py_hawkeye_state_candidate.def("get_control_inputs", &hawkeye::RoundCandidate::get_control_inputs, R"( + Get the candidate's control inputs to the logic computing the next state. + + :returns: The control inputs of the candidate. + :rtype: set[hal_py.Net] + )"); + + py_hawkeye_state_candidate.def("get_other_inputs", &hawkeye::RoundCandidate::get_other_inputs, R"( + Get the candidate's other inputs to the logic computing the next state. + + :returns: The other inputs of the candidate. + :rtype: set[hal_py.Net] + )"); + + py_hawkeye_state_candidate.def("get_state_outputs", &hawkeye::RoundCandidate::get_state_outputs, R"( + Get the candidate's state outputs from the logic computing the next state. + + :returns: The state outputs of the candidate. + :rtype: set[hal_py.Net] + )"); + + py_hawkeye_state_candidate.def("get_input_ffs_of_gate", &hawkeye::RoundCandidate::get_input_ffs_of_gate, R"( + Get a dict from each combinational gate of the round function to all the input flip-flops it depends on. + + :returns: A dict from gates to sets of input flip-flops. + :rtype: dict[hal_py.Gate,set[hal_py.Gate]] + )"); + + py_hawkeye_state_candidate.def("get_state_outputs", &hawkeye::RoundCandidate::get_state_outputs, R"( + Get a dict from an integer distance to all gates that are reachable within at most that distance when starting at any input flip-flop. + + :returns: A dict from longest distance to a set of gates being reachable in at most that distance. + :rtype: dict[int,set[hal_py.Gate]] + )"); + + m.def( + "detect_candidates", + [](Netlist* nl, const std::vector& configs, u32 min_state_size = 40, const std::vector& start_ffs = {}) + -> std::optional> { + auto res = hawkeye::detect_candidates(nl, configs, min_state_size, start_ffs); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "cannot detect crypto candidates:\n{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("nl"), + py::arg("configs"), + py::arg("min_state_size") = 40, + py::arg("start_ffs") = std::vector(), + R"(TODO description + + :param hal_py.Netlist nl: The netlist to operate on. + :param list[hawkeye.DetectionConfiguration] configs: The configurations of the detection approaches to be executed one after another on each start flip-flop. + :param int min_state_size: The minimum size of a register candidate to be considered a cryptographic state register. Defaults to ``40``. + :param list[hal_py.Gate] start_ffs: The flip-flops to analyze. Defaults to an empty list, i.e., all flip-flops in the netlist will be analyzed. + :returns: A list of candidates on success, ``None`` otherwise. + :rtype: list[hawkeye.RegisterCandidate] or None + )"); + + py::class_> py_hawkeye_sbox_candidate( + m, + "SBoxCandidate", + R"(Stores all information related to an S-box candidate such as the ``RoundCandidate`` it belongs to, the connected component it is part of, and its input and output gates.)"); + + py_hawkeye_sbox_candidate.def(py::init<>(), R"( + TODO + )"); + + py_hawkeye_sbox_candidate.def_readonly("m_candidate", &hawkeye::SBoxCandidate::m_candidate, R"(The ``RoundCandidate`` that the S-box candidate belongs to.)"); + + py_hawkeye_sbox_candidate.def_readonly("m_component", &hawkeye::SBoxCandidate::m_component, R"(The gates of the component which the S-box candidate is part of.)"); + + py_hawkeye_sbox_candidate.def_readonly("m_input_gates", &hawkeye::SBoxCandidate::m_input_gates, R"(The input gates of the S-box candidate (will be flip-flops).)"); + + py_hawkeye_sbox_candidate.def_readonly( + "m_output_gates", &hawkeye::SBoxCandidate::m_output_gates, R"(The output gates of the S-box candidate (usually combinational logic that is input to the linear layer).)"); + + m.def( + "locate_sboxes", + [](const hawkeye::RoundCandidate* candidate) -> std::optional> { + auto res = hawkeye::locate_sboxes(candidate); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "cannot locate S-boxes:\n{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("candidate"), + R"(Tries to locate S-box candidates within the combinational next-state logic of the round function candidate. + + :param hawkeye.RoundCandidate candidate: A round function candidate. + :returns: A list of S-box candidates on success, ``None`` otherwise. + :rtype: list[hawkeye.SBoxCandidate] or None + )"); + + m.def( + "identify_sbox", + [](const hawkeye::SBoxCandidate& sbox_candidate, const hawkeye::SBoxDatabase& db) -> std::optional { + auto res = hawkeye::identify_sbox(sbox_candidate, db); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "cannot identify S-box:\n{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("sbox_candidate"), + py::arg("db"), + R"(Tries to identify an S-box candidate by matching it against a database of known S-boxes under affine equivalence. + + :param hawkeye.SBoxCandidate sbox_candidate: An S-box candidate. + :param hawkeye.SBoxDatabase db: A database of known S-boxes. + :returns: The name of the S-box on success, ``None`` otherwise. + :rtype: str or None + )"); + +#ifndef PYBIND11_MODULE + return m.ptr(); +#endif // PYBIND11_MODULE + } +} // namespace hal diff --git a/plugins/hawkeye/scripts/detect_on_current_netlist.py b/plugins/hawkeye/scripts/detect_on_current_netlist.py new file mode 100644 index 00000000000..4ad913e63da --- /dev/null +++ b/plugins/hawkeye/scripts/detect_on_current_netlist.py @@ -0,0 +1,31 @@ +from hal_plugins import hawkeye + +config_scc = hawkeye.DetectionConfiguration() +config_scc.control = hawkeye.DetectionConfiguration.Control.CHECK_NETS +config_scc.components = hawkeye.DetectionConfiguration.Components.NONE +config_scc.timeout = 10 +config_scc.min_register_size = 10 + +min_state_size = 40 +gate_ids = [] + +res = hawkeye.detect_candidates( + netlist, + [config_scc], + min_state_size, + [netlist.get_gate_by_id(gid) for gid in gate_ids], +) + +print(f"found {len(res)} candidates: {[len(c.get_output_reg()) for c in res]}") + +for rc in res: + print(len(rc.get_output_reg()), list(rc.get_output_reg())[0].name) + + sc = hawkeye.StateCandidate.from_register_candidate(rc) + if sc == None: + print("skipped register candidate") + continue + + # do something + +print("done") diff --git a/plugins/hawkeye/src/candidate_search.cpp b/plugins/hawkeye/src/candidate_search.cpp new file mode 100644 index 00000000000..e22ce915a28 --- /dev/null +++ b/plugins/hawkeye/src/candidate_search.cpp @@ -0,0 +1,672 @@ +#include "hawkeye/candidate_search.h" + +#include "graph_algorithm/algorithms/neighborhood.h" +#include "graph_algorithm/netlist_graph.h" +#include "hal_core/netlist/decorators/netlist_traversal_decorator.h" +#include "hal_core/netlist/gate.h" +#include "hal_core/netlist/net.h" + +namespace hal +{ + namespace hawkeye + { + namespace + { + static std::set control_types = {PinType::enable, PinType::clock, PinType::set, PinType::reset}; + + bool continue_through_exit_ep(const Endpoint* exit_ep, const u32 current_depth) + { + if (exit_ep == nullptr) + { + return false; + } + + if (exit_ep->get_gate()->get_type()->has_property(GateTypeProperty::ff)) + { + if (current_depth != 0) + { + return false; + } + else if (control_types.find(exit_ep->get_pin()->get_type()) != control_types.end()) + { + return false; + } + } + + return true; + } + + bool continue_through_entry_ep(const Endpoint* entry_ep, const u32 current_depth) + { + if (entry_ep == nullptr) + { + return false; + } + + if (control_types.find(entry_ep->get_pin()->get_type()) != control_types.end()) + { + return false; + } + + const auto* gt = entry_ep->get_gate()->get_type(); + if (gt->has_property(GateTypeProperty::ram)) + { + return false; + } + + return true; + } + + struct GraphCandidate + { + u32 size; + std::set in_reg; + std::set out_reg; + + bool operator==(const GraphCandidate& rhs) const + { + return this->size == rhs.size && this->in_reg == rhs.in_reg && this->out_reg == rhs.out_reg; + } + + bool operator<(const GraphCandidate& rhs) const + { + return this->size > rhs.size || (this->size == rhs.size && this->in_reg > rhs.in_reg) || (this->size == rhs.size && this->in_reg == rhs.in_reg && this->out_reg > rhs.out_reg); + } + }; + + igraph_error_t get_saturating_neighborhoods(const igraph_t* graph, igraph_vector_int_t* in_set, igraph_vector_int_t* out_set, igraph_integer_t node, igraph_integer_t timeout) + { + igraph_integer_t no_of_nodes = igraph_vcount(graph); + igraph_integer_t i, j, k; + igraph_bool_t* added; + igraph_vector_int_t current_hood, previous_hood; + igraph_vector_int_t* current_hood_p = ¤t_hood; + igraph_vector_int_t* previous_hood_p = &previous_hood; + igraph_vector_int_t tmp; + + if (timeout < 0) + { + IGRAPH_ERROR("Negative timeout", IGRAPH_EINVAL); + } + + added = IGRAPH_CALLOC(no_of_nodes, igraph_bool_t); + IGRAPH_CHECK_OOM(added, "Cannot calculate neighborhood size."); + IGRAPH_FINALLY(igraph_free, added); + + IGRAPH_VECTOR_INT_INIT_FINALLY(current_hood_p, 0); + IGRAPH_VECTOR_INT_INIT_FINALLY(previous_hood_p, 0); + IGRAPH_VECTOR_INT_INIT_FINALLY(&tmp, 0); + + IGRAPH_CHECK(igraph_vector_int_init(in_set, 0)); + IGRAPH_CHECK(igraph_vector_int_init(out_set, 0)); + igraph_vector_int_clear(in_set); + igraph_vector_int_clear(out_set); + + IGRAPH_CHECK(igraph_vector_int_push_back(current_hood_p, node)); + + igraph_integer_t previous_size, current_size; + + for (i = 0; i < timeout; i++) + { + previous_size = igraph_vector_int_size(previous_hood_p); + current_size = igraph_vector_int_size(current_hood_p); + + if (previous_size < current_size) + { + IGRAPH_CHECK(igraph_vector_int_swap(previous_hood_p, current_hood_p)); + igraph_vector_int_clear(current_hood_p); + + memset(added, false, no_of_nodes * sizeof(igraph_bool_t)); + + for (j = 0; j < current_size; j++) + { + igraph_integer_t actnode = VECTOR(*previous_hood_p)[j]; + igraph_vector_int_clear(&tmp); + IGRAPH_CHECK(igraph_neighbors(graph, &tmp, actnode, IGRAPH_OUT)); + + for (k = 0; k < igraph_vector_int_size(&tmp); k++) + { + igraph_integer_t nei = VECTOR(tmp)[k]; + if (!added[nei]) + { + added[nei] = true; + IGRAPH_CHECK(igraph_vector_int_push_back(current_hood_p, nei)); + } + } + } + } + else + { + if (previous_size == current_size) + { + IGRAPH_CHECK(igraph_vector_int_update(in_set, previous_hood_p)); + IGRAPH_CHECK(igraph_vector_int_update(out_set, current_hood_p)); + } + + break; + } + } + + igraph_vector_int_destroy(current_hood_p); + igraph_vector_int_destroy(previous_hood_p); + igraph_vector_int_destroy(&tmp); + IGRAPH_FREE(added); + IGRAPH_FINALLY_CLEAN(4); + + return IGRAPH_SUCCESS; + } + + igraph_error_t get_saturating_neighborhoods_scc(const igraph_t* graph, + igraph_vector_int_t* in_set, + igraph_vector_int_t* out_set, + igraph_integer_t node, + igraph_integer_t timeout, + std::map, igraph_vector_int_t*>& cache) + { + igraph_integer_t no_of_nodes = igraph_vcount(graph); + igraph_integer_t i, j, k; + igraph_bool_t* added; + igraph_vector_int_t current_hood, previous_hood; + igraph_vector_int_t current_component, previous_component; + igraph_vector_int_t* current_hood_p = ¤t_hood; + igraph_vector_int_t* previous_hood_p = &previous_hood; + igraph_vector_int_t* current_component_p = ¤t_component; + igraph_vector_int_t* previous_component_p = &previous_component; + igraph_vector_int_t tmp; + + if (timeout < 0) + { + IGRAPH_ERROR("Negative timeout", IGRAPH_EINVAL); + } + + added = IGRAPH_CALLOC(no_of_nodes, igraph_bool_t); + IGRAPH_CHECK_OOM(added, "Cannot calculate neighborhood size."); + IGRAPH_FINALLY(igraph_free, added); + + IGRAPH_VECTOR_INT_INIT_FINALLY(current_hood_p, 0); + IGRAPH_VECTOR_INT_INIT_FINALLY(previous_hood_p, 0); + IGRAPH_VECTOR_INT_INIT_FINALLY(current_component_p, 0); + IGRAPH_VECTOR_INT_INIT_FINALLY(previous_component_p, 0); + IGRAPH_VECTOR_INT_INIT_FINALLY(&tmp, 0); + + IGRAPH_CHECK(igraph_vector_int_init(in_set, 0)); + IGRAPH_CHECK(igraph_vector_int_init(out_set, 0)); + igraph_vector_int_clear(in_set); + igraph_vector_int_clear(out_set); + + IGRAPH_CHECK(igraph_vector_int_push_back(current_hood_p, node)); + IGRAPH_CHECK(igraph_vector_int_push_back(current_component_p, node)); + + igraph_integer_t previous_size, current_size; + + for (i = 0; i < timeout; i++) + { + previous_size = igraph_vector_int_size(previous_component_p); + current_size = igraph_vector_int_size(current_component_p); + u32 current_hood_size = igraph_vector_int_size(current_hood_p); + + if (previous_size < current_size || current_size == 1) + { + // move current objects to previous + IGRAPH_CHECK(igraph_vector_int_swap(previous_hood_p, current_hood_p)); + IGRAPH_CHECK(igraph_vector_int_swap(previous_component_p, current_component_p)); + igraph_vector_int_clear(current_hood_p); + igraph_vector_int_clear(current_component_p); + + // clear flags of added vertices + memset(added, false, no_of_nodes * sizeof(igraph_bool_t)); + + std::set cache_key; + for (j = 0; j < current_hood_size; j++) + { + igraph_integer_t actnode = VECTOR(*previous_hood_p)[j]; + igraph_vector_int_clear(&tmp); + IGRAPH_CHECK(igraph_neighbors(graph, &tmp, actnode, IGRAPH_OUT)); + + for (k = 0; k < igraph_vector_int_size(&tmp); k++) + { + igraph_integer_t nei = VECTOR(tmp)[k]; + if (!added[nei]) + { + added[nei] = true; + IGRAPH_CHECK(igraph_vector_int_push_back(current_hood_p, nei)); + cache_key.insert(nei); + } + } + } + + if (k == 0) + { + continue; + } + + if (const auto cache_it = cache.find(cache_key); cache_it != cache.end()) + { + IGRAPH_CHECK(igraph_vector_int_update(current_component_p, cache_it->second)); + } + else + { + igraph_t subgraph; + igraph_vs_t subgraph_vertices = igraph_vss_vector(current_hood_p); + IGRAPH_FINALLY(igraph_vs_destroy, &subgraph_vertices); + igraph_vector_int_t vertex_map; + IGRAPH_VECTOR_INT_INIT_FINALLY(&vertex_map, igraph_vector_int_size(current_hood_p)); + IGRAPH_CHECK(igraph_induced_subgraph_map(graph, &subgraph, subgraph_vertices, IGRAPH_SUBGRAPH_CREATE_FROM_SCRATCH, nullptr, &vertex_map)); + IGRAPH_FINALLY(igraph_destroy, &subgraph); + + igraph_vector_int_t membership, csize; + IGRAPH_VECTOR_INT_INIT_FINALLY(&membership, 0); + IGRAPH_VECTOR_INT_INIT_FINALLY(&csize, 0); + IGRAPH_CHECK(igraph_connected_components(&subgraph, &membership, &csize, nullptr, IGRAPH_STRONG)); + + u32 max_id = igraph_vector_int_which_max(&csize); + u32 num_subgraph_vertices = igraph_vcount(&subgraph); + for (i32 i = 0; i < num_subgraph_vertices; i++) + { + u32 cid = VECTOR(membership)[i]; + if (cid == max_id) + { + IGRAPH_CHECK(igraph_vector_int_push_back(current_component_p, VECTOR(vertex_map)[i])); + } + } + + igraph_vs_destroy(&subgraph_vertices); + igraph_vector_int_destroy(&vertex_map); + igraph_vector_int_destroy(&membership); + igraph_vector_int_destroy(&csize); + igraph_destroy(&subgraph); + IGRAPH_FINALLY_CLEAN(5); + + igraph_vector_int_t* cache_tmp = new igraph_vector_int_t; + IGRAPH_CHECK(igraph_vector_int_init(cache_tmp, 0)); // cleanup handled by caller + IGRAPH_CHECK(igraph_vector_int_update(cache_tmp, current_component_p)); + cache[cache_key] = cache_tmp; + } + } + else + { + if (previous_size == current_size) + { + IGRAPH_CHECK(igraph_vector_int_update(in_set, previous_component_p)); + IGRAPH_CHECK(igraph_vector_int_update(out_set, current_component_p)); + } + + break; + } + } + + igraph_vector_int_destroy(current_hood_p); + igraph_vector_int_destroy(previous_hood_p); + igraph_vector_int_destroy(current_component_p); + igraph_vector_int_destroy(previous_component_p); + igraph_vector_int_destroy(&tmp); + IGRAPH_FREE(added); + IGRAPH_FINALLY_CLEAN(6); + + return IGRAPH_SUCCESS; + } + } // namespace + + Result> detect_candidates(Netlist* nl, const std::vector& configs, u32 min_state_size, const std::vector& start_ffs) + { + if (nl == nullptr) + { + return ERR("netlist is a nullptr"); + } + + log_info("hawkeye", "start detecting state register candidates..."); + auto start = std::chrono::system_clock::now(); + + const auto nl_dec = NetlistTraversalDecorator(*nl); + std::map> ff_map; + std::unordered_map> cache = {}; + const auto start_gates = nl->get_gates([](const Gate* g) { return g->get_type()->has_property(GateTypeProperty::ff); }); + for (auto* sg : start_gates) + { + if (const auto res = nl_dec.get_next_matching_gates( + sg, true, [](const Gate* g) { return g->get_type()->has_property(GateTypeProperty::ff); }, false, continue_through_exit_ep, continue_through_entry_ep); + res.is_ok()) + { + ff_map[sg] = res.get(); + } + else + { + return ERR(res.get_error()); + } + } + + auto res = graph_algorithm::NetlistGraph::from_netlist_no_edges(nl, start_gates); + if (res.is_error()) + { + return ERR(res.get_error()); + } + auto base_graph = res.get(); + + const auto start_vertices_res = base_graph->get_vertices_from_gates(start_ffs.empty() ? start_gates : start_ffs); + if (start_vertices_res.is_error()) + { + return ERR(start_vertices_res.get_error()); + } + auto start_vertices = start_vertices_res.get(); + + std::set candidates; + for (const auto& config : configs) + { + auto tmp_graph_res = base_graph->copy(); + if (tmp_graph_res.is_error()) + { + return ERR(tmp_graph_res.get_error()); + } + auto tmp_graph = tmp_graph_res.get(); + + std::map> filtered_map; + if (config.control == DetectionConfiguration::Control::CHECK_FF) + { + filtered_map = std::move(ff_map); + if (const auto edge_res = tmp_graph->add_edges(ff_map); edge_res.is_error()) + { + return ERR(edge_res.get_error()); + } + } + else if (config.control == DetectionConfiguration::Control::CHECK_TYPE) + { + std::map> allowed_gate_type_map; + const auto* gl = nl->get_gate_library(); + for (const auto& gt_list : config.equivalent_types) + { + std::set types; + for (const auto& gt_name : gt_list) + { + types.insert(gl->get_gate_type_by_name(gt_name)); + } + + for (const auto* gt : types) + { + allowed_gate_type_map[gt] = types; + } + } + + for (const auto& [src, dsts] : ff_map) + { + for (auto* dst : dsts) + { + const auto* src_type = src->get_type(); + const auto* dst_type = dst->get_type(); + if (src_type != dst_type) + { + if (const auto src_it = allowed_gate_type_map.find(src_type); src_it != allowed_gate_type_map.end()) + { + const auto& allowed_gates = std::get<1>(*src_it); + if (allowed_gates.find(dst_type) == allowed_gates.end()) + { + continue; + } + } + else + { + continue; + } + } + + filtered_map[src].insert(dst); + } + } + } + else if (config.control == DetectionConfiguration::Control::CHECK_NETS) + { + std::unordered_map> control_map; + for (const auto* gate : start_gates) + { + control_map[gate] = std::map(); + + for (const auto& ep : gate->get_fan_in_endpoints()) + { + if (auto pin_type = ep->get_pin()->get_type(); control_types.find(pin_type) != control_types.end()) + { + control_map[gate][pin_type] = ep->get_net(); + } + } + } + + for (const auto& [src, dsts] : ff_map) + { + for (auto* dst : dsts) + { + if (control_map.at(src) != control_map.at(dst)) + { + continue; + } + + filtered_map[src].insert(dst); + } + } + } + else if (config.control == DetectionConfiguration::Control::CHECK_PINS) + { + std::unordered_map> control_map; + for (const auto* gate : start_gates) + { + control_map[gate] = std::set(); + + for (const auto& ep : gate->get_fan_in_endpoints()) + { + auto sources = ep->get_net()->get_sources(); + if (sources.size() != 1) + { + continue; + } + if (sources.at(0)->get_gate()->is_gnd_gate() || sources.at(0)->get_gate()->is_vcc_gate()) + { + continue; + } + + if (auto pin_type = ep->get_pin()->get_type(); control_types.find(pin_type) != control_types.end()) + { + control_map[gate].insert(pin_type); + } + } + } + + for (const auto& [src, dsts] : ff_map) + { + for (auto* dst : dsts) + { + // if (src->get_type() != dst->get_type()) + // { + // continue; + // } + + if (control_map.at(src) != control_map.at(dst)) + { + continue; + } + + filtered_map[src].insert(dst); + } + } + } + + if (const auto edge_res = tmp_graph->add_edges(filtered_map); edge_res.is_error()) + { + return ERR(edge_res.get_error()); + } + + igraph_vector_int_t in_set, out_set; + if (const auto res = igraph_vector_int_init(&in_set, 0); res != IGRAPH_SUCCESS) + { + return ERR(igraph_strerror(res)); + } + + if (const auto res = igraph_vector_int_init(&out_set, 0); res != IGRAPH_SUCCESS) + { + igraph_vector_int_destroy(&in_set); + return ERR(igraph_strerror(res)); + } + + std::set graph_candidates; + + if (config.components == DetectionConfiguration::Components::NONE) + { + for (const auto v : start_vertices) + { + igraph_vector_int_clear(&in_set); + igraph_vector_int_clear(&out_set); + + if (const auto res = get_saturating_neighborhoods(tmp_graph->get_graph(), &in_set, &out_set, v, config.timeout); res != IGRAPH_SUCCESS) + { + igraph_vector_int_destroy(&in_set); + igraph_vector_int_destroy(&out_set); + return ERR(igraph_strerror(res)); + } + + u32 size = igraph_vector_int_size(&out_set); + if (size <= config.min_register_size) + { + continue; + } + + GraphCandidate c; + c.size = size; + for (u32 i = 0; i < igraph_vector_int_size(&in_set); i++) + { + c.in_reg.insert(VECTOR(in_set)[i]); + } + for (u32 i = 0; i < igraph_vector_int_size(&out_set); i++) + { + c.out_reg.insert(VECTOR(out_set)[i]); + } + graph_candidates.insert(c); + } + } + else if (config.components == DetectionConfiguration::Components::CHECK_SCC) + { + std::map, igraph_vector_int_t*> scc_cache; + + for (const auto v : start_vertices) + { + igraph_vector_int_clear(&in_set); + igraph_vector_int_clear(&out_set); + + if (const auto res = get_saturating_neighborhoods_scc(tmp_graph->get_graph(), &in_set, &out_set, v, config.timeout, scc_cache); res != IGRAPH_SUCCESS) + { + igraph_vector_int_destroy(&in_set); + igraph_vector_int_destroy(&out_set); + for (auto& [_, comp] : scc_cache) + { + igraph_vector_int_destroy(comp); + delete comp; + } + return ERR(igraph_strerror(res)); + } + + u32 size = igraph_vector_int_size(&out_set); + if (size <= config.min_register_size) + { + continue; + } + + GraphCandidate c; + c.size = size; + for (u32 i = 0; i < igraph_vector_int_size(&in_set); i++) + { + c.in_reg.insert(VECTOR(in_set)[i]); + } + for (u32 i = 0; i < igraph_vector_int_size(&out_set); i++) + { + c.out_reg.insert(VECTOR(out_set)[i]); + } + graph_candidates.insert(c); + } + + for (auto& [_, comp] : scc_cache) + { + igraph_vector_int_destroy(comp); + delete comp; + } + } + + igraph_vector_int_destroy(&in_set); + igraph_vector_int_destroy(&out_set); + + for (const auto& gc : graph_candidates) + { + std::set out_reg; + + if (auto out_reg_res = tmp_graph->get_gates_set_from_vertices(gc.out_reg); out_reg_res.is_ok()) + { + out_reg = out_reg_res.get(); + } + else + { + return ERR(out_reg_res.get_error()); + } + + if (gc.in_reg == gc.out_reg) + { + candidates.insert(RegisterCandidate(out_reg)); + } + else + { + std::set in_reg; + if (auto in_reg_res = tmp_graph->get_gates_set_from_vertices(gc.in_reg); in_reg_res.is_ok()) + { + in_reg = in_reg_res.get(); + candidates.insert(RegisterCandidate(in_reg, out_reg)); + } + else + { + return ERR(in_reg_res.get_error()); + } + } + } + } + + std::set candidates_to_delete; + for (auto outer_it = candidates.begin(); outer_it != candidates.end(); outer_it++) + { + for (auto inner_it = std::next(outer_it, 1); inner_it != candidates.end(); inner_it++) + { + if (std::includes(outer_it->get_output_reg().begin(), outer_it->get_output_reg().end(), inner_it->get_output_reg().begin(), inner_it->get_output_reg().end())) + { + candidates_to_delete.insert(&(*outer_it)); + break; + } + } + + if (outer_it->get_size() < min_state_size) + { + candidates_to_delete.insert(&(*outer_it)); + } + } + + for (const auto* c : candidates_to_delete) + { + candidates.erase(*c); + } + + auto duration_in_seconds = std::chrono::duration(std::chrono::system_clock::now() - start).count(); + if (candidates.size() == 1) + { + log_info("hawkeye", "detected {} state register candidate in {} seconds", candidates.size(), duration_in_seconds); + } + else + { + log_info("hawkeye", "detected {} state register candidates in {} seconds", candidates.size(), duration_in_seconds); + } + + return OK(std::vector(candidates.begin(), candidates.end())); + } + } // namespace hawkeye + + template<> + std::map EnumStrings::data = { + {hawkeye::DetectionConfiguration::Control::CHECK_FF, "CHECK_FF"}, + {hawkeye::DetectionConfiguration::Control::CHECK_TYPE, "CHECK_TYPE"}, + {hawkeye::DetectionConfiguration::Control::CHECK_PINS, "CHECK_PINS"}, + {hawkeye::DetectionConfiguration::Control::CHECK_NETS, "CHECK_NETS"}}; + + template<> + std::map EnumStrings::data = { + {hawkeye::DetectionConfiguration::Components::NONE, "NONE"}, + {hawkeye::DetectionConfiguration::Components::CHECK_SCC, "CHECK_SCC"}}; +} // namespace hal \ No newline at end of file diff --git a/plugins/hawkeye/src/plugin_hawkeye.cpp b/plugins/hawkeye/src/plugin_hawkeye.cpp new file mode 100644 index 00000000000..953dddda5e5 --- /dev/null +++ b/plugins/hawkeye/src/plugin_hawkeye.cpp @@ -0,0 +1,31 @@ +#include "hawkeye/plugin_hawkeye.h" + +namespace hal +{ + extern std::unique_ptr create_plugin_instance() + { + return std::make_unique(); + } + + std::string HawkeyePlugin::get_name() const + { + return std::string("hawkeye"); + } + + std::string HawkeyePlugin::get_description() const + { + return "Attempts to locate arbitrary symmetric cryptographic implementations."; + } + + std::string HawkeyePlugin::get_version() const + { + return std::string("0.1"); + } + + std::set HawkeyePlugin::get_dependencies() const + { + std::set retval; + retval.insert("graph_algorithm"); + return retval; + } +} // namespace hal diff --git a/plugins/hawkeye/src/register_candidate.cpp b/plugins/hawkeye/src/register_candidate.cpp new file mode 100644 index 00000000000..091828b62d5 --- /dev/null +++ b/plugins/hawkeye/src/register_candidate.cpp @@ -0,0 +1,74 @@ +#include "hawkeye/register_candidate.h" + +#include "hal_core/netlist/gate.h" +#include "hal_core/netlist/net.h" +namespace hal +{ + namespace hawkeye + { + RegisterCandidate::RegisterCandidate(const std::set& round_reg) : m_in_reg(round_reg), m_out_reg(round_reg) + { + m_size = m_out_reg.size(); + m_netlist = (*m_out_reg.begin())->get_netlist(); + m_is_round_based = true; + } + + RegisterCandidate::RegisterCandidate(std::set&& round_reg) : m_in_reg(std::move(round_reg)) + { + m_out_reg = m_in_reg; + m_size = m_out_reg.size(); + m_netlist = (*m_out_reg.begin())->get_netlist(); + m_is_round_based = true; + } + + RegisterCandidate::RegisterCandidate(const std::set& in_reg, const std::set& out_reg) : m_in_reg(in_reg), m_out_reg(out_reg) + { + m_size = m_out_reg.size(); + m_netlist = (*m_out_reg.begin())->get_netlist(); + m_is_round_based = m_in_reg == m_out_reg; + } + + RegisterCandidate::RegisterCandidate(std::set&& in_reg, std::set&& out_reg) : m_in_reg(std::move(in_reg)), m_out_reg(std::move(out_reg)) + { + m_size = m_out_reg.size(); + m_netlist = (*m_out_reg.begin())->get_netlist(); + m_is_round_based = m_in_reg == m_out_reg; + } + + bool RegisterCandidate::operator==(const RegisterCandidate& rhs) const + { + return (this->m_size == rhs.m_size) && (this->m_in_reg == rhs.m_in_reg) && (!m_is_round_based & (this->m_out_reg == rhs.m_out_reg)); + } + + bool RegisterCandidate::operator<(const RegisterCandidate& rhs) const + { + return (this->m_size > rhs.m_size) || (this->m_size == rhs.m_size && this->m_in_reg > rhs.m_in_reg) + || (!m_is_round_based & (this->m_size == rhs.m_size && this->m_in_reg == rhs.m_in_reg && this->m_out_reg > rhs.m_out_reg)); + } + + Netlist* RegisterCandidate::get_netlist() const + { + return m_netlist; + } + + u32 RegisterCandidate::get_size() const + { + return m_size; + } + + bool RegisterCandidate::is_round_based() const + { + return m_is_round_based; + } + + const std::set& RegisterCandidate::get_input_reg() const + { + return m_in_reg; + } + + const std::set& RegisterCandidate::get_output_reg() const + { + return m_out_reg; + } + } // namespace hawkeye +} // namespace hal \ No newline at end of file diff --git a/plugins/hawkeye/src/round_candidate.cpp b/plugins/hawkeye/src/round_candidate.cpp new file mode 100644 index 00000000000..0ee0d32da65 --- /dev/null +++ b/plugins/hawkeye/src/round_candidate.cpp @@ -0,0 +1,402 @@ +#include "hawkeye/round_candidate.h" + +#include "hal_core/netlist/gate.h" +#include "hal_core/netlist/net.h" +#include "hal_core/netlist/netlist.h" +#include "hal_core/netlist/netlist_factory.h" + +namespace hal +{ + namespace hawkeye + { + namespace + { + void copy_in_eps_of_gate(Netlist* new_nl, const Gate* old_g, Gate* new_g, std::set* add_to_set = nullptr) + { + for (const auto* in_ep : old_g->get_fan_in_endpoints()) + { + Net* old_n = in_ep->get_net(); + Net* new_n; + if (new_n = new_nl->get_net_by_id(old_n->get_id()); new_n == nullptr) + { + new_n = new_nl->create_net(old_n->get_id(), old_n->get_name()); + } + new_n->add_destination(new_g, in_ep->get_pin()); + + if (add_to_set) + { + add_to_set->insert(new_n); + } + } + } + + void copy_out_eps_of_gate(Netlist* new_nl, const Gate* old_g, Gate* new_g, std::set* add_to_set = nullptr) + { + for (const auto* out_ep : old_g->get_fan_out_endpoints()) + { + Net* old_n = out_ep->get_net(); + Net* new_n; + if (new_n = new_nl->get_net_by_id(old_n->get_id()); new_n == nullptr) + { + new_n = new_nl->create_net(old_n->get_id(), old_n->get_name()); + } + new_n->add_source(new_g, out_ep->get_pin()); + + if (add_to_set) + { + add_to_set->insert(new_n); + } + } + } + } // namespace + + Result> RoundCandidate::from_register_candidate(RegisterCandidate* candidate) + { + std::set state_logic; + std::set state_inputs, state_outputs, control_inputs, other_inputs; + + log_info("hawkeye", "start constructing round function candidate from state register candidate..."); + auto start = std::chrono::system_clock::now(); + + const auto& state_input_reg = candidate->get_input_reg(); + const auto& state_output_reg = candidate->get_output_reg(); + + // DFS from output reg backwards + for (const auto* out_ff : state_output_reg) + { + auto ff_data_predecessors = out_ff->get_predecessors([](const GatePin* p, const Endpoint* _) { return p->get_type() == PinType::data; }); + + if (ff_data_predecessors.size() != 1) + { + // FF can only have one predecessor for data input + continue; + } + const auto* pred_ep = ff_data_predecessors.at(0); + auto* first_comb_gate = pred_ep->get_gate(); + if (!first_comb_gate->get_type()->has_property(GateTypeProperty::combinational)) + { + continue; + } + state_outputs.insert(pred_ep->get_net()); + + std::unordered_set visited; + std::vector stack = {first_comb_gate}; + std::vector previous; + while (!stack.empty()) + { + auto* current_gate = stack.back(); + + // pop stack if last gate on stack has been dealt with completely + if (!previous.empty() && previous.back() == current_gate) + { + stack.pop_back(); + previous.pop_back(); + continue; + } + + visited.insert(current_gate); + + // expand towards predecessors + bool added = false; + for (auto* next_predecessor : current_gate->get_predecessors()) + { + auto* predecessor_gate = next_predecessor->get_gate(); + if (predecessor_gate->get_type()->has_property(GateTypeProperty::ff)) + { + // if predecessor is part of input state reg, fill set of next state logic + if (state_input_reg.find(predecessor_gate) != state_input_reg.end()) + { + state_inputs.insert(next_predecessor->get_net()); + state_logic.insert(current_gate); + state_logic.insert(previous.begin(), previous.end()); + } + } + else if (predecessor_gate->get_type()->has_property(GateTypeProperty::combinational)) + { + if (visited.find(predecessor_gate) == visited.end()) + { + // add only combinational predecessors to stack + stack.push_back(predecessor_gate); + added = true; + } + else if (state_logic.find(predecessor_gate) != state_logic.end()) + { + state_logic.insert(current_gate); + state_logic.insert(previous.begin(), previous.end()); + } + } + } + + if (added) + { + // push current gate to previous if progress was made + previous.push_back(current_gate); + } + else + { + // otherwise pop last element from stack as it has been dealt with already + stack.pop_back(); + } + } + } + + std::set visited; + for (auto* gate : state_logic) + { + // determine control inputs and other inputs to the candidate + for (auto* in_net : gate->get_fan_in_nets()) + { + if (visited.find(in_net) != visited.end()) + { + continue; + } + + visited.insert(in_net); + + if (in_net->get_num_of_sources() != 1) + { + continue; + } + + if (state_inputs.find(in_net) != state_inputs.end()) + { + continue; + } + + auto* src_gate = in_net->get_sources().at(0)->get_gate(); + if (state_logic.find(src_gate) != state_logic.end()) + { + continue; + } + + u32 num_state_destinations = in_net->get_num_of_destinations([&state_logic](const Endpoint* ep) { return state_logic.find(ep->get_gate()) != state_logic.end(); }); + if (num_state_destinations > candidate->get_size() / 2) + { + control_inputs.insert(in_net); + } + else + { + other_inputs.insert(in_net); + } + } + } + + // copy partial netlist + auto round_cand = std::make_unique(); + round_cand->m_netlist = std::move(netlist_factory::create_netlist(candidate->get_netlist()->get_gate_library())); + auto* copied_nl = round_cand->m_netlist.get(); + + round_cand->m_size = candidate->get_size(); + + for (const auto* g : state_input_reg) + { + auto* new_g = copied_nl->create_gate(g->get_id(), g->get_type(), g->get_name()); + round_cand->m_in_reg.insert(new_g); + + copy_out_eps_of_gate(copied_nl, g, new_g); // only fan-out EPs for state input register + } + + for (const auto* g : state_logic) + { + auto* new_g = copied_nl->create_gate(g->get_id(), g->get_type(), g->get_name()); + new_g->set_data_map(g->get_data_map()); // take care of LUT INIT strings + round_cand->m_state_logic.insert(new_g); + + copy_in_eps_of_gate(copied_nl, g, new_g); + copy_out_eps_of_gate(copied_nl, g, new_g); + } + + if (state_input_reg != state_output_reg) + { + for (const auto* g : state_output_reg) + { + auto* new_g = copied_nl->create_gate(g->get_id(), g->get_type(), g->get_name()); + round_cand->m_out_reg.insert(new_g); + + copy_in_eps_of_gate(copied_nl, g, new_g); // only fan-in EPs for state output register + } + } + else + { + // create separate FF instances for state output register so that input and output register are distinct + for (const auto* g : state_output_reg) + { + // only differences: do not enforce ID (already taken by in_reg FF) and append suffix to name + auto* new_g = copied_nl->create_gate(g->get_type(), g->get_name() + "_OUT"); + round_cand->m_out_reg.insert(new_g); + + copy_in_eps_of_gate(copied_nl, g, new_g); // only fan-in EPs for state output register + } + } + + for (const auto* state_in_net : state_inputs) + { + round_cand->m_state_inputs.insert(copied_nl->get_net_by_id(state_in_net->get_id())); + } + + for (const auto* state_out_net : state_outputs) + { + round_cand->m_state_outputs.insert(copied_nl->get_net_by_id(state_out_net->get_id())); + } + + for (const auto* control_net : control_inputs) + { + round_cand->m_control_inputs.insert(copied_nl->get_net_by_id(control_net->get_id())); + } + + for (const auto* other_net : other_inputs) + { + round_cand->m_other_inputs.insert(copied_nl->get_net_by_id(other_net->get_id())); + } + + auto nl_graph_res = graph_algorithm::NetlistGraph::from_netlist(copied_nl); + if (nl_graph_res.is_error()) + { + return ERR(nl_graph_res.get_error()); + } + round_cand->m_graph = std::move(nl_graph_res.get()); + + // DFS from input reg forwards + std::map gate_to_longest_distance; + for (auto* in_ff : round_cand->m_in_reg) + { + std::vector stack = {in_ff}; + std::vector previous; + while (!stack.empty()) + { + auto* current_gate = stack.back(); + + // pop stack if last gate on stack has been dealt with completely + if (!previous.empty() && previous.back() == current_gate) + { + stack.pop_back(); + previous.pop_back(); + continue; + } + + round_cand->m_input_ffs_of_gate[current_gate].insert(in_ff); + + // expand towards successors + bool added = false; + for (auto* next_successor : current_gate->get_successors()) + { + auto* successor_gate = next_successor->get_gate(); + if (successor_gate->get_type()->has_property(GateTypeProperty::ff)) + { + // if successor is part of output state reg, fill set of gates reached by input FF + if (round_cand->m_out_reg.find(successor_gate) != round_cand->m_out_reg.end()) + { + round_cand->m_input_ffs_of_gate[successor_gate].insert(in_ff); + } + } + else if (successor_gate->get_type()->has_property(GateTypeProperty::combinational)) + { + // if successor is part of next state logic, add gate to stack + if (round_cand->m_state_logic.find(successor_gate) != round_cand->m_state_logic.end()) + { + stack.push_back(successor_gate); + added = true; + + u32 current_distance = previous.size() + 1; + if (const auto dist_it = gate_to_longest_distance.find(successor_gate); dist_it != gate_to_longest_distance.end()) + { + u32 stored_distance = dist_it->second; + if (stored_distance < current_distance) + { + gate_to_longest_distance[successor_gate] = current_distance; + } + } + else + { + gate_to_longest_distance[successor_gate] = current_distance; + } + } + } + } + + if (added) + { + // push current gate to previous if progress was made + previous.push_back(current_gate); + } + else + { + // otherwise pop last element from stack as it has been dealt with already + stack.pop_back(); + } + } + } + + // invert gate_to_longest_distance map to fill m_longest_distance_to_gate + for (const auto& [gate, distance] : gate_to_longest_distance) + { + round_cand->m_longest_distance_to_gate[distance].insert(gate); + } + + auto duration_in_seconds = std::chrono::duration(std::chrono::system_clock::now() - start).count(); + log_info("hawkeye", "successfully constructed round function candidate from state register candidate in {:.2f} seconds", duration_in_seconds); + + return OK(std::move(round_cand)); + } + + Netlist* RoundCandidate::get_netlist() const + { + return m_netlist.get(); + } + + graph_algorithm::NetlistGraph* RoundCandidate::get_graph() const + { + return m_graph.get(); + } + + u32 RoundCandidate::get_size() const + { + return m_size; + } + + const std::set& RoundCandidate::get_input_reg() const + { + return m_in_reg; + } + + const std::set& RoundCandidate::get_output_reg() const + { + return m_out_reg; + } + + const std::set& RoundCandidate::get_state_logic() const + { + return m_state_logic; + } + + const std::set& RoundCandidate::get_state_inputs() const + { + return m_state_inputs; + } + + const std::set& RoundCandidate::get_control_inputs() const + { + return m_control_inputs; + } + + const std::set& RoundCandidate::get_other_inputs() const + { + return m_other_inputs; + } + + const std::set& RoundCandidate::get_state_outputs() const + { + return m_state_outputs; + } + + const std::map>& RoundCandidate::get_input_ffs_of_gate() const + { + return m_input_ffs_of_gate; + } + + const std::map>& RoundCandidate::get_longest_distance_to_gate() const + { + return m_longest_distance_to_gate; + } + } // namespace hawkeye +} // namespace hal \ No newline at end of file diff --git a/plugins/hawkeye/src/sbox_database.cpp b/plugins/hawkeye/src/sbox_database.cpp new file mode 100644 index 00000000000..0db56425b24 --- /dev/null +++ b/plugins/hawkeye/src/sbox_database.cpp @@ -0,0 +1,1204 @@ +#include "hawkeye/sbox_database.h" + +#include "rapidjson/document.h" +#include "rapidjson/filereadstream.h" +#include "rapidjson/stringbuffer.h" +#include "rapidjson/writer.h" + +#include +#include +#include +#include + +#ifdef __AVX2__ +#include + +using smallset_t = __m256i; +#elif defined(__ARM_NEON) +#include + +using smallset_t = uint64x2x2_t; +#else +const uint64_t _ONE_ = 1; + +class smallset_t +{ +public: + smallset_t(int preset = 0); + + void set(u8 bit); + bool is_set(u8 bit) const; + + void dump() const; + + smallset_t operator|(const smallset_t& other) const; + smallset_t operator&(const smallset_t& other) const; + smallset_t operator^(const smallset_t& other) const; + smallset_t shuffle(u8 shift) const; + + void to_array(u64* arr) const; + + u8 least_bit() const; + static int least_bit(u64 dw); + + int size() const; + static int size(u64 dw, int level); + + bool empty() const; + +private: + u64 dw64[4]; +}; + +smallset_t::smallset_t(int preset) +{ + memset(dw64, 0, sizeof(dw64)); + switch (preset) + { + case 8: + dw64[0] = 0xFF; + break; + case 16: + dw64[0] = 0xFFFF; + break; + case 32: + dw64[0] = 0xFFFFFFFF; + break; + case 64: + memset(dw64, 0xFF, sizeof(u64)); + break; + case 128: + memset(dw64, 0xFF, 2 * sizeof(u64)); + break; + case 256: + memset(dw64, 0xFF, sizeof(dw64)); + break; + } +} + +bool smallset_t::empty() const +{ + for (int i = 0; i < 4; i++) + { + if (dw64[i]) + return false; + } + return true; +} + +u8 smallset_t::least_bit() const +{ + for (int i = 0; i < 4; i++) + { + if (dw64[i]) + return i * 64 + least_bit(dw64[i]); + } + std::cerr << "Called smallset_t::least_bit() on empty set\n" << std::endl; + return 0; +} + +smallset_t smallset_t::shuffle(u8 shift) const +{ + smallset_t retval(*this); + if (shift & 0x80) + { + smallset_t temp = retval; + retval.dw64[0] = temp.dw64[2]; + retval.dw64[1] = temp.dw64[3]; + retval.dw64[2] = temp.dw64[0]; + retval.dw64[3] = temp.dw64[1]; + } + if (shift & 0x40) + { + smallset_t temp = retval; + retval.dw64[0] = temp.dw64[1]; + retval.dw64[1] = temp.dw64[0]; + retval.dw64[2] = temp.dw64[3]; + retval.dw64[3] = temp.dw64[2]; + } + if (shift & 0x20) + { + for (int i = 0; i < 4; i++) + { + retval.dw64[i] = ((retval.dw64[i] & 0xFFFFFFFF00000000ULL) >> 16) | ((retval.dw64[i] & 0x00000000FFFFFFFFULL) << 16); + } + } + if (shift & 0x10) + { + for (int i = 0; i < 4; i++) + { + retval.dw64[i] = ((retval.dw64[i] & 0xFFFF0000FFFF0000ULL) >> 16) | ((retval.dw64[i] & 0x0000FFFF0000FFFFULL) << 16); + } + } + if (shift & 0x08) + { + for (int i = 0; i < 4; i++) + { + retval.dw64[i] = ((retval.dw64[i] & 0xFF00FF00FF00FF00ULL) >> 8) | ((retval.dw64[i] & 0x00FF00FF00FF00FFULL) << 8); + } + } + if (shift & 0x04) + { + for (int i = 0; i < 4; i++) + { + retval.dw64[i] = ((retval.dw64[i] & 0xF0F0F0F0F0F0F0F0ULL) >> 4) | ((retval.dw64[i] & 0x0F0F0F0F0F0F0F0FULL) << 4); + } + } + if (shift & 0x02) + { + for (int i = 0; i < 4; i++) + { + retval.dw64[i] = ((retval.dw64[i] & 0xCCCCCCCCCCCCCCCCULL) >> 2) | ((retval.dw64[i] & 0x3333333333333333ULL) << 2); + } + } + if (shift & 0x01) + { + for (int i = 0; i < 4; i++) + { + retval.dw64[i] = ((retval.dw64[i] & 0xAAAAAAAAAAAAAAAAULL) >> 1) | ((retval.dw64[i] & 0x5555555555555555ULL) << 1); + } + } + return retval; +} + +void smallset_t::to_array(u64* arr) const +{ + memcpy(arr, dw64, sizeof(dw64)); +} + +void smallset_t::set(u8 bit) +{ + dw64[bit / 64] |= (_ONE_ << (bit % 64)); +} + +bool smallset_t::is_set(u8 bit) const +{ + return (dw64[bit / 64] & (_ONE_ << (bit % 64)) != 0); +} + +int smallset_t::size() const +{ + int retval = 0; + for (int i = 0; i < 4; i++) + retval += size(dw64[i], 0); + return retval; +} + +int smallset_t::size(u64 dw, int level) +{ + static const u64 segmask[] = {0xFFFFFFFF, 0xFFFF, 0xFF, 0xF}; + static const int segshft[] = {32, 16, 8, 4}; + static const int szlookup[16] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4}; + + if (level >= 4) + return szlookup[dw & 0xF]; + + int retval = 0; + retval += size(dw & segmask[level], level + 1); + dw >>= segshft[level]; + retval += size(dw & segmask[level], level + 1); + + return retval; +} + +int smallset_t::least_bit(u64 dw) +{ + static const u64 segmask[] = {0xFFFFFFFF, 0xFFFF, 0xFF, 0xF}; + static const int lblookup[16] = {-61, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0}; + + int retval = 0; + int segval = 32; + + for (int iseg = 0; iseg < 4; iseg++) + { + if (!(dw & segmask[iseg])) + { + retval += segval; + dw >>= segval; + } + segval /= 2; + } + + return retval + lblookup[dw & 0xF]; +} + +void smallset_t::dump() const +{ + for (int i = 3; i >= 0; i--) + printf("%016lx", dw64[i]); + printf("\n"); + + for (unsigned int i = 0; i < 256; i++) + { + if (dw64[i / 64] & (_ONE_ << (i % 64))) + printf("%8d\n", i); + } +} + +smallset_t smallset_t::operator|(const smallset_t& other) const +{ + smallset_t retval = other; + for (int i = 0; i < 4; i++) + retval.dw64[i] |= dw64[i]; + return retval; +} + +smallset_t smallset_t::operator&(const smallset_t& other) const +{ + smallset_t retval = other; + for (int i = 0; i < 4; i++) + retval.dw64[i] &= dw64[i]; + return retval; +} + +smallset_t smallset_t::operator^(const smallset_t& other) const +{ + smallset_t retval = other; + for (int i = 0; i < 4; i++) + retval.dw64[i] = dw64[i]; + return retval; +} + +#endif + +namespace hal +{ + namespace hawkeye + { + SBoxDatabase::SBoxDatabase(const std::map>& sboxes) + { + add(sboxes).is_ok(); + } + + Result SBoxDatabase::from_file(const std::filesystem::path& file_path) + { + auto db = SBoxDatabase(); + if (const auto res = db.load(file_path); res.is_ok()) + { + return OK(db); + } + else + { + return ERR(res.get_error()); + } + } + + Result SBoxDatabase::add(const std::string& name, const std::vector& sbox) + + { + u32 bit_size = std::log2(sbox.size()); + + if (bit_size > 8) + { + return ERR("S-box '" + name + "' has bit-size greater 8, but only S-boxes of up to 8 bits are supported"); + } + + for (u8 alpha = 0; alpha < sbox.size(); alpha++) + { + std::vector sbox_alpha; + for (u32 i = 0; i < sbox.size(); i++) + { + sbox_alpha.push_back(sbox.at(i) ^ alpha); + } + auto lin_rep = compute_linear_representative(sbox_alpha); + m_data[bit_size][lin_rep].push_back(std::make_pair(name, alpha)); + } + return OK({}); + } + + Result SBoxDatabase::add(const std::map>& sboxes) + { + for (const auto& [name, sbox] : sboxes) + { + if (const auto res = add(name, sbox); res.is_error()) + { + return ERR(res.get_error()); + } + } + return OK({}); + } + + Result SBoxDatabase::load(const std::filesystem::path& file_path, bool overwrite) + { + FILE* fp = fopen(file_path.string().c_str(), "r"); + if (fp == NULL) + { + return ERR("could not parse S-box database file '" + file_path.string() + "' : unable to open file"); + } + + char buffer[65536]; + rapidjson::FileReadStream is(fp, buffer, sizeof(buffer)); + rapidjson::Document document; + document.ParseStream<0, rapidjson::UTF8<>, rapidjson::FileReadStream>(is); + fclose(fp); + + if (document.HasParseError()) + { + return ERR("could not parse S-box database file '" + file_path.string() + "': failed parsing JSON format"); + } + + if (overwrite) + { + m_data.clear(); + } + + for (auto size_it = document.MemberBegin(); size_it != document.MemberEnd(); ++size_it) + { + u32 bit_size = std::stoul(std::string(size_it->name.GetString())); + const rapidjson::Value& cipher_val = size_it->value; + + for (auto cipher_it = cipher_val.MemberBegin(); cipher_it != cipher_val.MemberEnd(); ++cipher_it) + { + std::string cipher_name = cipher_it->name.GetString(); + const rapidjson::Value& const_val = cipher_it->value; + + for (auto const_it = const_val.MemberBegin(); const_it != const_val.MemberEnd(); ++const_it) + { + u8 const_alpha = (u8)std::stoul(std::string(const_it->name.GetString())); + const rapidjson::Value& lin_rep_val = const_it->value; + + std::vector lin_rep; + for (u32 i = 0; i < lin_rep_val.Size(); i++) + { + lin_rep.push_back((u8)(lin_rep_val[i].GetUint())); + } + + m_data[bit_size][lin_rep].push_back(std::make_pair(cipher_name, const_alpha)); + } + } + } + + return OK({}); + } + + Result SBoxDatabase::store(const std::filesystem::path& file_path) const + { + FILE* fp = fopen(file_path.string().c_str(), "w"); + if (fp == NULL) + { + return ERR("could not write S-box database file '" + file_path.string() + "' : unable to open file"); + } + + rapidjson::Document document; + document.SetObject(); + + rapidjson::Document::AllocatorType& allocator = document.GetAllocator(); + + for (const auto& [bit_size, lin_rep_map] : m_data) + { + std::map>> pretty_data; + for (const auto& [lin_rep, cipher_vec] : lin_rep_map) + { + for (const auto& [name, alpha] : cipher_vec) + { + pretty_data[name][alpha] = lin_rep; + } + } + + rapidjson::Value cipher_json(rapidjson::kObjectType); + for (const auto& [cipher_name, lin_rep_map] : pretty_data) + { + rapidjson::Value alpha_json(rapidjson::kObjectType); + for (const auto& [const_alph, lin_rep] : lin_rep_map) + { + rapidjson::Value lin_rep_json(rapidjson::kArrayType); + for (const auto val : lin_rep) + { + lin_rep_json.PushBack(val, allocator); + } + alpha_json.AddMember(rapidjson::Value(std::to_string(const_alph).c_str(), allocator).Move(), lin_rep_json, allocator); + } + cipher_json.AddMember(rapidjson::Value(cipher_name.c_str(), allocator).Move(), alpha_json, allocator); + } + document.AddMember(rapidjson::Value(std::to_string(bit_size).c_str(), allocator).Move(), cipher_json, allocator); + } + + rapidjson::StringBuffer buffer; + rapidjson::Writer writer(buffer); + + document.Accept(writer); + + std::ofstream file(file_path); + file << buffer.GetString(); + file.close(); + + return ERR("not implemented"); + } + + Result SBoxDatabase::lookup(const std::vector& sbox) const + { + u32 bit_size = std::log2(sbox.size()); + + if (bit_size > 8) + { + return ERR("S-box has bit-size greater 8, but only S-boxes of up to 8 bits are supported"); + } + + const auto size_it = m_data.find(bit_size); + if (size_it == m_data.end()) + { + return ERR("no S-box of matching bit-size of " + std::to_string(bit_size) + " bits contained in database"); + } + + for (u8 beta = 0; beta < sbox.size(); beta++) + { + std::vector sbox_beta; + for (u32 i = 0; i < sbox.size(); i++) + { + sbox_beta.push_back(sbox.at(i) ^ beta); + } + auto lin_rep = compute_linear_representative(sbox_beta); + + const auto& matching_size_data = std::get<1>(*size_it); + const auto rep_it = matching_size_data.find(lin_rep); + if (rep_it != matching_size_data.end()) + { + return OK(rep_it->second.front().first); + } + } + + return ERR("no match found within database"); + } + + void SBoxDatabase::print() const + { + for (const auto& [bit_size, lin_rep_map] : m_data) + { + std::cout << std::endl; + std::cout << "### WIDTH: " << bit_size << std::endl; + std::cout << "#######################" << std::endl; + + std::map>> pretty_data; + for (const auto& [lin_rep, cipher_vec] : lin_rep_map) + { + for (const auto& [name, alpha] : cipher_vec) + { + pretty_data[name][alpha] = lin_rep; + } + } + + for (const auto& [cipher_name, lin_rep_map] : pretty_data) + { + std::cout << "* " << cipher_name << std::endl; + + for (const auto& [const_alph, lin_rep] : lin_rep_map) + { + std::cout << " - " << (u32)const_alph << ": [" << (u32)(lin_rep.at(0)); + for (u32 i = 1; i < lin_rep.size(); i++) + { + std::cout << ", " << (u32)(lin_rep.at(i)); + } + std::cout << "]" << std::endl; + } + } + } + + std::cout << std::endl; + } + + namespace + { + void smallset_print(const std::string& name, const smallset_t& a) + { + u64 elements[4]; +#ifdef __AVX2__ + + elements[0] = _mm256_extract_epi64(a, 3); + elements[1] = _mm256_extract_epi64(a, 2); + elements[2] = _mm256_extract_epi64(a, 1); + elements[3] = _mm256_extract_epi64(a, 0); +#elif defined(__ARM_NEON) + elements[0] = a.val[1][1]; + elements[1] = a.val[1][0]; + elements[2] = a.val[0][1]; + elements[3] = a.val[0][0]; +#else + a.to_array(elements); +#endif + std::cout << name << ": 0b"; + for (u32 i = 0; i < 4; i++) + { + for (int j = 63; j >= 0; j--) + { + u32 bit = (elements[i] >> j) & 1; + std::cout << bit; + } + std::cout << " "; + } + std::cout << std::endl; + } + + u8 smallset_least_element(const smallset_t& a) + { + u64 chunks[4]; +#ifdef __AVX2__ + chunks[0] = _mm256_extract_epi64(a, 0); + chunks[1] = _mm256_extract_epi64(a, 1); + chunks[2] = _mm256_extract_epi64(a, 2); + chunks[3] = _mm256_extract_epi64(a, 3); +#elif defined(__ARM_NEON) + chunks[0] = a.val[0][0]; + chunks[1] = a.val[0][1]; + chunks[2] = a.val[1][0]; + chunks[3] = a.val[1][1]; +#else + return a.least_bit(); +#endif + for (u32 i = 0; i < 4; i++) + { + u64 current_chunk = chunks[i]; + if (current_chunk != 0) + { + u8 idx = __builtin_ctzll(current_chunk) + i * 64; + return idx; + } + } + + // set is empty -- caller's fault + std::cout << "CALLED LEAST ELEMENT ON EMPTY SET!" << std::endl; + return 0; + } + + inline smallset_t smallset_intersect(const smallset_t& a, const smallset_t& b) + { +#ifdef __AVX2__ + return _mm256_and_si256(a, b); +#elif defined(__ARM_NEON) + return {vandq_u64(a.val[0], b.val[0]), vandq_u64(a.val[1], b.val[1])}; +#else + return (a & b); +#endif + } + + inline smallset_t smallset_union(const smallset_t& a, const smallset_t& b) + { +#ifdef __AVX2__ + return _mm256_or_si256(a, b); +#elif defined(__ARM_NEON) + return {vorrq_u64(a.val[0], b.val[0]), vorrq_u64(a.val[1], b.val[1])}; +#else + return (a | b); +#endif + } + + inline u16 smallset_size(const smallset_t& a) + { + u16 count = 0; +#ifdef __AVX2__ + u64 chunk = _mm256_extract_epi64(a, 0); + count += __builtin_popcountll(chunk); + chunk = _mm256_extract_epi64(a, 1); + count += __builtin_popcountll(chunk); + chunk = _mm256_extract_epi64(a, 2); + count += __builtin_popcountll(chunk); + chunk = _mm256_extract_epi64(a, 3); + count += __builtin_popcountll(chunk); +#elif defined(__ARM_NEON) + count += __builtin_popcountll(a.val[0][0]); + count += __builtin_popcountll(a.val[0][1]); + count += __builtin_popcountll(a.val[1][0]); + count += __builtin_popcountll(a.val[1][1]); +#else + return a.size(); +#endif + return count; + } + + inline bool smallset_is_empty(const smallset_t& a) + { +#ifdef __AVX2__ + return _mm256_testz_si256(a, a); +#elif defined(__ARM_NEON) + auto tmp = vandq_u64(vceqzq_u64(a.val[0]), vceqzq_u64(a.val[1])); + return (tmp[0] & tmp[1]) & 1; +#else + return a.empty(); +#endif + } + + smallset_t smallset_add_element(const smallset_t& a, const u8 elm) + { + // compute union of a and {elm} + u32 index = elm / 64; +#ifdef __AVX2__ + u64 mask[4] = {0}; + mask[index] = (u64)1 << (elm % 64); + __m256i _mask = _mm256_set_epi64x(mask[3], mask[2], mask[1], mask[0]); + return _mm256_or_si256(a, _mask); +#elif defined(__ARM_NEON) + u64 mask[2] = {0}; + mask[index & 1] = (u64)1 << (elm % 64); + auto _mask = vld1q_u64(mask); + if (index < 2) + { + return {vorrq_u64(a.val[0], _mask), a.val[1]}; + } + else + { + return {a.val[0], vorrq_u64(a.val[1], _mask)}; + } +#else + smallset_t retval; + retval.set(elm); + return retval; +#endif + } + + smallset_t smallset_shift(const smallset_t& b, const u8 shift) + { +#if !defined(__AVX2__) && !defined(__ARM_NEON) + return b.shuffle(shift); +#endif + + auto a = b; + // compute a \oplus shift + if ((shift >> 7) & 0x1) + { +#ifdef __AVX2__ + a = _mm256_permute2x128_si256(a, a, 1); +#elif defined(__ARM_NEON) + a.val[0] = b.val[1]; + a.val[1] = b.val[0]; +#endif + } + if ((shift >> 6) & 0x1) + { +#ifdef __AVX2__ + a = _mm256_permute4x64_epi64(a, _MM_SHUFFLE(2, 3, 0, 1)); +#elif defined(__ARM_NEON) + a.val[0] = vextq_u64(a.val[0], a.val[0], 1); + a.val[1] = vextq_u64(a.val[1], a.val[1], 1); +#endif + } + if ((shift >> 5) & 0x1) + { +#ifdef __AVX2__ + a = _mm256_shuffle_epi32(a, _MM_SHUFFLE(2, 3, 0, 1)); +#elif defined(__ARM_NEON) + a.val[0] = vrev64q_u32(a.val[0]); + a.val[1] = vrev64q_u32(a.val[1]); + +#endif + } + if ((shift >> 4) & 0x1) + { +#ifdef __AVX2__ + a = _mm256_shufflelo_epi16(a, _MM_SHUFFLE(2, 3, 0, 1)); + a = _mm256_shufflehi_epi16(a, _MM_SHUFFLE(2, 3, 0, 1)); +#elif defined(__ARM_NEON) + a.val[0] = vrev64q_u16(a.val[0]); + a.val[0] = vrev64q_u32(a.val[0]); + a.val[1] = vrev64q_u16(a.val[1]); + a.val[1] = vrev64q_u32(a.val[1]); +#endif + } + if ((shift >> 3) & 0x1) + { +#ifdef __AVX2__ + const __m256i mask = _mm256_set_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1); + a = _mm256_shuffle_epi8(a, mask); +#elif defined(__ARM_NEON) + a.val[0] = vrev64q_u8(a.val[0]); + a.val[0] = vrev64q_u16(a.val[0]); + a.val[1] = vrev64q_u8(a.val[1]); + a.val[1] = vrev64q_u16(a.val[1]); +#endif + } + if ((shift >> 2) & 0x1) + { +#ifdef __AVX2__ + const __m256i mask_high = _mm256_set1_epi8((char)0xF0); + const __m256i mask_low = _mm256_set1_epi8(0x0F); + const __m256i high = _mm256_and_si256(a, mask_high); + const __m256i low = _mm256_and_si256(a, mask_low); + a = _mm256_or_si256(_mm256_srli_epi16(high, 4), _mm256_slli_epi16(low, 4)); +#elif defined(__ARM_NEON) + const auto mask_high = vdupq_n_u64(0xF0F0F0F0F0F0F0F0); + const auto mask_low = vdupq_n_u64(0x0F0F0F0F0F0F0F0F); + + for (u32 i = 0; i < 2; i++) + { + const auto high = vandq_u64(a.val[i], mask_high); + const auto low = vandq_u64(a.val[i], mask_low); + + a.val[i] = vorrq_u64(vshrq_n_u64(high, 4), vshlq_n_u64(low, 4)); + } +#endif + } + if ((shift >> 1) & 0x1) + { +#ifdef __AVX2__ + const __m256i mask_high = _mm256_set1_epi8((char)0xCC); + const __m256i mask_low = _mm256_set1_epi8(0x33); + const __m256i high = _mm256_and_si256(a, mask_high); + const __m256i low = _mm256_and_si256(a, mask_low); + a = _mm256_or_si256(_mm256_srli_epi16(high, 2), _mm256_slli_epi16(low, 2)); +#elif defined(__ARM_NEON) + const auto mask_high = vdupq_n_u64(0xCCCCCCCCCCCCCCCC); + const auto mask_low = vdupq_n_u64(0x3333333333333333); + + for (u32 i = 0; i < 2; i++) + { + const auto high = vandq_u64(a.val[i], mask_high); + const auto low = vandq_u64(a.val[i], mask_low); + + a.val[i] = vorrq_u64(vshrq_n_u64(high, 2), vshlq_n_u64(low, 2)); + } +#endif + } + if (shift & 0x1) + { +#ifdef __AVX2__ + const __m256i mask_high = _mm256_set1_epi8((char)0xAA); + const __m256i mask_low = _mm256_set1_epi8(0x55); + const __m256i high = _mm256_and_si256(a, mask_high); + const __m256i low = _mm256_and_si256(a, mask_low); + a = _mm256_or_si256(_mm256_srli_epi16(high, 1), _mm256_slli_epi16(low, 1)); +#elif defined(__ARM_NEON) + const auto mask_high = vdupq_n_u64(0xAAAAAAAAAAAAAAAA); + const auto mask_low = vdupq_n_u64(0x5555555555555555); + + for (u32 i = 0; i < 2; i++) + { + const auto high = vandq_u64(a.val[i], mask_high); + const auto low = vandq_u64(a.val[i], mask_low); + + a.val[i] = vorrq_u64(vshrq_n_u64(high, 1), vshlq_n_u64(low, 1)); + } +#endif + } + return a; + } + + smallset_t smallset_shift_union(const smallset_t& a, const u8 shift) + { + smallset_t b = smallset_shift(a, shift); + return smallset_union(a, b); + } + + std::vector smallset_get_elements(const smallset_t& a) + { + std::vector e; + u64 chunks[4]; +#ifdef __AVX2__ + chunks[0] = _mm256_extract_epi64(a, 0); + chunks[1] = _mm256_extract_epi64(a, 1); + chunks[2] = _mm256_extract_epi64(a, 2); + chunks[3] = _mm256_extract_epi64(a, 3); +#elif defined(__ARM_NEON) + chunks[0] = a.val[0][0]; + chunks[1] = a.val[0][1]; + chunks[2] = a.val[1][0]; + chunks[3] = a.val[1][1]; +#else + a.to_array(chunks); +#endif + for (u32 i = 0; i < 4; i++) + { + u64 current_chunk = chunks[i]; + while (current_chunk != 0) + { + u8 idx = __builtin_ctzll(current_chunk) + i * 64; + e.push_back(idx); + current_chunk &= (current_chunk - 1); + } + } + return e; + } + + inline smallset_t smallset_init_empty() + { +#ifdef __AVX2__ + return _mm256_setzero_si256(); +#elif defined(__ARM_NEON) + return {vdupq_n_u64(0), vdupq_n_u64(0)}; +#else + return smallset_t(); +#endif + } + + inline smallset_t smallset_init_full(const u32 len) + { +#if !defined(__AVX2__) && !defined(__ARM_NEON) + return smallset_t(len); +#endif + // N must be in {256, 128, 64, 32, 16, 8} + if (len == 256) + { +#ifdef __AVX2__ + return _mm256_set_epi64x(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF); +#elif defined(__ARM_NEON) + return {vdupq_n_u64(0xFFFFFFFFFFFFFFFF), vdupq_n_u64(0xFFFFFFFFFFFFFFFF)}; +#endif + } + else if (len == 128) + { +#ifdef __AVX2__ + return _mm256_set_epi64x(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF); +#elif defined(__ARM_NEON) + return {vdupq_n_u64(0xFFFFFFFFFFFFFFFF), vdupq_n_u64(0)}; +#endif + } + else if (len == 64) + { +#ifdef __AVX2__ + return _mm256_set_epi64x(0, 0, 0, 0xFFFFFFFFFFFFFFFF); +#elif defined(__ARM_NEON) + auto tmp = vdupq_n_u64(0); + return {vsetq_lane_u64(0xFFFFFFFFFFFFFFFF, tmp, 0), vdupq_n_u64(0)}; +#endif + } + else if (len == 32) + { +#ifdef __AVX2__ + return _mm256_set_epi64x(0, 0, 0, 0xFFFFFFFF); +#elif defined(__ARM_NEON) + auto tmp = vdupq_n_u64(0); + return {vsetq_lane_u32(0xFFFFFFFF, tmp, 0), vdupq_n_u64(0)}; +#endif + } + else if (len == 16) + { +#ifdef __AVX2__ + return _mm256_set_epi64x(0, 0, 0, 0xFFFF); +#elif defined(__ARM_NEON) + auto tmp = vdupq_n_u64(0); + return {vsetq_lane_u16(0xFFFF, tmp, 0), vdupq_n_u64(0)}; +#endif + } + else if (len == 8) + { +#ifdef __AVX2__ + return _mm256_set_epi64x(0, 0, 0, 0xFF); +#elif defined(__ARM_NEON) + auto tmp = vdupq_n_u64(0); + return {vsetq_lane_u8(0xFF, tmp, 0), vdupq_n_u64(0)}; +#endif + } + else + { +#ifdef __AVX2__ + return _mm256_set_epi64x(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF); +#elif defined(__ARM_NEON) + return {vdupq_n_u64(0xFFFFFFFFFFFFFFFF), vdupq_n_u64(0xFFFFFFFFFFFFFFFF)}; +#endif + } + } + + inline smallset_t smallset_invert(const smallset_t& a, const u32 len) + { + const smallset_t b = smallset_init_full(len); +#ifdef __AVX2__ + return _mm256_xor_si256(a, b); +#elif defined(__ARM_NEON) + return {veorq_u64(a.val[0], b.val[0]), veorq_u64(a.val[1], b.val[1])}; +#else + return (a ^ b); +#endif + } + + inline smallset_t smallset_setminus(const smallset_t& a, const smallset_t& b, const u32 len) + { + const smallset_t b_not = smallset_invert(b, len); + return smallset_intersect(a, b_not); + } + + bool smallset_elm_is_in_set(const u8 e, const smallset_t& a) + { +#if !defined(__AVX2__) && !defined(__ARM_NEON) + return a.is_set(e); +#endif + smallset_t b = smallset_init_empty(); + b = smallset_add_element(b, e); + b = smallset_intersect(a, b); + return !smallset_is_empty(b); + } + // END OF SMALL SET // + + // state of the linear_representative algorithm + typedef struct + { + std::vector A; + std::vector B; + std::vector R_S; + smallset_t D_A; + smallset_t D_B; + smallset_t C_A; + smallset_t C_B; + smallset_t N_A; + smallset_t N_B; + smallset_t U_A; + smallset_t U_B; + } state_t; + + // lexicographically compare R_S and R_S_best + bool is_greater(const std::vector& R_S, const std::vector& R_S_best, const u32 len) + { + if ((R_S_best[0] == 0) && (R_S_best[1] == 0)) + return false; + + for (u32 x = 0; x < len; x++) + { + // special case: R_S[x] not defined (=> 0) and R_S_best[x] = 0 + // works out with this + if (R_S[x] > R_S_best[x]) + return true; + if (R_S[x] < R_S_best[x]) + return false; + } + // can happen if there are self equivalences (?) + return false; + } + + bool update_linear(std::vector& A, u8 new_x, const u32 len) + { + u8 new_y = A[new_x]; + for (u32 i = 1; i < len; i++) + { + u8 e = A[i]; + if (e == 0) + continue; + else if (A[new_x ^ i] == 0) + A[new_x ^ i] = e ^ new_y; + else if (A[new_x ^ i] != (e ^ new_y)) + { + return false; + } + } + return true; + } + + bool subroutine(const std::vector& S, const std::vector& S_inv, const state_t& state, std::vector& R_S_best, const u32 len) + { + std::vector A(state.A); + std::vector B(state.B); + std::vector R_S(state.R_S); + + smallset_t D_A = (state.D_A); + smallset_t D_B = (state.D_B); + smallset_t C_A = (state.C_A); + smallset_t C_B = (state.C_B); + smallset_t N_A = (state.N_A); + smallset_t N_B = (state.N_B); + smallset_t U_A = (state.U_A); + smallset_t U_B = (state.U_B); + + while (!smallset_is_empty(N_A)) + { + u8 x = smallset_least_element(N_A); + u8 y = smallset_least_element(U_B); + B[y] = S[A[x]]; + if (!update_linear(B, y, len)) + return false; + smallset_t D_B_new = smallset_shift(D_B, y); + D_B = smallset_union(D_B, D_B_new); + U_B = smallset_setminus(U_B, D_B_new, len); + smallset_t SoA_N_A = smallset_init_empty(); + for (u8 x : smallset_get_elements(N_A)) + { + SoA_N_A = smallset_add_element(SoA_N_A, S[A[x]]); + } + smallset_t B_D_B_new = smallset_init_empty(); + for (u8 d : smallset_get_elements(D_B_new)) + { + B_D_B_new = smallset_add_element(B_D_B_new, B[d]); + if (smallset_elm_is_in_set(B[d], SoA_N_A)) + { + C_B = smallset_add_element(C_B, d); + } + else + { + N_B = smallset_add_element(N_B, d); + } + } + smallset_t C_A_new = smallset_init_empty(); + for (u8 x : smallset_get_elements(N_A)) + { + if (smallset_elm_is_in_set(S[A[x]], B_D_B_new)) + { + C_A_new = smallset_add_element(C_A_new, x); + } + } + C_A = smallset_union(C_A, C_A_new); + N_A = smallset_setminus(N_A, C_A_new, len); + for (u8 x : smallset_get_elements(C_A_new)) + { + u8 y = 0; + for (u32 i = 0; i < len; i++) + { + if (B[i] == S[A[x]]) + { + y = i; + break; + } + } + R_S[x] = y; + } + if (is_greater(R_S, R_S_best, len)) + return false; + while (smallset_is_empty(N_A) && !smallset_is_empty(N_B)) + { + u8 x = smallset_least_element(U_A); + u8 y = smallset_least_element(N_B); + A[x] = S_inv[B[y]]; + if (!update_linear(A, x, len)) + { + return false; + } + smallset_t D_A_new = smallset_shift(D_A, x); + D_A = smallset_union(D_A, D_A_new); + U_A = smallset_setminus(U_A, D_A_new, len); + smallset_t SinvoB_N_B = smallset_init_empty(); + for (u8 y : smallset_get_elements(N_B)) + { + SinvoB_N_B = smallset_add_element(SinvoB_N_B, S_inv[B[y]]); + } + smallset_t A_D_A_new = smallset_init_empty(); + for (u8 d : smallset_get_elements(D_A_new)) + { + A_D_A_new = smallset_add_element(A_D_A_new, A[d]); + if (smallset_elm_is_in_set(A[d], SinvoB_N_B)) + { + C_A = smallset_add_element(C_A, d); + } + else + { + N_A = smallset_add_element(N_A, d); + } + } + smallset_t C_B_new = smallset_init_empty(); + for (u8 y : smallset_get_elements(N_B)) + { + if (smallset_elm_is_in_set(S_inv[B[y]], A_D_A_new)) + { + C_B_new = smallset_add_element(C_B_new, y); + } + } + C_B = smallset_union(C_B, C_B_new); + N_B = smallset_setminus(N_B, C_B_new, len); + for (u8 y : smallset_get_elements(C_B_new)) + { + u8 x = 0; + for (u32 i = 0; i < len; i++) + { + if (A[i] == S_inv[B[y]]) + { + x = i; + break; + } + } + R_S[x] = y; + } + if (is_greater(R_S, R_S_best, len)) + return false; + } + } + if (smallset_is_empty(U_A) && smallset_is_empty(U_B)) + { + for (u32 i = 0; i < len; i++) + { + // new best + R_S_best[i] = R_S[i]; + } + return true; + } + else + { + u8 x = smallset_least_element(U_A); + smallset_t D_A_new = smallset_shift(D_A, x); + U_A = smallset_setminus(U_A, D_A_new, len); + D_A = smallset_union(D_A, D_A_new); + N_A = smallset_union(N_A, D_A_new); + bool flag = false; + smallset_t Y = smallset_init_full(len); + smallset_t A_set = smallset_init_empty(); + for (u32 i = 0; i < len; i++) + { + A_set = smallset_add_element(A_set, A[i]); + } + Y = smallset_setminus(Y, A_set, len); + for (u8 y : smallset_get_elements(Y)) + { + std::vector A_next_guess(len); + + for (u32 i = 0; i < len; i++) + { + A_next_guess[i] = A[i]; + } + A_next_guess[x] = y; + if (!update_linear(A_next_guess, x, len)) + continue; + state_t state_next; + state_next.A = A_next_guess; + state_next.B = B; + state_next.R_S = R_S; + state_next.D_A = D_A; + state_next.D_B = D_B; + state_next.C_A = C_A; + state_next.C_B = C_B; + state_next.N_A = N_A; + state_next.N_B = N_B; + state_next.U_A = U_A; + state_next.U_B = U_B; + + if (subroutine(S, S_inv, state_next, R_S_best, len)) + { + flag = true; + } + } + + return flag; + } + } + } // namespace + + std::vector SBoxDatabase::compute_linear_representative(const std::vector& sbox) + { + u32 len = sbox.size(); + + // variable for current best candidate + std::vector R_S_best(len, 0); + + // invert sbox + std::vector S_inv(len, 0); + for (u32 x = 0; x < len; x++) + { + u8 y = sbox[x]; + S_inv[y] = x; + } + + // init the state of the algorithm + state_t state; + state.A = std::vector(len, 0); + state.B = std::vector(len, 0); + state.R_S = std::vector(len, 0); + + state.D_A = smallset_add_element(smallset_init_empty(), 0); + state.D_B = smallset_add_element(smallset_init_empty(), 0); + + state.C_A = smallset_init_empty(); + state.C_B = smallset_init_empty(); + + state.N_A = smallset_add_element(smallset_init_empty(), 0); + state.N_B = smallset_add_element(smallset_init_empty(), 0); + + state.U_A = smallset_setminus(smallset_init_full(len), state.D_A, len); + state.U_B = smallset_setminus(smallset_init_full(len), state.D_A, len); + + // init in special case S[0] == 0 + if (sbox[0] == 0) + { + state.C_A = smallset_add_element(smallset_init_empty(), 0); + state.C_B = smallset_add_element(smallset_init_empty(), 0); + + state.N_A = smallset_init_empty(); + state.N_B = smallset_init_empty(); + } + + // compute linear representative recursively + subroutine(sbox, S_inv, state, R_S_best, len); + + return R_S_best; + } + } // namespace hawkeye +} // namespace hal diff --git a/plugins/hawkeye/src/sbox_lookup.cpp b/plugins/hawkeye/src/sbox_lookup.cpp new file mode 100644 index 00000000000..c0e6f4ae624 --- /dev/null +++ b/plugins/hawkeye/src/sbox_lookup.cpp @@ -0,0 +1,539 @@ +#include "hawkeye/sbox_lookup.h" + +#include "graph_algorithm/algorithms/components.h" +#include "graph_algorithm/algorithms/subgraph.h" +#include "hal_core/netlist/boolean_function.h" +#include "hal_core/netlist/decorators/boolean_function_net_decorator.h" +#include "hal_core/netlist/decorators/subgraph_netlist_decorator.h" +#include "hal_core/netlist/gate.h" +#include "hawkeye/round_candidate.h" + +#include +#include + +namespace hal +{ + namespace hawkeye + { + Result> locate_sboxes(const RoundCandidate* candidate) + { + log_info("hawkeye", "start locating S-boxes within round function candidate..."); + auto start = std::chrono::system_clock::now(); + + const auto* nl = candidate->get_netlist(); + const auto* graph = candidate->get_graph(); + + // get initial set of components + auto comp_res = graph_algorithm::get_connected_components(graph, false).map>>([graph](const auto& comps) -> Result>> { + std::vector> res; + for (const auto& c : comps) + { + if (const auto gates_res = graph->get_gates_from_vertices(c); gates_res.is_ok()) + { + res.push_back(gates_res.get()); + } + else + { + return ERR(gates_res.get_error()); + } + } + return OK(res); + }); + if (comp_res.is_error()) + { + return ERR(comp_res.get_error()); + } + auto components = comp_res.get(); + + const auto& state_input_reg = candidate->get_input_reg(); + const auto& state_output_reg = candidate->get_output_reg(); + + std::vector res; + + for (const auto& component : components) + { + // gather FFs of the component that are also part of the state input reg + std::set component_input_ffs; + for (auto* comp_g : component) + { + if (state_input_reg.find(comp_g) != state_input_reg.end()) + { + component_input_ffs.insert(comp_g); + } + } + + u32 number_input_ffs = component_input_ffs.size(); + if (number_input_ffs < 3) + { + // too small for S-box + continue; + } + else if (number_input_ffs <= 8) + { + // assume to have found a single S-box + std::set sbox_output_gates; + + for (auto* cand_gate : component) + { + // skip FFs + if (cand_gate->get_type()->has_property(GateTypeProperty::ff)) + { + continue; + } + + // output gates are all combinational gates that have no other successors but the state output reg + const auto suc_gates = cand_gate->get_unique_successors(); + if (std::none_of(suc_gates.begin(), suc_gates.end(), [&state_output_reg](Gate* g) { return state_output_reg.find(g) == state_output_reg.end(); })) + { + sbox_output_gates.insert(cand_gate); + } + } + + // create S-box candidate if input size equals output size + if (sbox_output_gates.size() == number_input_ffs) + { + SBoxCandidate sbox_candidate; + sbox_candidate.m_candidate = candidate; + sbox_candidate.m_component = component; + sbox_candidate.m_input_gates = std::move(component_input_ffs); + sbox_candidate.m_output_gates = std::move(sbox_output_gates); + res.push_back(sbox_candidate); + } + continue; + } + + // try to split component in smaller sub-components (assuming component is combination of S-box and linear layer) + std::set current_subset = component_input_ffs; + std::vector>> input_groupings; + + // abuse that map keys are sorted, hence rbegin() will return max distance in map + const auto& longest_dist_to_gates = candidate->get_longest_distance_to_gate(); + for (u32 step = 1; step < longest_dist_to_gates.rbegin()->first + 1; step++) + { + if (const auto dist_it = longest_dist_to_gates.find(step); dist_it != longest_dist_to_gates.end()) + { + const auto& new_gates = std::get<1>(*dist_it); + current_subset.insert(new_gates.begin(), new_gates.end()); + } + else + { + break; + } + + // generate subgraph of new sub-component + auto subgraph_res = graph_algorithm::get_subgraph(graph, current_subset); + if (subgraph_res.is_error()) + { + return ERR(subgraph_res.get_error()); + } + auto subgraph = std::move(subgraph_res.get()); + + auto comp_res = graph_algorithm::get_connected_components(subgraph.get(), false); + if (comp_res.is_error()) + { + return ERR(comp_res.get_error()); + } + + // determine input groups feeding into distinct sub-circuits + std::set lens; + std::vector> subcomponents; + std::vector> input_groups; + for (const auto& comp : comp_res.get()) + { + auto gates_res = subgraph->get_gates_from_vertices(comp); + if (gates_res.is_error()) + { + return ERR(gates_res.get_error()); + } + auto comp_gates = gates_res.get(); + + // only consider sub-components connected to at least one input FF + if (std::any_of(comp_gates.begin(), comp_gates.end(), [&component_input_ffs](Gate* g) { return component_input_ffs.find(g) != component_input_ffs.end(); })) + { + std::set input_group; + for (auto* comp_g : comp_gates) + { + if (state_input_reg.find(comp_g) != state_input_reg.end()) + { + input_group.insert(comp_g); + } + } + lens.insert(input_group.size()); + input_groups.push_back(std::move(input_group)); + subcomponents.push_back(std::move(comp_gates)); + } + } + + // all input groups should have same size and comprise more than one input + if (lens.size() == 1 && input_groups.at(0).size() > 1 && input_groups.size() > 1) + { + input_groupings.push_back(input_groups); + } + } + + const auto& input_ffs_of_gate = candidate->get_input_ffs_of_gate(); + + std::vector, std::set>> sboxes_input_output_gates; + for (const auto& input_groups : input_groupings) + { + for (const auto& input_group : input_groups) + { + std::set output_group; + for (auto* comp_gate : component) + { + // disregard output FFs + if (state_output_reg.find(comp_gate) != state_output_reg.end()) + { + continue; + } + + // disregard gates that only depend on a single input FF + if (input_ffs_of_gate.at(comp_gate).size() <= 1) + { + continue; + } + + // disregard gates that do not only depend on the input FFs of the sub-component + if (!std::includes(input_group.begin(), input_group.end(), input_ffs_of_gate.at(comp_gate).begin(), input_ffs_of_gate.at(comp_gate).end())) + { + continue; + } + + // disregard gates for which no successor is dependent on an additional (external) input + auto sucs = comp_gate->get_unique_successors(); + if (std::all_of(sucs.begin(), sucs.end(), [&input_ffs_of_gate, &input_group](auto* sg) { + return std::includes(input_group.begin(), input_group.end(), input_ffs_of_gate.at(sg).begin(), input_ffs_of_gate.at(sg).end()); + })) + { + continue; + } + + // disregard inverters at the outputs (should also be covered by next step) + auto preds = comp_gate->get_unique_predecessors(); + if (comp_gate->get_type()->has_property(GateTypeProperty::c_inverter)) + { + if (std::includes(output_group.begin(), output_group.end(), preds.begin(), preds.end())) + { + continue; + } + } + + output_group.insert(comp_gate); + } + + // disregard output gates that only depend on other output gates + std::vector to_delete; + for (auto* out_gate : output_group) + { + const auto pred_gates = out_gate->get_unique_predecessors(); + if (std::all_of(pred_gates.begin(), pred_gates.end(), [output_group](Gate* g) { return output_group.find(g) != output_group.end(); })) + { + to_delete.push_back(out_gate); + } + } + for (auto* del_gate : to_delete) + { + output_group.erase(del_gate); + } + + if (input_group.size() <= 8 && output_group.size() <= 20) + { + if (output_group.size() == input_group.size() + 1) + { + for (auto* drop_gate : output_group) + { + SBoxCandidate sbox_candidate; + sbox_candidate.m_candidate = candidate; + sbox_candidate.m_component = component; + sbox_candidate.m_input_gates = input_group; + sbox_candidate.m_output_gates = output_group; + sbox_candidate.m_output_gates.erase(drop_gate); + res.push_back(sbox_candidate); + } + } + else if (output_group.size() == input_group.size() + 2) + { + for (auto drop_it_1 = output_group.begin(); drop_it_1 != output_group.end(); drop_it_1++) + { + for (auto drop_it_2 = std::next(drop_it_1); drop_it_2 != output_group.end(); drop_it_2++) + { + SBoxCandidate sbox_candidate; + sbox_candidate.m_candidate = candidate; + sbox_candidate.m_component = component; + sbox_candidate.m_input_gates = input_group; + sbox_candidate.m_output_gates = output_group; + sbox_candidate.m_output_gates.erase(*drop_it_1); + sbox_candidate.m_output_gates.erase(*drop_it_2); + res.push_back(sbox_candidate); + } + } + } + else + { + SBoxCandidate sbox_candidate; + sbox_candidate.m_candidate = candidate; + sbox_candidate.m_component = component; + sbox_candidate.m_input_gates = std::move(input_group); + sbox_candidate.m_output_gates = std::move(output_group); + res.push_back(sbox_candidate); + } + } + } + } + } + + auto duration_in_seconds = std::chrono::duration(std::chrono::system_clock::now() - start).count(); + log_info("hawkeye", "located {} S-box candidates within round function candidate in {:.2f} seconds", res.size(), duration_in_seconds); + + return OK(res); + } + + Result identify_sbox(const SBoxCandidate& sbox_candidate, const SBoxDatabase& db) + { + log_info("hawkeye", "start identifying S-box candidate..."); + auto start = std::chrono::system_clock::now(); + + std::string sbox_name; + + const RoundCandidate* candidate = sbox_candidate.m_candidate; + const std::vector& component = sbox_candidate.m_component; + const std::set& input_gates = sbox_candidate.m_input_gates; + const std::set& output_gates = sbox_candidate.m_output_gates; + + if (input_gates.size() == 0) + { + return ERR("empty set of input gates provided"); + } + + const auto* nl = candidate->get_netlist(); + const auto snd = SubgraphNetlistDecorator(*nl); + + std::vector bfs; + std::set all_inputs; + + const auto& in_reg = candidate->get_input_reg(); + std::map, BooleanFunction> cache; + + for (const auto* out_gate : output_gates) + { + // check whether any of the output gates have multiple outputs (this could be relaxed later) + const auto& fan_out_nets = out_gate->get_fan_out_nets(); + if (fan_out_nets.size() != 1) + { + log_error("hawkeye", "gate '{}' with ID {} has none or multiple fan-out nets, which is currently not supported", out_gate->get_name(), out_gate->get_id()); + } + const auto* out_net = fan_out_nets.front(); + + // get Boolean functions of all subgraphs described by the gates of the component and each output net + std::vector subgraph_gates; + std::copy_if(component.begin(), component.end(), std::back_inserter(subgraph_gates), [&in_reg](Gate* g) { return in_reg.find(g) == in_reg.end(); }); + auto bf_res = snd.get_subgraph_function(subgraph_gates, out_net, cache); + if (bf_res.is_error()) + { + return ERR(bf_res.get_error()); + } + bfs.push_back(bf_res.get()); + + // gather all input nets actually used by the component + auto variables = bfs.back().get_variable_names(); + std::transform( + variables.begin(), variables.end(), std::inserter(all_inputs, all_inputs.end()), [nl](const std::string& var) { return BooleanFunctionNetDecorator::get_net_from(nl, var).get(); }); + } + + // check whether any of the input gates have multiple outputs (not allowed for FFs) + for (const auto* in_gate : input_gates) + { + const auto& fan_out_nets = in_gate->get_fan_out_nets(); + if (fan_out_nets.size() != 1) + { + log_error("hawkeye", "gate '{}' with ID {} has none or multiple fan-out nets, which is currently not supported", in_gate->get_name(), in_gate->get_id()); + } + } + + // gather state inputs actually used by the analyzed component + const auto& state_inputs = candidate->get_state_inputs(); + std::set actual_state_inputs; + std::set_intersection(all_inputs.begin(), all_inputs.end(), state_inputs.begin(), state_inputs.end(), std::inserter(actual_state_inputs, actual_state_inputs.begin())); + + // gather control inputs actually used by the analyzed component + const auto& control_inputs = candidate->get_control_inputs(); + std::set actual_control_inputs; + std::set_intersection(all_inputs.begin(), all_inputs.end(), control_inputs.begin(), control_inputs.end(), std::inserter(actual_control_inputs, actual_control_inputs.begin())); + + // gather other inputs actually used by the analyzed component + const auto& other_inputs = candidate->get_other_inputs(); + std::set actual_other_inputs; + std::set_intersection(all_inputs.begin(), all_inputs.end(), other_inputs.begin(), other_inputs.end(), std::inserter(actual_other_inputs, actual_other_inputs.begin())); + + // also gather unique Boolean variable names of state inputs from corresponding nets + std::vector actual_state_input_names; + for (const auto* n : actual_state_inputs) + { + actual_state_input_names.push_back(BooleanFunctionNetDecorator(*n).get_boolean_variable_name()); + } + + if (actual_control_inputs.size() <= 8) + { + const auto bf_const_0 = BooleanFunction::Const(0, 1); + const auto bf_const_1 = BooleanFunction::Const(1, 1); + std::vector bf_const = {bf_const_0, bf_const_1}; + + // set all other inputs to '0' + for (auto& bf : bfs) + { + for (const auto* other_in : actual_other_inputs) + { + const auto sub_res = bf.substitute(BooleanFunctionNetDecorator(*other_in).get_boolean_variable_name(), bf_const_0); + if (sub_res.is_error()) + { + return ERR(sub_res.get_error()); + } + bf = sub_res.get(); + } + // bf = bf.simplify(); + } + + // brute-force all control inputs + for (u32 i = 0; i < (1 << actual_control_inputs.size()); i++) + { + // prepare values to assign to control inputs + std::map control_values; + u32 j = 0; + for (auto* ci : actual_control_inputs) + { + control_values[BooleanFunctionNetDecorator(*ci).get_boolean_variable_name()] = bf_const.at((i >> j) & 1); + j++; + } + + // actually assign the values + std::vector> truth_tables_inverted(1 << actual_state_inputs.size(), std::vector(bfs.size())); + for (j = 0; j < bfs.size(); j++) + { + const auto& bf = bfs.at(j); + const auto tt_res = bf.substitute(control_values).map>>([&actual_state_input_names](auto&& bf) { + // return bf.simplify().compute_truth_table(actual_state_input_names); + return bf.compute_truth_table(actual_state_input_names); + }); + if (tt_res.is_error()) + { + return ERR(tt_res.get_error()); + } + + auto tmp = tt_res.get().front(); + for (u32 k = 0; k < tmp.size(); k++) + { + truth_tables_inverted.at(k).at(j) = tmp.at(k); + } + } + + std::vector sbox_tmp; + for (const auto& tt : truth_tables_inverted) + { + const auto u64_res = BooleanFunction::to_u64(tt); + if (u64_res.is_error()) + { + return ERR(u64_res.get_error()); + } + sbox_tmp.push_back(u64_res.get()); + } + + // check linear independence of outputs if more outputs than inputs + // remove outputs that are linearly dependent on others + // basically uses Gauss elimination + if (input_gates.size() != output_gates.size()) + { + std::vector mat; + for (j = 0; j < output_gates.size(); j++) + { + u64 sum = 0; + for (u32 k = 0; k < (1 << input_gates.size()); k++) + { + sum += (1 << k) * ((sbox_tmp[k] >> j) & 1); + } + mat.push_back(sum); + } + + for (j = 0; j < (1 << input_gates.size()); j++) + { + u32 kk = 0; + for (u32 k = 0; k < output_gates.size(); k++) + { + if ((mat.at(k) >> j) & 1 == 1) + { + kk = k; + break; + } + } + + for (u32 k = kk + 1; k < output_gates.size(); k++) + { + if ((mat.at(k) >> j) & 1 == 1) + { + mat.at(k) = mat.at(k) ^ mat.at(kk); + } + } + } + + std::vector idx; + for (j = 0; j < mat.size(); j++) + { + if (mat.at(j) != 0) + { + idx.push_back(j); + } + } + + if (idx.size() == input_gates.size()) + { + for (j = 0; j < sbox_tmp.size(); j++) + { + u8 new_val = 0; + for (u32 k = 0; k < idx.size(); k++) + { + new_val += (1 << k) * ((sbox_tmp.at(j) >> idx.at(k)) & 1); + } + sbox_tmp.at(j) = new_val; + } + } + else + { + log_info("hawkeye", "found {} linear independent", idx.size()); + continue; + } + } + + std::vector sbox; + for (const auto elem : sbox_tmp) + { + sbox.push_back((u8)elem); + } + + std::set sbox_set(sbox.begin(), sbox.end()); + if (sbox.size() != sbox_set.size()) + { + log_info("hawkeye", "found non-bijective S-box"); + continue; + } + + if (const auto sbox_res = db.lookup(sbox); sbox_res.is_ok()) + { + sbox_name = sbox_res.get(); + break; + } + } + } + + auto duration_in_seconds = std::chrono::duration(std::chrono::system_clock::now() - start).count(); + if (!sbox_name.empty()) + { + log_info("hawkeye", "identified {} S-box in {:.2f} seconds", sbox_name, duration_in_seconds); + } + else + { + log_info("hawkeye", "could not identify S-box in {:.2f} seconds", duration_in_seconds); + } + + return OK(sbox_name); + } + } // namespace hawkeye +} // namespace hal \ No newline at end of file diff --git a/plugins/netlist_preprocessing/include/netlist_preprocessing/plugin_netlist_preprocessing.h b/plugins/netlist_preprocessing/include/netlist_preprocessing/plugin_netlist_preprocessing.h index 6003a9ae0e7..564c1443a26 100644 --- a/plugins/netlist_preprocessing/include/netlist_preprocessing/plugin_netlist_preprocessing.h +++ b/plugins/netlist_preprocessing/include/netlist_preprocessing/plugin_netlist_preprocessing.h @@ -147,5 +147,17 @@ namespace hal * return OK on success, an error otherwise. */ static Result parse_def_file(Netlist* nl, const std::filesystem::path& def_file); + + /** + * Iterates all flip-flops of the netlist or specified by the user. + * If a flip-flop has a `state` and a `neg_state` output, a new inverter gate is created and connected to the `state` output net as an additional destination. + * Finally, the `neg_state` output net is disconnected from the `neg_state` pin and re-connected to the new inverter gate's output. + * + * @param[in] nl - The netlist to operate on. + * @param[in] ffs - The flip-flops to operate on. Defaults to an empty vector, in which case all flip-flops of the netlist are considered. + * @param[in] inverter_type - The inverter gate type to use. Defaults to a `nullptr`, in which case the first inverter type found in the gate library is used. + * @returns OK() and the number of rerouted `neg_state` outputs on success, an error otherwise. + */ + static Result unify_ff_outputs(Netlist* nl, const std::vector& ffs = {}, GateType* inverter_type = nullptr); }; } // namespace hal diff --git a/plugins/netlist_preprocessing/python/python_bindings.cpp b/plugins/netlist_preprocessing/python/python_bindings.cpp index 95bfb70dd51..6a4b400c64a 100644 --- a/plugins/netlist_preprocessing/python/python_bindings.cpp +++ b/plugins/netlist_preprocessing/python/python_bindings.cpp @@ -303,6 +303,35 @@ namespace hal :rtype: bool )"); + py_netlist_preprocessing.def_static( + "unify_ff_outputs", + [](Netlist* nl, const std::vector& ffs = {}, GateType* inverter_type = nullptr) -> std::optional { + auto res = NetlistPreprocessingPlugin::unify_ff_outputs(nl, ffs, inverter_type); + if (res.is_ok()) + { + return res.get(); + } + else + { + log_error("python_context", "{}", res.get_error().get()); + return std::nullopt; + } + }, + py::arg("nl"), + py::arg("ffs") = std::vector(), + py::arg("inverter_type") = nullptr, + R"( + Iterates all flip-flops of the netlist or specified by the user. + If a flip-flop has a ``state`` and a ``neg_state`` output, a new inverter gate is created and connected to the ``state`` output net as an additional destination. + Finally, the ``neg_state`` output net is disconnected from the ``neg_state`` pin and re-connected to the new inverter gate's output. + + :param hal_py.Netlist nl: The netlist to operate on. + :param list[hal_py.Gate] ffs: The flip-flops to operate on. Defaults to an empty vector, in which case all flip-flops of the netlist are considered. + :param hal_py.GateType inverter_type: The inverter gate type to use. Defaults to a ``None``, in which case the first inverter type found in the gate library is used. + :returns: The number of rerouted ``neg_state`` outputs on success, ``None`` otherwise. + :rtype: int or ``None`` + )"); + #ifndef PYBIND11_MODULE return m.ptr(); #endif // PYBIND11_MODULE diff --git a/plugins/netlist_preprocessing/src/plugin_netlist_preprocessing.cpp b/plugins/netlist_preprocessing/src/plugin_netlist_preprocessing.cpp index c655b81afc4..3474f889223 100644 --- a/plugins/netlist_preprocessing/src/plugin_netlist_preprocessing.cpp +++ b/plugins/netlist_preprocessing/src/plugin_netlist_preprocessing.cpp @@ -13,7 +13,6 @@ #include "hal_core/netlist/netlist_utils.h" #include "hal_core/utilities/result.h" #include "hal_core/utilities/token_stream.h" - #include "rapidjson/document.h" #include @@ -83,7 +82,8 @@ namespace hal if (original_inits.size() != 1) { - return ERR("unable to simplify lut init string for gate " + g->get_name() + " with ID " + std::to_string(g->get_id()) + ": found " + std::to_string(original_inits.size()) + " init data strings but expected exactly 1."); + return ERR("unable to simplify lut init string for gate " + g->get_name() + " with ID " + std::to_string(g->get_id()) + ": found " + std::to_string(original_inits.size()) + + " init data strings but expected exactly 1."); } const auto original_init = original_inits.front(); @@ -1275,8 +1275,10 @@ namespace hal return OK(counter); } - namespace { - struct ComponentData { + namespace + { + struct ComponentData + { std::string name; std::string type; u64 x; @@ -1290,7 +1292,7 @@ namespace hal u32 line_number = 0; std::string line; - bool escaped = false; + bool escaped = false; std::vector> parsed_tokens; while (std::getline(ss, line)) @@ -1339,7 +1341,7 @@ namespace hal return TokenStream(parsed_tokens, {}, {}); } - + Result> parse_tokens(TokenStream& ts) { ts.consume_until("COMPONENTS"); @@ -1349,7 +1351,7 @@ namespace hal u32 component_count; if (const auto res = utils::wrapped_stoul(component_count_str); res.is_ok()) - { + { component_count = res.get(); } else @@ -1375,7 +1377,7 @@ namespace hal ts.consume("PLACED"); ts.consume("FIXED"); ts.consume("("); - + if (const auto res = utils::wrapped_stoull(ts.consume().string); res.is_ok()) { new_data_entry.x = res.get(); @@ -1403,7 +1405,7 @@ namespace hal return OK(component_data); } - } + } // namespace Result NetlistPreprocessingPlugin::parse_def_file(Netlist* nl, const std::filesystem::path& def_file) { @@ -1468,4 +1470,101 @@ namespace hal return OK({}); } + Result NetlistPreprocessingPlugin::unify_ff_outputs(Netlist* nl, const std::vector& ffs, GateType* inverter_type) + { + if (nl == nullptr) + { + return ERR("netlist is a nullptr"); + } + + if (inverter_type == nullptr) + { + const auto* gl = nl->get_gate_library(); + const auto inv_types = + gl->get_gate_types([](const GateType* gt) { return gt->has_property(GateTypeProperty::c_inverter) && gt->get_input_pins().size() == 1 && gt->get_output_pins().size() == 1; }); + if (inv_types.empty()) + { + return ERR("gate library '" + gl->get_name() + "' of netlist does not contain an inverter gate"); + } + inverter_type = inv_types.begin()->second; + } + else + { + if (inverter_type->get_gate_library() != nl->get_gate_library()) + { + return ERR("inverter gate type '" + inverter_type->get_name() + "' of gate library '" + inverter_type->get_gate_library()->get_name() + "' does not belong to gate library '" + + nl->get_gate_library()->get_name() + "' of provided netlist"); + } + + if (!inverter_type->has_property(GateTypeProperty::c_inverter)) + { + return ERR("gate type '" + inverter_type->get_name() + "' of gate library '" + inverter_type->get_gate_library()->get_name() + "' is not an inverter gate type"); + } + + if (inverter_type->get_input_pins().size() != 1 || inverter_type->get_output_pins().size() != 1) + { + return ERR("inverter gate type '" + inverter_type->get_name() + "' of gate library '" + inverter_type->get_gate_library()->get_name() + + "' has an invalid number of input pins or output pins"); + } + } + + auto inv_in_pin = inverter_type->get_input_pins().front(); + auto inv_out_pin = inverter_type->get_output_pins().front(); + + u32 ctr = 0; + + const std::vector& gates = ffs.empty() ? nl->get_gates() : ffs; + + for (auto* ff : gates) + { + auto* ff_type = ff->get_type(); + + if (!ff_type->has_property(GateTypeProperty::ff)) + { + continue; + } + + GatePin* state_pin = nullptr; + GatePin* neg_state_pin = nullptr; + + for (auto* o_pin : ff_type->get_output_pins()) + { + if (o_pin->get_type() == PinType::state) + { + state_pin = o_pin; + } + else if (o_pin->get_type() == PinType::neg_state) + { + neg_state_pin = o_pin; + } + } + + if (state_pin == nullptr || neg_state_pin == nullptr) + { + continue; + } + + auto* neg_state_ep = ff->get_fan_out_endpoint(neg_state_pin); + if (neg_state_ep == nullptr) + { + continue; + } + auto* neg_state_net = neg_state_ep->get_net(); + + auto state_net = ff->get_fan_out_net(state_pin); + if (state_net == nullptr) + { + state_net = nl->create_net(ff->get_name() + "__STATE_NET__"); + state_net->add_source(ff, state_pin); + } + + auto* inv = nl->create_gate(inverter_type, ff->get_name() + "__NEG_STATE_INVERT__"); + state_net->add_destination(inv, inv_in_pin); + neg_state_net->remove_source(neg_state_ep); + neg_state_net->add_source(inv, inv_out_pin); + ctr++; + } + + return OK(ctr); + } } // namespace hal diff --git a/src/netlist/decorators/netlist_traversal_decorator.cpp b/src/netlist/decorators/netlist_traversal_decorator.cpp index bd0a68c7e6c..b6222c51bf2 100644 --- a/src/netlist/decorators/netlist_traversal_decorator.cpp +++ b/src/netlist/decorators/netlist_traversal_decorator.cpp @@ -14,8 +14,7 @@ namespace hal const std::function& target_gate_filter, bool continue_on_match, const std::function& exit_endpoint_filter, - const std::function& entry_endpoint_filter, - std::unordered_map>* cache) const + const std::function& entry_endpoint_filter) const { if (net == nullptr) { @@ -63,16 +62,6 @@ namespace hal { res.insert(gate); - // update cache - if (cache) - { - (*cache)[current].insert(gate); - for (const auto* n : previous) - { - (*cache)[n].insert(gate); - } - } - if (!continue_on_match) { continue; @@ -81,32 +70,13 @@ namespace hal for (const auto* exit_ep : successors ? gate->get_fan_out_endpoints() : gate->get_fan_in_endpoints()) { + const Net* exit_net = exit_ep->get_net(); + if (exit_endpoint_filter != nullptr && !exit_endpoint_filter(exit_ep, previous.size() + 1)) { continue; } - const Net* exit_net = exit_ep->get_net(); - if (cache) - { - if (const auto it = cache->find(exit_net); it != cache->end()) - { - const auto& cached_gates = std::get<1>(*it); - - // append cached gates to result - res.insert(cached_gates.begin(), cached_gates.end()); - - // update cache - (*cache)[current].insert(cached_gates.begin(), cached_gates.end()); - for (const auto* n : previous) - { - (*cache)[n].insert(cached_gates.begin(), cached_gates.end()); - } - - continue; - } - } - if (visited.find(exit_net) == visited.end()) { stack.push_back(exit_net); @@ -133,8 +103,7 @@ namespace hal const std::function& target_gate_filter, bool continue_on_match, const std::function& exit_endpoint_filter, - const std::function& entry_endpoint_filter, - std::unordered_map>* cache) const + const std::function& entry_endpoint_filter) const { if (gate == nullptr) { @@ -155,20 +124,7 @@ namespace hal } const auto* exit_net = exit_ep->get_net(); - if (cache) - { - if (const auto it = cache->find(exit_net); it != cache->end()) - { - const auto& cached_gates = std::get<1>(*it); - - // append cached gates to result - res.insert(cached_gates.begin(), cached_gates.end()); - - continue; - } - } - - const auto next_res = this->get_next_matching_gates(exit_net, successors, target_gate_filter, continue_on_match, exit_endpoint_filter, entry_endpoint_filter, cache); + const auto next_res = this->get_next_matching_gates(exit_net, successors, target_gate_filter, continue_on_match, exit_endpoint_filter, entry_endpoint_filter); if (next_res.is_error()) { return ERR(next_res.get_error()); diff --git a/src/netlist/gate_library/enums/gate_type_property.cpp b/src/netlist/gate_library/enums/gate_type_property.cpp index 7428174f376..ff9eee9e8f3 100644 --- a/src/netlist/gate_library/enums/gate_type_property.cpp +++ b/src/netlist/gate_library/enums/gate_type_property.cpp @@ -11,6 +11,8 @@ namespace hal {GateTypeProperty::ff, "ff"}, {GateTypeProperty::latch, "latch"}, {GateTypeProperty::ram, "ram"}, + {GateTypeProperty::fifo, "fifo"}, + {GateTypeProperty::shift_register, "shift_register"}, {GateTypeProperty::io, "io"}, {GateTypeProperty::dsp, "dsp"}, {GateTypeProperty::pll, "pll"}, diff --git a/src/netlist/gate_library/enums/pin_type.cpp b/src/netlist/gate_library/enums/pin_type.cpp index 091c0f98236..637f865849e 100644 --- a/src/netlist/gate_library/enums/pin_type.cpp +++ b/src/netlist/gate_library/enums/pin_type.cpp @@ -18,5 +18,10 @@ namespace hal {PinType::io_pad, "io_pad"}, {PinType::select, "select"}, {PinType::carry, "carry"}, - {PinType::sum, "sum"}}; + {PinType::sum, "sum"}, + {PinType::status, "status"}, + {PinType::error, "error"}, + {PinType::error_detection, "error_detection"}, + {PinType::done, "done"}, + {PinType::control, "control"}}; } diff --git a/src/netlist/gate_library/gate_type.cpp b/src/netlist/gate_library/gate_type.cpp index 7c23a250fd2..79d1320a7a4 100644 --- a/src/netlist/gate_library/gate_type.cpp +++ b/src/netlist/gate_library/gate_type.cpp @@ -11,6 +11,11 @@ namespace hal m_next_pin_group_id = 1; } + ssize_t GateType::get_hash() const + { + return (uintptr_t)this; + } + std::vector GateType::get_components(const std::function& filter) const { if (m_component != nullptr) @@ -373,7 +378,7 @@ namespace hal if (!ascending && !pins.empty()) { // compensate for shifting the start index - start_index -= (pins.size()-1); + start_index -= (pins.size() - 1); } if (auto res = create_pin_group_internal(id, name, direction, type, ascending, start_index); res.is_error()) @@ -423,7 +428,8 @@ namespace hal } if (const auto it = m_pin_groups_map.find(pin_group->get_id()); it == m_pin_groups_map.end() || it->second != pin_group) { - log_warning("gate", "could not delete pin group '{}' with ID {} of gate type '{}' with ID {}: pin group does not belong to gate type", pin_group->get_name(), pin_group->get_id(), m_name, m_id); + log_warning( + "gate", "could not delete pin group '{}' with ID {} of gate type '{}' with ID {}: pin group does not belong to gate type", pin_group->get_name(), pin_group->get_id(), m_name, m_id); } // erase pin group @@ -451,7 +457,8 @@ namespace hal if (const auto it = m_pin_groups_map.find(pin_group->get_id()); it == m_pin_groups_map.end() || it->second != pin_group) { - log_warning("gate", "could not delete pin group '{}' with ID {} from gate type '{}' with ID {}: pin group does not belong to gate type", pin_group->get_name(), pin_group->get_id(), m_name, m_id); + log_warning( + "gate", "could not delete pin group '{}' with ID {} from gate type '{}' with ID {}: pin group does not belong to gate type", pin_group->get_name(), pin_group->get_id(), m_name, m_id); return false; } @@ -507,8 +514,8 @@ namespace hal if (!pg->remove_pin(pin)) { return ERR("could not assign pin '" + pin->get_name() + "' with ID " + std::to_string(pin->get_id()) + " to pin group '" + pin_group->get_name() + "' with ID " - + std::to_string(pin_group->get_id()) + " of gate type '" + m_name + "' with ID " + std::to_string(m_id) + ": unable to remove pin from pin group '" - + pg->get_name() + "' with ID " + std::to_string(pg->get_id())); + + std::to_string(pin_group->get_id()) + " of gate type '" + m_name + "' with ID " + std::to_string(m_id) + ": unable to remove pin from pin group '" + pg->get_name() + + "' with ID " + std::to_string(pg->get_id())); } if (delete_empty_groups && pg->empty()) @@ -516,8 +523,8 @@ namespace hal if (!delete_pin_group_internal(pg)) { return ERR("could not assign pin '" + pin->get_name() + "' with ID " + std::to_string(pin->get_id()) + " to pin group '" + pin_group->get_name() + "' with ID " - + std::to_string(pin_group->get_id()) + " of gate type '" + m_name + "' with ID " + std::to_string(m_id) + ": unable to delete pin group '" + pg->get_name() - + "' with ID " + std::to_string(pg->get_id())); + + std::to_string(pin_group->get_id()) + " of gate type '" + m_name + "' with ID " + std::to_string(m_id) + ": unable to delete pin group '" + pg->get_name() + + "' with ID " + std::to_string(pg->get_id())); } } } @@ -525,7 +532,7 @@ namespace hal if (!pin_group->assign_pin(pin)) { return ERR("could not assign pin '" + pin->get_name() + "' with ID " + std::to_string(pin->get_id()) + " to pin group '" + pin_group->get_name() + "' with ID " - + std::to_string(pin_group->get_id()) + " of gate type '" + m_name + "' with ID " + std::to_string(m_id)); + + std::to_string(pin_group->get_id()) + " of gate type '" + m_name + "' with ID " + std::to_string(m_id)); } return OK({}); diff --git a/src/netlist/net.cpp b/src/netlist/net.cpp index 2a28be2fcb5..c835516e027 100644 --- a/src/netlist/net.cpp +++ b/src/netlist/net.cpp @@ -243,9 +243,22 @@ namespace hal return std::find(m_sources_raw.begin(), m_sources_raw.end(), ep) != m_sources_raw.end(); } - u32 Net::get_num_of_sources() const + u32 Net::get_num_of_sources(const std::function& filter) const { - return (u32)m_sources_raw.size(); + if (!filter) + { + return (u32)m_sources_raw.size(); + } + + u32 num = 0; + for (auto dst : m_sources_raw) + { + if (filter(dst)) + { + num++; + } + } + return num; } std::vector Net::get_sources(const std::function& filter) const @@ -392,9 +405,22 @@ namespace hal return std::find(m_destinations_raw.begin(), m_destinations_raw.end(), ep) != m_destinations_raw.end(); } - u32 Net::get_num_of_destinations() const + u32 Net::get_num_of_destinations(const std::function& filter) const { - return (u32)m_destinations_raw.size(); + if (!filter) + { + return (u32)m_destinations_raw.size(); + } + + u32 num = 0; + for (auto dst : m_destinations_raw) + { + if (filter(dst)) + { + num++; + } + } + return num; } std::vector Net::get_destinations(const std::function& filter) const diff --git a/src/python_bindings/bindings/gate_type.cpp b/src/python_bindings/bindings/gate_type.cpp index 4875ab91245..4ff3a0572c9 100644 --- a/src/python_bindings/bindings/gate_type.cpp +++ b/src/python_bindings/bindings/gate_type.cpp @@ -15,6 +15,8 @@ namespace hal .value("ff", GateTypeProperty::ff, R"(Flip-flop gate type.)") .value("latch", GateTypeProperty::latch, R"(Latch gate type.)") .value("ram", GateTypeProperty::ram, R"(RAM gate type.)") + .value("fifo", GateTypeProperty::ram, R"(FIFO gate type.)") + .value("shift_register", GateTypeProperty::shift_register, R"(Shift register gate type.)") .value("io", GateTypeProperty::io, R"(IO gate type.)") .value("dsp", GateTypeProperty::dsp, R"(DSP gate type.)") .value("pll", GateTypeProperty::pll, R"(PLL gate type.)") @@ -64,6 +66,11 @@ namespace hal .value("select", PinType::select, R"(Select pin.)") .value("carry", PinType::carry, R"(Carry pad pin.)") .value("sum", PinType::sum, R"(Sum pin.)") + .value("status", PinType::status, R"(Status pin.)") + .value("error", PinType::error, R"(Error pin.)") + .value("error_detection", PinType::error_detection, R"(Error detection pin.)") + .value("done", PinType::done, R"(Pin pin.)") + .value("control", PinType::control, R"(Control pin.)") .export_values(); py::enum_(m, "AsyncSetResetBehavior", R"( @@ -74,13 +81,20 @@ namespace hal .value("N", AsyncSetResetBehavior::N, R"(Do not change the internal state.)") .value("T", AsyncSetResetBehavior::T, R"(Toggle, i.e., invert the internal state.)") .value("X", AsyncSetResetBehavior::X, R"(Set the internal state to 'X'.)") - .value("undef", AsyncSetResetBehavior::undef, R"(Invalid bahavior, used by default.)") + .value("undef", AsyncSetResetBehavior::undef, R"(Invalid behavior, used by default.)") .export_values(); py::class_> py_gate_type(m, "GateType", R"( A gate type contains information about its internals such as input and output pins as well as its Boolean functions. )"); + py_gate_type.def("__hash__", &GateType::get_hash, R"( + Python requires hash for set and dict container. + + :returns: The hash. + :rtype: Py_hash_t + )"); + py_gate_type.def_property_readonly("components", &GateType::get_components, R"( All components of the gate type as a list. @@ -184,8 +198,7 @@ namespace hal :rtype: hal_py.GateLibrary )"); - py_gate_type.def( - "__str__", [](const GateType& gt) { return gt.to_string(); }, R"( + py_gate_type.def("__str__", [](const GateType& gt) { return gt.to_string(); }, R"( Get a string describing the given gate type object. :returns: A string describing the gate type. diff --git a/src/python_bindings/bindings/net.cpp b/src/python_bindings/bindings/net.cpp index fac346d9008..f67f6e50a6d 100644 --- a/src/python_bindings/bindings/net.cpp +++ b/src/python_bindings/bindings/net.cpp @@ -40,15 +40,13 @@ namespace hal :rtype: int )"); - py_net.def_property_readonly( - "netlist", [](Net* net) { return RawPtrWrapper(net->get_netlist()); }, R"( + py_net.def_property_readonly("netlist", [](Net* net) { return RawPtrWrapper(net->get_netlist()); }, R"( The netlist this net is associated with. :type: hal_py.Netlist )"); - py_net.def( - "get_netlist", [](Net* net) { return RawPtrWrapper(net->get_netlist()); }, R"( + py_net.def("get_netlist", [](Net* net) { return RawPtrWrapper(net->get_netlist()); }, R"( Get the netlist this net is associated with. :returns: The netlist. @@ -166,21 +164,22 @@ namespace hal :rtype: bool )"); - py_net.def_property_readonly("num_of_sources", &Net::get_num_of_sources, R"( + py_net.def_property_readonly("num_of_sources", [](Net* n) { return n->get_num_of_sources(); }, R"( The number of sources of the net. :type: int )"); - py_net.def("get_num_of_sources", &Net::get_num_of_sources, R"( + py_net.def("get_num_of_sources", &Net::get_num_of_sources, py::arg("filter") = nullptr, R"( Get the number of sources of the net. + The optional filter is evaluated on every candidate such that the result only contains those matching the specified condition. + :param lambda filter: An optional filter. :returns: The number of sources. :rtype: int )"); - py_net.def_property_readonly( - "sources", [](Net* n) { return n->get_sources(); }, R"( + py_net.def_property_readonly("sources", [](Net* n) { return n->get_sources(); }, R"( A list of sources of the net. :type: list[hal_py.Endpoint] @@ -279,21 +278,22 @@ namespace hal :rtype: bool )"); - py_net.def_property_readonly("num_of_destinations", &Net::get_num_of_destinations, R"( + py_net.def_property_readonly("num_of_destinations", [](Net* n) { return n->get_num_of_destinations(); }, R"( The number of destinations of the net. :type: int )"); - py_net.def("get_num_of_destinations", &Net::get_num_of_destinations, R"( + py_net.def("get_num_of_destinations", &Net::get_num_of_destinations, py::arg("filter") = nullptr, R"( Get the number of destinations of the net. + The optional filter is evaluated on every candidate such that the result only contains those matching the specified condition. + :param filter: An optional filter. :returns: The number of destinations. :rtype: int )"); - py_net.def_property_readonly( - "destinations", [](Net* n) { return n->get_destinations(); }, R"( + py_net.def_property_readonly("destinations", [](Net* n) { return n->get_destinations(); }, R"( A list of destinations of the net. :type: list[hal_py.Endpoint] diff --git a/tests/netlist/decorators.cpp b/tests/netlist/decorators.cpp index 3de9aa4307f..068788cec66 100644 --- a/tests/netlist/decorators.cpp +++ b/tests/netlist/decorators.cpp @@ -672,15 +672,6 @@ namespace hal { EXPECT_TRUE(res.is_ok()); EXPECT_EQ(res.get(), std::set({dff4, dff5, dff6})); } - { - std::unordered_map> cache; - const auto res1 = trav_dec.get_next_matching_gates(dff2, true, [](const Gate* g) { return g->get_type()->has_property(GateTypeProperty::ff); }, false, nullptr, nullptr, &cache); - EXPECT_TRUE(res1.is_ok()); - EXPECT_EQ(res1.get(), std::set({dff5, dff6, dff7, dff3})); - const auto res2 = trav_dec.get_next_matching_gates(dff3, true, [](const Gate* g) { return g->get_type()->has_property(GateTypeProperty::ff); }, false, nullptr, nullptr, &cache); - EXPECT_TRUE(res2.is_ok()); - EXPECT_EQ(res2.get(), std::set({dff6, dff7, dff3})); - } // predecessors { @@ -693,15 +684,6 @@ namespace hal { EXPECT_TRUE(res.is_ok()); EXPECT_EQ(res.get(), std::set({dff0, dff1, dff2})); } - { - std::unordered_map> cache; - const auto res1 = trav_dec.get_next_matching_gates(dff6, false, [](const Gate* g) { return g->get_type()->has_property(GateTypeProperty::ff); }, false, nullptr, nullptr, &cache); - EXPECT_TRUE(res1.is_ok()); - EXPECT_EQ(res1.get(), std::set({dff1, dff2, dff3, sff0, sff1})); - const auto res2 = trav_dec.get_next_matching_gates(dff7, false, [](const Gate* g) { return g->get_type()->has_property(GateTypeProperty::ff); }, false, nullptr, nullptr, &cache); - EXPECT_TRUE(res2.is_ok()); - EXPECT_EQ(res2.get(), std::set({dff2, dff3, sff0, sff1})); - } } { // test NetlistModificationDecorator::get_next_matching_gates_until