版权声明:本文为CSDN博主「Crazzy_M」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40147893/article/details/115382474

说明:通过Vivado生成MicroBlaze工程导入SDK实现DDR4的读写。
环境:Vivado2018.3。
IP核:MicroBlaze。
参考手册:
pg150:UltraScale Architecture-Based FPGAs Memory IP v1.4基础知识:Xilinx MicroBlaze软核驱动DDR3(最好先看一下)

工程下载

文章目录

  • 1.MicroBlaze设计流程
    • 1.2 DDR Block Design 流程
  • 2.SDK工程
    • 2.1 不断电重新读数据

1.MicroBlaze设计流程
新建Vivado工程

1.2 DDR Block Design 流程
Creat Block Design:

添加Microblaze核:

Run Block Automation:


添加Uartlite核:

双击更改波特率为115200

添加DDR4 IP:

双击配置DDR4 IP

根据自己DDR选择型号


即MIG对DDR接口的速率为1200M*2=2400M(双沿)。
MIG输出到app接口上的时钟ui_clk为1200M/4=300M。

UI时钟频率ui_clk为DDR时钟频率的1/4,也就是一个用户时钟周期(两个边沿)对应8个DDR时钟边沿。

 

 Run Connection Automation:


对生成的网络进行一下修改:
1、时钟
双击

根据自己输入系统时钟,选择时钟频率和差分还是单端模式:


去除reset和locked选项:

​​​​

删除多余的端口重新Run Connection Automation
2、复位
将DDR复位信号和rst_clk_wizIP的复位删除,引入常量IP将其连接


进行设计检查:

Great HDL Wrapper:

约束:

对管脚以及DDR端口进行约束


注意:DDR4的diff_clock_rtl_1这个时钟输入为100MHz的差分时钟输入,根据自己的板子

生成bit流文件
导入SDK,记得包含bit文件:


2.SDK工程
新建一个hello word 工程

在.hdf文件中查看DDR3的地址范围位为0x8000_0000-0x9FFF_FFFF
寻址空间为1FFF_FFFF即536870912Byte=512MB。

将数据0-99写入DDR,并读出。
介入以下测试代码:

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpio.h"int main()
{u32 i;u32 j;u32 DDR_BUFF[100];init_platform();u32 *DDR_ADDR;u32 *LED_ADDR;DDR_ADDR = (u32 *)0x80000000;LED_ADDR = (u32 *)0x40000000;for(i=0;i<100;i++){*(DDR_ADDR+i) = i;}for(i=0;i<100;i++){DDR_BUFF[i] = *(DDR_ADDR+i) ;}cleanup_platform();return 0;
}

调试:先进行调试设置


结果:

2.1 不断电重新读数据
关闭写操作,未断电在改地址进行读数据

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpio.h"int main()
{u32 i;u32 j;u32 DDR_BUFF[100];init_platform();u32 *DDR_ADDR;u32 *LED_ADDR;DDR_ADDR = (u32 *)0x80000000;LED_ADDR = (u32 *)0x40000000;//       for(i=0;i<100;i++)
//      {
//          *(DDR_ADDR+i) = i;
//      }for(i=0;i<100;i++){DDR_BUFF[i] = *(DDR_ADDR+i) ;}cleanup_platform();return 0;
}

结果

注意 cleanup_platform();函数会释放内存,断点设置在此函数前面,或者不用此函数。

★★★如有错误欢迎指导!!!

Xilinx MicroBlaze软核驱动DDR4相关推荐

  1. Xilinx MicroBlaze软核驱动DDR3

    Xilinx MicroBlaze软核驱动DDR3 说明:通过Vivado生成MicroBlaze工程导入SDK实现DDR3的读写. 环境:Vivado2018.3. IP核:MicroBlaze. ...

  2. Xilinx MicroBlaze软核的使用-Uartlite

    Xilinx_MicroBlaze的使用-Uartlite 说明:通过Vivado生成MicroBlaze工程导入SDK实现LED的控制.串口与PC的通信,以及如何灵活使用Vivado分配的地址信息. ...

  3. MicroBlaze:Xilinx官方软核学习与一些实验测试

    目录 一.引言 二.HelloWorld实验 三.AXI_GPIO实验 四.一些注意 一.引言 1.MicroBlaze简介. 用于做嵌入式处理操作的软核,来加速系统设计.与传统独立CPU相比,软核嵌 ...

  4. MicroBlaze软核介绍

    0 本章目录 1)FPGA简介 2)MicroBlaze软核处理器简介 3)结束语 1 FPGA简介 1)现场可编程门阵列(FPGA),FPGA是可重新编程的硅芯片. 2)FPGA优点:与DSP和AR ...

  5. microblaze软核处理器及其ip核调用

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yundanfengqing_nuc/a ...

  6. ISE中开发XPS microblaze软核与BootLoader功能的实现

    XILINX公司的FPGA中集成了硬PPC控制器,在ISE开发环境中嵌入XPS microblaze软核后添加BootLoader.elf文件实现boot功能. 最终实现的条件就是生成download ...

  7. ISE创建Microblaze软核(三)

    第七步 进入SDK开发环境 编译完成后弹出如下对话框,选择SDK的工作目录.在MicroblazeTutor中创建一个Workspace文件夹,并选择该文件夹为SDK的工作目录. 进入SDK主界面. ...

  8. PYNQ-Z2调试笔记:在Microblaze软核中编程运行C程序

    本篇主要介绍,通过Jupyter在Microblaze Subsystems上使用C语言编程,实现一些简单的功能. 目录 前言 正文 一.软核PMODA.PMODB.RPI.ARDUINO 二.在软核 ...

  9. MicroBlaze软核处理器简介

    更多精彩内容,请微信搜索"FPGAer俱乐部"关注我们. MicroBlaze™ 是 Xilinx 嵌入式产品系列的重要组件.MicroBlaze 是功能齐全的.更少指令集的 FP ...

最新文章

  1. Project Chameleon Work In Progress 10
  2. python爬取高考各高校分数线_Python 爬取高校历年分数线
  3. 怎么让图片一直转圈_鼠标为什么一直在转圈?如何强制关闭程序?
  4. ThreadLocal使用和原理
  5. 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.1.Linux是什么)
  6. html让a标签左右一样宽,button和a标签设置相同的css样式,但是宽度不同
  7. 京东发布双11首份战报:手机品类18秒销量突破万台
  8. cacti的安装和配置
  9. File存对象--android 的File存储到SD卡();
  10. MySQL 第六次练习(索引)
  11. HDOJ--1269--迷宫城堡
  12. 解决Shape数据形状数与表记录数不一致的问题
  13. Linux大批量文件rm命令无效
  14. [FOI2020]楼房搭建
  15. IEEEtran 的使用及 bibtex的文献类型
  16. 主题黑板.html,黑板报主题
  17. 我的世界:命名牌暗藏众多彩蛋,老玩家:原来还能这样玩啊!
  18. 博客园技术系列文章目录
  19. 融跃教育登陆湖南卫视!揭秘融跃是个什么样机构!CFA/FRM/ACCA
  20. mysql 全文检索_MySQL全文检索

热门文章

  1. Java基础:数据类型的扩展
  2. 开源项目you-get的下载和使用、使用Cookie、配置ffmpeg
  3. 程序开发中 status 还是 state
  4. Matlab里怎么注释掉一段(多行)代码
  5. JaCoCo计算代码覆盖率原理
  6. Winsock 的初始化
  7. 常见职位英文缩写词解释
  8. AtCoder Beginner Contest 153 题解
  9. 小程序点击删除后刷新当前页面
  10. JAVA XML转对象 对象转XML