compass_udps.v 5.86 KB
// User-Defined Primitives 

// COMPASS Design Automation

/*****************************************************************************************/
// NOTIFIER feature inserted by RAVI for generating 'X' on outputs during
// timing check violations like setup,hold,width.   10/12/92.

// Positive edge triggered D FF w/ => active low set and clr; 
//                                 => q set to high when simultaneous set and clr;
//
primitive UDP_DFF(q, d, cp, set, clr, notify);

   output q;
   input d, cp, set, clr, notify;
   reg q;
   
   table
   //                      n
   //                      o
   //             s    c   t    p    
   //        c    e    l   i    r
   //   d    p    t    r   f    e     q
   	
	1    r    1    1   ?  : ? :   1 ;
	1    r    x    1   ?  : ? :   1 ;
	?    ?    x    1   ?  : 1 :   1 ;

	0    r    1    1   ?  : ? :   0 ;
	0    r    1    x   ?  : ? :   0 ;
	?    ?    1    x   ?  : 0 :   0 ;

	1  (x1)   1    1   ?  : 1 :   1 ;
	1  (0x)   1    1   ?  : 1 :   1 ;
	0  (x1)   1    1   ?  : 0 :   0 ;
	0  (0x)   1    1   ?  : 0 :   0 ;
	
	?    ?    0    1   ?  : ? :   1 ;
	?    ?    1    0   ?  : ? :   0 ;
	?    ?    0    0   ?  : ? :   1 ;

	?  (?0)   1    1   ?  : ? :   - ;
	?  (1x)   1    1   ?  : ? :   - ;
	*    ?    ?    ?   ?  : ? :   - ;

	?    ?  (?1)   ?   ?  : ? :   - ;
	?    ?    ?  (?1)  ?  : ? :   - ;

	?    ?    ?    ?   *  : ? :   x ;// output x on any notifier change
       

   endtable

endprimitive

/*****************************************************************************************/

// New DFF added by Cadence when inserting Synergy behavioral to some cells

primitive NEW_UDP_DFF(q, d, cp, set, clr, notify);

   output q;
   input d, cp, set, clr, notify;
   reg q;

   table
   //                      n
   //                      o
   //             s    c   t    p
   //        c    e    l   i    r
   //   d    p    t    r   f    e     q
 
        ?    ?    x    1   ?  : 1 :   1 ;
        ?    ?    1    x   ?  : 0 :   0 ;
        ?    ?    0    1   ?  : ? :   1 ;
        ?    ?    1    0   ?  : ? :   0 ;
        ?    ?    0    0   ?  : ? :   1 ;
        ?    ?  (?1)   ?   ?  : ? :   - ;
        ?    ?    ?  (?1)  ?  : ? :   - ;
        ?    ?    ?    ?   *  : ? :   x ;// output x on any notifier change
   endtable

endprimitive


/*****************************************************************************************/

// JK FF front end;  f = (j+q)*(~(k*q))*(j+(~k))
//
primitive UDP_JKFE(out, j, k, q);

   output out;
   input j, k, q;
   
   table
   //              o
   //              u
   //   j  k  q    t
	
	?  0  1  : 1;
	1  ?  0  : 1;
	?  1  1  : 0;
	0  ?  0  : 0;
	0  1  x  : 0;
	1  0  x  : 1;

   endtable

endprimitive


/*****************************************************************************************/


// 
// Positive level sensitive latch w/ => active low set and clr;
//                                   => q set to high when simultaneous set and clr;
//
primitive UDP_LATCH(q, d, cp, set, clr, notify);

   output q;
   input d, cp, set, clr, notify;
   reg q;
   
   table
   //             s    c   n    p    
   //        c    e    l   o    r
   //   d    p    t    r   t    e     q
	
	0    x    1    1   ?  : 0 :   0 ;
	0    1    1    1   ?  : ? :   0 ;

	1    x    1    1   ?  : 1 :   1 ;
	1    1    1    1   ?  : ? :   1 ;

	?    ?    0    1   ?  : ? :   1 ;
	?    ?    1    0   ?  : ? :   0 ;
	?    ?    0    0   ?  : ? :   1 ;
	?    0    1    1   ?  : ? :   - ;

	0    1    1    x   ?  : ? :   0 ;
	0    ?    1    x   ?  : 0 :   0 ;

	1    1    x    1   ?  : ? :   1 ;
	1    ?    x    1   ?  : 1 :   1 ;

	?    ?    ?    ?   *  : ? :   x ;

   endtable

endprimitive


/*****************************************************************************************/


// Two input multiplexer: out = (i0*(~sel))+(i1*sel)+(i0*i1)
//
primitive UDP_MUX2(out, sel, i0, i1);

   output out;
   input sel, i0, i1;
   
   table
   //   s          o
   //   e  i  i    u
   //   l  0  1    t
	
	0  0  ?  : 0 ;
	0  1  ?  : 1 ;

	1  ?  0  : 0 ;
	1  ?  1  : 1 ;

	?  0  0  : 0 ;
	?  1  1  : 1 ;

   endtable

endprimitive


/*****************************************************************************************/

// 4 to 1 multiplexer

primitive UDP_MUX_4_TO_1(z, i0, i1, i2, i3, s0, s1);

   output z;
   input i0, i1, i2, i3, s0, s1;

   table
   //  i0  i1  i2  i3  s0  s1  :   z

	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;
	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;

	0   0   0   0   ?   ?  :   0;
	1   1   1   1   ?   ?  :   1;

    endtable

endprimitive



/*****************************************************************************************/



// Two input multiplexer w/ two selects: out = (i0 & sel0) || (i1 & sel1)
//
primitive UDP_TWO_MUX2(out, sel0, sel1, i0, i1);

   output out;
   input sel0, sel1, i0, i1;
   
   table
   //   s  s      
   //   e  e          o
   //   l  l  i  i    u
   //	0  1  0  1    t

	0  1  ?  0  : 0 ;
	0  1  ?  1  : 1 ;

	1  0  0  ?  : 0 ;
	1  0  1  ?  : 1 ;

   endtable

endprimitive


/*****************************************************************************************/


//
//   This primitive is used by the following cells
//
//    pc7[ct]5[1-4].vmd
//
//   This an extra file to the library, and is required when the 
//   library search is performed

primitive generic_pc7_s_t_5x_prim(pd, p, n);

   input p, n;
   output pd;

table
// p  n   pd

   0  0 : 0 ;
   1  1 : 1 ;
endtable

endprimitive

/****************************************************************************************/