基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇

这篇具有很好参考价值的文章主要介绍了基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:在前文简单介绍了MIG ip核的调用(包括某些参数的设置)以及该ip核的架构。那么接下来可以开始使用ip核了吗?NO!!!

注意:在调完ip之后,并不可以立即使用该 IP 核完成 DDR3 SDRAM 的读和写的,而是要在该IP核初始化成功之后,才可以进行读和写的。可以通过 Modelsim 仿真软件观察到该 IP 核的初始化成功

注意:未完成校准之前,用户不要使用任何读写命令,防止自动校准过程出错。

这里先对我们前面MIG IP核生成的veo文件进行查看(看看这个ip核都包含哪些信号)
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip

Modelsim仿真需要两个文件:顶层文件(top)测试文件(testbench),下面开始生成这两个文件

1.顶层文件(top_ddr3_hdmi)

基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip
这里手动 + add source 了一个top_ddr3_hdmi的顶层文件。

需要例化的模块有两个:
1.MIG IP核(mig_7series_0)
2.clocking wrizard(ddr3_clk_gen)**

基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip

顶层的输入输出信号如下图所示:
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip
部分解释:

  • 时钟倍频模块(ddr3_clk_gen):fpga提供的clk为50Mhz,前面MIG ip核调用的时候我们的sys clk设置为了200Mhz,因此需要调用clocking wrizard倍频产生200Mhz,提供给MIG IP模块。
  • 目前我们是在进行初始化过程,不能进行读写操作,所以此时MIG IP模块用户接口信号全给0
  • 我们需要通过 Modelsim 仿真软件观察到该 IP 核的初始化成功,关键信号就是init_calib_complete.
  • MIG IP核的ddr_parity信号不需要被例化进去(原因目前还不知道)

2.测试文件(tb_top_ddr3_hdmi)

1.在sim中+add source一个tb_top_ddr3_hdmi文件。
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip
例化我们的顶层文件ddr3控制器

顶层文件直接例化即可,这里着重介绍一下ddr3 控制器的例化方式:
ddr3 控制器例化方式:

1.将ddr3_model.sv文件添加到sumulation source中
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip
具体位置:
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip
将.sv 和 .vh文件复制到自己vivado工程中的sim文件夹当中:
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip

2.例化到testbench文件当中,有以下两种方式:
1.打开ddr3_model.sv文件,右键快速生成例化模板,例化到testbech文件中,然后进行修改
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip

2.找到官方提供的例化模板,进行修改
具体位置:
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip

根据自己的实际情况进行修改即可:
基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip
testbench:


`timescale 1ns/1ps

module tb_top_ddr3_hdmi (); /* this is automatically generated */

	reg srst_n;
	reg clk;

	// clock
	initial begin
		clk = 0;
		forever #(10) clk = ~clk;
	end

	// reset
	initial begin
		srst_n <= 0;
		#200
		repeat (5) @(posedge clk);
		srst_n <= 1;
	end

	// (*NOTE*) replace reset, clock, others

	wire  [15:0] ddr3_dq;
	wire   [1:0] ddr3_dqs_n;
	wire   [1:0] ddr3_dqs_p;
	wire  [13:0] ddr3_addr;
	wire   [2:0] ddr3_ba;
	wire         ddr3_ras_n;
	wire         ddr3_cas_n;
	wire         ddr3_we_n;
	wire         ddr3_reset_n;
	wire   [0:0] ddr3_ck_p;
	wire   [0:0] ddr3_ck_n;
	wire   [0:0] ddr3_cke;
	wire   [0:0] ddr3_cs_n;
	wire   [1:0] ddr3_dm;
	wire   [0:0] ddr3_odt;

    top_ddr3_hdmi inst_top_ddr3_hdmi
		(
			.ddr3_dq      (ddr3_dq),
			.ddr3_dqs_n   (ddr3_dqs_n),
			.ddr3_dqs_p   (ddr3_dqs_p),
			.ddr3_addr    (ddr3_addr),
			.ddr3_ba      (ddr3_ba),
			.ddr3_ras_n   (ddr3_ras_n),
			.ddr3_cas_n   (ddr3_cas_n),
			.ddr3_we_n    (ddr3_we_n),
			.ddr3_reset_n (ddr3_reset_n),
			.ddr3_ck_p    (ddr3_ck_p),
			.ddr3_ck_n    (ddr3_ck_n),
			.ddr3_cke     (ddr3_cke),
			.ddr3_cs_n    (ddr3_cs_n),
			.ddr3_dm      (ddr3_dm),
			.ddr3_odt     (ddr3_odt),
			.sclk_in      (clk),
			.srst_n       (srst_n)
		);

	ddr3_model u_comp_ddr3
          (
           .rst_n   (ddr3_reset_n),
           .ck      (ddr3_ck_p),
           .ck_n    (ddr3_ck_n),
           .cke     (ddr3_cke),
           .cs_n    (ddr3_cs_n),
           .ras_n   (ddr3_ras_n),
           .cas_n   (ddr3_cas_n),
           .we_n    (ddr3_we_n),
           .dm_tdqs ({ddr3_dm[1],ddr3_dm[0]}),
           .ba      (ddr3_ba),
           .addr    (ddr3_addr),
           .dq      (ddr3_dq[15:0]),
           .dqs     ({ddr3_dqs_p[1],ddr3_dqs_p[0]}),
           .dqs_n   ({ddr3_dqs_n[1],ddr3_dqs_n[0]}),
           .tdqs_n  (),
           .odt     (ddr3_odt)
           );

endmodule

3.开始Modelsim仿真(提前完成vivado 和modelsim的联合)

基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇,fpga开发,ip
可以看到在100多us的时候init_calib_complete 信号拉高了,表示已经完成了DDR3 SDRAM IP的初始化。文章来源地址https://www.toymoban.com/news/detail-764169.html

到了这里,关于基于 A7 的 DDR3 SDRAM IP 核使用(二)初始化篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 初始化列表的使用

    问题 类中是否可以定义 const 成员? 可以的 下面的类定义是否合法? 如果合法,ci 的值是什么,存储在哪里? 上面的 Test 类定义是合法的,但是要定义 Test 类对象的时候,编译器会报错,提示 const 成员变量 ci 没初始化 类中的 const 成员 我们对上面的代码进行编译,编译直

    2024年02月09日
    浏览(56)
  • 紫光FPGA DDR3 IP使用和注意事项(axi4协议)

    紫光DDR3 IP使用 对于紫光ddr3 IP核的使用需要注意事情。 阅读ddr ip手册: 1、注意:对于写地址通道,axi_awvalid要一直拉高,axi_awready才会拉高。使用的芯片型号时PG2L100H-6FBG676,不同的型号IP核接口和axi的握手协议也不一样(一定要注意),这点要注意,这也给我挖了一个很大的

    2024年04月12日
    浏览(51)
  • 基于Xml方式Bean的配置-初始化方法和销毁方法

    Bean的初始化和销毁方法配置 Bean在被实例化后,可以执行指定的初始化方法完成一些初始化的操作,Bean在销毁之前也可以执行指定的销毁方法完成一些操作,初始化方法名称和销毁方法名称通过 指定的方法名于自己创建的方法名一致即可 测试类 运行结果如下 我们还可以通

    2024年02月07日
    浏览(52)
  • Pytorch基本使用—参数初始化

    深度学习模型参数初始化是指在训练深度神经网络时,对网络的权重和偏置进行初始化的过程。合适的参数初始化可以加速模型的收敛,并提高模型的性能。 在深度学习中, 常用的参数初始化方法有以下几种: 零初始化(Zero Initialization):将所有权重和偏置初始化为0。然

    2024年02月16日
    浏览(56)
  • 紫光同创 FPGA 开发跳坑指南(四)—— DDR3 控制器 IP 的使用

    DDR3 是一种大容量的存储器件,采用了预取技术和双边沿采样技术,以实现高速数据存储与读取,在视频处理中可以用来缓存 1 帧或多帧图像。 目录 一、紫光 DDR3 IP 的安装 二、紫光 DDR3 IP 的配置 三、DDR3 IP 的使用 3.1 DDR3 写操作 3.2 DDR3 读操作         在 Pango Design Suit 中,选

    2024年01月25日
    浏览(51)
  • AliLinux的使用Docker初始化服务(详细)

    AliLinux是基于CentOS的。 1、java 环境 2、mysql环境 3、kafka环境 4、flink环境 5、dinky环境 这些环境,本想直接dnf安装在宿主机上,思来想去,还是用docker方便学习,也方便统一管理和使用 sudo dnf update sudo dnf upgrade 2.1、熟悉docker的命令 2.2、添加Docker存储库 需要注意不同的linux的版本

    2024年02月21日
    浏览(50)
  • C语言:结构体数组的使用和初始化:

    前文:在C语言中,结构体是经常会用到的自定义数据类型,通常在使用结构体时,我们会进行单一的结构体初始化。但在使用同一个结构体,初始化不同的数据时,则可以用到结构体数组来进行初始化。 结构体数组是指在一个数组中存储多个结构体对象的集合。结构体是一

    2024年02月04日
    浏览(53)
  • Xilinx FPGA DDR3设计(三)DDR3 IP核详解及读写测试

    引言 :本文我们介绍下Xilinx DDR3 IP核的重要架构、IP核信号管脚定义、读写操作时序、IP核详细配置以及简单的读写测试。 7系列FPGA DDR接口解决方案如图1所示。 图1、7系列FPGA DDR3解决方案 1.1 用户FPGA逻辑(User FPGA Logic) 如图1中①所示,用户FPGA逻辑块是任何需要连接到外部

    2024年02月06日
    浏览(55)
  • 初始化引导程序 & 使用BIOS中断显示字符、读取磁盘

     BIOS会将磁盘的第0个扇区(大小为512字节),加载到0x7c00处。 引导程序负责操作系统的加载,主要用于为操作系统运行提供初始化环境,并运行加载操作系统。 BIOS只加载磁盘的第0个扇区(512字节)到内存中,次程序无法做很多事情。 因此,我们可以采取以下两种方式种的任意一

    2023年04月15日
    浏览(61)
  • 【PostgreSQL】Ubuntu 下使用 Prisma 的初始化流程

    步骤如下: 创建 Ubuntu 用户 创建 PostgreSQL 用户 使用 postgres 用户登录,然后创建新用户: 设置用户密码 使用 postgres 或 projectname 用户登录,设置用户密码: 完成上面准备工作就ok了,不需要手工创建数据库,因为下面将由 Prisma 来创建数据库。 Prisma 初始化 schema.prisma 创建好

    2024年01月18日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包