blob: c3a6e7e8a84dfa5f0033be28aa50b42f8324b9f0 [file] [log] [blame]
`timescale 1 ns / 100 ps
`suppress_faults
`enable_portfaults
module GND(Y);
output Y;
supply0 Y;
specify
specparam LibName = "act2";
specparam OutputLoad$Y = 0;
endspecify
endmodule
`disable_portfaults
`nosuppress_faults
`suppress_faults
`enable_portfaults
`timescale 1 ns / 100 ps
module OUTBUF(D, PAD);
input D;
output PAD;
buf BF1 (PAD, D);
specify
specparam LibName = "act2";
specparam InputLoad$D = 0;
specparam OutputLoad$PAD = 0;
specparam MacroType = "io";
(D => PAD) = (1.0:1.0:1.0, 1.0:1.0:1.0);
endspecify
endmodule
`endcelldefine
`disable_portfaults
`nosuppress_faults
`suppress_faults
`enable_portfaults
`timescale 1 ns / 100 ps
module VCC(Y);
output Y;
supply1 Y;
specify
specparam LibName = "act2";
specparam OutputLoad$Y = 0;
endspecify
endmodule
`endcelldefine
`disable_portfaults
`nosuppress_faults
`suppress_faults
`enable_portfaults
primitive U_MUX_2 (Q, A, B, SL);
output Q;
input A, B, SL;
// FUNCTION : TWO TO ONE MULTIPLEXER
table
// A B SL : Q
0 0 ? : 0 ;
1 1 ? : 1 ;
0 ? 0 : 0 ;
1 ? 0 : 1 ;
? 0 1 : 0 ;
? 1 1 : 1 ;
endtable
endprimitive
`disable_portfaults
`nosuppress_faults
`suppress_faults
`enable_portfaults
`timescale 1 ns / 100 ps
module xCM8(D0, D1, D2, D3, S00, S01, S10, S11, Y);
input D0, D1, D2, D3, S00, S01, S10, S11;
output Y;
and and1 (Y1, S00, S01);
or or1 (Y2, S10, S11);
U_MUX_2 mux1 (T1, D0, D1, Y1);
U_MUX_2 mux2 (T2, D2, D3, Y1);
U_MUX_2 mux3 (Y, T1, T2, Y2);
specify
specparam LibName = "act2";
specparam InputLoad$D0 = 1;
specparam InputLoad$D1 = 1;
specparam InputLoad$D2 = 1;
specparam InputLoad$D3 = 2;
specparam InputLoad$S00 = 1;
specparam InputLoad$S01 = 1;
specparam InputLoad$S10 = 1;
specparam InputLoad$S11 = 2;
specparam OutputLoad$Y = 0;
specparam MacroType = "slm";
( D0 => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( D1 => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( D2 => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( D3 => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( S00 => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( S01 => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( S10 => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( S11 => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
endspecify
endmodule
`endcelldefine
`disable_portfaults
`nosuppress_faults
`suppress_faults
`enable_portfaults
`timescale 1 ns / 100 ps
module INBUF(PAD, Y);
input PAD;
output Y;
buf BF1 (Y, PAD);
specify
specparam LibName = "act2";
specparam InputLoad$PAD = 0;
specparam OutputLoad$Y = 0;
specparam MacroType = "io";
(PAD => Y) = (1.0:1.0:1.0, 1.0:1.0:1.0);
endspecify
endmodule
`endcelldefine
`disable_portfaults
`nosuppress_faults
`suppress_faults
`enable_portfaults
`celldefine
`delay_mode_path
`timescale 1 ns / 100 ps
module DFM7A ( D0, D1, D2, D3, S0, S10, S11, CLK, CLR, Q);
input D0, D1, D2, D3, S0, S10, S11, CLR, CLK;
output Q;
reg NOTIFY_REG;
or OR1_inst ( S1, S10, S11);
U_MUX_4 inst2 ( D_EFF, D0, D1, D2, D3, S0, S1);
UFPRB inst3 (Q, D_EFF, CLK, CLR, NOTIFY_REG);
or OR1 (ORs10s11, S10, S11);
not NT1 (S0_, S0);
not NT2 (ORs10s11_, ORs10s11);
and AN1 (EN_D0, CLR, S0_, ORs10s11_);
and AN2 (EN_D1, CLR, S0, ORs10s11_);
and AN3 (EN_D2, CLR, S0_, ORs10s11);
and AN4 (EN_D3, CLR, S0, ORs10s11);
not NT3 (S10_, S10);
not NT4 (S11_, S11);
xor XN1 (X1, D0, D2);
xor XN2 (X2, D1, D3);
xor XN3 (X3, D0, D1);
xor XN4 (X4, D2, D3);
and AN5 (EN1_S0, X3, ORs10s11_, CLR);
and AN6 (EN2_S0, X4, ORs10s11, CLR);
and AN7 (EN1_S10, X1, S0_, S11_, CLR);
and AN8 (EN2_S10, X2, S0, S11_, CLR);
and AN9 (EN1_S11, X1, S0_, S10_, CLR);
and AN10 (EN2_S11, X2, S0, S10_, CLR);
or OR2 (EN_S0, EN1_S0, EN2_S0);
or OR3 (EN_S10, EN1_S10, EN2_S10);
or OR4 (EN_S11, EN1_S11, EN2_S11);
specify
specparam LibName = "act2";
specparam InputLoad$D0 = 1;
specparam InputLoad$D1 = 1;
specparam InputLoad$D2 = 1;
specparam InputLoad$D3 = 1;
specparam InputLoad$S0 = 1;
specparam InputLoad$S10 = 1;
specparam InputLoad$S11 = 1;
specparam InputLoad$CLR = 1;
specparam InputLoad$CLK = 1;
specparam OutputLoad$Q = 0;
specparam EdgeType = "pos";
specparam MacroType = "seq";
specparam SeqType = "flipflop";
specparam FlipFlopType = "seq";
if (!S0 && !(S10 || S11) && CLR)
(posedge CLK => (Q +: D0)) = (1.0:1.0:1.0, 1.0:1.0:1.0);
if (S0 && !(S10 || S11) && CLR)
(posedge CLK => (Q +: D1)) = (1.0:1.0:1.0, 1.0:1.0:1.0);
if (!S0 && (S10 || S11) && CLR)
(posedge CLK => (Q +: D2)) = (1.0:1.0:1.0, 1.0:1.0:1.0);
if (S0 && (S10 || S11) && CLR)
(posedge CLK => (Q +: D3)) = (1.0:1.0:1.0, 1.0:1.0:1.0);
(negedge CLR => (Q +: 1'b0)) = (1.0:1.0:1.0, 1.0:1.0:1.0);
$setup(D0, posedge CLK &&& EN_D0, 0.0, NOTIFY_REG);
$hold(posedge CLK, D0 &&& EN_D0, 0.0, NOTIFY_REG);
$setup(D1, posedge CLK &&& EN_D1, 0.0, NOTIFY_REG);
$hold(posedge CLK, D1 &&& EN_D1, 0.0, NOTIFY_REG);
$setup(D2, posedge CLK &&& EN_D2, 0.0, NOTIFY_REG);
$hold(posedge CLK, D2 &&& EN_D2, 0.0, NOTIFY_REG);
$setup(D3, posedge CLK &&& EN_D3, 0.0, NOTIFY_REG);
$hold(posedge CLK, D3 &&& EN_D3, 0.0, NOTIFY_REG);
$setup(S0, posedge CLK &&& EN_S0, 0.0, NOTIFY_REG);
$hold(posedge CLK, S0 &&& EN_S0, 0.0, NOTIFY_REG);
$setup(S10, posedge CLK &&& EN_S10, 0.0, NOTIFY_REG);
$hold(posedge CLK, S10 &&& EN_S10, 0.0, NOTIFY_REG);
$setup(S11, posedge CLK &&& EN_S11, 0.0, NOTIFY_REG);
$hold(posedge CLK, S11 &&& EN_S11, 0.0, NOTIFY_REG);
$hold(posedge CLK, posedge CLR, 0.0, NOTIFY_REG);
$width(negedge CLR, 0.0, 0, NOTIFY_REG);
$width(posedge CLK &&& CLR, 0.0, 0, NOTIFY_REG);
$width(negedge CLK &&& CLR, 0.0, 0, NOTIFY_REG);
$recovery(posedge CLR, posedge CLK, 0.0, NOTIFY_REG);
endspecify
endmodule
`endcelldefine
`disable_portfaults
`nosuppress_faults
`suppress_faults
`enable_portfaults
`celldefine
`delay_mode_path
primitive U_MUX_4 (Y, D0, D1, D2, D3, S0, S1);
input D0, D1, D2, D3, S0, S1;
output Y;
// FUNCTION : FOUR TO ONE MULTIPLEXER WITH 2 SELECT CONTROLS
table
// D0 D1 D2 D3 S0 S1 : Y
0 ? ? ? 0 0 : 0 ;
1 ? ? ? 0 0 : 1 ;
? 0 ? ? 1 0 : 0 ;
? 1 ? ? 1 0 : 1 ;
? ? 0 ? 0 1 : 0 ;
? ? 1 ? 0 1 : 1 ;
? ? ? 0 1 1 : 0 ;
? ? ? 1 1 1 : 1 ;
0 0 0 0 ? ? : 0 ;
1 1 1 1 ? ? : 1 ;
0 0 ? ? ? 0 : 0 ;
1 1 ? ? ? 0 : 1 ;
? ? 0 0 ? 1 : 0 ;
? ? 1 1 ? 1 : 1 ;
0 ? 0 ? 0 ? : 0 ;
1 ? 1 ? 0 ? : 1 ;
? 0 ? 0 1 ? : 0 ;
? 1 ? 1 1 ? : 1 ;
endtable
endprimitive
`disable_portfaults
`nosuppress_faults
`suppress_faults
`enable_portfaults
primitive UFPRB (Q, D, CP, RB, NOTIFIER_REG);
output Q;
input NOTIFIER_REG,
D, CP, RB;
reg Q;
// FUNCTION : POSITIVE EDGE TRIGGERED D FLIP-FLOP WITH ACTIVE LOW
// ASYNCHRONOUS CLEAR ( Q OUTPUT UDP ).
table
// D CP RB NOTIFIER_REG : Qt : Qt+1
1 (01) 1 ? : ? : 1; // clocked data
0 (01) 1 ? : ? : 0;
0 (01) x ? : ? : 0; // pessimism
0 ? x ? : 0 : 0; // pessimism
1 0 x ? : 0 : 0; // pessimism
1 x (?x) ? : 0 : 0; // pessimism
1 1 (?x) ? : 0 : 0; // pessimism
x 0 x ? : 0 : 0; // pessimism
x x (?x) ? : 0 : 0; // pessimism
x 1 (?x) ? : 0 : 0; // pessimism
1 (x1) 1 ? : 1 : 1; // reducing pessimism
0 (x1) 1 ? : 0 : 0;
1 (0x) 1 ? : 1 : 1;
0 (0x) 1 ? : 0 : 0;
? ? 0 ? : ? : 0; // asynchronous clear
? (?0) ? ? : ? : -; // ignore falling clock
? (1x) ? ? : ? : -; // ignore falling clock
* ? ? ? : ? : -; // ignore the edges on data
? ? (?1) ? : ? : -; // ignore the edges on clear
? ? ? * : ? : x;
endtable
endprimitive
`disable_portfaults
`nosuppress_faults
// Schematic name: CM8
`timescale 1ns /100ps
module CM8(D, S, Y);
input [3:0]D;
input [3:0]S;
output Y;
wire [3:0]D;
wire [3:0]S;
wire T1;
wire T2;
wire Y;
wire Y1;
wire Y2;
and21 Iand1 (.A(S[0]), .B(S[1]), .Y(Y1));
U_MUX_2 imux1 (T1, D[0], D[1], Y1);
U_MUX_2 imux2 (T2, D[2], D[3], Y1);
U_MUX_2 imux3 (Y, T1, T2, Y2);
or21 Ior1 (.A(S[2]), .B(S[3]), .Y(Y2));
specify
specparam LibName = "act2";
specparam InputLoad$D0 = 1;
specparam InputLoad$D1 = 1;
specparam InputLoad$D2 = 1;
specparam InputLoad$D3 = 2;
specparam InputLoad$S00 = 1;
specparam InputLoad$S01 = 1;
specparam InputLoad$S10 = 1;
specparam InputLoad$S11 = 2;
specparam OutputLoad$Y = 0;
specparam MacroType = "slm";
( D[0] => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( D[1] => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( D[2] => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( D[3] => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( S[0] => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( S[1] => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( S[2] => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
( S[3] => Y ) = ( 1.0:1.0:1.0, 1.0:1.0:1.0 );
endspecify
endmodule // CM8