mirror of
https://github.com/spicyjpeg/573in1.git
synced 2025-03-02 15:44:35 +01:00
567 lines
14 KiB
Plaintext
567 lines
14 KiB
Plaintext
/*
|
|
* 573in1 - Copyright (C) 2022-2024 spicyjpeg
|
|
*
|
|
* 573in1 is free software: you can redistribute it and/or modify it under the
|
|
* terms of the GNU General Public License as published by the Free Software
|
|
* Foundation, either version 3 of the License, or (at your option) any later
|
|
* version.
|
|
*
|
|
* 573in1 is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* 573in1. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
library(spartanxl) {
|
|
/* Buffers */
|
|
|
|
cell(BUF) {
|
|
area: 1;
|
|
pin(I) { direction: input; }
|
|
pin(O) { direction: output; function: "I"; }
|
|
}
|
|
cell(INV) {
|
|
area: 1;
|
|
pin(I) { direction: input; }
|
|
pin(O) { direction: output; function: "!I"; }
|
|
}
|
|
|
|
/* AND gates */
|
|
|
|
cell(AND2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "I0*I1"; }
|
|
}
|
|
cell(AND2B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*I1"; }
|
|
}
|
|
|
|
cell(AND3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "I0*I1*I2"; }
|
|
}
|
|
cell(AND3B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*I1*I2"; }
|
|
}
|
|
cell(AND3B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*!I1*I2"; }
|
|
}
|
|
|
|
cell(AND4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "I0*I1*I2*I3"; }
|
|
}
|
|
cell(AND4B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*I1*I2*I3"; }
|
|
}
|
|
cell(AND4B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*!I1*I2*I3"; }
|
|
}
|
|
cell(AND4B3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*!I1*!I2*I3"; }
|
|
}
|
|
|
|
cell(AND5) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "I0*I1*I2*I3*I4"; }
|
|
}
|
|
cell(AND5B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*I1*I2*I3*I4"; }
|
|
}
|
|
cell(AND5B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*!I1*I2*I3*I4"; }
|
|
}
|
|
cell(AND5B3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*!I1*!I2*I3*I4"; }
|
|
}
|
|
cell(AND5B4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0*!I1*!I2*!I3*I4"; }
|
|
}
|
|
|
|
/* NAND gates */
|
|
|
|
cell(NAND2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0*I1)"; }
|
|
}
|
|
cell(NAND2B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*I1)"; }
|
|
}
|
|
|
|
cell(NAND3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0*I1*I2)"; }
|
|
}
|
|
cell(NAND3B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*I1*I2)"; }
|
|
}
|
|
cell(NAND3B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*!I1*I2)"; }
|
|
}
|
|
|
|
cell(NAND4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0*I1*I2*I3)"; }
|
|
}
|
|
cell(NAND4B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*I1*I2*I3)"; }
|
|
}
|
|
cell(NAND4B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*!I1*I2*I3)"; }
|
|
}
|
|
cell(NAND4B3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*!I1*!I2*I3)"; }
|
|
}
|
|
|
|
cell(NAND5) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0*I1*I2*I3*I4)"; }
|
|
}
|
|
cell(NAND5B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*I1*I2*I3*I4)"; }
|
|
}
|
|
cell(NAND5B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*!I1*I2*I3*I4)"; }
|
|
}
|
|
cell(NAND5B3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*!I1*!I2*I3*I4)"; }
|
|
}
|
|
cell(NAND5B4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0*!I1*!I2*!I3*I4)"; }
|
|
}
|
|
|
|
/* OR gates */
|
|
|
|
cell(OR2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "I0+I1"; }
|
|
}
|
|
cell(OR2B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+I1"; }
|
|
}
|
|
|
|
cell(OR3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "I0+I1+I2"; }
|
|
}
|
|
cell(OR3B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+I1+I2"; }
|
|
}
|
|
cell(OR3B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+!I1+I2"; }
|
|
}
|
|
|
|
cell(OR4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "I0+I1+I2+I3"; }
|
|
}
|
|
cell(OR4B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+I1+I2+I3"; }
|
|
}
|
|
cell(OR4B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+!I1+I2+I3"; }
|
|
}
|
|
cell(OR4B3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+!I1+!I2+I3"; }
|
|
}
|
|
|
|
cell(OR5) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "I0+I1+I2+I3+I4"; }
|
|
}
|
|
cell(OR5B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+I1+I2+I3+I4"; }
|
|
}
|
|
cell(OR5B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+!I1+I2+I3+I4"; }
|
|
}
|
|
cell(OR5B3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+!I1+!I2+I3+I4"; }
|
|
}
|
|
cell(OR5B4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!I0+!I1+!I2+!I3+I4"; }
|
|
}
|
|
|
|
/* NOR gates */
|
|
|
|
cell(NOR2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0+I1)"; }
|
|
}
|
|
cell(NOR2B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+I1)"; }
|
|
}
|
|
|
|
cell(NOR3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0+I1+I2)"; }
|
|
}
|
|
cell(NOR3B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+I1+I2)"; }
|
|
}
|
|
cell(NOR3B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+!I1+I2)"; }
|
|
}
|
|
|
|
cell(NOR4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0+I1+I2+I3)"; }
|
|
}
|
|
cell(NOR4B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+I1+I2+I3)"; }
|
|
}
|
|
cell(NOR4B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+!I1+I2+I3)"; }
|
|
}
|
|
cell(NOR4B3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+!I1+!I2+I3)"; }
|
|
}
|
|
|
|
cell(NOR5) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0+I1+I2+I3+I4)"; }
|
|
}
|
|
cell(NOR5B1) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+I1+I2+I3+I4)"; }
|
|
}
|
|
cell(NOR5B2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+!I1+I2+I3+I4)"; }
|
|
}
|
|
cell(NOR5B3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+!I1+!I2+I3+I4)"; }
|
|
}
|
|
cell(NOR5B4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(!I0+!I1+!I2+!I3+I4)"; }
|
|
}
|
|
|
|
/* XOR gates */
|
|
|
|
cell(XOR2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "I0^I1"; }
|
|
}
|
|
|
|
cell(XOR3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "I0^I1^I2"; }
|
|
}
|
|
|
|
cell(XOR4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "I0^I1^I2^I3"; }
|
|
}
|
|
|
|
cell(XOR5) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "I0^I1^I2^I3^I4"; }
|
|
}
|
|
|
|
/* XNOR gates */
|
|
|
|
cell(XNOR2) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0^I1)"; }
|
|
}
|
|
|
|
cell(XNOR3) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0^I1^I2)"; }
|
|
}
|
|
|
|
cell(XNOR4) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0^I1^I2^I3)"; }
|
|
}
|
|
|
|
cell(XNOR5) {
|
|
area: 1;
|
|
pin(I0) { direction: input; }
|
|
pin(I1) { direction: input; }
|
|
pin(I2) { direction: input; }
|
|
pin(I3) { direction: input; }
|
|
pin(I4) { direction: input; }
|
|
pin(O) { direction: output; function: "!(I0^I1^I2^I3^I4)"; }
|
|
}
|
|
}
|