MyFPGA Forum

 找回密码
 注册
搜索
查看: 21357|回复: 36

DE2 上 SDRAM Multi-port 的問題

[复制链接]
发表于 2009-11-7 21:09:10 | 显示全部楼层 |阅读模式
因為剛開始學FPGA不久,在看DE2上的example code中有些問題想請教,

請問各位大大Sdram_control_4port中的訊號
1. WR1_ADDR
2. WR1_MAX_ADDR
3. WR1_LENGTH
4. WR1_LOAD

是代表是什麼意思?
发表于 2009-11-7 21:44:19 | 显示全部楼层
1. WR1_ADDR 指的是 WR1 這個 Port 的起始位置(Starting address)。

2. WR1_MAX_ADDR 指的是 WR1 這個 Port 的結束位置(Ending address),每個address的資料寬度就是WR1 port的資料寬度16-bit。

3. WR1_LENGTH 是什麼呢? 每個Port內部都會有一個FIFO當做Buffer,當這個Buffer中資料到達一定的數量的時候,Sdram Multiport就會將Buffer中的資料寫進SDRAM,這個數量就是WR1_LENGTH。

4. WR1_LOAD 就是剛剛提到的FIFO中的Asynchronous Clear訊號,High的時候Clear。
111.JPG
发表于 2009-11-8 11:32:25 | 显示全部楼层
2# Steady_Chou
想延伸一下問題...
想請問一下Steady_Chou版主, 如果我需要把SDRAM給不同的裝置讀取
如 LTM CCD 或 Flash
那我需要怎麼樣的切割方式呢? 是否可以切成好幾個wr 和rd 只要將address都算好?
或是有其他限制,我在無雙板上有看到有clk 的限制 那是否 也要注意這方面的使用?
因為小弟對這方面也是門外漢,想在DE0實現這幾個裝置讀取 不知是否可行?
謝謝
发表于 2009-11-9 11:57:51 | 显示全部楼层
首先在規劃SDRAM Multi-Port之前,第一個要考慮是我們目前所需要的資料頻寬(寫入加上讀取)是不是這顆記憶體頻寬(SDRAM)所能處理的,舉例來說假設SDRAM跑120MHz並且是16-bit,那它的理想頻寬就是120M * 16 = 1.92Gbps, 但是實際的頻寬通常要再乘上0.7 ( MultiPort Controller所消耗的加上SDRAM實際上頻寬) 大約為 1.3Gbps,所以只要全部輸出入的 “ 時脈頻率 * 資料寬度 “ 小於記憶體實際頻寬 (剛剛的1.3Gbps)就可以。

至於要怎麼切割呢,當然只要你所需要的Write & Read Port數量不超過實際的數量(DE系列multi-port為兩個Write及兩個Read ports)並且address別重疊到,除非你的應用剛好可以重疊,不然資料會亂掉。關於DE0是否可行?? 只要這些都有注意到,當然可以!! 別忘了DE0上面可是Cyclone III FPGA,理論上可以跑得比DE2快,只是LE少了些。

我記得半導體學院: 數位電視雜訊課程 裡面有一個作業是把Multi-Port改成多一個Read Port就是Write Port*2 & Read Port*3,有需要的話,可以問問誰有這個Source Code。
发表于 2009-11-9 12:50:40 | 显示全部楼层
4# Steady_Chou
我瞭解了 謝謝Steady_Chou版主
发表于 2009-11-9 13:41:16 | 显示全部楼层
不會不會~ 有什麼問題盡量問
能幫忙解釋的 我一定幫到底
 楼主| 发表于 2009-11-9 19:49:12 | 显示全部楼层
感謝,終於了解了...
但麻煩的是算了一下需要的頻寬,看起來SDRAM的頻寬不夠...>_<
发表于 2009-11-9 21:16:31 | 显示全部楼层
如果你要儲存的資料是影像的話 是不是考慮將你的影像解析度降低一些,不然就是用DE2-70因為上面有兩顆SDRAM 頻寬是DE2的兩倍。
发表于 2009-11-10 10:05:08 | 显示全部楼层
Steady 大大解釋的真詳細, 崇拜萬分
发表于 2009-11-30 23:24:51 | 显示全部楼层
想请问一下版主,DE2_70的Sdram_Control_4Port对SDRAM的读写是突发还是整页读写的???有点不明白的....
发表于 2009-12-4 10:52:05 | 显示全部楼层
可以说是整页读写,至于一页是 透过 ADDR , MAX_ADDR做设定 :)
发表于 2010-1-3 18:04:37 | 显示全部楼层
你好,请问一下,在DE2_70的TV历程还有一段看不明白的就是
......
assign        Tmp1        =        m4YCbCr[7:0]+mYCbCr_d[7:0];
assign        Tmp2        =        m4YCbCr[15:8]+mYCbCr_d[15:8];
assign        Tmp3        =        Tmp1[8:2]+m3YCbCr[7:1];
assign        Tmp4        =        Tmp2[8:2]+m3YCbCr[15:9];
assign        m5YCbCr        =        {Tmp4,Tmp3};
...这样处理实现怎样的功能呢?
发表于 2010-1-3 18:21:01 | 显示全部楼层
个人感觉是在消除影像锯齿状, 不知道其它人认为呢?

我继续研究看看
发表于 2010-4-1 16:44:06 | 显示全部楼层
本帖最后由 laoxizi 于 2010-4-1 17:18 编辑

Steady_Chou版主,在进行write 操作的时候,设置了开始地址和结束的地址,那么我写进FIFO的数据就是按照顺序的写到了SDRAM里面吗?这样的话,如果我想重新从起始地址开始写,要怎么操作呢?

Steady_Chou版主,能再讲讲读port部分吗?看了一下也没有很明白,先谢谢Steady_Chou版主了。
发表于 2010-4-1 17:48:18 | 显示全部楼层
回复 14# laoxizi


要重新设定起始位置,好像只能先设定reset再改变起始位置,但是reset也会将其它讯号及缓存器清除  这会是一个问题,看起来原本的设计应该是不支持起始位置的动态改变。
发表于 2010-4-1 19:22:58 | 显示全部楼层
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里面要存储多少数据吗?
发表于 2010-4-2 09:28:23 | 显示全部楼层
是FIFO里面要存储多少数据,也就是FIFO支持的长度。
发表于 2010-4-11 16:58:04 | 显示全部楼层
大家都是用DE2的,能不能留个QQ
方便交流
我QQ 542588962
发表于 2010-7-28 14:55:56 | 显示全部楼层
回复 4# Steady_Chou


    请问版主,我用的DE0的板子,想让NIOS来读取SDRAM里面的图像缓存数据进行处理,之前看过无双大大的博客,可是他是DE2的板子,DE0只有一个SDRAM,我想用2R+2W来共用SDRAM,可是SOPC里面的SDRAM_Controler与前面图像缓存的SDRAM_controler冲突,真不知道该如何解决,希望版主能指点一下啊
发表于 2010-7-29 21:20:09 | 显示全部楼层
回复  Steady_Chou


    请问版主,我用的DE0的板子,想让NIOS来读取SDRAM里面的图像缓存数据进行处理, ...
w_m 发表于 2010-7-28 14:55


可是SOPC里面的SDRAM_Controler与前面图像缓存的SDRAM_controler冲突
==> 衝突的原因是 用了兩個SDRAM Controller ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-3-29 19:41 , Processed in 0.064097 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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