29 | | The PowerPC instruction side on chip memory (ISOCM) interface is a useful feature- a memory block for code which the PPC can access without occupying the main PLB. But, because the ISOCM memory is not on the main PLB, the debugger cannot access it directly. XMD can access ISOCM, but it requires specific flags be passed during XMD initialization. Unfrotunately Xiilnx did not automate the process of setting these flags, even in projects which use the ISOCM. |
| 29 | The PowerPC instruction side on chip memory (ISOCM) interface is a useful feature- a memory block for code which the PPC can access without occupying the main PLB. But, because the ISOCM memory is not on the main PLB, the debugger cannot access it directly. The PPC405 core provides special instructions and registers for accessing the ISOCM interface via the PLB. The debugger (XMD) can use this passthrough, but it requires specific flags be passed during XMD initialization. Unfrotunately Xiilnx did not automate the process of setting these flags, even in projects which use the ISOCM. |
| 30 | |
| 31 | The ISOCM flags are passed with the XMD connect command: |
| 32 | {{{ |
| 33 | connect hw ppc -debugdevice isocmstartadr X isocmsize Y isocmdcrstartadr Z |
| 34 | }}} |
| 35 | where: |
| 36 | * X: the base address of the ISOCM, as specified in the XPS |
| 37 | * Y: the size of the ISOCM space in bytes, as specified in the XPS |
| 38 | * Z: the address of the DCR ISOCM registers, fixed at 0x100 |
| 39 | |
| 40 | So for a 64KB ISOCM at 0xFFFF0000, the command would be {{{connect hw ppc -debugdevice isocmstartadr 0xFFFF0000 isocmsize 65536 isocmdcrstartadr 0x100}}}. |
| 41 | |
| 42 | To automate this in the SDK (so it works with "Run" and "Debug" launch processes), open the Run/Debug settings for your software project and go to the Debugger Options tab. Notice the ISOCM field under PowerPC 405 Debugger Connection Options. The SDK will pass the value from this field to the {{{isocmstartadr}}} XMD argument. Unfortunately, the SDK will not pass arguments for {{{isocmsize}}} or {{{isocmdcrstartadr}}} automatically. |
| 43 | |
| 44 | But, the SDK not sanitize the value entered in the ISOCM field before passing it to XMD. We can use this to cheat and pass all the XMD flags we need. Set the value of the ISOCM field to: |
| 45 | {{{ |
| 46 | X isocmsize Y isocmdcrstartadr 0x100 |
| 47 | }}} |
| 48 | |
| 49 | This will result in an XMD connect command of {{{connect hw ppc -debugdevice isocmstartadr X isocmsize Y isocmdcrstartadr 0x100}}}, exactly what we need. |
| 50 | |
| 51 | |
| 52 | Some related links: |
| 53 | * http://www.xilinx.com/support/answers/29511.htm |
| 54 | * http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_4/est_rm.pdf (table 10-10) |
| 55 | * http://www.xilinx.com/support/documentation/ip_documentation/ppc405.pdf (table 2) |