From bbe5aa446b413c6298a4b0b13f6fabcd6c984cb6 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sat, 14 Sep 2013 11:23:45 +0200 Subject: Added spice backend --- techlibs/cmos/cmos_cells.lib | 32 ++++++++++++++++++++++++++++++++ techlibs/cmos/cmos_cells.v | 23 +++++++++++++++++++++++ techlibs/cmos/counter.v | 12 ++++++++++++ techlibs/cmos/counter.ys | 11 +++++++++++ 4 files changed, 78 insertions(+) create mode 100644 techlibs/cmos/cmos_cells.lib create mode 100644 techlibs/cmos/cmos_cells.v create mode 100644 techlibs/cmos/counter.v create mode 100644 techlibs/cmos/counter.ys (limited to 'techlibs/cmos') diff --git a/techlibs/cmos/cmos_cells.lib b/techlibs/cmos/cmos_cells.lib new file mode 100644 index 00000000..1d7b8279 --- /dev/null +++ b/techlibs/cmos/cmos_cells.lib @@ -0,0 +1,32 @@ +library(demo) { + cell(NOT) { + area: 3; + pin(A) { direction: input; } + pin(Y) { direction: output; + function: "A'"; } + } + cell(NAND) { + area: 4; + pin(A) { direction: input; } + pin(B) { direction: input; } + pin(Y) { direction: output; + function: "(A*B)'"; } + } + cell(NOR) { + area: 4; + pin(A) { direction: input; } + pin(B) { direction: input; } + pin(Y) { direction: output; + function: "(A+B)'"; } + } + cell(DFF) { + area: 18; + ff(IQ, IQN) { clocked_on: C; + next_state: D; } + pin(C) { direction: input; + clock: true; } + pin(D) { direction: input; } + pin(Q) { direction: output; + function: "IQ"; } + } +} diff --git a/techlibs/cmos/cmos_cells.v b/techlibs/cmos/cmos_cells.v new file mode 100644 index 00000000..802f5871 --- /dev/null +++ b/techlibs/cmos/cmos_cells.v @@ -0,0 +1,23 @@ + +module NOT(A, Y); +input A; +output Y = ~A; +endmodule + +module NAND(A, B, Y); +input A, B; +output Y = ~(A & B); +endmodule + +module NOR(A, B, Y); +input A, B; +output Y = ~(A | B); +endmodule + +module DFF(C, D, Q); +input C, D; +output reg Q; +always @(posedge C) + Q <= D; +endmodule + diff --git a/techlibs/cmos/counter.v b/techlibs/cmos/counter.v new file mode 100644 index 00000000..72208bd8 --- /dev/null +++ b/techlibs/cmos/counter.v @@ -0,0 +1,12 @@ +module counter (clk, rst, en, count); + + input clk, rst, en; + output reg [3:0] count; + + always @(posedge clk) + if (rst) + count <= 4'd0; + else if (en) + count <= count + 4'd1; + +endmodule diff --git a/techlibs/cmos/counter.ys b/techlibs/cmos/counter.ys new file mode 100644 index 00000000..81430f68 --- /dev/null +++ b/techlibs/cmos/counter.ys @@ -0,0 +1,11 @@ + +read_verilog counter.v +read_verilog -lib cmos_cells.v + +proc;; memory;; techmap;; +dfflibmap -liberty cmos_cells.lib +abc -liberty cmos_cells.lib;; + +write_verilog synth.v +write_spice synth.sp + -- cgit v1.2.3