summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Montero <fabian@posixlycorrect.com>2023-10-04 19:28:09 -0600
committerFabian Montero <fabian@posixlycorrect.com>2023-10-04 19:29:06 -0600
commit82e49cee6cb4bfdfb77244ddb1f7259221cfdc70 (patch)
treec0c9ae9866c66467d0eb938b2c876386a7549259
parentc08af15960a7c313948b8b511297d75c09f50b85 (diff)
añade explicación de monitor
-rw-r--r--demo/lock.S2
-rw-r--r--rtl/cache/monitor.sv8
2 files changed, 9 insertions, 1 deletions
diff --git a/demo/lock.S b/demo/lock.S
index 120728b..51805f2 100644
--- a/demo/lock.S
+++ b/demo/lock.S
@@ -12,7 +12,7 @@ spin_lock:
msr cpsr_c, r2
mov r3, #1
1: ldrex r2, [r0] @ se carga el valor del lock
- teq r2, #0 @ se revisa si el valor del lock, si es 1, se bringa al jump
+ teq r2, #0 @ se revisa si el valor del lock, si es 1, se brinca al jump
strexeq r2, r3, [r0] @ trata de guardar r3 en r0, pero solo si el monitor se lo permite
teqeq r2, #0 @ revisa si en efecto se hizo el store o no
bne 1b @ regresa al inicio
diff --git a/rtl/cache/monitor.sv b/rtl/cache/monitor.sv
index b7f0d15..06864ae 100644
--- a/rtl/cache/monitor.sv
+++ b/rtl/cache/monitor.sv
@@ -21,6 +21,14 @@ module cache_monitor
output logic monitor_commit
);
+ // Este módulo provee capacidad para spin_locks (básicamente mutexes) para
+ // proteger una sección de código a través de spin lock/unlock.
+ // Esto básicamente es la implemenntación de las instrucciones de ARM
+ // ldrex, strexeq, que originalmente no son parte ARMv4, esto implica
+ // que este quad-core es un frankenstein entre ARMv4 y alguna versión
+ // posterior que sí implementa esas instrucciones.
+
+
line monitor_rd, monitor_wr;
word update_3, update_2, update_1, update_0;
logic dirty, done, hit, known;