|
|||
| Home | |||
Copyright © 2007 ARM Limited. All rights reserved.
Release information
The following changes have been made to this Application Note.
Change history
|
Date |
Issue |
Change |
|
October 16, 2004 |
A.01 |
First release |
|
January 18, 2006 |
B |
Getting started section added |
|
March 09, 2007 |
B.01 |
Reference to AN100 removed |
Proprietary notice
ARM, the ARM Powered logo, Thumb and StrongARM are registered trademarks of ARM Limited.
The ARM logo, AMBA, Angel, ARMulator, EmbeddedICE, ModelGen, Multi-ICE, ARM7TDMI, ARM9TDMI, TDMI and STRONG are trademarks of ARM Limited.
All other products, or services, mentioned herein may be trademarks of their respective owners.
Confidentiality status
This document is Open Access. This document has no restriction on distribution.
Feedback on this Application Note
If you have any comments on this Application Note, please send email to errata@arm.com giving:
· the document title
· the document number
· the page number(s) to which your comments refer
· an explanation of your comments.
General suggestions for additions and improvements are also welcome.
ARM web address
This application note describes an example design implemented in an LT-XC2V6000 Logic Tile to allow use of the CT as an extension to the PB926EJ-S. The design is for a Logic Tile which accompanies each Core Tile.
This design is intended as a starting point for hardware developers to build a multi-master, multi-layer AHB system based around the PB926EJ-S. It is also designed to work as a system for multi-core software development.
The CT provides a platform for an ARM Test Chip to be connected to a Logic Tile system. The LT-XC2V6000 provides an FPGA in which to synthesise all the logic required around a core to make a useful system. The example RTL is designed so that up to four pairs of Core Tile and Logic Tile can be stacked together on top of a PB926EJ-S without any modification to the RTL. The design is limited to four pairs as the address map needs to be correctly divided, and the position determined by each master. Four masters is determined to be a reasonable number for this example. Should more than four masters be required a modified memory map, and position encoding system will be required. The system is also designed to allow for the addition of additional tiles with other customized logic.


Before you can use this application note, ensure that the PB926EJ-S baseboard is programmed and functioning correctly. Refer to the PB926EJ-S user guide for further information. Once you have done this please follow these steps to program the FPGA image in the Logic Tile with the image provided with this application note.
1. Plug the Logic Tile onto the PB926EJ-S. Do NOT plug the Core Tile onto the Logic Tile yet.
2. Fit the CONFIG jumper link on the PB926EJ-S (J32).
3. Connect RVI or Multi-ICE to the to the JTAG ICE connector on the PB926EJ-S (J31), or a USB cable to the PB926EJ-S USB Debug Port (J30).
4. Check the external supply voltage is +12V (positive on center pin, +/-10%, 35W), and connect it to the power connector (J35).
5. Power-up the board. The '3V3 OK' LED and ‘5V OK’ on the PB926EJ-S should both be lit.
6. If using Multi-ICE, run Multi-ICE Server, press ctrl-L and load the relevant manual configuration file from the \boardfiles\multi-ice directory. Depending on the version of Multi-ICE used it may also be necessary to add new devices to Multi-ICE. Please refer to \boardfiles\irlength_arm.txt for information on how to do this.
7. If using the USB connection, ensure that your PC has correctly identified an ARM® RealView™ ICE Micro Edition device is connected to the USB port. If the Windows operating system requires a USB driver to be installed please refer to \boardfiles\USB_Debug_driver\readme.txt.
8. If using Real View ICE (RVI), you must ensure that the RVI unit is powered and has completed its start-up sequence (check the LEDs on the front panel have stopped flashing).
9. You can now run the relevant ‘progcards’ utility for the connection you have prepared above.
When using RVI select the target RVI box you are using.
10. Select the option for the Core Tile you are using. The utility will report its progress, it may take several minutes to download. A successful configuration download will be terminated with the message “Programming Successful” .
11. Power down the boards.
12. Plug the Core Tile onto the Logic Tile.
13. Set the configuration switches to load Logic Tile FPGA image 0 (S2 on the Logic Tile set to all OFF).
14. Remove the CONFIG jumper link (J32), and power-up the boards. Ensure 'FPGA_OK’ (Logic Tile D6) and the ‘POWER’ (Core Tile D1) LEDs are lit. The Character LCD should show the Firmware and Hardware versions indicating that the Boot monitor firmware is running.
15. The system will now be fully configured and ready for use.
Figure 3-1 shows the contents of the Core Tile system for use with the PB926EJ-S. The PB926EJ-S exposes three AHB buses onto the Logic Tile stack. These are the M1 (Master bus from the development chip), the M2 (second Master bus from the development chip, shared with the Platform Baseboard), and S (a slave port into the Development Chip shared between the Logic Tile stack and the PCI system). The arbiter for selection of the appropriate master is embedded into this design in a cascaded format in order to allow flexible extension (ie each and every logic tile containing a master requires an accompanying arbiter).
Figure 3-1 AN125
example design block diagram

Bus names:
VPB M1: This is the PB926EJ-S Master1 bus. It is a bus which is mastered by the Development Chip.
VPB M2: This is the PB926EJ-S Master2 bus. This bus is not used by this system. A default slave is added to the bottom tile to correctly handle any accesses attempted on the M2 bus.
VPB S: This is the PB926EJ-S Slave bus. This allows a master to access shared slaves inside the Development Chip (including bridges back out onto the M1 and M2 buses). The PCI subsystem on the Platform Baseboard is also a master on this bus, hence the need for an Arbiter.
LTS: This is the cascaded Logic Tile Slave bus. It allows connection of additional tiles to be stacked on top of this system as if they were connected to the VPB S bus.
TC: The Test Chip bus is the exposed AHB system from the Test Chip fitted to the Core Tile. The Test Chip is the only master on this bus.
Note that the direction of the arrows indicates the direction of control, ie it points from the Master to the Slave. An AHB bus contains signals going in both directions.
The function of each of these blocks is as follows:
1:1 Bridge: This allows for cascaded arbitration of masters up the stack and to allow for reasonable timing to be met across a large number of subsystems in a stack.
Arbiter: This allows for the sharing of the VPB S bus between multiple masters. The arbiter in this example arbitrates between three masters, the 1:1 bridge, the ASync Bridge, and any master on the system below (eg PCI on V/PB926EJ-S). Priority is given to the master on the tile below, and divided fairly between the two other masters.
ARM Decoder: This selects which slave the Test Chip (TC bus) is currently accessing.
ASync Bridge: This bridge allows the Test Chip to produce its own HCLK independent of the rest of the system. It also allows for better timing on the Test Chip AHB bus.
BPLogic: This block is a matrix to allow cross triggering of multiple cores. The BP Logic blocks have a four channel shared communications line to allow each core to trigger other cores. There are two instantiations of this block in this design, as one is associated with the Test Chip, and in the case of the bottom tile positioned system one is associated with the Development Chip. Above the base position the second block is redundant.
Default: This slave generates an error response to all otherwise unused addresses so as to avoid undefined bus responses.
DPRAM: Dual Port RAM (FPGA Block Ram). It provides a pool of memory that both the local Test Chip and external masters can access simultaneously.
GTCRegs: This block contains registers that control the Test Chip operation such as clock frequencies, power control and measurement, identification etc.
MailBox: Allows the PB926EJ-S to interrupt the local Test Chip system and vice versa. It also allows for controlled flow of data through a mailbox register between the two systems.
Muxes: These allow multiple slaves to be connected into a single AHB bus.
VPB Regs: This block allows cross-triggering to the PB926EJ-S.
VPB M1 Decoder: This determines whether the M1 bus is trying to access this system, and which particular slave is being accessed.
ZBTRam: This is to provide each Test Chip with 2MB of relatively fast, low latency, private memory.
The clock architecture is designed to make use of both the Test Chip and PB926EJ-S clock architectures.
The User Guides for all the boards used in this configuration explain the clock options they support.
Figure 3-2 Clock
architecture – HCLK

This clock architecture has been chosen for this system for a number of reasons.
1. The Core Tile can use either XL[33] or XU[33] as its reference clock. Since the Core Tile will always be connected on top of the PB926EJ-S, its clock multiplexers are configured so that REFCLK is sourced from XL[33]. Therefore the logic tile must drive a reference clock on XU[33].
2. The test chip then generates the HCLK for the ARM system based on its PLL configuration settings. REFCLK should not be used to clock any part of the design, since it may note be synchronous with HCLK.
3. The PLL is set into NORMAL mode (PLLBYPASS = 1’b0). This is so that the CPU on the Core Tiles can be used at its maximum frequency.
4. X[34] is chosen as the exported HCLK from the Test Chip, so that Test Chips with different VDDIO settings can be used. All signals on HDRX are able to support different voltage ranges. To understand how to set up boards for non 3.3V signaling read the appropriate User Guides.
5. GLOBALCLKIN is used to operate the AHB system busses synchronous to the baseboard. This signal is used, as its timing is guaranteed to be very close to the timing of GLOBALCLKIN on any other boards on Tile Site 1, including the baseboard itself.
6. There is an asynchronous bridge between the SYS clock domain and the ARM clock domain. This allows both the Logic Tile to interface to both the Core Tile and PB926EJ-S AHB domains.
In order to facilitate the above clock architecture the Core Tile Serial Stream must be correctly configured.

|
This configuration is chosen to match the overall clock architecture scheme. All the AHB Core Tiles designed for use in this system export their HCLK rather than synchronizing to an input HCLK (HCLKIN). Therefore HCLKIN is configured to always be connected to ground.
The CLK_NEG_UP signal, since it is not used for HCLKIN or HCLK, is configured to be passed through the Core Tile. This makes it available for use in other boards above the Core Tile.
Global Clock is not driven from the Core Tile directly, because there would be a delay between the Global Clock signal on Tile Site 1 and Tile Site 2.
By default the test chip PLL is enabled (PLLBYPASS = 1’b0).
The settings for the PLL are dependent upon the specific Test Chip being used. Refer to the registers verilog file to see what defaults are being applied.
The baseboard has primary responsibility for reset control. Refer to the PB926EJ-S User Guide for how this works.
The Logic Tile and Core Tile resets are then generated from these signals (nSYSPOR and nSYSRST).
All Power On resets are directly driven from nSYSPOR. This signal is completely asynchronous to any system clocks.
The AHB resets both in the Logic Tile and Core Tile must be synchronized to the appropriate HCLK.
In the case of the System domain with the baseboard nSYSRST is synchronized to GLOBALCLK using flip flops inside the FPGA. This signal can safely occur a couple of clock cycles after it is released on the baseboard because the baseboard is guaranteed not to access the Logic Tile site in these first few clock cycles.
The ARM domain HRESETn are synchronized to HCLK (XU[34]) from the Test Chip. This can be safely delayed from the copy of nSYSRST provided to the Test Chip, as the Test Chip has exactly the same synchronization logic fitted inside it.
There is a simple interrupt controller embedded into the registers block at 0x10400040. For information on how to operate this block refer to section 4.
Some test chips also include their own Vectored Interrupt Controller inside the Test Chip. The following Test Chips presently have their own VIC:-
ARM926EJ-S UMC 0.18um LF712
ARM926EJ-S TSMC 0.18um LF711
This VIC allows the Test Chip to handle interrupts from embedded peripherals much faster (eg the DMA Controller). In order to allow interrupts through from outside the Test Chip, source 5 (nIRQ) and 4 (nFIQ) must be passed through this interrupt controller. To do this, do the following:-
Set 0x3FFE000C = 0x00000010. This Sets Source 4 to be routed to nFIQ rather than nIRQ.
Set 0x3FFE0014 = 0xFFFFFFFF. This clears any currently raised interrupts prior to enabling the interrupts.
Set 0x3FFE0010 = 0x00000030. This allows source 4 and source 5 to generate an interrupt to the processor.
The CT on PB926EJ-S example design provides a software interface with the majority of features required for a multi-core system. Note that all masters can access any slaves on the PB926EJ-S M1 bus, as the development chip loops the S bus back to the M1 and M2 bus.
|
Peripheral |
Development Chip |
CPU 0 |
CPU 1 |
CPU 2 |
CPU 3 |
|
GTC Regs |
- |
0x10400000 |
0x10400000 |
0x10400000 |
0x10400000 |
|
ZBT RAM |
- |
0x10800000 |
0x10800000 |
0x10800000 |
0x10800000 |
|
DPRAM |
0x80100000, 0x90100000, 0xA0100000, 0xB0100000 |
0x0 |
0x0 |
0x0 |
0x0 |
|
VPB Regs |
0x80000000, 0x90000000, 0xA0000000, 0xB0000000 |
- |
- |
- |
- |
|
MailBox |
0x80200000, 0x90200000, 0xA0200000, 0xB0200000 |
0x10600000 |
0x10600000 |
0x10600000 |
0x10600000 |
|
Test Chip Internals |
- |
0x3FFC0000 |
0x3FFC0000 |
0x3FFC0000 |
0x3FFC0000 |
Figure 4-1 CT for PB926EJ-S example design memory map
The design can be used between one and four times in a logic tile stack with the option of additional logic added above this. The following table shows some examples of which address ranges are decoded by Tiles on the Logic Tile stack in different configurations.
|
Position |
Example A – 1 Core Tile |
Example B – 2 Core Tiles |
Example C – 3 Core Tiles |
Example D – 4 Core Tiles |
Example E – 4 Core Tiles & Expansion |
Example F – 2 Core Tiles & Expansion |
|
Extension Logic |
Not Fitted |
Not Fitted |
Not Fitted |
Not Fitted |
0xC0000000 – 0xFFFFFFFF |
0xA0000000 – 0xFFFFFFFF |
|
Core Tile 3 |
Not Fitted |
Not Fitted |
Not Fitted |
0xB0000000 – 0xFFFFFFFF |
0xB0000000 – 0xBFFFFFFF |
Not Fitted |
|
Core Tile 2 |
Not Fitted |
Not Fitted |
0xA0000000 – 0xFFFFFFFF |
0xA0000000 – 0xAFFFFFFF |
0xA0000000 – 0xAFFFFFFF |
Not Fitted |
|
Core Tile 1 |
Not Fitted |
0x90000000 – 0xFFFFFFFF |
0x90000000 – 0x9FFFFFFF |
0x90000000 – 0x9FFFFFFF |
0x90000000 – 0x9FFFFFFF |
0x90000000 – 0x9FFFFFFF |
|
Core Tile 0 |
0x80000000 - 0xFFFFFFFF |
0x80000000 – 0x8FFFFFFF |
0x80000000 – 0x8FFFFFFF |
0x80000000 – 0x8FFFFFFF |
0x80000000 – 0x8FFFFFFF |
0x80000000 – 0x8FFFFFFF |
|
ARM926EJ-S Development chip |
0x0 – 0x7FFFFFFF |
0x0 – 0x7FFFFFFF |
0x0 – 0x7FFFFFFF |
0x0 – 0x7FFFFFFF |
0x0 – 0x7FFFFFFF |
0x0 – 0x7FFFFFFF |
Figure 4-2 Address Decoding Examples
Figure 2-1 Memory Map
The core tile subsystem position and address decoding is determined by using three pins on HDRY. Two pins driven from the tile below indicate the position of the Core Tile subsystem above the Baseboard and the third pin indicates whether there are any additional systems above this tile.
YL[61:60] : ID of this Core Tile (0-4)
YU[59] : Additional logic present above this tile.
The tile position is also used to decide whether to drive the remaining signals required at the bottom of the PB926EJ-S stack, such as for the M2 bus, and usage of the HDRY fold over signals. The requirements for how to drive unused signals at the base of a PB926EJ-S system are explained in its accompanying documentation.
This block is based upon the core module register block in Integrator Core Modules. Its function is to control all the local resources such as Test Chip control signals, clock generation and routing, power control, DAC readings, and interrupts. The GTC Regs area is private to each core as its function is to control that individual core. Most of these registers are similar to their Core Module (CM_) counterparts. POR means Power On Reset (reset that occurs only at power up, and static means the contents never change. RESET indicates the contents are cleared by a normal reset.
Register Address read/write reset by
-- generic registers
CT_ID 0x10400000 r static
CT_PROC 0x10400004 r static
CT_OSC 0x10400008 r/w POR
CT_CTRL 0x1040000C r/w RESET
CT_STAT 0x10400010 r RESET
CT_LOCK 0x10400014 r/w RESET
CT_LMBUSCNT 0x10400018 r RESET
CT_AUXOSC 0x1040001C r/w POR
CT_SDRAM 0x10400020 r/w POR
CT_INIT 0x10400024 r/w POR
CT_REFCNT 0x10400028 r RESET
-- flags registers
CT_FLAGS 0x10400030 r RESET
CT_FLAGSS 0x10400030 w RESET
CT_FLAGSC 0x10400034 w RESET
CT_NVFLAGS 0x10400038 r POR
CT_NVFLAGSS 0x10400038 w POR
CT_NVFLAGSC 0x1040003C w POR
-- interrupt controller
CT_IRQ_STATUS 0x10400040 r RESET
CT_IRQ_RAW 0x10400044 r RESET
CT_IRQ_ENABLE 0x10400048 r RESET
CT_IRQ_ENABLES 0x10400048 w RESET
CT_IRQ_ENABLEC 0x1040004c w RESET
CT_SOFT_INT 0x10400050 r RESET
CT_SOFT_INTS 0x10400050 w RESET
CT_SOFT_INTC 0x10400054 w RESET
CT_FIQ_STATUS 0x10400060 r RESET
CT_FIQ_RAW 0x10400064 r RESET
CT_FIQ_ENABLE 0x10400068 r RESET
CT_FIQ_ENABLES 0x10400068 w RESET
CT_FIQ_ENABLEC 0x1040006C w RESET
-- cross triggering
CT_DBGXTRIG 0x10400070 r/w RESET
-- voltage and power management
CT_VOLTAGE0 0x10400080 r/w POR
CT_VOLTAGE1 0x10400084 r/w POR
CT_VOLTAGE2 0x10400088 r/w POR
CT_VOLTAGE3 0x1040008C r POR
-- CT PLD Control
CT_PLD_CTRL 0x10400094 r/w POR
-- voltage and power management (cont.)
CT_VOLTAGE4 0x104000A0 r POR
CT_VOLTAGE5 0x104000A4 r POR
CT_VOLTAGE6 0x104000A8 r POR
CT_VOLTAGE7 0x104000AC r POR/RESET
-- Memory Expansion SPD memory
CT_SPDBASE 0x10400100 r POR
This register allows the user to determine the type of board that this is. It contains information about the build of the fpga, and the type of system that the FPGA image is designed for. It is a read-only register, with values coded into the RTL.
|
31 |
|
|
|
|
24 |
23 |
|
|
|
16 |
15 |
12 |
11 |
|
|
|
|
|
4 |
3 |
0 |
|
MAN |
ARCH |
FPGA |
BUILD |
REV |
|||||||||||||||||
CT_ID Identification
3:0 Revision
11:4 Build value (version) for internal development 0x00-0x99, binary coded decimal
15:12 FPGA type
23:16 Architecture
31:24 Manufacturer
All FPGA images associated with Core Tiles should contain identification registers. The allocation of bit fields is described in Table 2‑1.
|
Bits |
Name |
Description |
Allowable values |
|
31:24 |
MAN |
manufacturer |
0x41 = ARM, other values may be used for special customer/partner applications. In general use the same encoding as for processor cores. |
|
23:16 |
ARCH |
architecture |
Core module encoding as follows: bit [1:0] – processor bus type, 00 = ASB, 01 = 7TDMI, 10 = AHB bit [3:2] – system bus type, 00 = ASB, 10 = AHB bit 4 – SDRAM data width, 0 = 32-bit, 1 = 64-bit bit 5– SDRAM burst length, 0 = 4 b00011010 = AHB processor bus, AHB system bus, 4x64-bit burst SDRAM controller |
|
15:12 |
FPGA |
FPGA type |
0x8 = Xilinx Virtex II XC2V6000/XC2V8000 |
|
11:4 |
BUILD |
build number |
Build value or version for ARM identification, binary coded decimal e.g. 0x40 = version 40 |
|
3:0 |
REV |
revision number |
Release revision 0x0 = Revision A (ASB system) 0x1 = Revision B (AHB system) 0x2 = Revision C (Bluetooth AHB system) 0x3 = Revision D (AHB-lite system, i.e. Integrator/CP) 0x4 = Revision E (926 DevChip, Multi-layer AHB) |
Table 4‑1: CT_ID Registers
This register allows the user to determine the type of Test Chip fitted to this board. It is usually set to zero to indicate that the Test Chip can be directly interrogated in its CP15 registers (CP15 r0).
|
31 |
|
|
|
|
24 |
23 |
|
|
|
16 |
15 |
|
|
|
|
|
|
|
|
|
|
4 |
3 |
|
|
0 |
|
PROCESSOR |
||||||||||||||||||||||||||
|
IMP |
ARCH |
PART |
REV |
|||||||||||||||||||||||
CT_PROC Processor Identification
31:0 If value = 0x00000000, read CP15r0 for details
or
3:0 Revision
15:4 Part
23:16 Architecture
31:24 Implementer
This register allows the user to set a range of different Test Chip Reference Clock (REFCLK) frequencies. This clock is used by the Test Chip PLL to generate the CPU clock and any other synchronous clocks. The formula to calculate the clock frequency is:-
REFCLK = 48 * (VDW + 8) / (RDW + 2) * OD.
The value entered into this register is only applied on either a reset of the core, or if the Force Immediate Update bit is set (bit 26). A 1 in bit 27 (NewVal) indicates that the value of CT_OSC has been changed, but that change has not yet been applied to the clock.
In order to understand the range of permissible values for each of these variables please refer to the ICS307 datasheet.
|
31 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
19 |
18 |
16 |
15 |
|
|
|
9 |
8 |
|
|
|
|
|
|
|
0 |
|
Reserved |
NewVal |
Force |
Reserved |
BMODE |
Reserved |
OD |
RDW |
VDW |
||||||||||||||||
|
CT_OSC |
Oscillator Divisors |
|
|
Freq = 48(VDW + 8)/OD(RDW+2) |
|
8:0 |
CPU clock divider VDW |
|
15:9 |
CPU clock divider RDW |
|
18:16 |
CPU clock output divider (OD) 000 divide by 10 |
|
22:19 |
Unused (reserved) |
|
24:23 |
Memory Bus mode (read only) 00 ARM7x0 processors (select processor bus mode by writing to CT_CTRL register) 01 ARM9x0 processors (select processor bus mode by writing to CP15r1) 10 ARM9x6 processors (select processor bus mode by writing to CT_INIT register) 11 ARM10x00 processors (select processor bus mode by writing to CT_INIT and CP15r1) |
|
25 |
Unused (reserved) |
|
26 |
Force immediate update |
|
27 |
New Value pending |
|
31:28 |
Unused (reserved) |
Note: This is the input clock to the processor and maybe the reference for the PLL, or the core clock in bypass mode. External memory clock is derived from within the processor device. A second oscillator is available but is not programmed via this register. See CT_AUXOSC for details.
This register allows control over extra hardware features. In this example design it is used to control the four LEDs fitted to the Logic Tile.
|
31 |
28 |
27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
1 |
0 |
|
LED |
Reserved |
MBDET |
Reserved |
||||||||||||||||||||||||
CT_CTRL Control
0 Unused (reserved)
1 Motherboard detect, 0 = motherboard, 1 = stand alone (read)
27:2 Unused (reserved)
31:28 User LEDs 3:0
This register shows the current status of the SSRAM configuration, the User Switches fitted to the Logic Tile, and the position of this board in a stack.
|
31 |
28 |
27 |
24 |
23 |
|
|
|
16 |
15 |
|
|
|
|
|
8 |
7 |
|
|
|
|
0 |
|
SW |
Reserved |
SSRAMSIZE |
SILICON ID |
POS |
|||||||||||||||||
CT_STAT Status
7:0 Master Tile number in stack
0x00 = Core Tile 0
0x01 = Core Tile 1
0x02 = Core Tile 2
0x03 = Core Tile 3
15:8 Silicon ID (board specific field)
23:16 SSRAM memory size
Appending 0x0000 gives memory size:
0x20 => SSRAM=2MB (0x200000)
27:24 Unused (reserved)
31:28 User switches 3:0
This register prevents accidental writes to important system registers. It locks the following registers: CT_OSC, CT_VOLTAGE0, CT_VOLTAGE1, CT_VOLTAGE2, CT_VOLTAGE3, CT_PLD, CT_REFRESH, CT_AUXOSC, and CT_INIT. In order to write to any of these refisters, unlock them by writing 0xA05F to CT_LOCK. In order to relock these register write any value other than 0xA05F to this register.
|
31 |
|
|
|
|
|
|
|
|
|
|
|
17 |
16 |
15 |
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
Reserved |
LOCKED |
LOCKVAL |
|||||||||||||||||||||||||
CT_LOCK Lock
15:0 Lock value, write 0xA05F to unlock, any other value locks
16 Lock bit, read 1 = locked, 0 = unlocked
31:17 Reserved
This register allows the user to determine the number of Test Chip HCLK cycles between two accesses to this register. It can be used for basic profiling or time control.
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
LMBUSCNT |
|||||||||||||||||||||||||||||
CT_LMBUSCNT Local Memory Bus Cycle Counter
31:0 32-bit count value, resets at 0 and counts up
This register allows the user to set a range of different auxiliary clock frequencies. This clock is unused in the default example design, but may be used by the user in future designs. The PLL control for the Test Chip can also be set in this register when the Test Chip makes use of the ARM_PLL* signals. To determine whether your specific Test Chip does, refer to the Reference Manual accompanying your Test Chip. The formula to calculate the clock frequency is:-
REFCLK = 48 * (VDW + 8) / (RDW + 2) * OD.
In order to understand the range of permissible values for each of these variables please refer to the ICS307 datasheet.
|
31 |
28 |
27 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
16 |
15 |
|
|
|
9 |
8 |
|
|
|
|
|
0 |
|
PLLOUTDIV |
PLLREFDIV |
Reserved |
PLLCTRL |
Reserved |
OD |
RDW |
VDW |
|||||||||||||||
|
CT_AUXOSC |
Auxiliary Oscillator Divisors |
|
|
Freq = 48(VDW + 8)/OD(RDW+2) defaults give Freq = 48x263/(6x65) = 32.37MHz |
|
8:0 |
Aux clock divider VDW 011111111 255 (default) |
|
15:9 |
Aux clock divider RDW 0111111 63 (default) |
|
18:16 |
Aux clock output divider (OD) 000 divide by 10 |
|
19 |
Unused (reserved) |
|
21:20 |
PLLCTRL[1:0] |
|
23:22 |
Unused (reserved) |
|
27:24 |
PLLREFDIV[3:0] |
|
31:28 |
PLLOUTDIV[3:0] |
|
31 |
|
|
|
|
|
|
|
|
20 |
19 |
16 |
15 |
12 |
11 |
8 |
7 |
6 |
5 |
4 |
|
2 |
1 |
0 |
|
Reserved |
Banks |
Columns |
Rows |
Reserved |
SPD |
Size |
CAS |
||||||||||||||||
CT_SDRAM SDRAM Control
1:0 CAS latency
0x = reserved
10 = cas latency = 2 (default)
11 = cas latency = 3
4:2 Memory size
000 = 16MB
001 = 32MB
010 = 64MB
011 = 128MB
100 = 256MB
101 = 512MB
110 = 1GB
111 = 2GB
5 SPD read, 0 = SPD information not loaded, 1 = loaded
7:6 Reserved
11:8 Number of rows
15:12 Number of columns
19:16 Number of banks
31:20 Reserved
This register is used for the initialization of the Test Chip. It controls the configuration of the Test Chip at reset. In order for these values to take effect a soft reset must be applied after changing the contents of the register.
|
31 |
30 |
29 |
|
|
24 |
23 |
|
|
|
17 |
16 |
15 |
|
|
|
|
8 |
7 |
6 |
|
4 |
3 |
2 |
1 |
0 |
|
Reserved |
USERIN |
Reserved |
INITRAM |
PLLFBDIV |
Reserved |
HCLKDIV |
Reserved |
VINITHI |
PLLBYPASS |
||||||||||||||||
|
CT_INIT |
Test Chip Initialisation |
|
0 |
PLLBYPASS, 0 = off, 1=on (default), takes effect only after reset |
|
1 |
PLLBYPASS (value read from pin after reset) – read only |
|
2 |
VINITHI, 0 = vectors at 0x0, 1 = vectors at 0xffff0000 |
|
3 |
Reserved |
|
6:4 |
HCLK divider |
|
7 |
Reserved |
|
15:8 |
PLLFBDIV[7:0] |
|
16 |
Internal RAM enable, 0 = disabled (default), 1 = enabled |
|
23:17 |
Reserved |
|
29:24 |
USERIN[5:0] |
|
31:30 |
Reserved |
This register allows the user to determine the number of 24MHz clock cycles that have transpired between two accesses to this register. It can be used for basic profiling, or time control on a Core Tile System.
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
REFCNT |
|||||||||||||||||||||||||||||
CT_REFCNT Reference Clock (24MHz) Counter
31:0 32-bit count value, resets at 0 and counts up
These flags can be used by software. The NVFlags are not cleared on a reset, so can be used for retaining data during a reset. For example this can be used to change some startup settings.
CT_FLAGS Flags
31:0 1 = flag set, 0 = flag clear
CT_FLAGSS Flags Set
31:0 1 = set flag, 0 = no change
CT_FLAGSC Flags Clear
31:0 1 = clear flag, 0 = no change
CT_NVFLAGS Non-volatile Flags
31:0 1 = flag set, 0 = flag clear
CT_NVFLAGSS Non-volatile Flags Set
31:0 1 = set flag, 0 = no change
CT_NVFLAGSC Non-volatile Flags Clear
31:0 1 = clear flag, 0 = no change
This design implements a 6-bit IRQ interrupt controller and a 6-bit FIQ interrupt controller. Refer to the table of bit assignments below for details.
These registers can be used to determine which interrupt sources are active, enable and disable them, and configure whether they cause a normal or fast interrupt. This is for interrupts going to the Core Tile. The baseboard has its own interrupt control registers for interrupts going to the ARM926EJ-S Development Chip (see PB926EJ-S User Guide for a description of these).
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Reserved |
VPBREGINT |
MBEMPTY |
MBFULL |
COMMTX |
COMMRX |
SOFTINT |
|||||||||||||||||||||||
Bit assignment for status, raw status and enable registers in the IRQ and FIQ interrupt controllers
0 SOFTINT Local Soft interrupt (from CT_SOFT_INT register)
1 COMMRX Communications channel (DCC) receive interrupt source
2 COMMTX Communications channel (DCC) transmit interrupt source
3 MAILBOXFULL The inbound MAILBOX is currently full
4 MAILBOXEMPTY The outbound MAILBOX is currently empty
5 VPBREGINT Remote Soft interrupt from Mailbox
CT_IRQ_STATUS IRQ Status
5:0 Interrupt source is enabled and asserted
CT_IRQ_RAW Raw IRQ Status
5:0 Interrupt source is asserted
CT_IRQ_ENABLE IRQ Enable Register
5:0 1 = Interrupt IRQ is enabled, 0 = disabled
CT_IRQ_ENABLES IRQ Enable Set
5:0 1 = Interrupt IRQ Enable set, 0 = no change
CT_IRQ_ENABLEC IRQ Enable Clear
5:0 1 = Interrupt IRQ Enable clear, 0 = no change
CT_SOFT_INT Local Soft Interrupt Register
0 1 = Local Soft Interrupt is set, 0 = Local Soft Interrupt is clear
CT_SOFT_INTS Local Soft Interrupt Set
0 1 = Local Soft Interrupt set, 0 = no change
CT_SOFT_INTC Local Soft Interrupt Clear
0 1 = Local Soft Interrupt clear, 0 = no change
CT_FIQ_STATUS FIQ Status
5:0 Interrupt source is enabled and asserted
CT_FIQ_RAW Raw FIQ Status (same as raw IRQ status)
5:0 Interrupt source is asserted
CT_FIQ_ENABLE FIQ Enable
5:0 1 = Interrupt FIQ is enabled, 0 = disabled
CT_FIQ_ENABLES FIQ Enable Set
5:0 1 = Interrupt FIQ Enable set, 0 = no change
CT_FIQ_ENABLEC FIQ Enable Clear
5:0 1 = Interrupt FIQ Enable clear, 0 = no change
This register allows control of the cross triggering matrix between CPUs. A cross triggering matrix is used when debugging multiple CPUs, and it is desirable to stop all the cores together.
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
16 |
15 |
12 |
11 |
8 |
7 |
|
|
4 |
3 |
|
|
0 |
|
Reserved |
REQINEN |
ACKOUTEN |
ACKSOFTEN |
ACKSOFT |
|||||||||||||||||||||
CT_DBGXTRIG Debug Cross-trigger
3:0 DBGACKSOFT[3:0] – soft DBGACK for cross-triggering in software
7:4 DBGACKSOFTEN[3:0] – tri-state enable for DBGACKSOFT[3:0]
11:8 DBGACKOUTEN[3:0] – tri-state enable for DBGACK from the processor
15:12 DBGREQINEN[3:0] - enable DBGXTRIG[3:0] to drive processor DBGRQ
Note: This functionality allows cross triggering of breakpoints between CPUs. This is particularly important for DSP debugging. The implementation makes use of system bus Z[54:51] lines, designated DGBXTRIG[3:0] respectively. Each triggerable unit needs its own copy of these registers.
This register can be used to access the DACs and ADCs fitted to the Core Tile.
|
31 |
|
|
|
|
|
|
|
|
20 |
19 |
|
|
|
|
|
|
|
|
8 |
7 |
|
|
|
|
|
|
0 |
|
ADC |
ADC |
DAC |
|||||||||||||||||||||||||
Note: This register allows voltage control and read back over a number of DAC and ADC channels. Depending on the Core Tile build not all three Voltage domains may be present, and the scaling of the voltage domains varies between builds. It is recommended that when scaling the voltage, the algorithm to set the new voltage works by incrementing the DAC and using to ADC to determine the effect this is having. See the Core Tile User Guide for a full explanation of this circuitry, and how to make use of these values.
|
CT_VOLTAGE_CTL0 |
Voltage Control 0 |
|
7:0 |
Core voltage A DAC value |
|
19:8 |
VDDCORE1 voltage ADC value (12 bits) |
|
31:20 |
VDDCORE1 DIFF |
|
CT_VOLTAGE_CTL1 |
Voltage Control 1 |
|
7:0 |
Core voltage B DAC value |
|
19:8 |
VDDCORE2 voltage ADC value (12 bits) |
|
31:20 |
VDDCORE2 DIFF |
|
CT_VOLTAGE_CTL2 |
Voltage Control 2 |
|
7:0 |
Core voltage C DAC value |
|
19:8 |
VDDCORE3 voltage ADC value (12 bits) |
|
31:20 |
VDDCORE3 DIFF |
|
CT_VOLTAGE_CTL3 |
Voltage Control 3 |
|
0 |
Core voltage A enable (nSHDN) (RESET) |
|
1 |
Core voltage B enable (nSHDN) (RESET) |
|
2 |
Core voltage C enable (nSHDN) (RESET) |
|
7:3 |
Reserved |
|
19:8 |
VDDCORE4 voltage ADC value (12 bits) |
|
31:20 |
VDDCORE4 DIFF |
|
CT_VOLTAGE_CTL4 |
Voltage Control 4 |
|
7:0 |
Reserved |
|
19:8 |
VDDCORE5 voltage ADC value (12 bits) |
|
31:20 |
VDDCORE5 DIFF |
|
CT_VOLTAGE_CTL5 |
Voltage Control 5 |
|
7:0 |
Reserved |
|
19:8 |
VDDCORE6 voltage ADC value (12 bits) |
|
31:20 |
VDDCORE6 DIFF |
|
CT_VOLTAGE_CTL6 |
Voltage Control 6 |
|
7:0 |
Reserved |
|
19:8 |
VDDPLL1 voltage ADC value (12 bits) |
|
31:20 |
VDDPLL2 voltage ADC value (12 bits) |
|
CT_VOLTAGE_CTL7 |
Voltage Control 7 |
|
7:0 |
Reserved |
|
19:8 |
VDDIO voltage ADC value (12 bits) |
|
31:20 |
Test Point voltage ADC value (12 bits) |
This register allows the user to communicate with the configurable options on the Core Tile PLD. These values are communicated across the Serial Interface to the Core Tile PLD.
|
31 |
28 |
27 |
25 |
24 |
23 |
|
|
|
|
|
|
|
13 |
12 |
11 |
10 |
9 |
|
|
|
|
4 |
3 |
|
|
0 |
|
PLD ID |
Reserved |
SDRAM |
Reserved |
PGOOD |
Reserved |
CLKSEL |
ZCTL |
|||||||||||||||||||
|
CT_PLD_CTRL |
Core Tile PLD Control/Status |
|
0 |
ZCTL0: Set high to break Z[31:0] bus |
|
1 |
ZCTL1: Set high to break Z[63:32] bus |
|
2 |
ZCTL2: Set high to break Z[95:64] bus |
|
3 |
ZCTL3: Set high to break Z[127:96] bus |
|
4 |
CLKSEL0: Set low for tile below/high for tile above |
|
6:5 |
CLKSEL[2:1]: HCLK gets CLK_NEG, X_HCLK, GND, CLK_GLOBAL |
|
7 |
CLKSEL3: Set low to drive CLK_GLOBAL |
|
8 |
CLKSEL4: NEG_UP_OUT assigned HCLK,NEG_UP_IN |
|
9 |
CLKSEL5: NEG_DN_OUT assigned HCLK,NEG_DN_IN |
|
12 |
PGOOD. Active high signal indicating that power supply on Core Tile board is working OK. |
|
24 |
SDRAM mode. 1=MemExp. 0=CP Legacy |
|
31:28 |
PLD_ID. Determines the current build/type of the PLD image. |
This is a copy of the contents of the SPD or other EEPROM associated with the SDRAM fitted to this system.
CT_SPDBASE SPD Base
Byte 2 Memory type
Byte 3 Number of Row addresses
Byte 4 Number of Column addresses
Byte 5 Number of Banks
Byte 18 CAS latencies supported
Byte 31 Module bank density (MB divided by 4)
Byte 63 Checksum
Byte 64-71 Manufacturer
Byte 73-90 Module Part Number
Some Tiles may have a memory expansion card fitted. These Memory Expansion Cards are fitted with a serial presence detect (SPD) EPROM, containing information about the manufacturer and memory type.
On power up, the FPGA reads this SPD EPROM and stores the data in 256 bytes of RAM which can be randomly accessed at addresses above 0x10400100. A bit is set in the CT_SDRAM register to indicate when the EPROM has been read and information stored in RAM. If there is no DIMM fitted then this process reads invalid data, but the bit will still be set indicating completion. To check for valid SPD data it is necessary to checksum the memory. The algorithm is:
1. add up all bytes 0 to 62
2. logical AND the result with 0xff
3. compare the result with byte 63
4. if the two values match then the SPD data is valid
The ZBT RAM controller can access 2 MB of zero wait state memory private to the local CPU. The memory is aliased across the address range 0x10800000 – 0x10FFFFFF.
The DPRAM slave block contains 256kB of dual port block ram. It is full dual port memory so transactions can simultaneously take place in both the local CPU clock domain and in the Versailte/PB926EJ-S M1 clock domain.
The DPRAM appears at address 0x0 for the local CPUs, which is where the boot code for each processor is located. Refer to the section on booting for more information on the proposed boot mechanism.
The baseboard is accessed at memory addresses immediately above the DPRAM (0x00040000 onwards).
These are registers that can be accessed by all masters in the system rather than being private to the local Core Tile.
Register Address read/write reset by
-- cross triggering
VPB_DBGXTRIG 0x80000000 r/w RESET
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
16 |
15 |
12 |
11 |
8 |
7 |
|
|
4 |
3 |
|
|
0 |
|
Reserved |
REQINEN |
ACKOUTEN |
ACKSOFTEN |
ACKSOFT |
|||||||||||||||||||||
CT_DBGXTRIG Debug Cross-trigger
3:0 DBGACKSOFT[3:0] – soft DBGACK for cross-triggering in software
7:4 DBGACKSOFTEN[3:0] – tri-state enable for DBGACKSOFT[3:0]
11:8 DBGACKOUTEN[3:0] – tri-state enable for DBGACK from the processor
15:12 DBGREQINEN[3:0] - enable DBGXTRIG[3:0] to drive processor DBGRQ
Note: This functionality allows cross triggering of breakpoints between CPUs. This is particularly important for DSP debugging. The implementation makes use of system bus Z[54:51] lines, designated DGBXTRIG[3:0] respectively. Each triggerable unit needs its own copy of these registers.
The MailBox allows flexible communication between processors in the system. It allows for data to be safely passed between the Test Chip and PB926EJ-S M1 clock domains, and allows for implementation of either a polling, or interrupt driven communications method.
The MailBox also contains registers to allow software driven interrupts to be sent between processors, and instantiates a basic interrupt controller to allow multiple interrupts to drive a PB926EJ-S interrupt line.
See MailBox Software example for more information on how to make use of this block.
Register TC Address read/write VPB Address read/write
-- generic registers
ARM_MBDATA 0x10600000 r MB_BASE w
ARM_MBSTAT 0x10600004 r MB_BASE+0x4 r
ASOFT_INTS 0x10600008 r MB_BASE+0x8 r/w
ASOFT_INTC 0x1060000C r/w MB_BASE+0xC r
VPB_MBDATA 0x10600010 w MB_BASE+0x10 r
VPB_MBSTAT 0x10600014 r MB_BASE+0x14 r
VSOFT_INTS 0x10600018 r/w MB_BASE+0x18 r
VSOFT_INTC 0x1060001C r MB_BASE+0x1C r/w
IRQ_STATUS 0x10600020 r MB_BASE+0x20 r
IRQ_ENABLES 0x10600028 r MB_BASE+0x28 r/w
IRQ_ENABLEC 0x1060002C r MB_BASE+0x2C r/w
Note: The two different address columns in the above table refer to the address at which the Test Chip can access registers in the Test Chip AHB Clock domain, and the address at which the Development Chip can access registers in the PB926EJ-S M1 AHB Clock domain. The VPB address varies depending on the position of this system in the stack. The address shown here is for the system at the bottom of the stack, but the address could be any of 0x80200000,0x90200000,0xA0200000,0xB0200000. Refer to section 2.2 to understand which address is applicable.
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
MBDATA IN |
|||||||||||||||||||||||||||||
ARM_MBDATA MailBox Into Test Chip Data
31:0 Data value to be passed from VPB domain to Test Chip.
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
1 |
0 |
|
Reserved |
EMPTY |
FULL |
||||||||||||||||||||||||||||
ARM_MBSTAT Test Chip Mailbox Status
0 MailBox into Test Chip FULL
1 MailBox into Test Chip EMPTY
These registers set and clear an interrupt to the PB926EJ-S. This is to allow software running on the Core Tile system to generate a specific interrupt to the Baseboard.
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
|
Reserved |
SOFTINT |
|||||||||||||||||||||||||||||
ASOFT_INTS Test Chip to PB926EJ-S Soft Interrupt Set
0 1 = Local Soft Interrupt set, 0 = no change
ASOFT_INTC Test Chip to PB926EJ-S Soft Interrupt Clear
0 1 = Local Soft Interrupt clear, 0 = no change
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
MBDATA OUT |
|||||||||||||||||||||||||||||
VPB_MBDATA MailBox Out of Test Chip Data
31:0 Data value to be passed from Test Chip domain to VPB.
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
1 |
0 |
|
Reserved |
FULL |
EMPTY |
||||||||||||||||||||||||||||
VPB_MBSTAT PB926EJ-S to Test Chip Mailbox Status
0 MailBox from Test Chip EMPTY
1 MailBox from Test Chip FULL
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
|
Reserved |
SOFTINT |
|||||||||||||||||||||||||||||
VSOFT_INTS PB926EJ-S to Test Chip Soft Interrupt Set
0 1 = Local Soft Interrupt set, 0 = no change
VSOFT_INTC PB926EJ-S to Test Chip Soft Interrupt Clear
0 1 = Local Soft Interrupt clear, 0 = no change
Note: This is the Remote Soft Interrupt mentioned in section 4.3.13
This implements a 3-bit FIQ/IRQ interrupt controller for connection to the PB926EJ-S VIC. Refer to the table of bit assignments below for details.
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
2 |
1 |
0 |
|
Reserved |
MBEMPTY |
MBFULL |
SOFTINT |
|||||||||||||||||||||||||||
IRQ and FIQ bit assignment for status and enable registers
0 SOFTINT Soft interrupt (see section 2.8.2)
1 VPBMBFULL MailBox Into PB926EJ-S FULL
2 ARMMBEMPTY MailBox Out of PB926EJ-S EMPTY
IRQ_STATUS IRQ Status
2:0 Interrupt source is enabled and asserted
IRQ_ENABLES IRQ Enable Set
2:0 1 = Interrupt IRQ Enable set, 0 = no change
IRQ_ENABLEC IRQ Enable Clear
2:0 1 = Interrupt IRQ Enable clear, 0 = no change
The specific Interrupt that is connected on the PB926EJ-S VIC depends upon the position of the Core Tile System in the stack. The bottom position uses VICINTSOURCE21. Each additional Core Tile System then uses the next VICINTSOURCE (for example the 4th system uses VICINTSOURCE24). The remaining VICINTSOURCE lines are not connected to allow for use by tiles further up the stack. When not active these signals are floated with a weak pulldown to allow the PB926EJ-S to also drive these lines. Figure 2-1 illustrates this system.

Figure 4-2 CT System VPB Interrupt Overview
Some test chips have some embedded peripherals and/or memory. The area 0x3FFC0000 – 0x3FFFFFFF is reserved for this purpose.
In the case of the ARM926EJ-S (LF711 and LF712) processors there are the following blocks:-
0x3FFC0000 – 0x3FFCFFFF Embedded GPIO(PL061 PrimeCell)/EPHEM IO controller.
0x3FFD0000 – 0x3FFDFFFF Embedded DMA controller (PL081 PrimeCell)
0x3FFE0000 – 0x3FFEFFFF Embedded VIC (PL190 PrimeCell)
0x3FFF0000 – 0x3FFFFFFF On-chip RAM.
The other Test Chips do not make use of this area at present.
For information on how to use these blocks refer to the appropriate PrimeCell manual.
The system is designed as an asymmetric system (for example only the PB926EJ-S Development Chip can set up the main memory controllers). As such, the PB926EJ-S is responsible for bringing the systems out of reset, and providing suitable clocks to the global AHB buses.
Each Core Tile System has pre-initialized memory at address 0x0. This code is inside the DPRAM and is defined in the RTL for the FPGA build. The boot code is thus embedded into the FPGA image. This memory has the following program in it:-
Addr Instruction Mnemonic Comments
0x0 0xEA000006 B 0x20 ; Jumps past Exception Handlers
0x4 0xEAFFFFFE B 0x4 ; Dummy Undefined instruction handler
0x8 0xEAFFFFFE B 0x8 ; Dummy Software Interrupt handler
0xC 0xEAFFFFFE B 0xC ; Dummy Prefetch Abort handler
0x10 0xEAFFFFFE B 0x10 ; Dummy Data Abort handler
0x14 0xEAFFFFFE B 0x14 ; Reserved
0x18 0xEAFFFFFE B 0x18 ; Dummy IRQ handler
0x1C 0xEAFFFFFE B 0x1C ; Dummy FIQ handler
0x20 0xE3A00000 MOV r0,#0 ; Set counter to 0
0x24 0xE3A01B40 MOV R1,#0x40, 22 ; Set maximum counter value to 0x10000
0x28 0xE59F2018 LDR R2,0x00000048 ; Set pointer to LED control register 0x1040000C
0x2C 0xE5923000 LDR R3,[R2,#0] ; Load current contents of LED control register
0x30 0xE2800001 ADD R0,R0,#1 ; Increment counter
0x34 0xE1500001 CMP R0,R1 ; Check if counter is at maximum value
0x38 0x02833540 ADDEQ R3,R3,#0x40, 10 ; If counter at max, add one to LED part register
0x3C 0x05823000 STREQ R3,[R2,#0] ; If counter at max, write new LED output
0x40 0x03A00000 MOVEQ R0,#0 ; If counter at max, reset counter
0x44 0XE59FF000 LDR PC,0x4C ; Return to start of loop.
0x48 0x1040000C DCD 0x1040000C ; Data value of CT_CTRL register
0x4C 0x00000030 DCD 0x00000030 ; Address value of LDR PC command
0x50 0x00000000 DCD 0x00000000 ; Test Pattern 0
0x54 0x55555555 DCD 0x55555555 ; Test Pattern 1
0x58 0xAAAAAAAA DCD 0xAAAAAAAA ; Test Pattern 2
0x5C 0xFFFFFFFF DCD 0xFFFFFFFF ; Test Pattern 3
This code flashes the LEDs on the corresponding Logic Tile system. This shows the operator that each CPU has been successfully brought out of reset, and has appropriate clocks applied.
The Test Patterns at the end are so the user can read these values if a fault on the data bus is suspected.
In order to now execute some more useful code with each additional CPU the following should be done by the Development Chip for the ARM926EJ-S (or a JTAG tool):
1) Write the code to be executed into any available memory except where the code is running from (DPRAM 0x30-0x4C).
2) Once this is done the address at 0x4C should be replaced by the start address for the new code. This is done by writing to the shared port of the DPRAM at, for example 0x8010004C.
In order to see an example of this look at the example boot routine software provided.
Note that in this code, the exception handlers (Undef, SWI, PF, Abort, D Abort, IRQ, FIQ) only trap the exception, by causing the processor to sit in a closed loop. On connection with a debugger it will be evident that an exception was hit, but in order to make proper use of exception handling the instructions at the relevant addresses must be replaced with branches to the exception handling routine.
All of the RTL for this design is provided as verilog. Example files are provided to allow building the system with Synplicity Synplify Pro and Xilinx ISE tools.

The application note has directories. These are:
· Docs : Related documents including this document.
· Logical : All the verilog RTL required for the design.
· Progcards : The files required to program the design into ARM development boards.
· Software : ARM code to run on the AN125 system
· Versatile_ltxc2v6000/versatile_ltxc2v8000 : Synthesis and P&R scripts and builds for target boards.
The logical directory contains all the verilog required to build the system. The function of each block is shown earlier in Section 1.3.
Each PrimeCell or other large IP block has its own directory (for example Ahb2AhbSync).
The top level for a system including a PB926EJ-S, LTXC2V4000+ and a CTxxx is in VPB_CT.
The required registers, and their default settings are in the CTxxxRegs directories. Differences in hardware such as Test Chips means that often different Register settings are required for a system.
The remaining RTL to complete the system is in the CT_xxx directories. There is a CT_Generic directory containing RTL applicable to the majority of builds, and specific CT_xxx directories for each different PCB in the Core Tile Range.
Each potential target has a directory (eg Versatile_ltxc2v6000). Within these directories are all the different builds which exist for this target. In turn each of these has directories for each tool used in the build process.

The ‘boot’ example, when executed by the Baseboard ARM926EJ-S Development Chip, changes the code being executed by the Core Tile Systems from their initial boot code to a function provided by the Development Chip. This is done by initializing a shared memory area, and then changing the branch address used in the Core Tile Boot Code.
This simple example consists of a header file with a definition of the registers to be used, and a C source code file with a function to be executed by the Core Tiles and a main() to be executed by the Development Chip.
At power up the Core Tile systems are flashing their own private LEDs to show they are functioning correctly. This code is stored in memory belonging to that Core Tile System. After the Development Chip has executed this example code the Core Tile systems will execute code from the baseboard SDRAM (0x100000). Each Core Tile reads the S6 switch bank on the Platform Baseboard, and flashes its associated GP_LED accordingly. If the switch is down, the LED flashes. The mapping of the Core Tile System to the switches and LEDs, is that the system at the base of the stack corresponds to Switch 1. The next system corresponds to Switch 2. Up to 4 systems are supported by this example.
It is necessary to observe the following guidelines if using this code:
1) The code must be compiled for an area of memory that is accessible at the same address by all processors in the system. The example uses 0x100000, which is baseboard SDRAM above the DPRAM range.
2) It is necessary to offset the function address by 0x4 in order to avoid the Stack save that each C function attempts. The compiler will add a stack save (STM R13!) instruction to the start of each function other than main(). Since the slave processors do not have a valid stack set up, they must not write to the address pointed to by R13.
The ‘control’ example is intended to be executed directly by the Core Tile. It shows how to use the DAC and ADC parts fitted to the Core Tile. It can be used to confirm that the system is powered with correct voltages, and allows the user to implement changes to the programmable power supplies.
This example consists of a header file with a definition of the registers to be used, and a C source code file with functions to be executed by the Core Tile. This code cannot be run on the Development Chip, as the Development Chip does not have registers to read and set the voltage supplies.
The main() function provides the user with a menu to select the function to be run.
Read Identification parses the CT_ID and CT_STAT registers to determine the type of Core Tile fitted. This is important as different Core Tiles have different voltage requirements and specifications, so the user can use this information to determine the expected behaviour of this board.
The Read Voltages function reads all ADCs and presents the results to the user in a useful format (converted to voltage or current measurements).
The Set Voltage function allows the user to change the VDDCORE power supplies. Since different boards have different sensitivities to these numbers it is the responsibility of the user to ensure they know what they are doing prior to changing these values (see Core Tile User Guide for more information).
The ‘Mailbox’ example when executed by the Development Chip sets up code which is run by the Development chip and a number of Core Tiles. Its purpose is to show how the MailBox and Software Interrupts can be used in a Multi-Core environment.
This example has two header files with definitions of the registers to be used. One header file (apic.h) is taken from the PB926EJ-S software and defines the registers used for the Development Chip Interrupt handling routines. The other header file (mailbox.h) defines the remaining registers required for this code, including the mailbox register locations. A C source code file (mailbox.c) contains the bulk of the code. It contains functions to be executed by the Core Tiles and by the Development Chip. The Development Chip sets up the code in shared memory, and executes the main() function. All the Core Tiles then execute CoreTileCode(). The assembler file (irqsup.s) contains code for setting up the stack (prohibited in C), and adjusting the cpsr register (used to enable and disable interrupts amongst other things).
At power up the Core Tile systems are flashing their own private LEDs to show they are functioning correctly. This code is stored in memory belonging to that Core Tile System. After the Development Chip has executed the main() function the Core Tile systems execute code from the baseboard SDRAM (0x100000).
The main() function establishes the number of Core Tiles to be used, and set them to run CoreTileCode(). It also sets up interrupts on the Development Chip, and writes a value to each Core Tiles MailBox.
Each Core Tile executes CoreTileCode() which sets up the Interrupts on each Core Tile. The interrupts are set to catch any interrupt generated as a result of a write to a mailbox. Since the development chip has written to each Mailbox, each Core Tile will then jump to their interrupt handling routine ctIRQHandler(). They will fetch the data that was posted by the development chip. This data is defined as being the start of a range of numbers to examine for Prime Numbers. The Core Tiles will go through this range posting every positive result back to the Development Chip through the MailBox. Before posting a value the Core Tile will poll the MailBox status bits to ensure that the Development Chip has received the previous data before proceeding.
The Development Chip on receiving an Interrupt jumps to its Interrupt handling routine vpIRQHandler. This checks to see whether the interrupt was generated by presence of data in the mailbox or a software generated interrupt (not a SWI) from the Core Tiles (the only possible sources in this example). If it was due to the MailBox having pending data in it, the Development Chip will read that data out of the Mailbox, and present it to the user as a result.
The Core Tiles will, on completion of finding prime numbers for their assigned range generate a software generated interrupt (not a SWI) to the Development Chip to indicate that they are now idle, and in need of a new range. They will then sit in an empty loop awaiting an interrupt as they were at the start.
The Development Chip, on seeing an interrupt being generated as a result of a Software Interrupt from a Core Tile, will post the value of the next range of numbers to be examined for Primes to that Core Tile. The entire process thus proceeds.
It is necessary to observe the following guidelines when using this code:
1) The code must be compiled for an area of memory that is accessible at the same address by all processors in the system. The example uses 0x100000, which is baseboard SDRAM above the DPRAM range.
2) It is necessary to offset the function address by 0x4 in order to avoid the Stack save that each C function attempts. The compiler will add a stack save (STM R13!) instruction to the start of each function other than main(). Since the slave processors do not have a valid stack set up, they must not write to the address pointed to by R13.
3) In the case of an EPHEM enabled chip it is necessary to add in the commented code that sets up the VIC on the Test Chip Interrupts. Leaving this code in for a normal Test Chip will generate a Data Abort as this memory space is usually unused. This is done by adding in the line #define EPHEMENABLED at the top of Mailbox.c. EPHEM is an additional high speed IO interface embedded into the Test Chip for direct connection to user peripherals.
The default frequencies are set to generate a stable system with the system bus clock as close to the maximum operating frequency as possible, and the CPU set to a safe working frequency that is a multiple of the bus frequency.
For example the following systems have these default frequencies:-
|
Test Chip |
REFCLK |
CPUCLK |
HCLKI |
HCLKE |
|
ARM926EJ-S UMC 0.18um LF712 |
20 MHz |
170 MHz |
85 MHz |
28 MHz |
|
ARM1136JZF-S TSMC 0.13um |
40 MHz |
240 MHz |
120 MHz |
30 MHz |
|
ARM7TDMI EPSON T0464FA70 |
20 MHz |
20 MHz |
- |
20 MHz |
HCLKI is the bus frequency for any on-chip peripherals.
HCLKE is the external bus frequency used in the Logic Tile.
For benchmarking purposes it is simpler to scale your results from these frequencies, rather than attempt changing frequency as there are a number of factors that must be carefully considered prior to changing frequency.
In circumstances where the user needs to change these startup clock frequencies then they should rebuild the FPGA image with their preferred startup values. This method will then mean that the user does not have to worry about running code at startup to deal with changing the clocks after power up.
In order to do this the following method is recommended:-
1. Determine the required frequencies that are desired for CPUCLK, HCLKI and HCLKE. HCLKE must be between 25 and 35 MHz with the standard clock architecture provided (required to meet the timing constraints and DCM requirements of the FPGA design). Refer to the release notes for the maximum CPUCLK settings for your CPU. The HCLKE frequency must be an integer factor of the CPUCLK frequency.
2. Calculate all the PLL settings that need to be applied to the Test Chip to generate the chosen CPUCLK.
FCPUCLK = (FREFCLK / NR) x (NF / OD)
NR = Reference Divider = (PLLREFDIV[3:0] + 1)
NF = Feedback Divider = (PLLFBDIV[7:0] + 1)
OD = Output Divider = (PLLOUTDIV[2:0] + 1)
137kHz < (FREFCLK / NR) < 275 MHz
500kHz < ((FREFCLK / NR) x NF) < 275 MHz
3. Change the parameters declared within the Regs file for your Test Chip. These are:-
CM_PLLREFDIV_VAL
CM_PLLFBDIV_VAL
CM_PLLOUTDIV_VAL
4. If a different value of FREFCLK is required to get the exact CPU frequency desired then the CM_OSC values need to be changed accordingly. There is a calculator on the internet at www.icst.com. Otherwise refer to section 4.3.3 for how to calculate all the required fields. Change the parameters declared within the Regs file for your Test Chip. These are:-
CM_CPU_VDW_VAL
CM_CPU_RDW_VAL
CM_CPU_OD_VAL
5. Calculate the CPUCLK:HCLKI settings.
For ARM9 based systems this can be either 1:1 or 2:1. To set 1:1 set CM_USERIN_VAL[5] to 1’b0, and for 2:1 set CM_USERIN_VAL[5] to 1’b1. Always set CM_USERIN_VAL[3] to 1’b1 to enable HCLKI.
For ARM11 based systems this can be any integer value from 1:1 to 64:1. Set the ratio value -1 to CM_HCLKI_VAL (ie tie to 6’b000000 for 1:1 or 6’b000001 for 2:1).
6. Calculate the HCLKI:HCLKE settings.
For ARM9 based systems this can be any integer value from 1:1 to 16:1.
Ratio = {USERIN[1:0], HCLKDIV[2:0]} + 1
For ARM11 based systems this can be any integer value from 1:1 to 64:1. Set the ratio value -1 to CM_HCLKE_VAL (ie tie to 6’b000000 for 1:1 or 6’b000001 for 2:1). This ratio is relative to the CPUCLK rather than HCLKI, but HCLKE must be equal to or slower than HCLKI.
Change the following parameters following these calculations:-
CM_USERIN_VAL[1:0]
CM_HCLKDIV_VAL
CM_HCLKE_VAL
7. Remember to change the CM_BUILD and CM_MANUFACTURER parameters to your own unique identification numbers so that you can tell this FPGA build apart from other builds. Then rebuild the FPGA with your new Regs file, and program into the Flash.
It is sometimes desirable to temporarily change the frequency rather than doing a permanent FPGA build. For example if the user wants to test a frequency prior to building a new FPGA image.
In most cases the user will only care about the system bus frequency. In order to accommodate this CPU frequencies have been chosen that can be moved a little faster or slower. Therefore this change can be made to a live system by slowly changing the REFCLK frequency only.
In order to do this, do the following:-
1. Unlock the register bank by writing 0xA05F to 0x10400014.
2. Read register 0x10400008.
3. If decreasing frequency subtract 1 from the value in the last 9 bits. If increasing frequency add 1 to the value in the last 9 bits. Set bit 26 to 1’b1 (force update bit).
4. Write this value back to 0x10400008.
5. Calculate your new REFCLK setting (see section 4.3.3). This can then be used to calculate your new CPUCLK, HCLKI, and HCLKE frequencies (they all scale linearly with REFCLK).
6. Repeat steps 2-5 until you reach the desired operating range. Allow time for the clocks to settle to their new frequency between each loop.
If the user wishes to change the CPU frequency by a large amount, or wishes to change the ratios of the different frequencies then it is necessary to take some additional steps in order to allow the PLL/DCMs in the system to correctly lock to their new frequencies.
Since the ARM11 class Test Chips only read in the HCLKI and HCLKE values as part of a Power On Reset, it is not possible to change these values through software.
In order to do this, follow all the calculations in 8.2. However rather than changing the listed parameters above, do the following:-
1. Unlock the registers bank by writing 0xA05F to 0x10400008.
2. Read the value in CM_AUXOSC register (0x1040001C).
3. Modify bits [31:28] to the new PLLOUTDIV value.
4. Modify bits [27:24] to the new PLLREFDIV value.
5. Write this value back to CM_AUXOSC.
6. Read the value in CM_INIT register (0x10400024).
7. Modify bits [29:24] to the new USERIN value.
8. Modify bits [15:8] to the new PLLFBDIV value.
9. Modify bits [6:4] to the new HCLKDIV value.
10. Write this value back to CM_INIT.
11. Read the value in CM_OSC (0x10400008).
12. Modify bits [18:16] to the new OD value.
13. Modify bits [15:9] to the new RDW value.
14. Modify bits [8:0] to the new VDW value.
15. Write this value back to CM_OSC.
16. Push the RESET push button on the PB926EJ-S baseboard. This will now reset the system, with the Core Tile restarting in its new configuration. If connected with a debugger, it is probable that a breakpoint will have been left at 0x0, and so it will be necessary to use JTAG to instruct the processor to proceed with execution of its boot code.
This Application Note is primarily aimed at using an AHB Test Chip. When used in conjunction with a different bus type, there are a number of differences to the design which the user should be aware of.
In order to support a non-AHB core with an otherwise AHB system, a wrapper has been inserted between the Test Chip and the rest of the system.

The wrapper used in the RTL provided is taken from the ADK (AMBA Development Kit), which is available from ARM. The clock architecture is slightly modified to allow for the fact that the ARM7 Test Chip is not inside the same chip as the bridge. Instead of gating the local copy of the AHB clock to use as the 7TDMI clock, an early version is gated to compensate for the delay from the FPGA to the Test Chip.
The memory map for the 7TDMI system is the same as for a native AHB Test Chip. The only difference is in the timing of the 7TDMI, due to the insertion of an extra bridge on the Test Chip bus. The Platform Baseboard busses are unaffected.
There are minor changes to the contents of some of the registers. These changes reflect that the system is different, and that the 7TDMI Test Chips are fitted to a PCB with different configuration options.
· CT_ID : The architecture field reports the processor bus as 7TDMI.
· CT_PROC : Since the 7TDMI does not feature a co-processor with identification information, this register contains information on the type of processor fitted.
· CT_STAT : Since this is a different architecture chip, the Silicon ID values overlap with the native AHB chips.
· CT_AUXOSC : There is no PLL fitted to 7TDMI test chips. The PLL control values have no effect.
· CT_INIT : As with CT_AUXOSC the PLL control values have no effect. The USERIN values also have no effect.
· CT_VOLTAGE : The 7TDMI test chip has fewer voltage domains than the native AHB test chips. For this reason CT_VOLTAGE_CTL4,5,6,7 are not used. The other CT_VOLTAGE_CTL registers have the following effect:
|
CT_VOLTAGE_CTL0 |
Voltage Control 0 |
|
7:0 |
Core voltage A DAC value |
|
19:8 |
VDDCOREA voltage ADC value (12 bits) |
|
31:20 |
VDDCOREA DIFF |
|
CT_VOLTAGE_CTL1 |
Voltage Control 1 |
|
7:0 |
Core voltage B DAC value |
|
19:8 |
VDDCOREB voltage ADC value (12 bits) |
|
31:20 |
VDDCOREB DIFF |
|
CT_VOLTAGE_CTL2 |
Voltage Control 2 |
|
7:0 |
Reserved |
|
19:8 |
PISMO 1.8V supply voltage ADC value (12 bits). *Not scaled by 2! |
|
31:20 |
VDDIO voltage ADC value (12 bits) |
|
CT_VOLTAGE_CTL3 |
Voltage Control 3 |
|
7:0 |
Reserved |
|
19:8 |
TP2 voltage ADC value (12 bits) |
|
31:20 |
TP1 voltage ADC value (12 bits) |
· CT_PLD_CTRL : The CT-7TDMI does not sense whether all the core power nets are good (PGOOD). The Clock options are slightly different.
|
4 |
CLKSEL0: Set low for tile below/high for tile above |
|
6:5 |
CLKSEL[2:1]: HCLK gets CLK_NEG, X_MCLK, GND, CLK_GLOBAL |
|
7 |
CLKSEL3: NEG_UP_OUT assigned HCLK,NEG_UP_IN |
|
8 |
CLKSEL4: NEG_DN_OUT assigned HCLK,NEG_DN_IN |
|
9 |
CLKSEL5: Route X_MCLK and X_ECLK across Core Tile |
The example software has been coded to support both native AHB test chips and 7TDMI class test chips. By reading the processor bus type where applicable the software can operate across different systems. Since all the examples are compiled for the lowest common code architecture (v4 is the lowest expected with this hardware), the code will run on all test chips.