User Manual
BCM1250/BCM1125/BCM1125H
10/21/02
B r o a d c o m C o r p o r a t i o n
Document
1250_1125-UM100CB-R
Section 4: System Control and Debug Unit
Page
71
The event is triggered by the data phase if the data_id_match bit is set and the top four bits of the transaction
ID on the data bus (which identify the agent that initiated the transfer) match the data_id field, or the
resp_id_match bit is set and the responder ID (which provided the data) matches the resp_id field. However,
if both data_id_match and resp_id_match bits are set then
both
IDs have to match for the event to trigger.
A CPU interrupt can trigger the event. Each interrupt mapper contains an interrupt trace mask register. Bits are
set in this register to indicate that when the corresponding interrupt is raised the event should be triggered. The
trace event will trigger when the int_trace_trigger output (see
) of either interrupt mapper
is asserted. This can be used to start tracing when the CPU gets an interrupt from the device being studied.
The trigger is edge sensitive and only happens on the change from neither int_trace_trigger outputs being
asserted to at least one being asserted. The trigger will not happen again until after the trace outputs from both
mappers have cleared.
An external device can trigger an event by pulling the DEBUG_L pin low. DEBUG_L is a bidirectional open
collector signal and must have an external pull-up to 3.3V. The SCD can signal the completion of a trigger
event sequence by pulling the signal low for 10 ZBbus cycles (see
Section: “Trigger Sequences” on page 73
The state of the DEBUG_L signal is ignored during the 10 cycles that the SCD is pulling it low and for 5 ZBbus
cycles after the SCD stops driving, so an event will not be triggered by the SCD signalling a sequence
completion. The trigger is edge sensitive, it will happen once when DEBUG_L changes from high to low and
will not happen again until DEBUG_L has returned high.
Expressing the event trigger in pseudo-code:
if ((
// Address section
(
((trace_event_N[15:12] == zb_req_id) | ~trace_event_N[4]) &
(
(trace_event_N[0] & addr_match0) |
(trace_event_N[1] & addr_match1) |
(trace_event_N[2] & addr_match2) |
(trace_event_N[3] & addr_match3) |
(trace_event_N[3:0] == 4'h0)
) &
(
(trace_event_N[11] & read) |
(trace_event_N[10] & write)
)
) |
(
// Data section
((trace_event_N[23:20] == zb_data_id) & (trace_event_N[6:5] == 2'b01))|
((trace_event_N[19:16] == zb_resp_id) & (trace_event_N[6:5] == 2'b10))|
((trace_event_N[23:20] == zb_data_id) &
(trace_event_N[19:16] == zb_resp_id) & (trace_event_N[6:5] == 2'b11))
) |
// Interrupt
(trace_event_N[7] & edge_detect (interrupt)) |
)
then trigger event N
// External pin
(trace_event_N[9] & edge_detect (~debug_pin))