mirror of
https://github.com/YosysHQ/yosys
synced 2025-08-10 13:10:51 +00:00
Updated the liberty parser to accept [A:B] ranges (AST has not been updated). Liberty parser now also accepts key : value pair lines that do not end in ';'.
This commit is contained in:
parent
ccfa2fe01c
commit
3b3b77291a
8 changed files with 631 additions and 7 deletions
360
tests/liberty/normal.lib
Normal file
360
tests/liberty/normal.lib
Normal file
|
@ -0,0 +1,360 @@
|
|||
/********************************************/
|
||||
/* */
|
||||
/* 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 */
|
Loading…
Add table
Add a link
Reference in a new issue