
4–46
Clocks, Cache, and External Interface
29 September 1997 – Subject To Change
Data Bus and Command/Address Bus Contention
4.9.2 Read/Write Spacing—Data Bus Contention
The data bus, data_h<127:0>, can be driven by the 21164PC, the Bcache array, or
the system.
In the case of private Bcache write operations followed by private Bcache read oper-
ations, the 21164PC stops driving the data bus well in advance of the Bcache turning
on.
For private Bcache read operations followed by private Bcache write operations, the
21164PC inserts a programmable number of cpu_clk cycles between the read and
the write operation (controlled by CBOX_CONFIG<BC_RW_OFF>). This allows
time for the Bcache drivers to turn off before the 21164PC data drivers are turned on.
4.9.3 Using idle_bc_h and fill_h
The 21164PC uses the idle_bc_h and fill_h signals to fill data into the Bcache. The
system must assert the idle_bc_h signal early enough to ensure that the 21164PC
completes any private Bcache transaction it might have started while waiting for the
fill data.
Signal fill_h is asserted a fixed number of sysclk cycles before the start of a fill
transaction.
At the end of the fill, the 21164PC waits five cpu_clk cycles before starting a read or
write operation. This time should allow the system to turn off its drivers. If, in prac-
tice, this is not enough time, the system may assert data_bus_req_h to gain addi-
tional cycles.
Calculating Time to Assert idle_bc_h
The idle_bc_time equation, for calculating the number of sysclk cycles that
idle_bc_h must sample prior to fill data being driven, can be expressed as:
When determining the tristate turnoff times, if the system will not turn on its drivers
for some number of nanoseconds after the 21164PC starts driving Bcache
index_h<21:4>; this time can be used to reduce the tristate_turn_off time.
idle_cpu_cycles
=
(4 + BC_RD_L BC_CLK tristate_ram_turn_off);
All values expressed as # of cpu cycles
idle_bc_time
=
ROUNDUP(idle_cpu_cycles / sysclk_ratio);
All values expressed as # of sysclk cycles