MyFPGA Forum

 找回密码
 注册
搜索
12
返回列表 发新帖
楼主: Terran

DE2 上 SDRAM Multi-port 的問題

[复制链接]
发表于 2010-7-30 09:57:58 | 显示全部楼层
回复 20# Steady_Chou


    版主是什么意思?不能用两个SDRAM  controller吗?那该如何是好啊!!可以用DMA吗
发表于 2010-7-30 10:32:32 | 显示全部楼层
是阿  用兩個SDRAM Controller 你的版子上要有兩顆SDRAM才行阿....

想問你一下  你的SOPC會用到SDRAM Controller的原因是甚麼  可不可以用SRAM or Flash替代??
发表于 2010-7-30 15:33:28 | 显示全部楼层
回复 22# Steady_Chou


    我是DE0 的板子,没有SRAM.
    硬体语言写的控制摄像头采集数据在sdram里面缓存,送到VGA输出,然后我要在NIOS里面提取缓存的数据进行处理,最后存储,SOPC里面如果不用SDRAM的话,我不知道该拿什么来存储,或者缓存 数据了
发表于 2010-7-30 16:13:26 | 显示全部楼层
回复 22# Steady_Chou
  请问,我用的是DE0的板子,只有一个SDRAM。我用CCD采集的数据放进SDRAM缓存后,又想让NIOS调取SDRAM里面缓存的数据进行处理,之后不得以又得放回SDRAM,最后存储到sd卡。

wire        [15:0]        Read_DATA1;
wire        [15:0]        Read_DATA2;
wire         [15:0]       Read_DATA3;     // add by oomusou for RGB16
Sdram_Control_4Port  u7   (        //  HOST Side                                               
          .REF_CLK(CLOCK_50),
          .RESET_N(1'b1),
          .CLK(sdram_ctrl_clk),

        //        FIFO Write Side 1
.WR1_DATA({sCCD_R[11:7], sCCD_G[11:6],  sCCD_B[11:7]}),
.WR1(sCCD_DVAL),
.WR1_ADDR(0),
.WR1_MAX_ADDR(800*480),
.WR1_LENGTH(9'h100),
.WR1_LOAD(!DLY_RST_0),
.WR1_CLK(CCD_PIXCLK),

//        FIFO Write Side 2
                                                       
.WR2_DATA(),         
.WR2(),
.WR2_ADDR(),
.WR2_MAX_ADDR(),
.WR2_LENGTH(),
.WR2_LOAD(!DLY_RST_0),
.WR2_CLK(~CCD_PIXCLK),
                           

//        FIFO Read Side 1
.RD1_DATA(Read_DATA3),
.RD1(Read),
.RD1_ADDR(0),
.RD1_MAX_ADDR(800*480),
.RD1_LENGTH(9'h100),
.RD1_LOAD(!DLY_RST_0),
.RD1_CLK(~VGA_CTRL_CLK),
                                                       
//        FIFO Read Side 2
.RD2_DATA(),
.RD2(),
.RD2_ADDR(),
.RD2_MAX_ADDR(),
.RD2_LENGTH(),
.RD2_LOAD(!DLY_RST_0),
.RD2_CLK(~VGA_CTRL_CLK),
                                                       
//        SDRAM Side
.SA(DRAM_ADDR),
.BA({DRAM_BA_1,DRAM_BA_0}),
.CS_N(DRAM_CS_N),
.CKE(DRAM_CKE),
.RAS_N(DRAM_RAS_N),
CAS_N(DRAM_CAS_N),
.WE_N(DRAM_WE_N),
.DQ(DRAM_DQ),
.DQM({DRAM_UDQM,DRAM_LDQM})
                                                );
// add by oomusou for RGB16
assign Read_DATA1 = {Read_DATA3[10:6], Read_DATA3[4:0], 5'h00};
assign Read_DATA2 = {Read_DATA3[5:5], 4'h0, Read_DATA3[15:11], 5'h00};
    参考了无双大大的博客,对2w和2r 进行了修改,这样可以省出空间。那么,一个用来缓存ccd采集的原始数据(w1和r1),另一个用来存储NIOS处理后的数据(w2和r2),这样的做法可以实现吗??
请教了,thank you!!!
发表于 2010-8-18 08:55:56 | 显示全部楼层
那你用什么作为NIos II处理器的存储空间呢?
发表于 2010-12-16 14:19:55 | 显示全部楼层
回复 4# Steady_Chou


    Steady_Chou版主有Write Port*2 & Read Port*3的SDRAM的Source Code吗?有的话发一份给我借鉴一下,感激不尽。邮箱:huguo.yang@163.com
发表于 2011-4-19 10:22:02 | 显示全部楼层
想好好研究下。
发表于 2011-5-2 20:16:33 | 显示全部楼层
太感谢了,刚好用到
发表于 2011-7-23 23:38:58 | 显示全部楼层
这个贴说的比较清楚
发表于 2011-7-26 17:23:51 | 显示全部楼层
受益匪浅~
发表于 2011-10-12 10:37:42 | 显示全部楼层
回复 16# laoxizi


    你的问题解决了吗?我也不明白,请教一下。
发表于 2011-10-12 10:41:34 | 显示全部楼层
回复 6# Steady_Chou


    Sdram_Control_4Port u6        (
  // HOST Side
  .REF_CLK(CLOCK_50),
  .RESET_N(1'b1),
  // FIFO Write Side 1
  .WR1_DATA({sCCD_G[9:5], sCCD_B[9:0]}),
  .WR1(sCCD_DVAL),
  .WR1_ADDR(0),
  .WR1_MAX_ADDR(320*256),
  .WR1_LENGTH(9'h100),
  .WR1_LOAD(!DLY_RST_0),
  .WR1_CLK(CCD_PIXCLK),
  // FIFO Write Side 2
  .WR2_DATA({sCCD_G[4:0], sCCD_R[9:0]}),
  .WR2(sCCD_DVAL),
  .WR2_ADDR(22'h100000),
  .WR2_MAX_ADDR(22'h100000+320*256),
  .WR2_LENGTH(9'h100),
  .WR2_LOAD(!DLY_RST_0),
  .WR2_CLK(CCD_PIXCLK),
  // FIFO Read Side 1
  .RD1_DATA(Read_DATA1),
  .RD1(Read),
  .RD1_ADDR(320*8),
  .RD1_MAX_ADDR(320*248),
  .RD1_LENGTH(9'h100),
  .RD1_LOAD(!DLY_RST_0),
  .RD1_CLK(CLK_18),
  // FIFO Read Side 2
  .RD2_DATA(Read_DATA2),
  .RD2(Read),
  .RD2_ADDR(22'h100000+320*8),
  .RD2_MAX_ADDR(22'h100000+320*248),
  .RD2_LENGTH(9'h100),
  .RD2_LOAD(!DLY_RST_0),
  .RD2_CLK(CLK_18),
  // SDRAM Side
  .SA(DRAM_ADDR),
  .BA({DRAM_BA_1,DRAM_BA_0}),
  .CS_N(DRAM_CS_N),
  .CKE(DRAM_CKE),
  .RAS_N(DRAM_RAS_N),
  .CAS_N(DRAM_CAS_N),
  .WE_N(DRAM_WE_N),
  .DQ(DRAM_DQ),
  .DQM({DRAM_UDQM,DRAM_LDQM}),
  .SDR_CLK(DRAM_CLK)
);

还要请教一下版主,为什么写的地址和读的地址不是对应的呢?这个例程的功能不就是把CCD的图像显示到VGA显示器上吗?那么应该从CCD写进去的地址开始读啊。为什么会这样写呢?
还有一个要请教版主的就是:
  .RD2_DATA(Read_DATA2),
  .RD2(Read),
  .RD2_ADDR(22'h100000+320*8),
  .RD2_MAX_ADDR(22'h100000+320*248),
  .RD2_LENGTH(9'h100),
  .RD2_LOAD(!DLY_RST_0),
  .RD2_CLK(CLK_18),
这里面的RD2_LENGTH是起到什么作用呢。是说明FIFO里面要存储多少数据吗?
发表于 2011-11-30 22:58:45 | 显示全部楼层
正在研究DE2_70_TV,看到sdram这个部分有很多都不懂,这个帖子讲得挺清楚的,获益匪浅啊!
发表于 2011-12-20 23:47:46 | 显示全部楼层
Sdram_Control_4Port的端口有两个read 两个write,是不是意味着可以有两个video模块分别操作sdram,把数据在两个数据空间里
发表于 2012-2-20 10:53:20 | 显示全部楼层
回复 10# lengyuye020202

版主,我发现把        rWR1_LENGTH                <=        128;
                rRD1_LENGTH                <=        128;
                rWR2_LENGTH                <=        128;
                rRD2_LENGTH                <=        128;
128改成640也行,没有影响,到底是怎么回事。我用PAL摄像头,改成640主要考虑的是一行为640像素
发表于 2012-4-20 15:20:43 | 显示全部楼层
你好
想請問WR1_ADDR 是WR1的起始位置
WR1_MAX_ADDR是結束位子

那假如想要對sdram做指定位址的存取要怎寫??
就是從指定的ADDRESS取值
但在CONTRLLER裡  卻都沒有看到輸入位址的地方
謝謝
发表于 2012-7-30 17:40:40 | 显示全部楼层
添加端口需要注意的问题是什么呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-3-29 07:48 , Processed in 0.050094 second(s), 14 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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