Zjemnená špecifikácia CPU-1 Systém CPU-1 // prvá zjemnená špecifikácia DT // detto ako pri CPU-0 + r_stav є {OD, IF} PORTY vstup D data, instrukcia, Res signal, Wait, Clk signal, vystup D data, A adresa, Rd/Wr, Req signal, OPER STAV PC adresa, IR instrukcia, AC data, Contr r_stav; proces InstrCy = ResOper.[InstrRead.( (IR.opkod=BRN): BRNoper, (IR.opkod=ADD): ADDoper, (IR.opkod=LD): LDoper, (IR.opkod=ST): SToper )] ω ; agent InstrRead SI Contr = IF; TE es, up(clk=1), ef; KM (u; es; u). (Wait=0; ; u)*. (Wait=1 ; ;u).(wait=1; ; A=PC, Rd/Wr=1, Req=1) +.(Wait=0, D=d ; ; Req=1).(Wait=0; ; Req=0)*.(Wait=1;ef; Req=0);
g IR := d; // IR obsahuje inštrukciu PC := PC+1; Contr := OD; // OD Operation Decode agent BRNoper SI Contr = OD; TE es, up(clk=1), ef; KM g (u; es; u)(u; ef; u); PC := ak AC < 0 tak IR.adresa inak PC; Contr := IF; agent ADDoper SI Contr = OD; TE es,up(clk=1), ef; KM (Wait=1;es; u) (Wait=1; ;A=IR.adresa,Req=1,Rd/Wr=1) +..(Wait=0, D=d ; ; Req=1).(Wait=0; ; Req=0).(u ; ef ; Req=0); g AC := AC + d; Contr := IF; agent LDoper SI Contr = OD; TE es, up(clk=1), ef; KM (Wait=1; es; u).(wait=1 ; ; A=IR.adresa, Req=1, Rd/Wr=1) +.(Wait=0, D=d ; ; Req=1). (u; ef ; Req=0) g AC := d; Contr := IF; agent SToper SI Contr = OD;
TE es, up(clk=1), ef; KM (Wait=1; es; u).(wait=1 ; ;A=IR.adresa, D=AC, Rd/Wr=0, Req=1) +.(Wait=0 ; ; A= IR.adresa, D=AC, Rd/Wr=0, Req=1)..(Wait=0 ; ; A= IR.adresa, D=AC, Req=0, Rd/Wr=1). (u; ef ; Req=0) // v predposlednej akcii sa zabezpecuje zapis udaja z AC do // pamati udalostou up(rd/wr=1) g Contr := IF; agent ResOper TE es, ef; KM (u; es; u)(u; ef; u); g PC := 0; Contr := IF; START InstrCy (ez or (up(clk=1) and Res))
Zjemnenú špecifikáciu CPU-2 vytvoríme implementáciou agentov CPU-1 (InstrRead,., SToper) procesmi s mikrooperáciami. Takto zjemnená špecifikácia predstavuje už špecifikáciu správania na úrovni RT (mikroarchitektúry). System CPU-2 DT // detto ako v CPU-1 PORTY vstup D data, Res signal, Wait signal, Clk signal; výstup D data, A adresa, Req signal, Rd/Wr signal; OPER STAV PC adresa, IR instrukcia, AC data, MAR adresa // Memory Address Register MBR data // Memory Buffer Register proces PrInstRead = (LdMAR IncrPC)[EA] (Wait=1) [SetMRd] (Wait=0) [LdIR] (Wait=1) ; // symbol " " značí súbežnosť proces PrST = (MovIR-MAR LdMBR).[SetMWr] (Wait=0) ; proces PrBRN = (AC<0):MovIR-PC, (AC >=0):EA;
proces PrLD = MovIR-MAR.[SetMRd] (Wait=0). LdAC; proces PrADD = MoveIR-MAR.[SetMRd] (Wait=0).AddAC; proces PrGlobal = Reset.[ PrInstRead.((IR.opkod=BRN): PrBRN; (IR.opkod=ADD): PrADD; (IR.opkod=LD): PrLD; (IR.opkod=ST): PrST) ] ω ; agent LdMAR TE es,ef; KM (u;es;u)(u;ef;u); g MAR := PC agent IncrPC TE es, ef; KM (u;es;u)(u; ef;u); g PC := PC + 1 agent SetMRd TE es, ef; KM (Wait=1; es; A=MAR, Req=1, Rd/Wr=1).(u ; ef; u ) // [SetMRd] wait=0 [A.B] Wait=0 KM = A.A*.(Wait=0,D=d;ef; u) g MBR := d agent LdIR TE es, ef; KM (Wait=0; es;u).(u; ef; Req=0); // [LdIR] Wait=1 KM = (Wait=0;es;u) (Wait=0;es; Req=0)*. (Wait=1;ef;Req=0) // v KM sa caka iba na Wait=1 g IR := MBR; agent LdAC // KM = A.B
TE es, ef; KM (Wait=0; es; u)(u; ef; Req=0); // KM = A.B g AC := MBR; agent LdMBR TE es, ef; KM (u; es; u)(u; ef; u); g: MBR := AC; agent SetMWr TE es, ef; KM (Wait=1;es; A=MAR, D=MBR, Rd/Wr=0, Req=1).(u; ef; A=MAR, D=MBR); // KM = A.B // [SetMWr] Wait=0 KM = A.A*.B, kde B je vhodne dourčená akcia B // B = (Wait=0; ef; A=MAR, D=MBR, Rd/Wr=1, Req=0) agent MovIR-PC TE es,ef; KM (u; es; u)(u; ef; u); g: PC := IR.adresa; agent MovIR-MAR TE es, ef; KM (u; es; u)(u; ef; u); g MAR := IR.adresa; agent AddAC TE es,ef; KM (u; es; u)(u; ef; Req=0); g AC := AC + MBR;
agent Reset TE es, ef; KM (u; es; u)(u; ef; u); g PC := 0; START PrGlobal (ez or (up(clk=1) and Res));
Verifikácia CPU-2 oproti CPU-1 Potrebujeme zostaviť agentov, ktorí zodpovedajú jednotlivým procesom (špecifikujú jednotlivé procesy) v CPU-2 a porovnať s agentami v CPU-1. Ukážeme to iba na procesoch (1) PrInstRead a (2) PrBRN, teda zostavíme agentov PrInstRead resp. PrBRN. (1) Zostavenie KM generovanej procesom PrInstRead a zodpovedajúceho agenta PrInstRead = (LdMAR IncrPC).[EA](Wait=1) [SetMRd](Wait=0)..[LdIR](Wait=1); Mikrooperácie LdMAR a IncrPC sa realizujú súbežne. V danom prípade sa exekujú v tom istom mikrocykle (mikrotakte), pretože v akciách ich KM sú vstupné a tiež výstupné vektory nešpecifikované, KM pre ich paralelnú kompozíciu možno vyjadriť a opísať bez operátora ako spoločný výraz. Priraďovacie príkazy pre jednotlivé stavové premenné v súbežných mikrooperáciách sa potom združia do jedného súboru (pozri nižšie). LdMAR KM (u;es;u)(u;ef;u); g ==> MAR:= PC; IncrPC KM (u;es;u)(u;ef;u); g ==> PC:= PC+1; IncrPC LdMAR KM (u;es;u)(u;ef;u); g ==> MAR:= PC, PC:= PC+1; (IncrPC LdMAR) KM (u;es;u)(u;ef;u) [EA] (Wait=1) [EA] + = EA.EA* KM (u; es;u).(wait=0; ;u)*.(wait=1;ef;u)
(LdMAR IncrPC)]. [EA] (Wait=1) KM (u; es; u). (u; ;u). (Wait=0; ; u) *.(Wait=1; ef; u) SetMRd KM (Wait=1; es; A=MAR,Req=1,Rd/Wr=1).( u ; ef ; u) [SetMRd] (Wait=0) = SetMRd. SetMRd* KM (Wait=1;es; A=MAR,Req=1,Rd/Wr=1).(Wait=1 ; ; A=MAR, Req=1, Rd/Wr=1)*.(Wait=0, D=d; ef; A=MAR, Req=1, Rd/Wr=1) (LdMAR IncrPC)]. [EA] (Wait=1). [SetMRd] (Wait=0) KM (u;es;u). (u; ;u). (Wait=0; ; u) *.(Wait=1;; A=MAR,Req=1,Rd/Wr=1)..(Wait=1;;A=MAR,Req=1,Rd/Wr=1)*.(Wait=0,D=d; ef; A=MAR,Req=1,Rd/Wr=1) [LdIR] (Wait=1) LdIR KM (Wait=0; es ;u).(u; ef; Req=0) LdIR + = LdIR.LdIR* KM (Wait=0; es ;u).(wait=0; ;Req=0) *. (Wait=1, ef, Req=0) Zreťazením dostaneme kompletný výraz pre KM, ktorú generuje PrInstRead : PrInstRead KM (u; es; u).(u; ;u).(wait=0; ; u) *.(Wait=1; ; A=MAR,Req=1,Rd/Wr=1)..(Wait=1;;A=MAR,Req=1,Rd/Wr=1)*.(Wait=0,D=d;;A=MAR,Req=1,Rd/Wr=1)..(Wait=0,,Req=0) *.(Wait=1; ef ; Req=0) Minimálne komunikácia trvá 4 mikrocykly (hodinové cykly): (LdMAR IncrC). EA. SetMRd. LdIR 1 2 3 4 (minimálne je 5 bodov d-času pre 4 mikrocykly.)
V tejto formule môžeme subvýrazy typu K.K* nahradiť výrazom K +. Výsledný komunikačný výraz agenta PrInstRead je teda : KM (u; es; u). (u; ;u). (Wait=0; ; u) *. (Wait=1; ; A=MAR,Req=1,Rd/Wr=1) +..(Wait=0,D=d;;A=MAR,Req=1,Rd/Wr=1).(Wait=0,,Req=0) *.(Wait=1; ef ; Req=0) KM východiskového agenta InstRead z CPU-1 : KM (u; es; u). (Wait=0; ; u)*. (Wait=1 ; ;u).(wait=1; ; A=PC, Rd/Wr=1, Req=1) +.(Wait=0, D=d ; ; Req=1).(Wait=0; ; Req=0)*.(Wait=1;ef; Req=0); Výraz KM z východiskového agenta InstRead v CPU-0 je fakticky ekvivalentný s výrazom KM agenta PrInstRead Ďalej je zrejmé, že po vykonaní procesu PrInstRead (agenta PrInstRead) dostane CPU do vyžadovaného koncového stavu IR := d // d je inštrukcia PC := PC + 1 MAR := PC MBR := d
Teraz môžeme zostaviť agent PrInstRead agent PrInstRead SI Contr=IF0 TE es,up(clk=1),ef; KM (u; es; u). (u; ;u). (Wait=0; ; u) *. (Wait=1;; A=MAR,Req=1,Rd/Wr=1) +..(Wait=0, D=d; ; A=MAR, Req=1, Rd/Wr=1).(Wait=0,,Req=0) *.(Wait=1; ef ; Req=0) g IR := d; PC := PC + 1; MAR := PC; MBR := d;
(2) Zostavenie KM generovanej procesom PrBRN a zodpovedajúceho agenta PrBRN = (AC<0): MovIR-PC, (AC >=0): EA; EA KM (u;es;u)(u;ef;u) MovIR-PC KM (u; es;u)(u; ef; u) (AC<0): MovIR-PC, (AC>=0):EA KM [ AC >=0: (u; es;u) # AC < 0: (u; es ; u) ] (u; ef; u); Agent PrBRN vyzerá takto: agent PrBRN TE es,ef; up(clk =1) KM [ AC >=0: (u; es;u) # AC < 0: (u; es ; u) ] (u; ef; u); g PC := ak AC < 0 tak IR.adresa inak PC agent BRNoper SI Contr = OD; TE es, up(clk=1), ef; KM (u; es; u)(u; ef; u); g PC := ak AC < 0 tak IR.adresa inak PC; Contr := IF;
Odvodenie konečného stavového stroja (FSM) Z globálneho procesu PrGlobal = Reset.[PrInstVyb.((IR.opkod=BRN): PrBRN, (IR.opkod=ADD): PrADD, (IR.opkod=LD): PrLD, (IR.opkod=ST): PrST ) ]ω; a z jednotlivých agentov PrInstRead, PrBRN, PrADD, PrLD a PrST, ktoré zodpovedajú procesom PrInstVyb, PrBRN, PrADD, PrLD a PrST možno odvodiť konečný stavový stroj (FSM), ktorý vyjadruje tok riadenia a teda aj funkciu riadiacej časti CPU. Tu uvedieme Moorov FSM RS = (DV,R,MO,p,v), kde DV sú vstupné vektory pre riadenie, R sú stavy riadenia, MO sú mikrooperácie (jedno-cyklové agenty) v procesoch a p, v sú: prechodová a výstupná funkcia. p : R x DV R, v: R MO, teda v (q) = M je mikrooperácia, ktorá sa má vykonať v stave q. Pripomíname, že pri zostavení Moorovho FSM sme, pri vyjadrení čakacieho cyklu v procese PrInstRead použili cyklus s testovaním podmieky na konci cyklu [EA] (Wait=1) z čoho vyplýva KM pre EA.EA*: (u ;es ; u). (Wait =0 ; ; u)*. (Wait=1 ;ef ; u) V prípade, že by sme ho nahradili cyklom (Wait=0) [EA] dostali by sme KM : (Wait =0 ; ; u)*. (Wait=1; ef ; u). Získali by sme jeden cyklus k dobru. V prvom prípade je obyčajne jednoduchšia prechodová funkcia, pravda, na úkor straty jedného hodinového cyklu.
Prechodová tabuľka Moorovho FSM RS. Stav q Hodnoty vstupov - vstupný vektor v Nasl. stav p(q,v) Mikrooperácie v(q) podprocesy v PrGlobal RES u IF0 Reset IF0 u IF1 LdMAR IncrPC IF1 Wait=0 IF1 EA IF1 Wait=1 IF2 IF2 Wait=1 IF2 SetMRd PrInstVyb IF2 Wait=0,D=d IF3 IF3 Wait=0 IF3 LdIR IF3 Wait=1 OD OD d.opkod=st ST0 EA OD d.opkod=add AD0 OD d.opkod=brn, c=0 BR0 OD d.opkod=brn, c=1 BR1 OD d.opkod=ld LD0 LD0 Wait=1 LD1 MovIR-MAR LD1 Wait=1 LD1 SetMRd PrLD LD1 Wait=0,D=d LD2 LD2 u IF0 LdAC ST0 u ST1 MovIR-MAR LdMBR ST1 Wait=1 ST1 SetMWr PrST ST1 Wait=0 IF0 AD0 u AD1 MovIR-MAR AD1 Wait=1 AD1 SetMRd PrADD AD1 Wait=0,D=d AD2 AD2 u IF0 AddAC BR0 u IF0 EA PrBRN BR1 u IF0 MovIR-PC
Pri použití čakacieho cyklu v procese PrInstRead s podmienou na začiatku cyklu - (Wait=0) [EA] by prechodová fukcia p vyzerala takto: q v p(q,v) IF0 Wait=1 IF0 Wait=0 IF1 Wait=0 IF1 Wait=1 IF2 IF1 IF1 IF2 Výstupné symboly uvedeného FSM, priradené riadiacim stavom FSM, sú mená agentov = mikrooperácie, ktoré sa vykonajú na OČ pri jednotlivých stavoch FSM. Majú funkciu nastavovania hodnôt operačných stavových premenných z Q (v operačnej časti CPU). Z tohto modelu CPU v tvare FSM môžme dobre rozlíšiť množinu riadiacich stavov R od množiny operačných stavov Q. Množina R = {reset,ifo,if1, BR1} vystupuje v Moorovom FSM, ktorý modeluje správanie riadiacej časti CPU. Množinu Q tvorí množina vektorov hodnôt operačných stavových premenných v modeli CPU, teda množina Q = {(<MBR>, <MAR>, <PC>, <IR>, <AC>) }. Uvedený FSM je vlastne vyššie zavedený komunikačný stavový stroj (KSM) opisujúci komunikáciu generovanú v nekonečnom procese PrGlobal v špecifikácií CPU-2. Poznámka: Páry stavov (LD0, AD0) a (LD1, AD1) sú ekvivalentné a možno ich dať do spoločnej trasy od stavu OD, ktorú označíme predikátom d.opkod ε {ADD, LD}, pričom rozvetvenie na zakončenie LD a ADD sa rozvetví do stavu LD2 resp. ADD2
Špecifikácia v danej prípadovej štúdií CPU obsahuje iba jeden globálny proces PrGlobal. Ide o čisto sekvenčný systém bez súbežných globálnych procesov. Teda ide o jednu primárnu architektúru s jednou sekvenčnou riadiacou jednotkou. FSM v tvare prechodového grafu je na obrázku. Výstupy (mimo agenta Reset ) sme v prechodovom grafe vynechali.
Metodika syntézy operačných častí a špecifikácia riadenia A. Prechod od špecifikácie na syntézu operačnej časti systému B. Reprezentácia štruktúrnej implementácie operačnej časti a špecifikácie riadenia - tok údajov a tok riadenia C. Zostavenie štruktúry operačnej časti D. Zostavenie špecifikácie riadiacej časti A. Prechod od špecifikácie na syntézu operačnej časti systému Syntéza operačných častí (OČ) predstavuje jednu časť procesu návrhu štruktúrnej implementácie primárnych architektúr. Východisko: (cieľová) špecifikácia systému, t.j. množina procesov, alebo tzv. globálny proces P S. Cieľ: štruktúrna implementácia OČ. Globálny proces PS vyjadruje celkové správanie systému dané cieľovou špecifikáciou a to opisnými prostriedkami jedného procesu. Obsahuje agenty definované na systéme (obvykle mikrooperácie) a možno ho spravidla extrahovať a zostaviť zo špecifikácie. P S zostavíme na základe znalosti o štartovaní procesov (aj agentov) vonkajšími udalosťami. Globálny proces sa naštartuje udalosťou "ez" (reprezentujúcou pripojenie energie) a ako celok sa realizuje v nekonečnom cykle s "čakacím cyklom" na niektorú štartovaciu udalosť (danú štartovacím výrazom) tohto procesu.
Vychádzame z vypracovanej cieľovej špecifikácie VSYS-2, alternatívnej verzie VSYS-2 // vynecháme položku DT PORTY vstup D udaj; RD, CO, ACK, CLK booleovska hodnota; vystup DO udaj; RR, CR, REQ booleovska hodnota; OPER STAV M pole M(0),...,M(15) udaj; DO udaj; RR, CR, REQ booleovska hodnota; I index; proces PrReadIn = Reset.[(ACK=1)[EA].SetReq.[EA](ACK=1).ResReq.WriteM. InkrI ](I=0).SetRR ; proces PrCompute = Reset.[Add.InkrI](I=0).SetCR ; proces P1 = [ (RD=1): PrReadIn, (CO=1): PrCompute, ((RD=0 and CO=0)): EA ] ω ; agent Reset TE es, ef =up(clk=1); KM (u; es; u)(u; ef; DO=0, RR=0, CR=0, REQ=0); g I:=0; DO:=0; RR:=0; CR:=0; REQ:=0 TR FA e { up(i=0), up(do=0), dw(rr=1), dw(cr=1), dw(req=1)}: afto(e, ef, 0) ; agent InkrI TE es, ef =up(clk=1); KM (u; es; u)(u; ef; u);
g I:=I+1; TR afto(up(i=i+1), ef, 0); agent Add TE es, ef =up(clk=1); KM (u; es; u)(u; ef; DO=d); vs d = <DO> +< M(I)>; g DO:=DO + M(I); TR afto(up(do=d), ef, 0); agent SetCR TE es, ef =up(clk=1); KM (u; es; u)(u; ef; CR=1); g CR:=1; TR afto(up(cr=1), ef, 0); agent WriteM TE es, ef =up(clk=1); KM (D=d; es; u)(u; ef; u) g M(I) := d TR afto(up(m(i)=d), ef, 0) agent SetReq TE es, es, ef =up(clk=1); KM (ACK=0; es; u)(u; ef; REQ=1); g REQ:=1; TR afto(up(req=1), ef, 0); agent ResReq TE es, es, ef =up(clk=1); KM (ACK=1; es; u)(u; ef; REQ=0); g REQ :=0;
TR afto(dw(req=1),ef,0); agent SetRR TE es, es, ef =up(clk=1); KM (u; es; u)(u; ef; RR=1); g RR:=1; TR afto(up(rr=1), ef, 0); START P1 ez; Restr RD nand CO; RR => (not RD); CR => (not CO) ; CO => RR ; Pri danej restr sú výrazy RR => (not RD); a CR => (not CO); ktoré zabezpečujú, že ak práve skončil agent PrReadIn, tak nebude znova naštartovaný a podobne to platí aj pre PrCompute. Výraz CO => RR ; zabezpečuje, že PrCompute bude naštartovaný až po naplnení pamäti údajmi. Globálny proces sa nachádza práve v tejto alternatíve VSYS-2 a zodpovedá procesu P1. PS=P1= [ (RD=1): Reset. [ (ACK=1)[EA].SetReq.[EA](ACK=1). ResReq. WriteM..InkrI ](I=0). SetRR, (CO=1): Reset.[ Add. InkrI ](I=0).SetCR, ((RD=0)and(CO=0)): EA ] ω ;
Vo forme programovej schémy môžeme tento proces aj s danými obmedzeniami v špecifikácií (restr) opísať aj takto: Ps = L0: EA / (RD and (not CO) and (not RR)): L1, (CO and (not RD) and (not CR) and RR): C1, (RD nor CO) and (RD or RR)) and (CO or (not RR)) : L0 L1: Reset / L2; L2: ACK: L3, L4 L3: EA / L2 L4: SetReq / L5; L5: EA / ACK: L6, L5; L6 :ResReq / L7 L7: WriteM / L8; L8:InkrI/L9; L9:(I /=0 ) and (ACK=0): L4, (I /=0) and (ACK=1): L3, (I=0): L10; L10: SetRR / L0 C1: Reset / C2; C2: Add / C3; C3: InkrI / C4; C4:(I /= 0):C2, C5; C5: SetCR / L0 Zrejme ide o proces, pri exekúcii ktorého sa systém správa tak, ako predpisuje špecifikácia VSYS-2. Začiatočný príkaz (na návestí L0) predpisuje čakať (pri RD=0 a CO=0) v cykle z prázdnym agentom EA (prázdnou mikrooperáciou) na udalosť up(rd=1) alebo up(co=1), po ktorej sa inicializuje exekúcia sekcie procesu (označená návestiami "L" alebo "C"), ktorá zodpovedá procesu PrReadIn, resp. PrCompute.
A. Reprezentácia štruktúrnej implementácie operačnej časti a špecifikácie riadenia - tok údajov a tok riadenia Prostriedkami reprezentácie štruktúry OČ a globálneho procesu Ps, s ktorými sa pri návrhu v praxi najčastejšie pracuje, sú dva orientované grafy, vyjadrujúce priamo tzv. tok údajov a tok riadenia v navrhovanom systéme. Tok údajov predstavuje súbor funkčných závislostí medzi operandami (vstupnými údajmi a konštantami) a výsledkami (výstupnými údajmi) a teda súbor väzieb medzi premennými a operáciami. Operácie obsiahnuté v toku údajov sú obyčajne -- jednoduché funkcie (vyjadrené operátormi +,-,*, /,+1 a pod.) nad príslušnými údajmi, alebo -- priamo agenty (najčastejšie, mikrooperácie). Výstupmi agenta A v toku údajov sú výstupné a operačné stavové premenné, ktorých hodnoty sa v A nastavujú. Vstupy agenta A v toku údajov sú vstupné a stavové premenné a údajové konštanty, od ktorých priamo závisia hodnoty nastavovaných premenných v A. Tak napr. agent Add z VSYS-2 má tieto vstupy: stavové premenné M, I a DO, a výstup stavovú premennú DO. Značíme to takto: Add (M, I, DO ; DO)
Zostavenie grafu toku údajov Graf toku údajov (GTU) sa zostaví tak, že premenným, konštantám a operáciam v danej špecifikácií sa priradia vrcholy orientovaného grafu. Orientované hrany sa usporiadajú tak, aby vyjadrovali realizované údajové väzby medzi vstupmi, operáciami (agentmi) a ich výstupmi. Vrcholy priradené operáciam vyznačujeme obdĺžnikmi a vrcholy priradené premenným sú kružnice alebo elipsy. Konštanty uvádzame medzi apostrofmi, napr. konštanta: 0. Na ilustráciu uvedieme 2 GTU systému VSYS. V prvom GTU sú operácie priamo agenty definované v špecifikácií VSYS-2. Tento spôsob vyjadrenia toku údajov nie je viazaný na úroveň abstrakcie; môže používať ľubovoľné agenty ako nedeliteľné entity. V grafe sú naznačené aj operačné vrcholy (funkcie) generujúce hodnoty predikátov. Nositeľmi predikátov (ACK=1), (RD=1) a (CO=1) sú priamo vstupné boolovské premenné systému. V jednoduchých agentoch (mikrooperáciách) môže byť zahrnutý určitý paralelizmus v realizácii funkcií, ktoré obsahujú (napr. agent Reset zahrňuje 4 funkcie priradenia hodnoty 0 operačným stavovým premenným DO, I, RR, CR, čo sa vykonáva súbežne). GTU s agetmi použijeme (v zjednodušenej forme) pri plánovaní vykonávania operácií v riadiacich cykloch RČ.
GTU: '0' '1' Reset ResReq SetReq SetRR SetCR Vst. syst. D I Req RR CR WriteM M InkrI «-------------- výstupy systému --------------» «-------------- vstupy systému --------------» ACK RD CO Add I = 0 = 1 = 1 = 1 DO p Výstup systému «---------------------- vstupy RC ---------------------» Spôsob zostavenia je zrejmý. Vychádzame zo špecifikácie VSYS-2 a pre jednotlivých agentov stanovíme ich vstupy a výstupy. Medzi tieto vrcholy vložíme vstupujúce orientované hrany, resp. vystupujúce hrany do, resp. z vrcholu (agentu).
Druhý GTU reprezentuje tok údajov s jednoduchými operáciami. Jednoduché operácie sú vyjadrené priamo operátormi: + (súčet údajov), +1 (inkrementovanie údaja), (priame priradenie údaja premennej). Graf zostavíme z predchádzajúceho GTU s tým, že pre jednotlivé agenty zistíme aké jednoduché operácie sa v nich realizujú nad vstupnými operandami. Napr. v mikrooperácií Add sa realizuje jednoduchá operácia "+" nad vstupmi M,I, a DO s nastavením výsledku ako (novej) hodnoty DO {t.j. DO := DO + M[I] }. Symbolom sa vyznačujú priraďovacie operácie := pre operačné stavové premenné. Často ich vynechávame.
GTU s jednoduchými operáciami je vhodný pre extrahovanie štruktúry operačnej časti systému.