| /********************************************/ |
| /* */ |
| /* 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 */ |