在Microblaze开发中遇到的问题(一)

本文档详细记录了在Microblaze FPGA开发过程中遇到的错误,即通过复制FPGA例程到工程目录导致的编译失败问题。解决方法是遵循正确的开发流程:保存例程到指定目录,使用Vivado导出硬件并包含bitstream,然后在Vitis中新建工程并完成编译。按照这个步骤,最终成功编译并运行Microblaze例程。
摘要由CSDN通过智能技术生成

在学习Microblaze时,我会按照以前开发FPGA 的习惯,把整个FPGA例程直接复制到我的工程目录下,如下图所示:

这是我选中的某个FPGA例程:

然后移动到我的工程目录下:

打开Vivado,然后打开vitis,接着Build Project,会有如下报错:

在这种情况下,无论我是如何找到相应的头文件,然后将其路径添加进属性设置中,都会不停报错,无法编译成功。

之后我重新看了正点原子的《达芬奇之Microblaze开发指南 V1.2》,根据第三章提到的内容,重新走了一遍流程,最后成功了。将Microblaze例程重新使用的具体流程如下:

1.首先打开你要使用的例程,打开后依次点击菜单栏的“File->Project->Save As...”, 如图所示:

 

 然后保存到设定的工程目录下:

然后我们就能看到一个新的工程: 

 

2.这时候我们可以看到,VIVADO在保存以后自动跳转到了新的工程:

 

新建vitis工程目录

依次点击“File->Export->Export Hardware…”导出硬件,并在对话框中,勾选“Include bitstream”,路径下选择“/vitis”,点击“OK”按钮。

点击launch vitis,然后选择之前创建好的vitis工程目录作为工作空间,点击Launch

 

 

3.接下来的内容就是走流程新建工程,具体可以参考正点原子的达芬奇之Microblaze开发指南 V1.2》第二章

 

4.完成后build project的结果如图所示(这里偷懒,使用了另外一个已经弄好的工程演示)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 MicroBlaze 程序,可以在 DDR 上运行。该程序使用了 MMU 功能,将程序从物理地址空间拷贝到虚拟地址空间,并使用虚拟地址访问 DDR。 ``` #include <stdio.h> #include <stdlib.h> #define DDR_BASE 0x80000000 // DDR 的物理地址 #define DDR_SIZE 0x10000000 // DDR 的大小 #define PROGRAM_BASE 0x10000000 // 程序在虚拟地址空间的起始地址 #define PROGRAM_ENTRY 0x10000000 // 程序的入口地址 int main() { // 初始化 MMU 相关寄存器 init_mmu(); // 将程序从物理地址空间拷贝到虚拟地址空间 memcpy((void*)PROGRAM_BASE, (void*)PHYSICAL_BASE, PROGRAM_SIZE); // 跳转到程序的入口地址执行 void (*entry)() = (void (*)())PROGRAM_ENTRY; entry(); return 0; } void init_mmu() { // 禁用 MMU __asm__ volatile ( "mfs r1, rmsr \n" "andi r1, r1, ~0x2 \n" "mtsr r1, rmsr \n" ); // 配置 TTBR 寄存器 __asm__ volatile ( "lis r1, (%0 >> 16) & 0xFFFF \n" "ori r1, r1, %0 & 0xFFFF \n" "mts r1, r19 \n" : : "r" (PAGE_TABLE) : "r1" ); // 配置 DACR 寄存器 __asm__ volatile ( "li r1, 0 \n" "mts r1, r20 \n" ); // 启用 MMU __asm__ volatile ( "mfs r1, rmsr \n" "ori r1, r1, 0x2 \n" "mtsr r1, rmsr \n" ); } void memcpy(void* dest, const void* src, size_t size) { char* d = (char*)dest; const char* s = (const char*)src; while (size--) *d++ = *s++; } ``` 该程序使用了 DDR 的物理地址和大小,将程序从物理地址空间拷贝到虚拟地址空间,并跳转到程序的入口地址执行。在程序,需要自行实现 memcpy 函数,用于将程序从物理地址空间拷贝到虚拟地址空间。 需要注意的是,在使用 DDR 时,需要先对 DDR 进行初始化,设置 DDR 控制器的参数,例如时钟频率、控制信号等。此外,还需要设置 DDR 的时序参数,以保证数据的正确传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值