Budapesti Mûszaki Egyetem
Villamosmérnöki és Informatikai Kar

Valyon Attila

WATCHDOG PROCESSZOR IBM PC AT SZÁMÍTÓGÉPHEZ

Mûszaki dokumentáció

Önálló laboratóriumi feladat

Konzulens: Majzik István

1995.




Tartalomjegyzék

1. Specifikáció

1.1. Bevezetés
1.2. Programozási felület

2. Hardware struktúra

2.1. Funkcionális felépítés
2.2. Jelzôszám-adminisztráció
2.3. Jelzôszám-ellenôrzés
2.4. Timer alrendszer
2.5. A vezérlôegység

3. Implementáció

3.1. Alkatrészjegyzék
3.2. Cím-dekódoló egység
3.3. Pointer ALU
3.4. A vezérlôegység
3.5. A konfigurációs hardware

IBM is a registered trademark of International Business Machines Corporation
Intel and i486 are registered trademarks of Intel Corporation
Xilinx, XACT are registered trademarks of Xilinx Inc.
Motorola is a registered trademark of Motorola Inc.
GAL is a registered trademark of Lattice Semiconductor
ABEL is a registered trademark of Data I/O Corporation




1. Specifikáció

1.1. Bevezetés

Az utóbbi évek informatikai gyakorlatában - különösen speciális felhasználási területeken (pl. ipari folyamatok, egészségügyi alkalmazások) - egyre nagyobb jelentôsége van a nagymegbízhatóságú rendszereknek. A hibafelismerés alapja - többek között - olyan speciális alrendszer lehet, mely a mûködés közbeni folyamatos monitoring funkcióját képes ellátni adott számítógépes környezetben. Az ilyen jellegû ellenôrzô áramkörök az ún. watchdog processzorok.

A watchdog processzor különleges céláramkör, mely az informatikai rendszerrel kapcsolatos futás közbeni információgyûjtés és real-time adatfeldolgozás alapján ellenôrzi annak helyes mûködését. Statisztikai megfigyelésekbôl következik, hogy a programvezérelt rendszerekben elôforduló hibák jelentôs része a folyamathoz rendelhetô vezérlési gráf sérülésébôl származik. A watchdog processzor a futás közbeni tényleges vezérlési gráfot hasonlítja össze egy elôre rögzített, hibátlan referencia-gráffal. Az aktuális vezérlési gráf felismerése jelzôszámok alapján történik; a magasszintû programozási nyelven megírt forráskódból egy elôfeldolgozó (preprocesszor) elôállítja a folya-mathoz tartozó ve- zérlési gráfot, s an- nak csomópontjai- hoz egyedi jelzô- számokat rendel. A jelzôszámokat az ellenôrzött pro- cesszor futás köz- ben továbbítja a watchdog procesz- szorhoz az elôfeldolgozó által az eredeti programszövegbe beszúrt transzfer utasítások segítségével. A szélesebb körû funkcionális ellenôrzés érdekében a folyamatoknak bizonyos idôzítési korlátnak is eleget kell tenniük: ha két jelzôszám-továbbítás között eletelt idô túlzottan hosszúra nyúlik, feltételezhetô a program hibás mûködése (pl. végtelen ciklus). Hibás állapot detektálása ill. time-out hiba fellépte esetén a watchdog processzor megszakítja a program futását, ami egy esetleges elôzô hibátlan állapotba való visszatéréssel folytatható. A fentieknek megfelelôen a tervezendô áramkör IBM PC AT számítógéphez illeszkedô watchdog processzor (WP) kártya, mely multitasking környezetben képes ellátni a futásidejû monitoringot; a jelzôszámok vételét és vizsgálatát.

1.2. Programozási felület

A watchdog processzor memóriába ágyazott periféria-társprocesszorként mûködik, a felügyelt processzorral (Intel 80486) - a nagyobb hatékonyság és a maximális kommunikációs sebesség érdekében - 32 bites adatforgalmat bonyolít le a VESA lokális buszon. A WP egyidejûleg 256 task felügyeletét képes ellátni. (A jelenlegi kiépítettség mellett csak 128 task ellenôrzésére van mód.) A watchog processzor által lefoglalt memória-címtartomány 16Mbyte, amely a rendszerbeli taskok ill. az operációs rendszer között van felosztva. A felügyelt taskok mindegyikéhez a WP-címtartomány egy-egy 4Kbyte méretû szegmense tartozik; az egyes szegmensekhez való illegális hozzáférés megakadályozása az i486 memória-kezelô egységének (MMU - Memory Management Unit) feladata. A watchdog processzor utasításainak végrahajtása egy-egy memória-írási ill. -olvasási ciklus alatt történik. A WP-utasításkód és a hozzá tartozó adatok kódolása a VLB cím- és adatbusza között oszlik meg, lehetôvé téve a hierarchikus utasításkészlet kialakítását. Az utasításkészlet magas prioritású tagjait - melyek a watchdog processzor alapvetô paramétereit befolyásolják - csak az operációs rendszer tudja használni, a taskok csak jelzôszám-továbbítást hajthatnak végre. A watchdog processzor az egymásba ágyazott függvényhívások adminisztrálását 256 szint mélységig kezeli, ennél nagyobb mélységû egymásba ágyazás ill. rekurzió hatására a WP megszakítást okoz. A megszakítási rutin feladata a jelzôszám-stack kiürítése és tartalmának az operatív memóriában való ideiglenes tárolása. A taskokhoz rendelt globális timer-limit és idôalap megfelelô koprocesszor utasítással beállítható ill. módosítható.

1.2.1. ábra. A watchdog processzor utasításkészlete

A folyamathoz tartozó - esetlegesen igen terjedelmes - referencia-gráf explicit tárolása helyett a jelzôszámok célszerû megválasztásával megvalósítható az állapotátmenetekre vonatkozó információk implicit kódolása. Egy aktuális állapot csak abban az esetben tekinthetô érvényesnek, ha az elôzô állapothoz tartozó jelzôszámot alkotó 3 cimke legalább egyikének 1-gyel növelt értéke szerepel az aktuális állapothoz rendelt cimkék (Sublabel3, Sublabel2, Sublabel1) között. Kivételt jelentenek a - kerülendô, de mégis elôforduló - olyan ugrás jellegû utasítások, melyek esetében fordítási idôben nem dönthetô el, hogy a program hol folytatódik, s így a vezérlési gráf állapotátmenete sem detektálható. Ilyen utasítások jelölésére szolgál a JMP utasítástípus-azonosító.

A watchdog processzor utasításkészletében szereplô jelölések a következôk:

SIG : Signature

Jelzôszám-továbbító utasítás, a jelzôszám típusát az adatvonalakon kódolt típus-azonosító bitek (D31,D30) határozzák meg. Valamennyi task által kiadható, alacsony prioritású parancs.

T : Timer Enable (D24)

A taskhoz tartozó idôzítô egyedi ki- ill. bekapcsolására szolgáló bit. A konkrét WP-címhez tartozó task esetén az utasítások közötti idôzítések számlálása mindaddig áll, amíg a Timer Enable bit inaktív.

T = 0 timer letiltva

T = 1 timer engedélyezve

Amennyiben a program futása során olyan külsô függvény hívása történik, melynek a WP preprocesszorral való feldolgozása - s így jelzôszámok hozzárendelése - nem történt meg, a taskhoz tartozó timert - a téves time-out jelzés elkerülése érdekében - fel kell függeszteni.

NRM : Normal (D31=0, D30=0)

Közönséges jelzôszámtovábbító utasítás (Sublabel3, Sublabel2, Sublabel1), a watchdog processzor az ezt logikailag megelôzô jelzôszámmal hasonlítja össze, s hiba esetén megszakítást generál.

SOP : Start Of Procedure (D31=0, D30=1)

Start-Of-Procedure típusú jelzôszám - azaz függvény belépési pont - esetén a WP a függvényhívást megelôzô állapothoz tartozó jelzôszámot saját stack jellegû memóriájában tárolja, amely majd referenciaként szolgál a függvényhívásból való visszatéréskor.

EOP : End Of Procedure (D31=1, D30=0)

End-Of-Procedure - vagyis függvényhívásból való visszatérés - felléptekor az elôzôekben a stackben tárolt - a függvényhívást megelôzô állapothoz tartozó - jelzôszámot kiolvassa, amit a követekezô - a függvényhívást követô - állapot vizsgálatához használ.

JMP : Jump (D31=1, D30=1)

JMP típusú jelzôszám vételekor a watchdog processzor az ezt követô állapotot (jelzôszámot) mindenképpen érvényesnek fogadja el.

TCH : Task Change

A TCH utasítás jelzi a watchdog processzornak, hogy taskváltás történt, az ezt követô jelzôszámok már az új taskra vonatkoznak. Az új task azonosítóját a címbusz megfelelô bitjei (A10-A2) tartalmazzák, az adatbusz bitjei közömbösek. A WP csak TCH utasítás mellett engedélyezi a rendszerbeli taskok közötti váltást - azaz az eddigiektôl eltérô WP-címre való hivatkozást -, ellenkezô esetben Task Error hibajelzéssel megszakítást vált ki. Az utasítás természetébôl fakadóan magas prioritású, csak az operációs rendszer adhatja ki.

STP : Set Timer Parameters

A watchdog processzor globális, valamennyi taskra azonos értékû timer jellemzôinek beállítása az STP utasítással történhet. Magas prioritású utasítás.

G : Global Timer Enable (D25)

A rendszerben levô - a watchdog processzor által felügyelt - összes task idôzítés-ellenôrzését tiltja ill. engedélyezi.

G = 0 az idôzítés valamennyi taskra letiltva

G = 1 idôzítés engedélyezve

T-limit : Timer limit (D15-D8)

A Timer limit érték határozza meg, hogy a WP az idôalap hányszorosát tekintse idôzítési korlátnak.

T-base: Time base (D23-D16)

A WP által használt idôzítés idôalapja a Time base érték. Az alap idôegység (

) az itt beállított értékkel szorzódik, és time-out hiba a Timer limit valamint a Timer base értékek szorzatából adódó idôkorlát túllépése esetén lép fel.

Az érvényes értékek az [1...255] intervallumba esnek, 0 esetén az 1 értéknek megfelelô kb.15us-os idôalap állítódik be. Ennek megfelelôen:

TimeOutmin = 15.52us

TimeOutmax = 1s

WPT : Write Pointer

A rendszerben elôforduló különbözô taskok - az egymásba ágyazott függvényhívások adminisztrálására miatt - egymástól elkülönített - egyenként 256 byte méretû - veremmemóriát igényelnek, amit a lokális WP-stack statikus felosztása biztosít. Az egyes memóriaterületek aktuális címeit a folyamatosan karbantartott stack-pointer tábla tartalmazza, melynek címzése az éppen futó taskhoz rendelt azonosítóval (TaskID) történik. A WPT utasítás eredményeképpen az adatbuszon levô 8 bit (D7-D0) felülírja az aktuális taskhoz tartozó pointert. Az utasítás elsôsorban inicializálási folyamathoz ill. túlcsordult stack tartalmának mentéséhez ill. visszaállításához alkalmazható. A pointerek átírása megfelelô gondosságot igényel, hibás érték a taskhoz tartozó nyilvántartás teljes összeomlását okozhatja! Magas prioritású utasítás.

SCE : Set Checking Enable

A jelzôszám-ellenôrzés be- ill- kikapcsolására vonatkozó, magas prioritású utasítás.

C : Checking Enable (D28)

A bit inaktív állapota esetén a jelzôszám-ellenôrzés szünetel, tetszôleges jelzôszám beírható a stackbe. Használata elsôsorban a WP-stack elôzôleg elmentett tartalmának visszaállítására ill. a taskonkénti legelsô jelzôszám bevitelére ajánlott.

C = 0 jelzôszám-ellenôrzés tiltva

C = 1 jelzôszám-ellenôrzés engedélyezve

RSS : Read Status

Az RSS utasítás a watchdog processzor pillanatnyi állapotáról ill. az aktuális task-paraméterekrôl nyújt információkat.

A státusz-olvasást közvetlenül megelôzô WP-megszakításhoz tartozó állapotbitek (az állapotbit értéke 1, ha a legutolsó IT a bithez rendelt hiba fellépte miatt következett be):

TE : Task Error (D31)

A legutolsó jelzôszám címbitjein kódolt task azonosító nem egyezik a watchdog processzorban referenciaként tárolt aktuális Task ID-vel.

TO : Time Out (D30)

Két - a watchdog processzornak küldött - jelzôszám-utasítás között a Timer limit és Timer base értékek által meghatározott korlátnál hosszabb idô telt el.

S : Signature Error (D29)

Az egymás után érkezett jelzôszámok hibátlan mûködés esetén nem követhetik egymást.

SF : Stack Is Full (D28)

A taskhoz tartozó stack megtelt, tartalmának az operatív memóriába történô ideiglenes mentésérôl gondoskodni kell.

SE : Stack Is Empty (D27)

A lokális stack kiürült, a korábbiakban elmentett tartalmát vissza kell állítani.

Az RSS utasítás törli a megszakítás státusz-biteket.

A WP aktuális beállításaira vonatkozó állapotbitek:

C : Checking Enable (D26)

G : Global Timer Enable (D25)

T : Timer Enable (D24)

Timer value : a task idôzítôjének pillanatnyi állapota (D23-D16)

(0 elérésekor következik be TO típusú megszakítás.)

Task ID : az aktuális referencia task azonosító (D15-D8)

Pointer : a taskhoz tartozó aktuális stack-pointer (D7-D0)

RSK : Read Stack

A kiolvasott információ a WP lokális stackjének az aktuális taskhoz tartozó pointer által megcímzett mezôjének a tartalmát jelenti:

ST : Signature type

A stack tartalmának kiolvasása elsôsorban a stack túlcsordulása esetén, a stack kiürítésekor szükséges.

2. Hardware struktúra

2.1. Funkcionális felépítés

A specifikációnak megfelelôen a watchdog processzor fôbb funkcionális hardware elemei a következôk:

jelzôszám-ellenôrzô és adminisztráló egységek

timer alrendszer

vezérlôegység

VESA lokális busz interface

2.1.1. ábra. A watchdog processzor blokkvázlata

Az egymásba ágyazott függvényhívások kezelése érdekében az egyes taskoktól érkezô jelzôszámok átmeneti tárolása a statikusan felosztott jelzôszám veremben történik (Signature stack). A stack címzését az aktuális taskhoz tartozó stack-pointer végzi, amit a pointertömb (Pointer array) megfelelô mezôje tartalmaz. A függvényhíváskor ill. a függvénybôl való visszatéréskor szükséges pointer-módosítást (SOP esetén inkrementálás, EOP esetén csökkentés) és a pointertömbbe való visszaírást a Pointer ALU hajtja végre. Az aktuális taskhoz tartozó jelzôszám-stack túlcsordulása vagy kiürülése esetén a stack-pointer módosítása helyett a hiba jellegétôl függôen SF (Stack-Is-Full) ill. SE (Stack-Is-Empty) hibajelzést generál. A pointertömb írása ill. olvasása a megfelelô WP-utasítással (WPT ill. RSS) a belsô adatbuszon keresztül hajtható végre. A jelzôszám-ellenôrzés a logikailag elôzô (Previous signature) és az aktuális (Actual signature) jelzôszámok összehasonlítása alapján történik (Signature checker).

A timer alrendszer alapja egy idôzítô áramkör (Timer), mely a - megfelelô utasítással (STP) - beállított idôkorlát túllépése esetén time-out hibát okoz. Taskváltás során az aktuális timer-érték a Timer base egységben tárolódik, s a task újbóli aktívvá válása után az idôzítô áramkör errôl az értékrôl folytatja a mûködést. A jelzôszám-küldéssel egyidejûleg az aktuális taskra vonatkozóan az idôzítés a T bit inaktív állapotának beállításával felfüggeszthetô. A Timer mûködése a - csak az operációs rendszer által kiadható - STP utasítással (G bit) leállítható.

A watchdog processzor által generált megszakítás 5 forrásból származhat:

Task Error

Jelzôszám vétele során a VLB-címbuszon kódolt task azonosító nem egyezik a referencia-regiszterben (Actual task ID) tárolt azonosítóval.

Time Out

Az idôzítô áramkör (Timer) túlcsordult.

Signature Error

A jelzôszám-ellenôrzô egység (Signature Checker) érvénytelen jelzôszámot detektált.

Stack Is Full

Az aktuális stack pointer a verem tetejére mutat és SOP típusú jelzôszám érkezett.

Stack Is Empty

Az aktuális stack pointer a verem aljára mutat és EOP típusú jelzôszám érkezett.

A vezérlô egység (Control unit) - az egyes funkcionális egységek mûködésének összehangolása mellett - bármilyen típusú hiba fellépte esetén az AT buszon megszakítást generál. A megfelelô interrupt rutin a WP megszakítási állapotvektorának kiolvasása (RSS) alapján ismeri fel a megszakítást kiváltó okot és reagál az IT-kérésre.

2.2. Jelzôszám-adminisztráció

A jelzôszám stack az elôzôek alapján 128 task egyenként max. 256 szintig egymásba ágyazható függvényhívásaihoz tartozó referencia-jelzôszámokat tartalmazza, ami 32 bit széles 32Kbyte statikus RAM-ot igényel. A memória adatvonalai a WP belsô adatbuszára csatlakoznak, lehetôvé téve a stack írását (SIG) és olvasását (RSK). A címvonalak két részre oszlanak: a felsô 7 címbit (A14-A8) megegyezik az aktuális task azonosítóval - s így 128 db. 256 x 32 bites blokkra osztja a jelzôszám stacket -, az alsó 8 címvezeték (A7-A0) a WP 8 bites pointer buszára csatlakozik. A pointer busz vonalait vagy a pointertömbnek az aktuális taskhoz tartozó eleme - azaz a stack pointer -, vagy a pointer-aritmetikát kezelô Pointer ALU hajtja meg, lehetôvé téve az egy taskhoz tartozó stacken belüli címzést. Az operációs rendszernek lehetôsége van a pointertömbnek az aktuális taskhoz tartozó mezôjének módosítására (WPT) ill. tartalmának kiolvasására (RSS) kétirányú buszmeghajtón (Bridge) keresztül.

2.2.1. ábra. A jelzôszám-adminisztráció

A Pointer ALU feladata, hogy jelzôszám vétele esetén (SIG) a jelzôszám típusának megfelelôen (TypeH és TypeL) módosítsa a stack pointer értékét: SOP típusú jelzôszám esetén eggyel növeli, EOP esetén eggyel csökkenti, NRM és JMP típusú jelzôszámok vételekor nem változtatja. A memória-hozzáférési idô megkerülése érdekében a Pointer ALU egy redundáns regisztert tartalmaz, melynek pillanatnyi értéke megegyezik a pointertömbben tárolt stack pointer értékével. Jelzôszám érkezésekor az itt tárolt értéket módosítja, s egyidejûleg írja be a pointertömbbe a módosított értéket és címzi a jelzôszám stacket.

A lokális stack túl- ill. alulcímzése esetén a Pointer ALU SF ill. SE hibajelzést küld a hiba logika (Error logic) felé. Stack-Is-Full hiba felléptekor a megszakítási rutin feladata az aktuális task lokális stackjének megfelelô mélységig történô kiürítése (RSK) és az operatív memóriában való átmeneti tárolása, valamint a stack pointer új értékének beállítása (WPT) - célszerûen a stack közepére. Az egyszerûbb kezelô software-környezet kialakíthatósága érdekében a stack legfelsô - SP=FFh értékhez tartozó - mezôje túlcsordulási tartalék; a watchdog processzor FEh pillanatnyi stack-cím mellett és ezzel egyidejûleg SOP típusú jelzôszám vételekor a pointert 1-gyel inkrementálja, a jelzôszámot FFh címen tárolja és SF típusú megszakítást okoz. Stack-Is-Empty típusú hiba esetén a korábban elmentett stack-tartalom visszaállítása és a stack pointer korrekciója szükséges. Ha elôzôleg nem történt stack-mentés és SE típusú megszakítás lép fel, akkor a task vezérlési gráfjának illegális állapotátmenetrôl van szó.

A megszakításkérés egy másik forrása a vett jelzôszámhoz tartozó és a referenciaként tárolt task azonosító értékének különbözôsége lehet. A VESA lokális buszra ill. a refencia regiszterre (Task ID REG) kapcsolódó komparátor eltérés esetén TE (Task Error) hibajelzést állít elô: a pointer értéke nem változik és a jelzôszám sem kerül a stackbe. A referencia task-azonosító státusz-olvasás során (RSS) lekérdezhetô.

2.3. Jelzôszám-ellenôrzés

A jelzôszám-ellenôrzés mindig egy adott task által aktuálisan elküldött és az ezt logikailag megelôzô jelzôszám összehasonlításán alapszik. Egymást követô normál jelzôszámok (NRM) csak abban az esetben érvényesek, ha a korábbi jelzôszámban szereplô 8 bites cimkék 1-gyel növelt értékei közül valamelyik - vagy több - megegyezik a késôbbi jelzôszám cimkéinek egyikével. SOP jelzôszámot - az egyéb feltételek betartása mellett - a WP mindenképpen érvényesnek fogad el. EOP jelzôszám az NRM típushoz hasonlóan csak az ôt megelôzô jelzôszámmal való összehasonlítás alapján tekintendô legálisnak. A JMP típus-azonosítóval megjelölt ugrás jellegû utasítások esetén a következô jelzôszámot a watchdog processzor szintén érvényesnek fogadja el.

Az ellenôrzés alapja egy 3x3-as, 8 bites komparátor mátrix; ennek sorai az aktuális jelzôszám egy-egy cimkéjének összehasonlítását végzik az elôzô jelzôszám cimkéinek - a mátrix oszlopaihoz rendelt - 1-gyel inkrementált értékeivel. Az ellenôrzôrendszer tartalmaz egy 24 bites jelzôszám-árnyékregisztert (Signature register), mely - a késleltetési jellemzôk hatásának minimalizálása érdekében - a legutoljára érkezett jelzôszám összehasonlításra elôkészített alakját tárolja.

A jelzôszám-érvényesség 3 esetben - illetve ezek kombinációiban - fordulhat elô:

jelzôszám-egyenlôség: a komparátorok valamelyike azonosságot észlelt a cimkék között

SOP típusú jelzôszám: függvényhívás belépési pontja következik, azaz nincs elôzetes referencia-jelzôszám

az aktuális jelzôszám JMP azonosítót követ

Ennek megfelelôen jelzôszám-hiba (aktív '1') csak akkor keletkezik, ha sem a komparátorok kimeneteinek VAGY kapcsolatát jelentô EQ jel, sem a belsô adatbusz típus-azonosító bitjeibôl (TypeH, TypeL) elôállított SOP jel (kódja: 01b), sem az elôzô jelzôszám esetleges JMP típusát (kódja: 11b) tároló flip-flop (JMPprev register) kimenete nem aktív szintû.

A jelzôszám-regiszter elsôdleges célja a jelzôszám-stack hozzáférési idejének és az egyéb járulékos késleltetések hatásának kiküszöbölése, a leggyakoribb típusú jelzôszám (NRM) kezelésével kapcsolatos átfutási idô optimalizálása.

Mivel a jelzôszám-regiszter minden esetben a legutoljára érkezett jelzôszámot tárolja, taskváltáskor, függvényhívásból való visszatérés esetén ill. pointer-módosításkor a jelzôszám-stack megfelelô rekeszének tartalmát - a jelzôszámcimkék inkrementálása után - át kell másolni a jelzôszám regiszterbe, amit a watchdog processzor automatikusan elvégez.

2.3.1. ábra. A jelzôszám-ellenôrzés

2.4. Timer alrendszer

Egy folyamat helyes mûködése ellenôrzésének egy módja lehet az "I'm alive!" jellegû üzenetekkel kommunikáló tesztelés. A watchdog processzor ezt a módszert ötvözi a jelzôszámokon alapuló ellenôrzéssel: adott task két jelzôszám-továbbítása között eltelt idô nem haladhat meg egy elôre rögzített idôkorlátot, ellenkezô esetben time-out típusú megszakítás generálódik.

Az idôzítô alrendszer alapja egy programozható 8 bites számláló (Counter). Jelzôszám vételekor - az inicializálás során beállított (STP) - idôkorlát értéke beíródik a lefelé számláló Counterbe, melynek órajelét a VESA lokális busz órajelébôl állítja elô egy elôosztó idôalap generátor (Frequency divider). A WP nagyobb rugalmassága érdekében az osztásarány a 8 bites - csak írható - elôosztó regiszterben (Division register - Time base) beállítható az alapértéktôl az alapérték 255-szereséig terjedô intervallumban. (Nulla esetén az alapérték állítódik be.) Az idô-alpérték (T0) a VESA lokális busz órajelének (LCLK) leosztásából jön létre. PREDIV=256 - azaz 8 bites elôosztó - mellett

.

Ha a számláló eléri a 0 értéket - vagyis a task túllépte az idôkorlátot -, aszinkron time-out hibaüzenet jön létre, ami TO típusú megszakítást vált ki.

2.4.1. ábra. Timer alrendszer

A számláló a WP-kártya inaktív állapotában folyamatosan frissíti a Timer base egységben az aktuálisan futó taskhoz tartozó rekeszt. Taskváltás során az új task idôzítési ciklusa a task legutolsó aktív állapotától folytatódik.

A számláló mûködéséhez szükséges, hogy a globális (G) és az aktuális taskra vonatkozó (T) idôzítés-engedélyezés aktív legyen. A watchdog processzorral folytatott kommunikáció ideje alatt az idôzítés automatikusan felfüggesztôdik, lehetôvé téve a pontos idôzítési korlát beállítását.

2.5. A vezérlôegység

A watchdog processzor funkcionális egységei mûködésének összehangolása, ezek vezérlô jeleinek elôállítása a vezérlôegység feladata. A vezérlôegységnek 19 állapota van (2.5.1. ábra); a WP-kártya inaktív állapotában (S_Idle) csak az idôzítô egység mûködik, a késleltetések hatásának csökkentése érdekében a VLB adatbusza - kétirányú buszmeghajtókon keresztül - a WP belsô adatbuszára kapcsolódik. A koprocesszor a vele való kommunikáció-kezdeményezés hatására az S_Idle állapotból az utasítás típusától függôen valamelyik parancs-végrehajtási állapotba kerül.

2.5.1. ábra. A watchdog processzor állapotgráfja

Annak érdekében, hogy az ellenôrzött taskok mûködési sebességét a lehetô legkisebb mértékben csökkentse a watchdog processzorral való kommunikáció, a vezérlô és a járulékos hardware a jelzôszám-továbbítás kezeléséhez optimalizált. A leggyakrabban elôforduló NRM típusú jelzôszámok - és a SOP ill. JMP típusúak - vétele a - 33MHz órajel-frekvenciával mûködô - VESA lokális buszon 3 periódus, azaz kb.90ns idô alatt zajlik le. De a fizikai paraméterekbôl adódóan hosszabb feldolgozási idôt igénylô utasítások is csak a szükséges ideig foglalják le a VL-buszt (folytonos vonallal rajzolt állapotok); a szaggatott vonallal jelzett állapotokban a watchdog processzor a felügyelt processzorral párhuzamosan mûködik.

A WP-utasítások vétele során a felügyelt processzor a buszciklus elsô ütemében érvényes címet és adatot helyez a VESA lokális buszra, amit az ADS# jel lefutó éle jelez. A watchdog processzor - a hardware késleltetéseket figyelembevéve - azonnal aktív szintre húzza az LDEV# jelet, ezzel jelezve, hogy a memória-hozzáférés a lokális buszon fog lezajlani. Az utasítás típusától függô adatátviteli folyamat végrehajtása után a WP a LRDY# jel 01 átmenetével fejezi be a buszciklust.

2.5.2. ábra. NRM,SOP és JMP jelzôszámok vétele

Jelzôszámok vétele esetén a watchdog processzor a buszciklus elsô ütemében (T1) történô utasítás-dekódolás eredményeképpen (SIG=1) a második órajel-periódusban (T2 - SIG) elvégzi a jelzôszám típusától függô pointermódosítást. (CE_PR - Count Enable for Pointer Register). Mivel a Pointer ALU által kiszámított új cím és a WP-vezérlôtôl érkezô memória-vezérlôjelek egyszerre válnak stabillá, olyan statikus memória-egységet kell alkalmazni, melynek a vezérlôjeihez képest cím elôkészítési idôre nincs szüksége. (A felsô 7 címbit - melyeket a task referencia-regiszter kimenetei hajtanak meg - már az elôzô taskváltás óta stabil.)

A jelzôszám típusától függôen az utasítás-végrehajtás további fázisai eltérôek:

NRM, SOP és JMP típusú jelzôszámok - azaz nem EOP - esetén a T3 ütemben (NEOP) egyrészt a Pointer ALU a pointer buszon keresztül beírja az új mutatót a pointertömbbe (WE_P#=0, CS_P#=0) másrészt a belsô adatbusz tartalma, vagyis az új jelzôszám beíródik a stacknek az új pointer által megcímzett rekeszébe (WE_S#=0) és - a T3 ütem végén - a jelzôszám regiszterbe is (CE_SRT=1).

A T2 és T3 órajel-periódus alatt a timer buszra - melyet eddig az idôzítô áramkör hajtott meg, - a Timer limit regiszterben beállított érték kerül (OE_TLR#=0, OE_Counter#=1), ami egyidejûleg beíródik a taskokhoz tartozó timer állapotokat tároló statikus RAM-ba és a számlálóba. A CE_SRT jel aktív állapota során a jelzôszámmal együtt érkezett T bit frissíti a Timer Enable flip-flopot.

A T3 ütemben az LRDY# jel aktív szintû, ezzel jelezve a buszciklus végét.

A watchdog processzor a T2 órajel-periódus (SIG) végén vizsgálja, hogy fellépett-e valamilyen típusú hiba. Task ID hiba ill. jelzôszám hiba esetén - amennyiben a jelzôszám-ellenôrzés engedélyezve van - a T3 ütemre nem kerül sor, a jelzôszám stackbe való beírás és a pointer-módosítás nem történik meg, így hibás jelzôszám nem kerülhet a stackbe, ami lehetôvé teszi egy elôzô állapotba való esetleges visszatérést. SF típusú hiba felléptekor - vagyis, ha a stack-pointer értéke legalább FEh és SOP jelzôszámról van szó - a jelzôszám beírása és a pointer-inkrementálás megtörténik FFh címre. A Pointer ALU semmiképpen nem címzi túl a lokális stack területet; FFh aktuális stack-cím és SOP jelzôszám mellett a jelzôszám felülírja az FFh címen tárolt jelzôszámot.

EOP típusú jelzôszám esetén a stackbe való beírásra nincs szükség, csak az elôzô jelzôszámmal való összehasonlítást és a stack-pointer dekrementálását kell elvégezni. Ennek megfelelôen a buszciklus T1 és T2 szakasza a nem EOP jellegû jelzôszámok kezelésével megegyezôen zajlik. Mivel a stack-pointer értékének megváltozásával egy új jelzôszám jelenti az összehasonlítási alapot a következô jelzôszámhoz, az inkonzisztencia elkerülése érdekében a stack-pointer által megcímzett mezô tartalmát - megfelelô módosítás után - át kell másolni a jelzôszám-regiszterbe. Ez történik a T3 (EOP1) és T4 (EOP2) ütemben: a belsô adatbuszt már nem a VLB, hanem a stack hajtja meg (OE_S#=0). A memória-hozzáférési idô és a jelzôszám-cimkék inkrementálásához szükséges idô után, a T4 ütem végén történik meg a jelzôszám-regiszter értékének frissítése (CE_SR=1).

Az utasítás-végrehajtás csak 3 ütemig foglalja le a VL-buszt, a T4 (EOP2) ütem már a koprocesszoron belül, a felügyelt processzortól függetlenül megy végbe.

A hiba- ill. megszakítás-kezelés a nem EOP típusú jelzôszámokéhoz hasonló, SE hiba elôfordulásakor az egyszerûbb hardware felépítés érdekében - megszakításkérés mellett - a teljes parancs-feldolgozási ciklus lejátszódik, de mivel a Pointer ALU soha nem címzi alul a lokális stacket, ez a helyes mûködést nem befolyásolja.

2.5.3. ábra. EOP típusú jelzôszám vétele

Taskváltás során a címbuszon kódolt új task azonosítónak a task referencia- regiszterbe történô beírása mellett a konzisztencia megôrzése érdekében szükség van a Pointer ALU-ban levô pointer regiszter és a jelzôszám regiszter új értékének beállítására is. Az utasítás-feldolgozás második ütemében megfelelô vezérlô impulzus hatására a task referencia-regiszter bekapuzza a VLB-címbuszon levô task azonosítót (CP_TIDR=0®1). A pointertömbnek az új task azonosító által megcímzett mezôjének tartalma kerül a pointer buszra (CS_P#=0, WE_P#=1), melyet idôben "elenged" a Pointer ALU (OE_PR=0). A memória-hozzáférési idô után a stack címbemenetein érvényes cím - azaz új pointer - van. Megfelelô sebességû statikus RAM-okkal elérhetô, hogy a sorba kapcsolt memóriák és a jelzôszám-regiszter elôtti inkrementáló logika együttes késleltetése ne haladja meg a három periódust (kb. 90ns), s igy a T4 ütem (TCH3) végén a jelzôszám-regiszter új értéke beírható (CE_SR).

A fenti folyamattal párhuzamosan a timer alrendszernek az új taskra való átállítását is el kell végezni. Mivel az idôzítô számláló órajele WP-kommunikáció alatt nincs engedélyezve, állapota legfeljebb a T1 ütem elején változhat utoljára. Kellôen gyors SRAM-ot alkalmazva a Counter értéke - T1 ütem alatt - biztosan beíródik a - folyamatosan írásra kiválasztott - Timer base egységnek a régi task azonosító által megcímzett rekeszébe. T3 ütemben az új taskhoz tartozó, elôzôleg tárolt timer érték a Timer base egységbôl (CS_T#=0, WE_T=1) aszinkron módon beíródik a számlálóba (PLoad#=0).

A taskváltás mindössze 2 órajel-periódusig foglalja le a processzort, ami az i486 lehetôségeit figyelembe véve a lehetô legkevesebb.

2.5.4. ábra. A taskváltás folyamata

Az STP utasítás végrehajtása szintén két ütemet vesz igénybe: T1 ütemben történik az utasítás-dekódolás, a T2 ciklus (STP) végén - az órajel következô felfutó élének hatására - íródnak be a VLB-n és a belsô adatbuszon keresztül a paraméterek a megfelelô regiszterekbe (C_TLGD=1).

A pointertömb egyes elemeinek a watchdog processzoron kívülrôl történô megváltoztatása a WPT paranccsal lehetséges. Az utasítás-dekódolást követô ütemben (T2 - WPT1) az órajel következô felfutó élénél a belsô adatbuszt a pointer busszal összekötô kétirányú buszmeghajtón keresztül (Bridge) a beírandó érték a pointer regiszterbe kerül (OE_PR=0). Mivel az írási folyamat nem közvetlenül a pointertömbbe történik, az utasítás végrehajtása csak a minimális processzoridôt igényli. Ezt követôen a Pointer ALU veszi át a poiter busz meghajtását, egyidejûleg írja be az új pointer-értéket a pointertömbbe (CS_P#=0, WE_P#=0) és címzi a stacket (OE_S#=0), melybôl az új referencia-jelzôszám átmásolódik a jelzôszám-regiszterbe (CE_SRT=1).

2.5.5. ábra. WPT utasítás végrehajtása

A jelzôszám-ellenôrzés ki- ill. bekapcsolása az SCE utasítással történhet. Végrehajtása 2 órajel-periódus alatt megy végbe; a T2 ütem (SCE) végén az órajel felfutó éle írja be a C bitet a megfeflelô flip-flopba.

A WP-státusz kiolvasása az RSS utasítással minimálisan 3 ütem alatt zajlik le. Az IT státuszbitek, az aktuális task azonosító, a taskhoz tartozó stack-pointer és az idôzítô pillanatnyi értéke a T3 órajelcikus végére már stabil adatként jelenik meg a VLB-adatbuszon. (A T2 periódus során a memória-cache-sel való ütközést elkerülendô a WDP a belsô adatbuszán levô adatot még nem kapuzza a VLB-re.) A watchdog processzor a LRDY# jel aktív szintre húzásával jelzi, hogy érvényes adat van a buszon. A i486 processzor - mely minden órajel-periódus végén mintavételezi a LRDY# jel állapotát - a RDYRTN# handshake jel aktív állapotba vezérlésével zárja le a buszciklust. A WP mindaddig tartja az érvényes információt a VESA lokális buszon, amíg a RDYRTN# jel inaktív, azaz a felügyelt processzor nincs készen az adat beolvasásával. A buszciklus befejeztét követô ciklusban (T4 - RSS3) az IT státuszbitek - melyek a megszakításkéréstôl idáig aktív szintûek - törlôdnek, majd a watchdog processzor alapállapotába (S_Idle) tér vissza.

A WP-megszakítási rutin az RSS utasítást használhatja az magszakítás forrásának azonosítására. Az IT-kezelés elsô lépéseként célszerû egy RSS utasítást kiadni, mely egyúttal megszünteti a watchdog processzorhoz tartozó IRQ vonal aktív állapotát is.

Az aktuális taskhoz tartozó pointer által a stackben megcímzett mezô tartalmát az RSK utasítás hatására szolgáltatja a watchdog processzor. Az utasítás min. 3 órajel-periódus alatt megy végbe; a T1 ütemben történô utasítás-dekódolás után a T3 (RSK2) periódusban a memória-hozzáférési idôt követôen a kiolvasott adat a VESA lokális buszon van, amit a LRDY# aktív szintje jelez. Az RSS utasításhoz hasonlóan a watchdog processzor az órajel minden felfutó élénél mintát vesz a RDYRTN# jel állapotából, és csak ennek aktív szintje esetén tér vissza inaktív állapotába.

2.5.6. ábra. RSK utasítás végrehajtása

A watchdog processzor a külvilág, az esetlegesen együttmûködô más rendszerek ill. felügyelôrendszer felé is biztosítja az ellenôrzött taskokkal kapcsolatos állapot-információkat. A felügyelt processzor hibájából adódó WP-megszakítás (TE,TO,S) esetén a külsô csatlakozón a belsô IT-vel egyidôben szintén jelzés generálódik. A hiba típusa a külsô rendszer által is hozzáférhetô állapotbitek alapján azonosítható.

3. Implementáció

3.1. Alkatrészjegyzék

A watchdog processzor egy IBM PC AT számítógéphez illeszthetô bôvítôkártyaként realizálódik. A kapcsolás központi vezérlô egységét, a késleltetések ill. alkatrészigény szempontjából kritikus részeket egy Xilinx XC3064PC84-70 típusú FPGA eszköz tartalmazza. A további járulékos hardware elemeket F-TTL ill. kisebb integráltságú PLD-k valósítják meg.

Alkatrészjegyzék:

 Alkatrész típusa  Gyártó neve        Funkció                  Darabszám       
                                                                               
    XC3064PC84-70  Xilinx             FPGA                     1               
    GAL22V10B-7LP  Lattice            PLD                      3               
      TC55328P-25  Toshiba            32K x 8 SRAM             4               
     TMM2018AP-25  Toshiba            2K x 8 SRAM              2               
            74191                     up/down binary counter   2               
         MC74F244  Motorola           octal buffer/line        5               
                                      driver                                   
         MC74F245  Motorola           octal bidirectional      5               
                                      transceiver                              
         MC74F374  Motorola           octal D-type flip-flop   2               
         MC74F521  Motorola           8-bit identity           1               
                                      comparator                               

3.2. Cím-dekódoló egység

A WP-kártyacím dekódolást és ennek a VESA lokális busz felé történô jelzését egy GAL22V10 architektúrájú programozható eszköz végzi.

MODULE AddrComp
TITLE '
  project       :  WATCHDOG PROCESSOR
  part          :  Address Compare Logic
  author        :  Valyon Attila
  last modified :  04. 10. 1995.
'

"                                _________ 
"                      ADR31 -> |         | <- CA31
"                      ADR30 -> |         | <- CA30
"                      ADR29 -> | Address | <- CA29
"                      ADR28 -> | Compare | <- CA28
"                      ADR27 -> |  Logic  | <- CA27
"                      ADR26 -> |         | <- CA26
"                      ADR25 -> |         | <- CA25
"                      ADR24 -> |         | <- CA24
"                               |         | 
"                       ADS# -> |  22v10  | -> WPADS#
"                      M/IO# -> |_________| -> LDEV#


DECLARATIONS
   AddrComp     DEVICE 'p22v10';

   x    = .X.;                                  " don't care condition
   z    = .Z.;                                  " three state value

   LDEV         PIN 14 ISTYPE 'com, buffer';    " device selected on VLB
   M_IO         PIN 1;                          " M/IO# signal from VLB
   ADS          PIN 2;                          " ADS# VLB control signal
   WPADS        PIN 23 ISTYPE 'com, invert';    " bus cycle with WP
   AddrEQ       NODE 19 ISTYPE 'com';           " VLB address is equal to
                                                "  WP card address low
"  active) with internal 								"  feedback

   ADR31,ADR30,ADR29,ADR28,ADR27,ADR26,ADR25,ADR24    PIN 3,4,5,6,7,8,9,10;
   Addr         = [ADR31..ADR24];               " VLB address signals
   
   CA31,CA30,CA29,CA28,CA27,CA26,CA25,CA24     PIN 11,13,22,21,20,18,17,16;
   CardAddr     = [CA31..CA24];                 " WP card address defined
                                                "  by switches

END AddrComp;

3.3. Pointer ALU

A speciális struktúrát igénylô Pointer ALU-t szintén 22V10 típusú PLD valósítja meg. A pointer regiszter (P7...P0) kétirányú lábakon keresztül csatlakozik a pointer buszra. Mivel a 22V10 makrocellájának architektúrája nem teszi lehetôvé a regiszterek órajel-engedélyezését, az inaktív állapotban szükséges állapot-megôrzés a regiszterek bemeneteire való visszacsatolással valósul meg. A pointer regiszter kimenetrôl való leválasztása az OE_PR (Output Enable) jel inaktív állapota mellett lehetséges. Az OE_PR=0 állapot egyúttal azt is jelenti, hogy az órajel következô felfutó élénél a pointer buszon levô információ automatikusan beíródik a pointer regiszterbe. A CE_PR (Count Enable) jel engedélyezi a Pointer ALU számára, hogy a pointer buszról visszacsatolt értéknek a pointer regiszterbe történô betöltésénél figyelembe vehetôk-e a az belsô adatbusz jelzôszám típus-azonosító bitjei (TypeH, TypeL).

MODULE ALU
TITLE '
  project       :  WATCHDOG PROCESSOR
  part          :  Pointer ALU
  author        :  Valyon Attila
  last modified :  04. 24. 1995.
'

"                                _________ 
"                        CLK -> |         | <-> P7
"                               |         | <-> P6
"                      OE_PR -> |         | <-> P5
"                      CE_PR -> |   ALU   | <-> P4
"                               |         | <-> P3
"                      TypeH -> |         | <-> P2
"                      TypeL -> |         | <-> P1
"                               |         | <-> P0
"                               |         |
"                               |  22v10  | -> SF
"                               |_________| -> SE


DECLARATIONS
   ALU  DEVICE  'p22v10';

   c    = .C.;                  " low-high-low transition
   x    = .X.;                  " don't care condition
   z    = .Z.;                  " three state value

   CLK  PIN 1;                  " 33MHz VESA local bus clock

   P7,P6,P5,P4,P3,P2,P1,P0  PIN 18,19,17,20,16,21,15,22 ISTYPE
'reg_D,buffer';
   PointerRegister      = [P7..P0];        

   OE_PR        PIN 2;          " Output Enable for Pointer Register
   CE_PR        PIN 3;          " Count Enable for Pointer Register
   TypeH, TypeL PIN 4,5;        " signature type bits
 
   SF   PIN 14 ISTYPE 'com';    " Stack-Is-Full and
   SE   PIN 23 ISTYPE 'com';    " Stack-Is-Empty error signals

   SOP  = !TypeH &  TypeL;      " Start-Of-Procedure type signature
   EOP  =  TypeH & !TypeL;      " End-Of-Procedure type signature
   
   StackFull    = (PointerRegister.pin>=^hFE);
   StackEmpty   = (PointerRegister.pin==^h00);

END ALU;

3.4. A vezérlôegység

A watchdog processzor mûködésének alapja a vezérlôegység. Implementációja Xilinx FPGA chipbe történt, felépítését a Xilinx architektúrához optimalizált XABEL fejlesztôi környezetben magas hierarchia szintû ABEL program írja le. A vezérlô állapotkódolása az FPGA környezethez igazodik, illegális állapot-átmenentek megszüntetésére járulékos logikával van kiegészítve.

MODULE SMachine
TITLE '
  project       	:  WATCHDOG PROCESSOR
  part          	:  State Machine
  author        	:  Valyon Attila
  last modified 	:  04. 24. 1995.
'
@DCSet;

DECLARATIONS
"--------------------------- Constant declarations ------------------

   c    = .C.;          	" low-high-low transition
   x    = .X.;          	" don't care condition
   z    = .Z.;          	" three state value

   fromPB	= 0; 	" constants to determine the direction of 
   toPB     	= 1;	" data flow between the internal data bus 
                     	" and the pointer bus

   fromVLB	= 0;	" constants to determine the direction of
   toVLB   	= 1;	" data flow between the VESA local bus
                        	" and the internal data bus

"------------------------- VESA local bus interface ----------------

   CLK 	PIN;	" 33MHz VESA local bus clock

   !LRDY 	PIN;    	" Local Device Ready control signal     
   !RDYRTN	PIN;  	" Ready Return signal driven by 			" VLB controller

"----------------------------- WP command types ------------------

   SIG  	PIN;    	" Signature sending

   TCH  	PIN;    	" Task Change
   STP  	PIN;    	" Set Timer Parameters
   WPT  	PIN;    	" Write Pointer
   SCE  	PIN;    	" Set Checking Enable

   RSS  	PIN;    	" Read Status
   RSK  	PIN;    	" Read Stack

   EOP  	PIN;    	" End-Of-Procedure type signature

"------------------------- Internal control signals -------------------

" Pointer control section:

   !CS_P	PIN;    	" Chip Select for SRAM contains 		" stack pointers
   !WE_P	PIN;	" Write Enable for SRAM contains 		" stack pointers

   DIR_Bridge	PIN;    	" determines the direction of data 		" flow through the
octal bidirectional 		" transceiver (Bridge)
   !OE_Bridge   	PIN;    	" enable or disable the ports of the 		" bridge 

   OE_PR	PIN;	" Output Enable signal for Pointer 		" Register
   CE_PR	PIN;	" Count Enable signal for Pointer 		" Register
   
" Stack control section:
   
   !OE_S	PIN;	" Output Enable for the stack 		" SRAM
   !WE_S	PIN;    	" Write Enable for the stack SRAM

" Status control section:

   !OE_Status	PIN;	" Output Enable for status vector
   CLR_Status 	PIN;    	" Reset (async.) for status vector
   CE_Status    	PIN;	" Clock Enable for status vector

   CE_CheckEn	PIN;	" Clock Enable for Checking Enable 		" Bit
   
" VLB-WP connection section:

   !CP_TIDR	PIN;    	" Clock signal for Task ID register
   !OE_Gate     	PIN;	" Output Enable for VLB-WP Gate
   DIR_Gate	PIN;    	" direction of the VLB-WP Gate

" Timer control section:

   C_TLGD	PIN;	" Clock Signal for Timer Limit Register, 		" Clock Enable for G
register and 		" Division Register
   !OE_TLR	PIN;	" Output Enable for Timer Limit Register

   !CS_T 	PIN;	" Chip Select for SRAM contains timer 		" values
   !WE_T	PIN;	" Write Enable for SRAM contains timer 		" values

   !PLoad	PIN;	" Parallel Load the Timer
   !OE_Counter 	PIN;	" Output Enable Counter to 		" timer bus

"-------------------------- Error checking signals -------------------
   
   Error	PIN;	" Error signal: TE or S (without SF, SE 		" and TO)

   CE_SRT	PIN;	" Clock Enable for Signature Register 		" and T register

"------------------------------ State register -------------------------

   QState	STATE_REGISTER ISTYPE 'reg_D';

   S_Idle	STATE;   	" WP is inactive
   S_SIG    	STATE;   	" signature receive
   S_EOP1, S_EOP2	STATE;	" EOP type signature 			" arrived
   S_NEOP	STATE; 	" NRM, SOP or JMP signature
   S_TCH1, S_TCH2, S_TCH3 	STATE;	" Task Change 		"command states
   S_STP	STATE; 	" Set Timer Parameters command
   S_WPT1, S_WPT2, S_WPT3	STATE;	" Write Pointer 		"command states
   S_SCE	STATE;	" Set Checking Enable state
   S_RSS1, S_RSS2,S_RSS3	STATE;	" Read Status 					" states
   S_RSK1, S_RSK2	STATE;    	" Read Stack states
   S_Error                  	STATE;	" Error noticed state

   XILINX PROPERTY 'Initialstate S_Idle';

END SMachine;

3.5. A konfigurációs hardware

A watchdog processzor vezérlô egységét ill. egyéb hardware komponenseket tartalmazó Xilinx chipet a mûködés megkezdése elôtt a belsô struktúra kialakítása érdekében konfigurálni kell. A tápfeszültség bekapcsolása után a Xilinx eszköz - a belsô automatikus reset folyamatokat követôen - valamennyi I/O kivezetését nagyimpedanciás állapotba vezérli és a konfigurációs módot meghatározó lábainak állapotától függôen kezdi meg a belsô RAM feltöltését. Master módban a konfigurációt saját maga felügyeli, míg slave módban passzív szerepet játszik. A watchdog processzorbeli chip konfigurációja soros slave módban történik, azaz a konfigurációs adatok bitsorosan, külsô vezérlô - jelen esetben az i486 processzor - által ütemezve íródnak be. A bitsorozat letöltése az ISA buszon keresztül zajlik le.

A konfigurációs báziscím négy - az AT gépek szokásos szabad periféria-címtartományában levô - lehetséges értékpár közül választható ki:

  Jumper pozíció  Bitfolyam báziscím     Inicializáló báziscím   
              00  300h                   301h                    
              01  30Ah                   30Bh                    
              10  314h                   315h                    
              11  31Eh                   31Fh                    

A WP kártyának az ISA buszhoz való illesztését programozható logikai eszköz végzi. A konfigurációs hardware ABEL nyelvû logikai leírása:

MODULE ConfAddr
TITLE '
  project       :  WATCHDOG PROCESSOR
  part          :  Configuration Address Decode Unit
  author        :  Valyon Attila
  last modified :  11. 01. 1995.
'

"                               _______________ 
"                       SA9 -> |               | <- SD0
"                       SA8 -> |               | <- SD6
"                       SA7 -> |               |
"                       SA6 -> |               | <-> DP
"                       SA5 -> | Configuration |  -> DOUT
"                       SA4 -> |    Address    |  -> CCLK
"                       SA3 -> |  Decode Unit  |
"                       SA2 -> |               | <- AddrSelH
"                       SA1 -> |               | <- AddrSelL
"                       SA0 -> |               |
"                              |               |
"                       AEN -> |               |
"                      IOR# -> |     22v10     |
"                      IOW# -> |_______________|


DECLARATIONS
   ConfAddr     DEVICE 'p22v10';

   z    = .Z.;                  " three state value
   x    = .X.;                  " don't care condition

   SA9,SA8,SA7,SA6,SA5,SA4,SA3,SA2,SA1,SA0      PIN 1,2,3,4,5,6,7,8,9,10;
   SA   = [SA9..SA0];                                " ISA bus address bits

   AEN,!IOW,!IOR        PIN 11,13,20;                " ISA control signals
   SD0                  PIN 19;                      " ISA data bits
   SD6                  PIN 23 ISTYPE 'com,buffer';  " SD6 is bidirectional
 
   DP                   PIN 15 ISTYPE 'com,buffer';  " Xilinx Done/Prog~
   DOUT                 PIN 21 ISTYPE 'com,buffer';  " configuration in
                                                     "  serial slave mode
   CCLK                 PIN 14 ISTYPE 'com,buffer';  " configuration clock

   AddrSelH, AddrSelL   PIN 18,17;      " configuration base address
                                        "  selection signals on ISA bus
   SelConf NODE 22;
   SelInit NODE 16;

   Addr1        = ^h300;                " base address possibilities for
   Addr2        = ^h30A;                "  the configuration of the     
   Addr3        = ^h314;                "  Xilinx chip
   Addr4        = ^h31E;

END ConfAddr;