Cora Z7 > microSD起動 > No Execution Address JTAG handoff > CPUアプリを含めてBOOT.binを作成する + bitstreamにelfを関連付ける
CORA Z7
Windows 10 Pro v1909
Vivado v2019.1
TeraTerm Version 4.105
概要
- MicroBlazeアプリを作成
- UARTで文字列「1559MicroBlaze」を出力する
- BOOT.binを作成してmicroSD起動する
Block design
- MicroBlazeを追加する
- UartLiteを足してMicroBlazeに接続
- Zynqを追加
- CPUアプリを作るため
MicroBlazeの詳細について「FPGA プログラミング大全 Xilinx編 小林 優様」に詳しい。
制約ファイル
Pmod Aの0,1ピンに接続する設定とした。
set_property PACKAGE_PIN Y18 [get_ports rx_0]
set_property PACKAGE_PIN Y19 [get_ports tx_0]
set_property IOSTANDARD LVCMOS33 [get_ports rx_0]
set_property IOSTANDARD LVCMOS33 [get_ports tx_0]
set_property PACKAGE_PIN W13 [get_ports reset_rtl_0]
set_property IOSTANDARD LVCMOS33 [get_ports reset_rtl_0]
XSDKでの作業
- Zynq FSBLアプリを新規作成
- CPU アプリを新規作成 (Hello World)
- MicroBlaze アプリを新規作成
FSBLのmain.cを変更 (起動時にdelayを入れる)
Cora Z7 > ビルトイン USBシリアルでFSBLの処理メッセージを表示したい > 10秒のdelayを追加 > microSDからアプリ起動もした
- これをしないと起動に失敗する
MicroBlaze アプリ
MicroBlazeからUART出力をするプログラム。
#include "xparameters.h"
#include "xstatus.h"
#include "xuartlite.h"
#include "sleep.h"
#define UARTLITE_DEVICE_ID ( XPAR_AXI_UARTLITE_0_DEVICE_ID )
//#define UARTLITE_DEVICE_ID ( XPAR_AXI_UARTLITE_4_DEVICE_ID )
int SendAndReceive(u16 DeviceId);
XUartLite UartLite;
u8 RecvBuffer[100];
int main(void)
{
int Status;
sleep(10);
Status = SendAndReceive(UARTLITE_DEVICE_ID);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
return XST_SUCCESS;
}
int SendAndReceive(u16 DeviceId)
{
int Status;
unsigned int ReceivedCount = 0;
Status = XUartLite_Initialize(&UartLite, DeviceId);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
Status = XUartLite_SelfTest(&UartLite);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
// send
u8 testmsg[] = "1559MicroBlaze\r\n";
XUartLite_Send(&UartLite, testmsg, sizeof(testmsg));
usleep(400000); // 400msec
// recv
while (1) {
ReceivedCount += XUartLite_Recv(&UartLite,
RecvBuffer + ReceivedCount,
1);
if (RecvBuffer[ReceivedCount - 1] == '\r') {
break;
}
}
print("You have received:");
print(RecvBuffer);
print("\r\n");
return XST_SUCCESS;
}
FSBLのデバッグオプション
FSBL_DEBUG_INFO をデバッグオプションに追加しておく。
microSD起動時にUSBケーブル接続側のUARTにFSBL動作情報が表示される。
失敗編
Boot.bin作成
- FSBL
- bitstream
- MicroBlazeアプリケーション
上記でBOOT.binを作成
FSBLのログは以下。
Xilinx First Stage Boot Loader
Release 2019.1 Oct 19 2020-20:38:07
Devcfg driver initialized
Silicon Version 3.1
Boot mode is SD
SD: rc= 0
SD Init Done
Flash Base Address: 0xE0100000
Reboot status register: 0x60400000
Multiboot Register: 0x0000C000
Image Start Address: 0x00000000
Partition Header Offset:0x00000C80
Partition Count: 2
Partition Number: 1
Header Dump
Image Word Len: 0x0007F2E8
Data Word Len: 0x0007F2E8
Partition Word Len:0x0007F2E8
Load Addr: 0x00000000
Exec Addr: 0x00000000
Partition Start: 0x000075D0
Partition Attr: 0x00000020
Partition Checksum Offset: 0x00000000
Section Count: 0x00000001
Checksum: 0xFFE7AF06
Bitstream
In FsblHookBeforeBitstreamDload function
PCAP:StatusReg = 0x40000A30
PCAP:device ready
PCAP:Clear done
Level Shifter Value = 0xA
Devcfg Status register = 0x40000A30
PCAP:Fabric is Initialized done
PCAP register dump:
PCAP CTRL 0xF8007000: 0x4C00E07F
PCAP LOCK 0xF8007004: 0x0000001A
PCAP CONFIG 0xF8007008: 0x00000508
PCAP ISR 0xF800700C: 0x0802000B
PCAP IMR 0xF8007010: 0xFFFFFFFF
PCAP STATUS 0xF8007014: 0x00003A30
PCAP DMA SRC ADDR 0xF8007018: 0x00100001
PCAP DMA DEST ADDR 0xF800701C: 0xFFFFFFFF
PCAP DMA SRC LEN 0xF8007020: 0x0007F2E8
PCAP DMA DEST LEN 0xF8007024: 0x0007F2E8
PCAP ROM SHADOW CTRL 0xF8007028: 0xFFFFFFFF
PCAP MBOOT 0xF800702C: 0x0000C000
PCAP SW ID 0xF8007030: 0x00000000
PCAP UNLOCK 0xF8007034: 0x757BDF0D
PCAP MCTRL 0xF8007080: 0x30800100
DMA Done !
FPGA Done !
In FsblHookAfterBitstreamDload function
Handoff Address: 0x00000000
In FsblHookBeforeHandoff function
No Execution Address JTAG handoff
成功変
Boot.bin作成
- FSBL
- bitstream
- CPUアプリケーション
- MicroBlazeアプリケーション
BITファイル
//arch = zynq; split = false; format = BIN
the_ROM_image:
{
[bootloader]C:\coraZ7prj_201016\2020-10-17_1453_mbFsbl\2020-10-17_1453_mbFsbl.sdk\fsbl_1600\Debug\fsbl_1600.elf
C:\coraZ7prj_201016\2020-10-17_1453_mbFsbl\2020-10-17_1453_mbFsbl.sdk\design_1_wrapper_hw_platform_0\design_1_wrapper.bit
C:\coraZ7prj_201016\2020-10-17_1453_mbFsbl\2020-10-17_1453_mbFsbl.sdk\cpu_1631\Debug\cpu_1631.elf
C:\coraZ7prj_201016\2020-10-17_1453_mbFsbl\2020-10-17_1453_mbFsbl.sdk\uart_1558\Debug\uart_1558.elf
}
FSBLのログは以下。
Xilinx First Stage Boot Loader
Release 2019.1 Oct 21 2020-20:14:53
Devcfg driver initialized
Silicon Version 3.1
Boot mode is SD
SD: rc= 0
SD Init Done
Flash Base Address: 0xE0100000
Reboot status register: 0x60400000
Multiboot Register: 0x0000C000
Image Start Address: 0x00000000
Partition Header Offset:0x00000C80
Partition Count: 6
Partition Number: 1
Header Dump
Image Word Len: 0x0007F2E8
Data Word Len: 0x0007F2E8
Partition Word Len:0x0007F2E8
Load Addr: 0x00000000
Exec Addr: 0x00000000
Partition Start: 0x000075D0
Partition Attr: 0x00000020
Partition Checksum Offset: 0x00000000
Section Count: 0x00000001
Checksum: 0xFFE7AF06
Bitstream
In FsblHookBeforeBitstreamDload function
PCAP:StatusReg = 0x40000A30
PCAP:device ready
PCAP:Clear done
Level Shifter Value = 0xA
Devcfg Status register = 0x40000A30
PCAP:Fabric is Initialized done
PCAP register dump:
PCAP CTRL 0xF8007000: 0x4C00E07F
PCAP LOCK 0xF8007004: 0x0000001A
PCAP CONFIG 0xF8007008: 0x00000508
PCAP ISR 0xF800700C: 0x0802000B
PCAP IMR 0xF8007010: 0xFFFFFFFF
PCAP STATUS 0xF8007014: 0x00000A30
PCAP DMA SRC ADDR 0xF8007018: 0x00100001
PCAP DMA DEST ADDR 0xF800701C: 0xFFFFFFFF
PCAP DMA SRC LEN 0xF8007020: 0x0007F2E8
PCAP DMA DEST LEN 0xF8007024: 0x0007F2E8
PCAP ROM SHADOW CTRL 0xF8007028: 0xFFFFFFFF
PCAP MBOOT 0xF800702C: 0x0000C000
PCAP SW ID 0xF8007030: 0x00000000
PCAP UNLOCK 0xF8007034: 0x757BDF0D
PCAP MCTRL 0xF8007080: 0x30800100
DMA Done !
FPGA Done !
In FsblHookAfterBitstreamDload function
Partition Number: 2
Header Dump
Image Word Len: 0x00002002
Data Word Len: 0x00002002
Partition Word Len:0x00002002
Load Addr: 0x00100000
Exec Addr: 0x00100000
Partition Start: 0x000868C0
Partition Attr: 0x00000010
Partition Checksum Offset: 0x00000000
Section Count: 0x00000001
Checksum: 0xFFD734C8
Application
Partition Number: 3
Header Dump
Image Word Len: 0x0000000A
Data Word Len: 0x0000000A
Partition Word Len:0x0000000A
Load Addr: 0x00000000
Exec Addr: 0x00000000
Partition Start: 0x000888D0
Partition Attr: 0x00000010
Partition Checksum Offset: 0x00000000
Section Count: 0x00000003
Checksum: 0xFFF7748E
Application
Handoff Address: 0x00100000
In FsblHookBeforeHandoff function
SUCCESSFUL_HANDOFF
FSBL Status = 0x1
Hello World
UARTLiteの接続先のシリアル出力
1559MicroBlaze
備考
BOOT.binをCPUアプリケーションで作成していた時にもNo Execution Address JTAG handoff
が出ていた。
CPUアプリを作成しなおしてからか、失敗しなくなった。
よくわからない。
再度同じことしたら、CPU elfは起動したが、MicroBlaze elfが起動しない。
よくわからない。
二回目に実施
二回目の実施では、CPUアプリは起動し、MicroBlazeアプリは起動しなかった。
作業を見返して
- MicroBlazeのelfはReleaseとして作成
- Vivadoに戻って、Tools > Associate ELF Filesにて、そのelfファイルを選択
これでMicroBlazeアプリが起動するようになった。
Author And Source
この問題について(Cora Z7 > microSD起動 > No Execution Address JTAG handoff > CPUアプリを含めてBOOT.binを作成する + bitstreamにelfを関連付ける), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/bf96b5fdaebe7e2e2a42著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .