目录

基于Qsys的DDR2内存驱动

1、建立Qsys系统

1.1、时钟

1.2、NIOS II

1.3、系统ID

1.4、片上RAM

1.5、JTAG调试器

1.6、DDR2控制器

1.7、连接

2.2、顶层代码

2.3、引脚分配

2.4、NIOS程序编写测试


基于Qsys的DDR2内存驱动

按照正常步骤建立Quartus工程,新建一个顶层的Verilog文件用于调用Qsys系统。

此处有一个疑问:板卡上的芯片型号为EP4CGX75CF23I7,但参考板卡给的例程,发现其选用的芯片型号为EP4CGX75CF23C8,所以此程序也使用C8型号的芯片。

1、建立Qsys系统

了解DDR的基本知识,参考的是小梅哥电子的AC6102开发板的视频及PDF文档教程。建立Qsys的系统参考的是小梅哥AC6102和黑金电子的AX530教程。

1.1、时钟

设置输入时钟为100MHz。

1.2、NIOS II

选择NIOS II/f类型的软核,设置复位向量地址(程序代码存放的位置)和异常向量地址(程序运行的地址),因为DDR2存储器上电工作前需要对前几个地址的进行反复的数据读写操作,用来协商一个最佳的数据传输速率,所有需要设置一段偏移地址,设置地址偏移的大小参考Intel官方的文档,此处设置为0x100,同样异常地址的偏移量为0x120。

经过实际测试,发现不额外设置那0x100的偏移量,系统照样可以正常运行。

设置系统的Cache大小,可以使用默认大小,最下面的红框应取消勾选,因为使用的DDR2的位宽为128bits(64bits+双速率数据接口),所以需要“使处理器中的最高有效地址位绕过数据缓存”。

其余的部分均采用默认设置。

1.3、系统ID

此模块是用来给当前的Qsys系统一个唯一的编号,因为有些SOPC系统中可能会出现多个NIOS II处理器的情况。此处随意设置一个数值即可。

1.4、片上RAM

此处需要片上RAM,为了在系统建立初期验证,排除系统中除去DDR2控制器之外的错误给系统造成影响。

1.5、JTAG调试器

直接采用默认设置即可

1.6、DDR2控制器

设置部分与第一章中的配置界面相同,按照同样的参数设置。需要改变的是输入时钟为clk的100MHz。

应该注意复位信号的连接。

1.7、连接

参考下图中的连接,重新分配基地址,分配中断号。

2.2、顶层代码

顶层代码代码,用于调用Qsys核


module DDR2_Systems
(clk,   rst_n,  key_in,mem_odt, mem_clk,    mem_clk_n,mem_cs_n, mem_cke,    mem_addr,mem_ba,        mem_ras_n,  mem_cas_n,mem_we_n, mem_dq,     mem_dqs,mem_dm,led
);input         clk;
input       rst_n;
input       key_in;output reg [3:0] led;output  [1:0]   mem_odt;
inout   [1:0]   mem_clk;
inout   [1:0]   mem_clk_n;
output  [1:0]   mem_cs_n;
output  [1:0]   mem_cke;
output  [13:0]  mem_addr;
output  [1:0]   mem_ba;
output      mem_ras_n;
output      mem_cas_n;
output      mem_we_n;
inout   [63:0]  mem_dq;
inout   [7:0]   mem_dqs;
output  [7:0]   mem_dm;nios_ddr2 u0 (.clk_clk                (clk),                //   clk.clk.ddr2_local_refresh_ack (), //  ddr2.local_refresh_ack.ddr2_local_init_done   (),   //      .local_init_done.ddr2_reset_phy_clk_n   (),   //      .reset_phy_clk_n.mem_mem_odt            (mem_odt),            //   mem.mem_odt.mem_mem_clk            (mem_clk),            //      .mem_clk.mem_mem_clk_n          (mem_clk_n),          //      .mem_clk_n.mem_mem_cs_n           (mem_cs_n),           //      .mem_cs_n.mem_mem_cke            (mem_cke),            //      .mem_cke.mem_mem_addr           (mem_addr),           //      .mem_addr.mem_mem_ba             (mem_ba),             //      .mem_ba.mem_mem_ras_n          (mem_ras_n),          //      .mem_ras_n.mem_mem_cas_n          (mem_cas_n),          //      .mem_cas_n.mem_mem_we_n           (mem_we_n),           //      .mem_we_n.mem_mem_dq             (mem_dq),             //      .mem_dq.mem_mem_dqs            (mem_dqs),            //      .mem_dqs.mem_mem_dm             (mem_dm),             //      .mem_dm.rst_n_reset_n          (rst_n)           // rst_n.reset_n
);endmodule

2.3、引脚分配

此次使用的PCIE板卡上有两个晶振,一个为100MHz,一个为25Mhz,注意引脚分配的时候注意不要分配错。

在给DDR2信号分配引脚的时候,不仅要分配引脚的号,还要选择引脚的电平标准,电流大小。还需要设置输出信号的分组,否则会在编译时出现错误。最好的方式是一次配置完成后export出一个tcl脚本文件,以后配置起来就方便很多了。

2.4、NIOS程序编写测试

打开Eclipse的NIOS开发环境,选择正确的sopcinfo文件,新建一个基于memtest_small模板的工程,直接编译,无需更改任何代码,然后下载运行。

此时程序已经成功运行起来了,按照提示的步骤进行测试。

可以看到测试均通过,说明DDR2已经成功得被驱动了。

基于Qsys的DDR2内存驱动相关推荐

  1. S3C2440 SDRAM内存驱动 .

    SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器)也就是通常所说的内存.内存的工作原理.控制时序.及相关控制器的配置方法一直是嵌入式系统 ...

  2. linux驱动开发音频设备驱动,linux驱动开发—基于Device tree机制的驱动编写

    摘要:媒介 Device Tree是一种用去描绘硬件的数据布局,类似板级描绘说话,发源于OpenFirmware(OF).正在现在遍及应用的kernel 2.6.x版本中,对分歧仄台.分歧硬件,往] ...

  3. linux摄像头 自动对焦,基于H3在Linux下驱动OV5640摄像头的方法与流程

    技术特征: 1.基于H3在Linux下驱动OV5640摄像头的方法,其特征在于,包括如下步骤: S1打开OV5640摄像头所对应的设备文件/dev/videoX: S2为OV5640摄像头驱动添加读写 ...

  4. [转载]深入分析:我们为何需要DDR2内存技术(多图)

    文章来自: https://www.cnblogs.com/thx-bj/archive/2008/04/02/1134040.html [IT168评测室]最近,假如你仔细的观察PC领域发生的变化, ...

  5. 基于VXWORKS的NAND FLASH驱动程序设计

    基于VXWORKS的NAND FLASH驱动程序设计 3162412793@qq.com 技术交流QQ群: 691976956 目前,随着电子技术的不断发展,计算机技术也得到飞速的发展,产生了很多新技 ...

  6. showdialog 尝试读取或写入受保护的内存_TreadMarks: 基于工作站网络的共享内存计算...

    TreadMarks: 基于工作站网络的共享内存计算 以前学MIT6.824时看过TreadMarks相关论文,这篇论文当时只翻译了一半.最近无意中看到这篇未完成的翻译,google了下发现仍然没有人 ...

  7. 基于I2C协议的EEPROM驱动控制

    基于I2C协议的EEPROM驱动控制 `timescale 1ns / 1ps module i2c_ctrl #(parameter DEVICE_ADDR = 7'b1010_000,//i2c设 ...

  8. 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)

    源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...

  9. asp+ajax菜单,AJAX_基于asp+ajax和数据库驱动的二级联动菜单,index.asp 页面代码 复制代码 代 - phpStudy...

    基于asp+ajax和数据库驱动的二级联动菜单 index.asp 页面代码 复制代码 代码如下: set cmd = conn.execute("select bigclassid,big ...

最新文章

  1. centos安装Flash插件
  2. mpp文件转换excel_怎么将pdf文件转换成excel表格格式呢?
  3. html单选框背景图片,如何更改radio、checkbox选项框背景图?
  4. d029: 求出2-100之间的所有质数(素数)
  5. swift选择类或结构体
  6. STM32 电机教程 20 - 基于ST MC Workbench 无感FOC
  7. c语言case后面多字符,多SWITCH-CASE结构时的C语言对象方式化解
  8. 窗体中实现按 回车键 跳到下一个可选的TabIndex控件
  9. BigTable的开源实现:HBase数据库
  10. js正则表达式截取字符串中的数字(不包括正负号)
  11. iOS中控制器的实践和学习(2)-认识XCode4模版(A1,A3,B2简易图)
  12. matlab指定的数据范围无效,c – 如何检查迭代器指定的范围是否有效?
  13. teched2004视频资料下载,又加了5段,全是开发类的
  14. Axis1.4容器WebService服务发布过程
  15. 如何获取网络标准时间
  16. halcon教程之VisionPro软件和Halcon软件 的详细对比
  17. 热切换Log4j日志级别
  18. 当前版本与卡刷包android_Android p系统下载-MIUI 10 Android p线刷包卡刷包最新版 - 极光下载站...
  19. 「津津乐道播客」#309 厂长来了:我们买买买了这么多年,然后呢?(feat. 只二)...
  20. Android 日历自定义文本

热门文章

  1. Scala面向对象详解
  2. 安卓 修改键盘确定按钮状态,并获取对应点击事件
  3. Linux运维实用命令
  4. 金庸小说十大武功与NBA现役十大巨星
  5. Rviz中publish point使用
  6. 对比JAVA学习PHP系列:数据结构
  7. 关于MAX811MCU监控芯片做复位的理解
  8. 中国传统色彩样本与描述--实用设计色谱
  9. pusher 创建新应用_基于 Laravel + Pusher + Vue 通过事件广播构建实时聊天室应用
  10. 二、E906移植----项目解读与FPGA基本工程搭建