加班猫

人于人区别,就是远见不一样。szfpga.com

xilinx vivado 烧录microblaze

0
阅读(10657)

    xilinx官方告知microblaze启动是 直接用 vivado 的associate elf 选择elf文件,但是如果你的工程文件要求在ddr中运行,你就傻了。毕竟可怜的bram,是支持不了多少功能。尤其是函数大神,一个工程连一个IO读写都要写五六个函数的大神,这点bram 是不够的。

    首先建立好工程,必须加入 AXI EMC模块。这个是调用底层的flash 或者sram的接口。但是axi emc最大的问题就是官方提供的功能只合适开发板,屌丝是使用好痛苦。参数不让你随便修改,真是MMB.

image.png

     看到截图的上面的bpiflash了,这个是没有 ,我自己写的模块。自己重写bpi flash读取数据。实在火大。但是需要注意一点自己生成的BPI FLASH读取数据时候,要求主要,启动SREC是单个字节读取,所以在bpi flash去读数据要自己移动字节。以下代码

case(axi_araddr[1:0] )

2'b00: axi_rdata <= {24'h0,bpi_read_out[7:0]};

2'b01:  axi_rdata <= {16'h0,bpi_read_out[15:0]};

2'b10:  axi_rdata <= { 8'h0,bpi_read_out[7:0]  ,16'd0};

2'b11:  axi_rdata <= {      bpi_read_out[15:0] ,16'd0};

endcase


    然后设定好emc ,系统相关的地址

image.png


    最后生成bit 文件,在导出export sdk。


    打开sdk,新建一个SREC的工程。 这个就是传说中启动文件。

image.png

    选择完成。

    修改FLASH的镜像地址。地址不是瞎几把写的。是根据你的mcs文件大小,文件大小在runs/imp/ 文件夹下的 prm 文件 上,  有告知。后面接上的。然后生成文件。注意这个地址也是你后面真正运行的elf地址写入。

image.png


image.png

    

    对应启动工程,注意选择ld看链接表设定。不要把代码和数据放在DDR上面。


image.png


确保 这些代码都是放在BRAM中。否则会起不来。

image.png


    然后编译工程。生成elf文件。


    然后回到vivado 中, 左边栏选择project 在选择上面的tools ,associate elf, 选择SREC elf,

image.png



    再次生成bit文件,然后生成mcs文件,烧录到bpi flash中。


    好了。上面都完成了。


    然后做好自己的工程,注意看自己的工程师ld链接表,必须在ddr上面执行。

image.png

    生成后自己真正运行的elf编程文件。

    在sdk中,选择xilinx tools,选择program flash memory,选择选择对应的elf文件。地址设定在刚才SREC的选择flash地址上

image.png

然后编程烧录就可以。



    年龄32还在研究这种没前途的技术,群里什么水平!!!!