| /********************************************/ | |
| /* */ | |
| /* Supergate cell library for Bench marking */ | |
| /* */ | |
| /* Symbiotic EDA GmbH / Moseley Instruments */ | |
| /* Niels A. Moseley */ | |
| /* */ | |
| /* Process: none */ | |
| /* */ | |
| /* Date : 02-11-2018 */ | |
| /* Version: 1.0 */ | |
| /* */ | |
| /********************************************/ | |
| library(supergate) { | |
| technology (cmos); | |
| revision : 1.0; | |
| time_unit : "1ps"; | |
| pulling_resistance_unit : "1kohm"; | |
| voltage_unit : "1V"; | |
| current_unit : "1uA"; | |
| capacitive_load_unit(1,ff); | |
| default_inout_pin_cap : 7.0; | |
| default_input_pin_cap : 7.0; | |
| default_output_pin_cap : 0.0; | |
| default_fanout_load : 1.0; | |
| default_wire_load_capacitance : 0.1; | |
| default_wire_load_resistance : 1.0e-3; | |
| default_wire_load_area : 0.0; | |
| nom_process : 1.0; | |
| nom_temperature : 25.0; | |
| nom_voltage : 1.2; | |
| delay_model : generic_cmos; | |
| /* Inverter */ | |
| cell (inv) { | |
| area : 1; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(Y) { | |
| direction : output; | |
| function : "A'"; | |
| } | |
| } | |
| /* tri-state inverter */ | |
| cell (tri_inv) { | |
| area : 4; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(S) { | |
| direction : input; | |
| } | |
| pin(Z) { | |
| direction : output; | |
| function : "A'"; | |
| three_State : "S'"; | |
| } | |
| } | |
| cell (buffer) { | |
| area : 5; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(Y) { | |
| direction : output; | |
| function : "A"; | |
| } | |
| } | |
| /* 2-input NAND gate */ | |
| cell (nand2) { | |
| area : 3; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(B) { | |
| direction : input; | |
| } | |
| pin(Y) { | |
| direction: output; | |
| function : "(A * B)'"; | |
| } | |
| } | |
| /* 2-input NOR gate */ | |
| cell (nor2) { | |
| area : 3; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(B) { | |
| direction : input; | |
| } | |
| pin(Y) { | |
| direction: output; | |
| function : "(A + B)'"; | |
| } | |
| } | |
| /* 2-input XOR */ | |
| cell (xor2) { | |
| area : 6; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(B) { | |
| direction : input; | |
| } | |
| pin(Y) { | |
| direction: output; | |
| function : "(A *B') + (A' * B)"; | |
| } | |
| } | |
| /* 2-input inverting MUX */ | |
| cell (imux2) { | |
| area : 5; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(B) { | |
| direction : input; | |
| } | |
| pin(S) { | |
| direction : input; | |
| } | |
| pin(Y) { | |
| direction: output; | |
| function : "( (A * S) + (B * S') )'"; | |
| } | |
| } | |
| /* D-type flip-flop with asynchronous reset and preset */ | |
| cell (dff) { | |
| area : 6; | |
| ff("IQ", "IQN") { | |
| next_state : "D"; | |
| clocked_on : "CLK"; | |
| clear : "RESET"; | |
| preset : "PRESET"; | |
| clear_preset_var1 : L; | |
| clear_preset_var2 : L; | |
| } | |
| pin(D) { | |
| direction : input; | |
| } | |
| pin(CLK) { | |
| direction : input; | |
| } | |
| pin(RESET) { | |
| direction : input; | |
| } | |
| pin(PRESET) { | |
| direction : input; | |
| } | |
| pin(Q) { | |
| direction: output; | |
| function : "IQ"; | |
| timing() { | |
| timing_type : rising_edge; | |
| intrinsic_rise : 65; | |
| intrinsic_fall : 65; | |
| rise_resistance : 0; | |
| fall_resistance : 0; | |
| related_pin : "CLK"; | |
| } | |
| timing () { | |
| timing_type : clear; | |
| timing_sense : positive_unate; | |
| intrinsic_fall : 75; | |
| related_pin : "RESET"; | |
| } | |
| timing () { | |
| timing_type : preset; | |
| timing_sense : negative_unate; | |
| intrinsic_rise : 75; | |
| related_pin : "PRESET"; | |
| } | |
| } | |
| pin(QN) { | |
| direction: output; | |
| function : "IQN"; | |
| timing() { | |
| timing_type : rising_edge; | |
| intrinsic_rise : 65; | |
| intrinsic_fall : 65; | |
| rise_resistance : 0; | |
| fall_resistance : 0; | |
| related_pin : "CLK"; | |
| } | |
| timing () { | |
| timing_type : preset; | |
| timing_sense : negative_unate; | |
| intrinsic_rise : 75; | |
| related_pin : "RESET"; | |
| } | |
| timing () { | |
| timing_type : clear; | |
| timing_sense : positive_unate; | |
| intrinsic_fall : 75; | |
| related_pin : "PRESET"; | |
| } | |
| } | |
| } | |
| /* Latch */ | |
| cell(latch) { | |
| area : 5; | |
| latch ("IQ","IQN") { | |
| enable : "G"; | |
| data_in : "D"; | |
| } | |
| pin(D) { | |
| direction : input; | |
| } | |
| pin(G) { | |
| direction : input; | |
| } | |
| pin(Q) { | |
| direction : output; | |
| function : "IQ"; | |
| internal_node : "Q"; | |
| timing() { | |
| timing_type : rising_edge; | |
| intrinsic_rise : 65; | |
| intrinsic_fall : 65; | |
| rise_resistance : 0; | |
| fall_resistance : 0; | |
| related_pin : "G"; | |
| } | |
| timing() { | |
| timing_sense : positive_unate; | |
| intrinsic_rise : 65; | |
| intrinsic_fall : 65; | |
| rise_resistance : 0; | |
| fall_resistance : 0; | |
| related_pin : "D"; | |
| } | |
| } | |
| pin(QN) { | |
| direction : output; | |
| function : "IQN"; | |
| internal_node : "QN"; | |
| timing() { | |
| timing_type : rising_edge; | |
| intrinsic_rise : 65; | |
| intrinsic_fall : 65; | |
| rise_resistance : 0; | |
| fall_resistance : 0; | |
| related_pin : "G"; | |
| } | |
| timing() { | |
| timing_sense : negative_unate; | |
| intrinsic_rise : 65; | |
| intrinsic_fall : 65; | |
| rise_resistance : 0; | |
| fall_resistance : 0; | |
| related_pin : "D"; | |
| } | |
| } | |
| } | |
| /* 3 input AND-OR-INVERT gate */ | |
| cell (aoi211) { | |
| area : 3; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(B) { | |
| direction : input; | |
| } | |
| pin(C) { | |
| direction : input; | |
| } | |
| pin(Y) { | |
| direction: output; | |
| function : "((A * B) + C)'"; | |
| } | |
| } | |
| /* 3 input OR-AND-INVERT gate */ | |
| cell (oai211) { | |
| area : 3; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(B) { | |
| direction : input; | |
| } | |
| pin(C) { | |
| direction : input; | |
| } | |
| pin(Y) { | |
| direction: output; | |
| function : "((A + B) * C)'"; | |
| } | |
| } | |
| /* half adder */ | |
| cell (halfadder) { | |
| area : 5; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(B) { | |
| direction : input; | |
| } | |
| pin(C) { | |
| direction : output; | |
| function : "(A * B)"; | |
| } | |
| pin(Y) { | |
| direction: output; | |
| function : "(A *B') + (A' * B)"; | |
| } | |
| } | |
| /* full adder */ | |
| cell (fulladder) { | |
| area : 8; | |
| pin(A) { | |
| direction : input; | |
| } | |
| pin(B) { | |
| direction : input; | |
| } | |
| pin(CI) { | |
| direction : input; | |
| } | |
| pin(CO) { | |
| direction : output; | |
| function : "(((A * B)+(B * CI))+(CI * A))"; | |
| } | |
| pin(Y) { | |
| direction: output; | |
| function : "((A^B)^CI)"; | |
| } | |
| } | |
| } /* end */ |