131 Pasos
131 Pasos
131 Pasos
FACULTAD DE INGENIERÍA
INGENIERÍA ELECTRÓNICA
MODULE: SIC
MEMORY: AC[18]; MD[18]; PC[13]; IR[18]; IA[13]; IB[13]; lf; M[8192,18]; intf; enif; INTR[8];
MR[8]; CSR[12]; BCR[4]; BIOR[4]; CC[2]; BWC[13]; DMADR[13]; DMLWR[13]; dmio; dmareq;
cpureq; MA[13];
INPUTS: start; ready; datavalid; accept; INTLINE[8]; BCRDY[4]; busy; DATAOUT[18]; dmar
OUTPUTS: BUSRDY[4]; csrdy; ready; datavalid; accept; bufend; read; write; MEMADDR[13];
DATAIN[18]; dmaval; dmacon; dmaend
BUSES: ABUS[18]; BBUS[18];OBUS[19]; MEMADBUS[13]
COMBUSES: IOBUS[18]; CSBUS[12]; DMBUS[18]; dmacpt
LABEL: mengnt = CSL121
1
7−2. MEMABUS =IR 5 : 17 ; read=1
→ SYN ( busy ) /(7−2)
8. null
→ SYN ( busy ) /(8)
9. NO DELAY
OBUS=0 , DATAOUT ;
IR 5: 17 ← OBUS6 : 18
cpureq ← 0
→(13)
10. NO DELAY
→(IR 4 )/(12)
11. IR 5 : 17 ← ADD( IR 5 : 17 ; IA)
→(13)
12. IR 5 : 17 ← ADD( IR 5 : 17 ; IB)
13. NO DELAY
→(IR 0 ⋀ IR1 )/(15)
14. PC ← IR5 : 17
→(2)
15. NO DELAY
cpureq ← 1
15−1.→ memgnt /(15−1)
→(IR 0)/( 21)
15−2. MEMABUS=IR 5 :17 ; read=1
→ SYN ( busy ) /(15−2)
15−3.null
→ SYN ( busy ) /(15−3)
16. NO DELAY
OBUS=0 , DATAOUT ;
MD ← OBUS1 :18
cpureq ← 0
→(IR 1 ⋀ IR 2 )/(18)
17. AC ← ( MD ! ( MD ∧ AC ) ! ( ADD1 : 18 ( MD ; AC ) ) )∗( ( IR 1 ⋀ IR 2) , ( IR 1 ⋀ IR2 ) ,(IR 1 ⋀ IR2 ) )
lf ∗(IR 1 ⋀ IR 2)← ADD0 ( MD ; AC )
→(24)
18. MD ← INC( MD)
19. NO DELAY
cpureq ← 1
19−1.→ memgnt /(19−1)
19−2. MEMABUS=IR 5 :17 ; DATAIN =MD
write=1
→ SYN ( busy ) /(19−2)
19−3.cpureq ← 0
→(∨/ MD)/(24)
20. PC ← INC( PC)
2
→(24)
21. MD ← ( ( AC ) ! ( 5 ⊺ 0 , INC ( PC ) ) )∗(IR2 , IR2 )
22. MEMABUS=IR5 : 17 ; DATAIN =MD
write=1
→ SYN ( busy ) /( 22)
22−1. cpureq ← 0
→(IR 2)/(24 )
23. PC ← IR5 : 17
24. PC ← INC( PC)
→(2)
25. NO DELAY
→(IR 3)/(50)
26. NO DELAY
→(IR 5)/(30)
27. NO DELAY
→( ( IR 6 ⋀ IR7 ) ,( IR6 ⋀ IR 7 ))/(1 , 29)
(No Step 28)
29. AC∗( IR 8 ∨ IR9 ) ←( ( 18 ⊺ 0 ) !(18 ⊺0) ! AC )
¿(( IR 8 ⋀ IR9 ) ,( IR8 ⋀ IR 9 ),(IR 8 ⋀ IR 9));
If ∗IR6 ← 0; If ∗IR 7 ← 1
→ ( 33 )
30. →(IR4 )/( 32) NO DELAY
31. If , AC ← AC , If
→(33)
32. If , AC ← AC 17 , If , AC 0: 16
33. NO DELAY
→( IR 10 ¿/(40)
34. NO DELAY
→¿
( IR ¿ ¿11 ⋀ IR 12) ¿/( 35 ,37 , 38 , 39)
35. NO DELAY
→(IR 13 ⋀ If )/(43)
36. PC ← INC (PC)
→(24)
37. AC ← ( 5⊺ 0 , IA ! 5 ⊺ 0 , IB )∗( IR13 , IR 13)
→( 43)
38. IA ←( ( AC 5 : 17 ) ! ( INC ( IA )))∗(IR13 , IR 13)
→( 43)
39. IB ←( ( AC 5 :17 ) !( INC ( IB )))∗(IR13 , IR 13)
→( 43)
3
40. NO DELAY
→( IR 4 ¿/(42)
41. If , AC ← AC , If
→( 43)
42. If , AC ← AC 17 , If , AC 0 : 16
43. NO DELAY
→(IR 14 )/( 45)
44. f =( AC 0 ⋀ IR 17 ) ∨((∨/ AC )⋀ IR 15) ∨( AC 0 ⋀(∨/ AC )⋀ IR 16)
→(f , f )/(36 , 24)
45. NO DELAY
→( IR 4 ¿/(47)
46. If , AC ← AC , If
→(24)
47. If , AC ← AC 17 , If , AC 0 : 16
→(24)
50. →(IR 4 )/(∫ seq)
51.→(IR 5 , IR5 )/(70 , TST seq)
60. intf , enif ← 0 ,0
61. IR 5: 17 ← ADDR(PRI ( INTR MR ))
62. NO DELAY
cpureq ← 1
62−1. → memgnt /(62−1)
62−2. MEMABUS=IR 5 :17 ; DATAIN =5⊺ 0 , PC
write=1
→ SYN ( busy ) /( 62−2)
63. cpureq ←0
64. PC ← IR 5 :17
→(24)
70. CSR ← IR 6 :17
71. CSBUS=CSR ; csrdy=1
→(accept )/(71)
72. NO DELAY
→(IR 9)/(74)
73. NO DELAY
→(IR 10 , IR10 )/(24 , 85)
74. NO DELAY
→(IR 11)/(78)
75. MD ← AC
76. Null
→(ready) /(76)
77. IOBUS=MD ; datavalid =1
→(accept , accept) /(24,77)
78.ready=1
4
→(datavalid )/(78)
79. CSR∗IR 10 ← CSBUS ; MD∗IR 10 ← IOBUS
80. accept=1
→(datavalid )/( 80)
81. NO DELAY
→(IR 10 )/(83)
82. AC ← MD
→(24)
83. NO DELAY
→¿
84. PC ← INC (PC )
→(24)
85. BIOR∗DCD(IR 7 : 8)←¿
→(24)
90. → ¿
91. CC ← INC (CC ) ;
→(90)
92. IR 5: 17 ← BADDR ( CC ) ;
BCR∗DCD ( CC ) ← 4 ⊺0
93. NO DELAY
cpureq ← 1
93−1.→ memgnt /(93−1)
93−2. MEMABUS=IR5 : 17 ; read=1
→ SYN ( busy ) /(93−2)
93−3. null
→ SYN ( busy ) /( 93−3)
94. NO DELAY
OBUS=0 , DATAOUT ;
MD ← OBUS1 :18
cpureq ← 0
IR 5: 17 ← INC( IR 5 :17 )
95. NO DELAY
BWC ← MD
cpureq ← 1
95−1.→ memgnt /(95−1)
95−2. MEMABUS=IR5 : 17 ; read=1
→ SYN ( busy ) /(95−2)
95−3. null
→ SYN ( busy ) /( 95−3)
96. NO DELAY
OBUS=0 , DATAOUT ;
MD ← OBUS1 :18
cpureq ← 0
5
97. MA ← ADD( MD ; BWC)
98. BWC ← INC ( BWC ) ; BUFRDY =DCD(CC )
99. NO DELAY
→(∨/(DCD ( CC ) ⋀ BIOR))/(103)
100. NO DELAY
cpureq ← 1
100−1.→ memgnt /(100−1)
100−2. MEMABUS=MA ;read=1
→ SYN ( busy ) /(100−2)
100−3.null
→ SYN ( busy ) /(100−3)
100−4. NO DELAY
OBUS=0 , DATAOUT ;
MD ← OBUS1 :18
cpureq ← 0
101. Null
→(ready) /(101)
102. IOBUS=MD ; datavalid =1
→(accept , accept)/(107 ,102)
103. ready=1
→(datavalid )/( 103)
104. NO DELAY
MD ← IOBUS
cpureq ← 1
104−1.→ memgnt /(104−1)
104−2. MEMABUS=MA ; DATAIN =MD
write=1
→ SYN ( busy ) /(104−2)
105. cpureq ←0
106. accept=1
→(datavalid )/(106)
107. NO DELAY
→(∨/BWC )/(109)
108. bufend =1
→(2)
109. BUFRDY =DCD ¿ )
110. NO DELAY
MA ← BADDR ( CC )
cpureq ← 1
110−1.→ memgnt /(110−1)
110−2. MEMABUS=MA ; DATAIN =BWC
write=1
→ SYN ( busy ) /(110−2)
111. cpureq ←0
→(2)
6
120. →¿ // mientras la memoria esté ocupada o no haya solicitudes de memoria, la secuencia
permanecerá en este paso.
//La señal dmar viene desde el periférico y va al FFJK
//En este paso se da prioridad a las solicitudes de DMA si las solicitudes de CPU y DMA llegan al mismo
tiempo
( dmareq ∧cpureq ∧busy ) ,
(dmareq ∧cpureq ∨busy ) ¿/(123,121,120)
// Si la memoria no está ocupada y se recibe una solicitud de DMA, el control se bifurca al paso 123 para
ejecutar la transferencia.
//Si se recibe una solicitud de CPU y la memoria no está ocupada y no hay solicitud de DMA presente, el
control se bifurca al paso 121 y devuelve la señal de concesión de memoria, que permite que la secuencia
principal de la CPU continúe con el ciclo de memoria
//Mientras esto está en progreso, la secuencia DMA espera en el paso 122 hasta que la CPU señala el final
de la operación de memoria borrando “cpureq”, en cuyo momento el control vuelve al paso 120 para
esperar más solicitudes de memoria.
121. NO DELAY
memgnt=1
122. →( cpureq , cpureq)/(122,120)
123. ( Start of DMA transfer )
123. NO DELAY //Se inicia con la secuencia de transferencia de DMA
DMADR ← INC ( DMADR ) // Se incrementa DMADR para obtener la dirección de la siguiente palabra a
transferir y verifica “dmio” para ver si la transferencia es de entrada o de salida.
→ dmio/127
124. MEMADBUS=DMADR ; read=1// En los pasos 124 y 125 se ejecutan la lectura de memoria
→(SYN ( busy ))/( 124) // Cuando está ocupado disminuye, lo que indica que la palabra está disponible
125. →( SYN (busy))/(125)
126. DMBUS=DATAOUT ;dmaval=1 ; dmareq ← 0
→(dmacpt , dmacpt , dmacpt )/(126 , 120 ,129)
//Borra “dmareq” para que esta solicitud no se responda nuevamente, envía la salida de memoria a DMBUS,
activa “dmacel” para indicar que la palabra de datos está en el bus y espera el periférico para reconocer con
“dmacpt”
//Cuando se recibe “dmacpt”, el control se bifurca en paralelo a 120 para verificar solicitudes de memoria
adicionales y a paso 129 para verificar la finalización de la operación DMA.
127. MEMADBUS=DMADR ; DATAIN =DMBUS
write=1
// inicia una operación de escritura en la memoria
// no hay que esperar a que el periférico envíe una señal que indique que los datos están en el bus ya que el
bus no se comparte con otros dispositivos
7
// El periférico puede poner la palabra a transferir en el bus al mismo tiempo que realiza la solicitud de DMA.
// Cuando está ocupado sube, lo que indica que la memoria ha aceptado la palabra
MEMADDR = MENADBUS
MEMADDR = MA
dmareq∗dmar ←1