ms_ck.c 1.53 KB
/**************************************************************************
 *									  *
 *		 Copyright (C) 1993, 1994, 1995 Silicon Graphics, Inc.	  *
 *									  *
 *  These coded instructions, statements, and computer programs  contain  *
 *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
 *  are protected by Federal copyright law.  They  may  not be disclosed  *
 *  to  third  parties  or copied or duplicated in any form, in whole or  *
 *  in part, without the prior written consent of Silicon Graphics, Inc.  *
 *									  *
 **************************************************************************/

/*
 *  ms_ck.c: clock driver module for rdp regression (allows top level 'C'
 *           to randomly stall the gclock by de-asserting gclock_enable).
 */
#include "ms_ck.h"

void
  ms_ck(ms_ck_t **pp0, ms_ck_t **pp1)
{
    int i;
    ms_ck_t *p0, *p1;
  
    p0 = *pp0;
    p1 = *pp1;

    p1->time = p1->time + 1;
    if( ( p1->time % ( p1->t0 + p1->t1 ) ) < p1->t0 ) {
	p0->clock = 1;
    } else {
	p0->clock = 0;
    }
    /*
     * C sim is stalling gclock randomly with the gclock_enable signal.
     *
     * gclock is equal to the clock when it's enabled; otherwise, it holds
     * its previous value.
     */
    if (p0->gclock_enable) {
	p0->gclock = p0->clock;
    } else {
	p0->gclock = p1->gclock;
    }
}

void
  ms_ck_init(ms_ck_t *p0, ms_ck_t *p1)
{
    int i;

    p0->clock = p1->clock = 1;
    p0->gclock = p1->gclock = 1;
    p0->t0 = p1->t0 = 1;
    p0->t1 = p1->t1 = 1;

    p1->time = p0->time = 0;
}