DE2 上 SDRAM Multi-port 的問題
因為剛開始學FPGA不久,在看DE2上的example code中有些問題想請教,請問各位大大Sdram_control_4port中的訊號
1. WR1_ADDR
2. WR1_MAX_ADDR
3. WR1_LENGTH
4. WR1_LOAD
是代表是什麼意思? 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。 2# Steady_Chou
想延伸一下問題...
想請問一下Steady_Chou版主, 如果我需要把SDRAM給不同的裝置讀取
如 LTM CCD 或 Flash
那我需要怎麼樣的切割方式呢? 是否可以切成好幾個wr 和rd 只要將address都算好?
或是有其他限制,我在無雙板上有看到有clk 的限制 那是否 也要注意這方面的使用?
因為小弟對這方面也是門外漢,想在DE0實現這幾個裝置讀取 不知是否可行?
謝謝 首先在規劃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。 4# Steady_Chou
我瞭解了 謝謝Steady_Chou版主 不會不會~ 有什麼問題盡量問
能幫忙解釋的 我一定幫到底 :P 感謝,終於了解了...
但麻煩的是算了一下需要的頻寬,看起來SDRAM的頻寬不夠...>_< 如果你要儲存的資料是影像的話 是不是考慮將你的影像解析度降低一些,不然就是用DE2-70因為上面有兩顆SDRAM 頻寬是DE2的兩倍。:) Steady 大大解釋的真詳細, 崇拜萬分 :) 想请问一下版主,DE2_70的Sdram_Control_4Port对SDRAM的读写是突发还是整页读写的???有点不明白的.... 可以说是整页读写,至于一页是 透过 ADDR , MAX_ADDR做设定 :) 你好,请问一下,在DE2_70的TV历程还有一段看不明白的就是
......
assign Tmp1 = m4YCbCr+mYCbCr_d;
assign Tmp2 = m4YCbCr+mYCbCr_d;
assign Tmp3 = Tmp1+m3YCbCr;
assign Tmp4 = Tmp2+m3YCbCr;
assign m5YCbCr = {Tmp4,Tmp3};
...这样处理实现怎样的功能呢? 个人感觉是在消除影像锯齿状, 不知道其它人认为呢?
我继续研究看看 :) 本帖最后由 laoxizi 于 2010-4-1 17:18 编辑
Steady_Chou版主,在进行write 操作的时候,设置了开始地址和结束的地址,那么我写进FIFO的数据就是按照顺序的写到了SDRAM里面吗?这样的话,如果我想重新从起始地址开始写,要怎么操作呢?
Steady_Chou版主,能再讲讲读port部分吗?看了一下也没有很明白,先谢谢Steady_Chou版主了。 回复 14# laoxizi
要重新设定起始位置,好像只能先设定reset再改变起始位置,但是reset也会将其它讯号及缓存器清除这会是一个问题,看起来原本的设计应该是不支持起始位置的动态改变。 Sdram_Control_4Port u6 (
// HOST Side
.REF_CLK(CLOCK_50),
.RESET_N(1'b1),
// FIFO Write Side 1
.WR1_DATA({sCCD_G, sCCD_B}),
.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, sCCD_R}),
.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里面要存储多少数据吗? 是FIFO里面要存储多少数据,也就是FIFO支持的长度。 大家都是用DE2的,能不能留个QQ
方便交流
我QQ 542588962 回复 4# Steady_Chou
请问版主,我用的DE0的板子,想让NIOS来读取SDRAM里面的图像缓存数据进行处理,之前看过无双大大的博客,可是他是DE2的板子,DE0只有一个SDRAM,我想用2R+2W来共用SDRAM,可是SOPC里面的SDRAM_Controler与前面图像缓存的SDRAM_controler冲突,真不知道该如何解决,希望版主能指点一下啊 回复Steady_Chou
请问版主,我用的DE0的板子,想让NIOS来读取SDRAM里面的图像缓存数据进行处理, ...
w_m 发表于 2010-7-28 14:55 http://www.myfpga.org/discuz/images/common/back.gif
可是SOPC里面的SDRAM_Controler与前面图像缓存的SDRAM_controler冲突
==> 衝突的原因是 用了兩個SDRAM Controller ?
页:
[1]
2