博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nios ii小实验——SDRAM读写
阅读量:5058 次
发布时间:2019-06-12

本文共 5142 字,大约阅读时间需要 17 分钟。

实验所用板子为altera DE2板子,FPGA为Cyclone II:EP2C35F672C6,quartus版本为13.0

1.管脚信息

[11:0]DRAM_ADDR : address

DRAM_BA_0 : bank address 0

DRAM_BA_1 : bank address 1

DRAM_CAS_N : column address strobe

DRAM_CKE : clock enable

DRAM_CLK : clock

DRAM_CS_N : chip select 

[15:0]DRAM_DQ : Data

DRAM_LDQM :lower byte data mask

DRAM_UDQM : upper byte data mask

DRAM_RAS_N : row address strobe

DRAM_WE_N :  write enable

2.实验流程

1)建立工程

2)建立初始顶层文件

module work (  CLOCK_50,         // On Board 50 MHz  KEY,              // Pushbutton[3:0]  SW,               // Toggle Switch[17:0]  LEDR,             // LED Red[17:0]  DRAM_DQ,          // SDRAM Data bus 16 Bits  DRAM_ADDR,        // SDRAM Address bus 12 Bits  DRAM_LDQM,        // SDRAM Low-byte Data Mask   DRAM_UDQM,        // SDRAM High-byte Data Mask  DRAM_WE_N,        // SDRAM Write Enable  DRAM_CAS_N,       // SDRAM Column Address Strobe  DRAM_RAS_N,       // SDRAM Row Address Strobe  DRAM_CS_N,        // SDRAM Chip Select  DRAM_BA_0,        // SDRAM Bank Address 0  DRAM_BA_1,        // SDRAM Bank Address 1  DRAM_CLK,         // SDRAM Clock  DRAM_CKE          // SDRAM Clock Enable);input         CLOCK_50;   // On Board 50 MHzinput  [3:0]  KEY;        // Pushbutton[3:0]input  [17:0] SW;         // Toggle Switch[17:0]output [17:0] LEDR;       // LED Red[17:0]inout  [15:0] DRAM_DQ;    // SDRAM Data bus 16 Bitsoutput [11:0] DRAM_ADDR;  // SDRAM Address bus 12 Bitsoutput        DRAM_LDQM;  // SDRAM Low-byte Data Mask output        DRAM_UDQM;  // SDRAM High-byte Data Maskoutput        DRAM_WE_N;  // SDRAM Write Enableoutput        DRAM_CAS_N; // SDRAM Column Address Strobeoutput        DRAM_RAS_N; // SDRAM Row Address Strobeoutput        DRAM_CS_N;  // SDRAM Chip Selectoutput        output        DRAM_BA_0;  // SDRAM Bank Address 0output        DRAM_BA_1;  // SDRAM Bank Address 0output        DRAM_CLK;   // SDRAM Clockoutput        DRAM_CKE;   // SDRAM Clock Enableassign LEDR = SW;endmodule

3)编译并导入管脚信息

4)建立Qsys

CPU: NiOS II/e

ram: total memory size 12288bytes

jtag_uart: default

sdram_controller: DE2板子上的SDRAM大小为8M

接线图

修改CPU reset位置,自动生成地址,generate

将nios_ii.qsys文件添加入工程中

5)生成pll始终分频,将输入SDRAM的始终延时3ns(延时?前移?)

加入pll ip核,只需修改这两处

6)完成硬件代码

module work (  CLOCK_50,         // On Board 50 MHz  KEY,              // Pushbutton[3:0]  SW,               // Toggle Switch[17:0]  LEDR,             // LED Red[17:0]  DRAM_DQ,          // SDRAM Data bus 16 Bits  DRAM_ADDR,        // SDRAM Address bus 12 Bits  DRAM_LDQM,        // SDRAM Low-byte Data Mask   DRAM_UDQM,        // SDRAM High-byte Data Mask  DRAM_WE_N,        // SDRAM Write Enable  DRAM_CAS_N,       // SDRAM Column Address Strobe  DRAM_RAS_N,       // SDRAM Row Address Strobe  DRAM_CS_N,        // SDRAM Chip Select  DRAM_BA_0,        // SDRAM Bank Address 0  DRAM_BA_1,        // SDRAM Bank Address 1  DRAM_CLK,         // SDRAM Clock  DRAM_CKE          // SDRAM Clock Enable);input         CLOCK_50;   // On Board 50 MHzinput  [3:0]  KEY;        // Pushbutton[3:0]input  [17:0] SW;         // Toggle Switch[17:0]output [17:0] LEDR;       // LED Red[17:0]inout  [15:0] DRAM_DQ;    // SDRAM Data bus 16 Bitsoutput [11:0] DRAM_ADDR;  // SDRAM Address bus 12 Bitsoutput        DRAM_LDQM;  // SDRAM Low-byte Data Mask output        DRAM_UDQM;  // SDRAM High-byte Data Maskoutput        DRAM_WE_N;  // SDRAM Write Enableoutput        DRAM_CAS_N; // SDRAM Column Address Strobeoutput        DRAM_RAS_N; // SDRAM Row Address Strobeoutput        DRAM_CS_N;  // SDRAM Chip Selectoutput        output        DRAM_BA_0;  // SDRAM Bank Address 0output        DRAM_BA_1;  // SDRAM Bank Address 0output        DRAM_CLK;   // SDRAM Clockoutput        DRAM_CKE;   // SDRAM Clock Enableassign LEDR = SW;pll pll_u	(	.inclk0(CLOCK_50),	.c0(DRAM_CLK)	);	nios_ii u0 (        .clk_clk       (CLOCK_50),       //   clk.clk        .reset_reset_n (KEY[3]), // reset.reset_n        .sdram_addr    (DRAM_ADDR),    // sdram.addr        .sdram_ba      ({DRAM_BA_1,DRAM_BA_0}),      //      .ba        .sdram_cas_n   (DRAM_CAS_N),   //      .cas_n        .sdram_cke     (DRAM_CKE),     //      .cke        .sdram_cs_n    (DRAM_CS_N),    //      .cs_n        .sdram_dq      (DRAM_DQ),      //      .dq        .sdram_dqm     ({DRAM_UDQM,DRAM_LDQM}),     //      .dqm        .sdram_ras_n   (DRAM_RAS_N),   //      .ras_n        .sdram_we_n    (DRAM_WE_N)     //      .we_n    );endmodule
8)编译硬件代码,并烧录

9)打开nios II software编写软件代码

10)软件代码

软件代码里,地址信息跳变尝试了每次+1、+2、+4,在+4的情况下得到了正确数据。

推测这一情况与软核为32位系统,SDRAM存储空间为8位空间有关?

有待进一步探究

#include 
#include"system.h"#include"io.h"int main(){ unsigned int i, j, k; k = 236; //随便写的一个数 printf("Hello from Nios II!\n"); for(i = 0; i<40; i = i + 4){ IOWR(SDRAM_BASE+i, 0, k); printf("SDRAM_BASE+i = %d\t",SDRAM_BASE+i); printf("k = %d\n",k); k++; } for(i = 0; i<40; i = i + 4){ j = IORD(SDRAM_BASE+i, 0); printf("data_%d = %d\n", SDRAM_BASE+i, j); } return 0;}

11)edit BSP -> bulid project -> run as NIOS II hardware烧录软件

3.读写结果

地址跳变每次 i = i +1; 数据读写与想象不同

地址跳变每次 i = i +2; 数据读写与想象不同

;

地址跳变每次 i = i +4; 忽略出现的奇怪的显示,数据读写无误

解决:SDRAM的数据一般占据4个地址,或者8个地址,存在对其的问题,因此地址为应该+4或者4的倍数。

转载于:https://www.cnblogs.com/mingmingruyue99/p/7202016.html

你可能感兴趣的文章
hdu 1879 继续畅通project
查看>>
java 使用LinkedList模拟一个堆栈或者队列数据结构
查看>>
调整GDI显示方向
查看>>
node 单个表加条件查询
查看>>
单例模式
查看>>
Sublime Text 3 绝对神器
查看>>
enableEventValidation
查看>>
[GO]ticker的使用
查看>>
Linux限制端口
查看>>
C++变量初始化
查看>>
node学习心得
查看>>
顺序表存储空间连续问题
查看>>
牛客练习赛46 E 华华和奕奕学物理 (树状数组)
查看>>
JSP实现在项目在网页上查询
查看>>
zencart 网站空白的解决方案
查看>>
【9927】庆功会
查看>>
poi读excel小例子
查看>>
在一台呆滞设置两个listener(Oracle)
查看>>
KDE-SDK(KDE斥地工具)引见
查看>>
Informix IDS 11系统办理(918检验)认证指南,第 7 局部: IDS复制(22)
查看>>