diff --git a/tests/liberty_verilog/.gitignore b/tests/liberty_verilog/.gitignore new file mode 100644 index 000000000..5ea8de351 --- /dev/null +++ b/tests/liberty_verilog/.gitignore @@ -0,0 +1,3 @@ +*.log +test.ys +*.lib.v diff --git a/tests/liberty_verilog/bundledef.lib b/tests/liberty_verilog/bundledef.lib new file mode 100644 index 000000000..ee891b60f --- /dev/null +++ b/tests/liberty_verilog/bundledef.lib @@ -0,0 +1,62 @@ +/* Liberty 2007: example 2-4 */ +/* Direction of pins in bundle groups */ +library(bundle_example) { + 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; + + cell (inv) { + area : 16; + cell_leakage_power : 8; + bundle (Z) { + members (Z0, Z1, Z2, Z3); + direction : output; + function : "D"; + pin (Z0) { + direction : output; + timing () { + intrinsic_rise : 0.4; + intrinsic_fall : 0.4; + related_pin : "D0"; + } + } + pin (Z1) { + direction : output; + timing () { + intrinsic_rise : 0.4; + intrinsic_fall : 0.4; + related_pin : "D1"; + } + } + } + bundle (D) { + members (D0, D1, D2, D3); + direction : input; + capacitance : 1; + pin (D0) { + direction : input; + } + } + } +} diff --git a/tests/liberty_verilog/bundledef.lib.v.ok b/tests/liberty_verilog/bundledef.lib.v.ok new file mode 100644 index 000000000..476f3708b --- /dev/null +++ b/tests/liberty_verilog/bundledef.lib.v.ok @@ -0,0 +1,21 @@ +(* LeakagePower = "8" *) +(* area = "16" *) +(* blackbox = 1 *) +module inv(Z0, Z1, Z2, Z3, D0, D1, D2, D3); + input D0; + wire D0; + input D1; + wire D1; + input D2; + wire D2; + input D3; + wire D3; + output Z0; + wire Z0; + output Z1; + wire Z1; + output Z2; + wire Z2; + output Z3; + wire Z3; +endmodule diff --git a/tests/liberty_verilog/busdef.lib b/tests/liberty_verilog/busdef.lib new file mode 100644 index 000000000..e9f47b0c2 --- /dev/null +++ b/tests/liberty_verilog/busdef.lib @@ -0,0 +1,81 @@ +/********************************************/ +/* */ +/* Supergate cell library for Bench marking */ +/* */ +/* Symbiotic EDA GmbH / Moseley Instruments */ +/* Niels A. Moseley */ +/* */ +/* Process: none */ +/* */ +/* Date : 02-11-2018 */ +/* Version: 1.0 */ +/* TODO: FIX THE RESULTS */ +/********************************************/ + +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; + + type( IO_bus_3_to_0 ) { + base_type : array ; + data_type : bit ; + bit_width : 4; + bit_from : 3 ; + bit_to : 0 ; + downto : true ; + } + + cell (SRAM) { + area : 1 ; + memory() { + type : ram; + address_width : 4; + word_width : 4; + } + pin(CE1) { + direction : input; + capacitance : 0.021; + max_transition : 1.024; + switch_pin : true; + } + bus(I1) { + bus_type : IO_bus_3_to_0 ; + direction : input; + pin (I1[3:0]) { + timing() { + related_pin : "CE1" ; + timing_type : setup_rising ; + rise_constraint (scalar) { + values("0.0507786"); + } + fall_constraint (scalar) { + values("0.0507786"); + } + } + } + } + } + +} /* end */ diff --git a/tests/liberty_verilog/busdef.lib.v.ok b/tests/liberty_verilog/busdef.lib.v.ok new file mode 100644 index 000000000..5caba5f8d --- /dev/null +++ b/tests/liberty_verilog/busdef.lib.v.ok @@ -0,0 +1,8 @@ +(* area = "1" *) +(* blackbox = 1 *) +module SRAM(CE1, I1); + input CE1; + wire CE1; + input [3:0] I1; + wire [3:0] I1; +endmodule diff --git a/tests/liberty_verilog/busdef2.lib b/tests/liberty_verilog/busdef2.lib new file mode 100644 index 000000000..6ccbbba14 --- /dev/null +++ b/tests/liberty_verilog/busdef2.lib @@ -0,0 +1,45 @@ +/* Tests two things: */ +/* (1) Bus without any individual pin definition */ +/* (2) Having a custom field with define, which can allow square brackets */ +library (liberty_define) { + delay_model : "table_lookup" ; + simulation : false ; + capacitive_load_unit (1,pF) ; + leakage_power_unit : "1pW" ; + current_unit : "1A" ; + pulling_resistance_unit : "1kohm" ; + time_unit : "1ns" ; + voltage_unit : "1v" ; + library_features : "report_delay_calculation" ; + input_threshold_pct_rise : 50 ; + input_threshold_pct_fall : 50 ; + output_threshold_pct_rise : 50 ; + output_threshold_pct_fall : 50 ; + slew_lower_threshold_pct_rise : 30 ; + slew_lower_threshold_pct_fall : 30 ; + slew_upper_threshold_pct_rise : 70 ; + slew_upper_threshold_pct_fall : 70 ; + slew_derate_from_library : 1.0 ; + nom_process : 1.0 ; + nom_temperature : 85.0 ; + nom_voltage : 0.75 ; + type (bus8) { + base_type : "array"; + data_type : "bit"; + bit_width : 8; + bit_from : 7; + bit_to : 0; + } + define (original_pin, pin, string) ; + cell (not_cell) { + bus (A) { + bus_type : "bus8" ; + direction : "input" ; + } + pin (Y) { + function : !A[0] ; + direction : "output" ; + original_pin : A[0] ; + } + } +} \ No newline at end of file diff --git a/tests/liberty_verilog/busdef2.lib.v.ok b/tests/liberty_verilog/busdef2.lib.v.ok new file mode 100644 index 000000000..69a7610a8 --- /dev/null +++ b/tests/liberty_verilog/busdef2.lib.v.ok @@ -0,0 +1,8 @@ +(* blackbox = 1 *) +(* leakage_power_unit = "1pW" *) +module not_cell(A, Y); + input [7:0] A; + wire [7:0] A; + output Y; + wire Y; +endmodule diff --git a/tests/liberty_verilog/run-test.sh b/tests/liberty_verilog/run-test.sh new file mode 100755 index 000000000..a4940f3e8 --- /dev/null +++ b/tests/liberty_verilog/run-test.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +for x in *.lib; do + echo "Testing on $x.." + echo "read_liberty -lib $x" > test.ys + echo "write_verilog -blackboxes $x.v.tmp" >> test.ys + ../../yosys -ql ${x%.lib}.log -s test.ys + sed '1,2d' $x.v.tmp > $x.v + diff $x.v $x.v.ok +done