MyFPGA Forum

 找回密码
 注册
搜索
查看: 5425|回复: 3
打印 上一主题 下一主题

谁可以给我一个读取SDRAM里面地址的C程序啊

[复制链接]
跳转到指定楼层
1#
发表于 2010-7-15 21:45:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在NIOS里面要读取SDRAM的缓存数据,可是本人C学的太烂了,不知道该怎么写程序,哪位高人可以给我相似的程序参考看看啊,急用!!!
2#
发表于 2010-7-16 09:25:04 | 只看该作者
CMOS_Controller the_CMOS_Controller
    (
      .avs_s1_address                 (),
      .avs_s1_chipselect              (),
      .avs_s1_export_capture_read     (),
      .avs_s1_export_capture_readdata (),
      .avs_s1_export_capture_start    (),
      .avs_s1_export_capture_stop     (),
      .avs_s1_export_clk              (),
      .avs_s1_read                    (),
      .avs_s1_readdata                (),
      .avs_s1_write                   (),
      .avs_s1_writedata               (),
      .csi_clockreset_clk             (),
      .csi_clockreset_reset_n         ()
    ); 给系统加入CMOS来协助NIOS读取SDRAM缓存的数据,此段代码是顶层文件调用CMOS_Conreoller,请问括号里面要填入什么?才能完好的读取SDRAM缓存数据?
    module CMOS_Controller (
  // Avalon clock interface siganals
  input               csi_clockreset_clk,
  input               csi_clockreset_reset_n,
  // Signals for Avalon-MM slave port
  input      [1:0]    avs_s1_address,
  input               avs_s1_chipselect,
  input               avs_s1_read,
  output reg [31:0]   avs_s1_readdata,
  input               avs_s1_write,
  input      [31:0]   avs_s1_writedata,
  // Signals export to top module
  output              avs_s1_export_clk,
  output reg          avs_s1_export_capture_start,
  output reg          avs_s1_export_capture_stop,
  output reg          avs_s1_export_capture_read,
  input      [31:0]   avs_s1_export_capture_readdata
);

// Slave address constant
parameter CAPTURE_START = 2'h0;
parameter CAPTURE_STOP  = 2'h1;
parameter CAPTURE_DATA  = 2'h2;

assign avs_s1_export_clk = ~csi_clockreset_clk;

// write to export
always@(posedge csi_clockreset_clk, negedge csi_clockreset_reset_n) begin
  if (!csi_clockreset_reset_n) begin
    avs_s1_export_capture_start <= 1'b0;
    avs_s1_export_capture_stop  <= 1'b0;
  end
  else begin
    if (avs_s1_chipselect && avs_s1_write) begin
      case (avs_s1_address)
        CAPTURE_START:
          avs_s1_export_capture_start <= avs_s1_writedata[0];
        
        CAPTURE_STOP:
          avs_s1_export_capture_stop  <= avs_s1_writedata[0];
default: begin
          avs_s1_export_capture_start <= avs_s1_export_capture_start;
          avs_s1_export_capture_stop  <= avs_s1_export_capture_stop;
         end
      endcase
    end
  end
end

// read from export
always@(posedge csi_clockreset_clk, negedge csi_clockreset_reset_n) begin
  if (!csi_clockreset_reset_n) begin
    avs_s1_export_capture_read <= 1'b0;
    avs_s1_readdata            <= 32'hzzzzzzzz;
  end
  else begin
    avs_s1_export_capture_read <= 1'b0;
    avs_s1_readdata            <= 32'hzzzzzzzz;
   
    if (avs_s1_chipselect && avs_s1_read) begin
      case (avs_s1_address)
        CAPTURE_DATA: begin
          avs_s1_export_capture_read <= 1'b1;
          avs_s1_readdata            <= avs_s1_export_capture_readdata;
        end
default: begin
          avs_s1_export_capture_read <= avs_s1_export_capture_read;
          avs_s1_readdata            <= avs_s1_readdata;
         end
      endcase
    end
  end                     
end

endmodule
3#
发表于 2010-7-21 11:00:14 | 只看该作者
将顶层文件中相对应的引脚对应填入就好
4#
发表于 2010-12-24 17:36:26 | 只看该作者
回复 1# w_m

有几个方法:
1. *foo = BASE (一般情况下,这个会从cache读取)
2. 使用 io.h。 (直接读取,不通过cache)
   IORD_32DIRECT(BASE, OFFSET)               //或 IORD_8 或 IORD_16
   IOWR_32DIRECT(BASE, OFFSET, DATA)    //或 IOWR_8 或 IOWR_16
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-18 11:45 , Processed in 0.044820 second(s), 14 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表