
ICEBreaker Module
ARM7TDMI Data Sheet
ARM DDI 0029E
9-12
O
Example
Let
A
v
[31:0]
be the value in the Address Value Register
A
m
[31:0]
be the value in the Address Mask Register
A[31:0]
be the Address Bus from the ARM7TDMI
D
v
[31:0]
be the value in the Data Value Register
D
m
[31:0]
be the value in the Data Mask Register
D[31:0]
be the Data Bus from the ARM7TDMI
C
v
[8:0]
be the value in the Control Value Register
C
m
[7:0]
be the value in the Control Mask Register
C[9:0]
be the combined Control Bus from the ARM7TDMI, other watchpoint
registers and the EXTERN signal.
CHAINOUT signal
The
CHAINOUT
signal is then derived as follows:
WHEN (({A
v
[31:0],C
v
[4:0]} XNOR {A[31:0],C[4:0]}) OR
{A
m
[31:0],C
m
[4:0]} == 0xFFFFFFFFF)
CHAINOUT = ((({D
v
[31:0],C
v
[6:4]} XNOR {D[31:0],C[7:5]}) OR
{D
m
[31:0],C
m
[7:5]}) == 0x7FFFFFFFF)
The
CHAINOUT
output of watchpoint register 1 provides the
CHAIN
input to
Watchpoint 0. This allows for quite complicated configurations of breakpoints and
watchpoints.
Take for example the request by a debugger to breakpoint on the instruction at location
YYY when running process XXX in a multiprocess system.
If the current process ID is stored in memory, the above function can be implemented
with a watchpoint and breakpoint chained together. The watchpoint address is set to
a known memory location containing the current process ID, the watchpoint data is set
to the required process ID and the
ENABLE
bit is set to “off”.
The address comparator output of the watchpoint is used to drive the write enable for
the
CHAINOUT
latch, the input to the latch being the output of the data comparator
from the same watchpoint. The output of the latch drives the
CHAIN
input of the
breakpoint comparator. The address YYY is stored in the breakpoint register and when
the
CHAIN
input is asserted, and the breakpoint address matches, the breakpoint
triggers correctly.
RANGEOUT signal
The
RANGEOUT
signal is then derived as follows:
RANGEOUT = ((({A
v
[31:0],C
v
[4:0]} XNOR {A[31:0],C[4:0]}) OR
{A
m
[31:0],C
m
[4:0]}) == 0xFFFFFFFFF) AND ((({D
v
[31:0],C
v
[7:5]}
XNOR {D[31:0],C[7:5]}) OR {D
m
[31:0],C
m
[7:5]}) == 0x7FFFFFFFF)