diff options
Diffstat (limited to '')
| -rw-r--r-- | demo/lock.S | 2 | ||||
| -rw-r--r-- | rtl/cache/monitor.sv | 8 |
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; |
