取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
Highlighted
Visitor
Visitor
477 次查看
注册日期: ‎06-21-2020

如何通过microblaze写数据到64位的地址?

跳至解决方案

我使用的板子是基于kintex ultrascale FPGA xcku115,DDR4 是4GB.现在想向DDR4中写数据。DDR4的地址映射是0x1_0000_0000到0x1_ffff_ffff。

如果向地址0x1_0000_f000写数据,则实际上写的数据会到地址0x_0000_f000,而0x1_0000_f000中的数据是随机的,microblaze已经设置为64位模式了。感觉是代码有问题,请问如何修改才能把数据写进64位地址?

Vivado SDK 的代码如下

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xil_io.h"
#include "sleep.h"
#define DDR_BASEARDDR   0x10000f000
#define DDR_BASEARDDR_1 0x10000fff0

int main()
{
    int i;
	int32_t r0;
	int r1;
    init_platform();
	
    print("Hello World \n\r");
	
	Xil_Out32(DDR_BASEARDDR_1,10);
	r1 = Xil_In32(DDR_BASEARDDR_1);
    xil_printf("the address at  %x data is : %x \n\r" ,DDR_BASEARDDR_1, r1);
	
	for(i=0;i<32;i++)
	{
		Xil_Out32(DDR_BASEARDDR+i*0x00000004,i+1);
		r0=Xil_In32(DDR_BASEARDDR+i*0x4);
		xil_printf("r0=%0x \n\r",r0);
		
	}

    cleanup_platform();
    return 0;
}

 

 

0 项奖励
1 解答

已接受的解答
Highlighted
Xilinx Employee
Xilinx Employee
224 次查看
注册日期: ‎06-19-2019

如图所示

Capture12.PNG

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------

在原帖中查看解决方案

9 回复数
Highlighted
Xilinx Employee
Xilinx Employee
426 次查看
注册日期: ‎06-19-2019

你尝试下Xil_Out64和Xil_In64

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
Highlighted
Visitor
Visitor
398 次查看
注册日期: ‎06-21-2020

已经尝试改为Xil_out64和Xil_in64,不能解决问题,向0x1_0000_f000写的数最终还是会写进0x_0000_f000

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
391 次查看
注册日期: ‎06-19-2019

你确认下,你在SDK中创建工程的时候,compiler选项是64位还是32位

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
Highlighted
Visitor
Visitor
385 次查看
注册日期: ‎06-21-2020

compiler默认就是64,我没有改过。

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
290 次查看
注册日期: ‎06-02-2017

Hi @NZD 

新支持的64-bit模式,只是支持64-bit指令集,AXI地址位宽依然是32-bit模式,所以依然不能直接用MicroBlaze访问64-bit的地址空间。

所以要根据你的应用类型,选择合适的4GB DDR空间的访问方式,比如64-bit address的DMA。

0 项奖励
Xilinx Employee
Xilinx Employee
251 次查看
注册日期: ‎06-02-2017

Hi @NZD 

修改一下Microblaze的cell properties -> Config -> C_ADDR_SIZE 为64。

这样address就能分配大于4G的空间,再尝试mb访问高地址。

试试看。

0 项奖励
Highlighted
Visitor
Visitor
240 次查看
注册日期: ‎06-21-2020

感谢您的建议,我没找到cell properity这个选项在哪里设置。我登陆这个论坛太难了,十分地卡,这是我的邮箱:228859747@qq.com,能否邮箱向您请教?

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
225 次查看
注册日期: ‎06-19-2019

如图所示

Capture12.PNG

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------

在原帖中查看解决方案

Highlighted
Visitor
Visitor
202 次查看
注册日期: ‎06-21-2020
谢谢您!我试一下
0 项奖励