Zynq上MicroBlaze的elf固化到bit流

Zynq上MicroBlaze的elf固化到bit流

参考

Zynq上MicroBlaze测试.csdn
嵌入式终端AtShell的精简版.csdn

BD

atshell_microblaze_system7020.tcl

这里axi_uartlite_0波特率是9600

地址映射

No.InstanceInterfaceTypeBase AddressHigh AddressRangeDescription
1microblaze_0/Dataaxi_bram_ctrl_0/S_AXIMem00xC000_00000xC003_FFFF256KAXI BRAM 数据访问空间
2microblaze_0/Dataaxi_gpio_0/S_AXIReg0x4000_00000x4003_FFFF256KAXI GPIO 寄存器空间
3microblaze_0/Dataaxi_uartlite_0/S_AXIReg0x4060_00000x4063_FFFF256KAXI UARTLite 寄存器空间
4microblaze_0/Datamicroblaze_0_local_memory/dlmb_bram_if_cntlr/SLMBMem0x0000_00000x0003_FFFF256KMicroBlaze 数据本地存储器(DLMB BRAM)
5microblaze_0/Instructionaxi_bram_ctrl_0/S_AXIMem00xC000_00000xC003_FFFF256KAXI BRAM 指令访问空间
6microblaze_0/Instructionmicroblaze_0_local_memory/ilmb_bram_if_cntlr/SLMBMem0x0000_00000x0003_FFFF256KMicroBlaze 指令本地存储器(ILMB BRAM)

pin.xdc

create_clock-period20.000-nameclk_50MHz[get_ports clk_50MHz]set_property IOSTANDARD LVCMOS33[get_ports clk_50MHz]set_property IOSTANDARD LVCMOS33[get_ports{gpio_rtl_0_tri_io[1]}]set_property IOSTANDARD LVCMOS33[get_ports{gpio_rtl_0_tri_io[0]}]set_property IOSTANDARD LVCMOS33[get_ports reset_0]set_property IOSTANDARD LVCMOS33[get_ports uart_rtl_0_rxd]set_property IOSTANDARD LVCMOS33[get_ports uart_rtl_0_txd]# PL_CLKset_property PACKAGE_PIN U18[get_ports clk_50MHz]# PL_LEDset_property PACKAGE_PIN H15[get_ports{gpio_rtl_0_tri_io[1]}]# PL_KEYset_property PACKAGE_PIN L14[get_ports{gpio_rtl_0_tri_io[0]}]# PL_RESETset_property PACKAGE_PIN N16[get_ports reset_0]# PL_UARTset_property PACKAGE_PIN J15[get_ports uart_rtl_0_txd]set_property PACKAGE_PIN T19[get_ports uart_rtl_0_rxd]

vitis裸机

参考
嵌入式终端AtShell的精简版.csdn

修改堆栈

_STACK_SIZE=DEFINED(_STACK_SIZE)? _STACK_SIZE:0x1000;_HEAP_SIZE=DEFINED(_HEAP_SIZE)? _HEAP_SIZE:0x400;

查看固件大小

PS D:\workspace\gitee\999\ming_zynq_wave_prj\vivado_prj_v2\vitis\hello\Debug>&"D:\Xilinx\Vitis\2020.2\gnu\microblaze\nt\bin\mb-size.exe"-Ahello.elf hello.elf:section size addr .vectors.reset80.vectors.sw_exception88.vectors.interrupt816.vectors.hw_exception832.text9478080.init6094860.fini3294920.ctors1294952.dtors894964.rodata364094972.sdata2498612.data165698616.sdata0100272.sbss0100272.bss452100272.heap1028100724.stack4096101752.debug_line148290.debug_info312180.debug_abbrev68880.debug_aranges9200.debug_str751890.debug_ranges3760.debug_frame15960.debug_macro157120.debug_loc7950Total253323
Section大小(Byte)作用是否占运行内存
.vectors.*32中断向量
.text94780代码
.init/.fini92初始化/退出代码
.ctors/.dtors20C++构造析构
.rodata3640const数据、字符串
.sdata24小只读数据
.data1656已初始化全局变量
.bss452未初始化全局变量✔(运行时占)
.heap1028✔(预留)
.stack4096✔(预留)
.debug_*147523调试信息✘(不会下载到板子)

查看最终占用ROM的大小

105800 /1024=103KB

PS D:\workspace\gitee\999\ming_zynq_wave_prj\vivado_prj_v2\vitis\hello\Debug>&"D:\Xilinx\Vitis\2020.2\gnu\microblaze\nt\bin\mb-size.exe"hello.elf text data bss dec hex filename985441676558010580019d48 hello.elf

固化

Vivadado-> Tools -> Associate ELF

测试

[14:47:25.863]收←◆\|/ - AT_SHELL - Jul292026/|\[15:04:38.279]发→◇155[15:04:38.319]收←◆hello test_01 argc=2argv[[15:04:38.349]收←◆0]="1"argv[1]="55"