• nios ii小实验——SDRAM读写


    实验所用板子为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 MHz
    input  [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 Bits
    output [11:0] DRAM_ADDR;  // SDRAM Address bus 12 Bits
    output        DRAM_LDQM;  // SDRAM Low-byte Data Mask 
    output        DRAM_UDQM;  // SDRAM High-byte Data Mask
    output        DRAM_WE_N;  // SDRAM Write Enable
    output        DRAM_CAS_N; // SDRAM Column Address Strobe
    output        DRAM_RAS_N; // SDRAM Row Address Strobe
    output        DRAM_CS_N;  // SDRAM Chip Selectoutput        
    output        DRAM_BA_0;  // SDRAM Bank Address 0
    output        DRAM_BA_1;  // SDRAM Bank Address 0
    output        DRAM_CLK;   // SDRAM Clock
    output        DRAM_CKE;   // SDRAM Clock Enable
    
    assign 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 MHz
    input  [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 Bits
    output [11:0] DRAM_ADDR;  // SDRAM Address bus 12 Bits
    output        DRAM_LDQM;  // SDRAM Low-byte Data Mask 
    output        DRAM_UDQM;  // SDRAM High-byte Data Mask
    output        DRAM_WE_N;  // SDRAM Write Enable
    output        DRAM_CAS_N; // SDRAM Column Address Strobe
    output        DRAM_RAS_N; // SDRAM Row Address Strobe
    output        DRAM_CS_N;  // SDRAM Chip Selectoutput        
    output        DRAM_BA_0;  // SDRAM Bank Address 0
    output        DRAM_BA_1;  // SDRAM Bank Address 0
    output        DRAM_CLK;   // SDRAM Clock
    output        DRAM_CKE;   // SDRAM Clock Enable
    
    assign 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 <stdio.h>
    #include"system.h"
    #include"io.h"
    
    int main()
    {
    	unsigned int i, j, k;
    	k = 236;  //随便写的一个数
    
    	printf("Hello from Nios II!
    ");
    
    	for(i = 0; i<40; i = i + 4){
    		IOWR(SDRAM_BASE+i, 0, k);
    		printf("SDRAM_BASE+i = %d	",SDRAM_BASE+i);
    		printf("k = %d
    ",k);
    		k++;
    	}
    
    	for(i = 0; i<40; i = i + 4){
    		j = IORD(SDRAM_BASE+i, 0);
    		printf("data_%d = %d
    ", 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的倍数。


  • 相关阅读:
    Magento交易邮件常见问题
    Magento谷歌分析设置
    magento SEO优化设置
    飞凤平台示范项目
    工厂生产线测量仪器的数据下发
    某外资汽车部件工厂车床联网系统
    行云仓库管理系统的概述
    arm v5,v6,v7?
    前端开发收藏夹
    mysql 事件
  • 原文地址:https://www.cnblogs.com/mingmingruyue99/p/7202016.html
Copyright © 2020-2023  润新知