MyFPGA Forum

标题: 有人把Sdram_Control_4Port扩展出更多端口吗,比如8PORT [打印本页]

作者: ysdx    时间: 2011-10-14 11:17
标题: 有人把Sdram_Control_4Port扩展出更多端口吗,比如8PORT
我简单看了看,感觉只要增加FIFO好像就可以。有谁这么做吗?
作者: tingtang    时间: 2011-10-14 12:53
是的,要增加fifo和fifo的arbitor,因为同时只能有一个fifo和sdram通信。。
可以参考4port与2port的区别,进而改之。
作者: jr_wong    时间: 2011-12-8 21:10
回复 2# tingtang


请问增加fifo的arbitor是什么意思?要怎么样改呢?
本人是新手,很多不懂。先谢谢了。
作者: tingtang    时间: 2011-12-9 11:53
回复 3# jr_wong


    比如,你看下面这部分
  1.                         if( (read_side_fifo_wusedw1 < rRD1_LENGTH) )
  2.                         begin
  3.                                 mADDR        <=        rRD1_ADDR;
  4.                                 mLENGTH        <=        rRD1_LENGTH;
  5.                                 WR_MASK        <=        2'b00;
  6.                                 RD_MASK        <=        2'b01;
  7.                                 mWR                <=        0;
  8.                                 mRD                <=        1;                               
  9.                         end
  10.                         //        Read Side 2
  11.                         else if( (read_side_fifo_wusedw2 < rRD2_LENGTH) )
  12.                         begin
  13.                                 mADDR        <=        rRD2_ADDR;
  14.                                 mLENGTH        <=        rRD2_LENGTH;
  15.                                 WR_MASK        <=        2'b00;
  16.                                 RD_MASK        <=        2'b10;
  17.                                 mWR                <=        0;
  18.                                 mRD                <=        1;
  19.                         end
复制代码
就是                                WR_MASK        <=        2'b00;
                                RD_MASK        <=        2'b10;
他们的值,虽然你开了几个fifo,但是同一时刻进入sdram device的只能有一个,所以就要MASK,就是仲裁。
作者: tingtang    时间: 2011-12-9 11:54
回复 3# jr_wong


    比如,你看下面这部分
  1.                         if( (read_side_fifo_wusedw1 < rRD1_LENGTH) )
  2.                         begin
  3.                                 mADDR        <=        rRD1_ADDR;
  4.                                 mLENGTH        <=        rRD1_LENGTH;
  5.                                 WR_MASK        <=        2'b00;
  6.                                 RD_MASK        <=        2'b01;
  7.                                 mWR                <=        0;
  8.                                 mRD                <=        1;                               
  9.                         end
  10.                         //        Read Side 2
  11.                         else if( (read_side_fifo_wusedw2 < rRD2_LENGTH) )
  12.                         begin
  13.                                 mADDR        <=        rRD2_ADDR;
  14.                                 mLENGTH        <=        rRD2_LENGTH;
  15.                                 WR_MASK        <=        2'b00;
  16.                                 RD_MASK        <=        2'b10;
  17.                                 mWR                <=        0;
  18.                                 mRD                <=        1;
  19.                         end
复制代码

作者: tingtang    时间: 2011-12-9 11:54
本帖最后由 tingtang 于 2011-12-9 11:58 编辑

回复 3# jr_wong


    比如,你看下面这部分
  1.                         if( (read_side_fifo_wusedw1 < rRD1_LENGTH) )
  2.                         begin
  3.                                 mADDR        <=        rRD1_ADDR;
  4.                                 mLENGTH        <=        rRD1_LENGTH;
  5.                                 WR_MASK        <=        2'b00;
  6.                                 RD_MASK        <=        2'b01;
  7.                                 mWR                <=        0;
  8.                                 mRD                <=        1;                               
  9.                         end
  10.                         //        Read Side 2
  11.                         else if( (read_side_fifo_wusedw2 < rRD2_LENGTH) )
  12.                         begin
  13.                                 mADDR        <=        rRD2_ADDR;
  14.                                 mLENGTH        <=        rRD2_LENGTH;
  15.                                 WR_MASK        <=        2'b00;
  16.                                 RD_MASK        <=        2'b10;
  17.                                 mWR                <=        0;
  18.                                 mRD                <=        1;
  19.                         end
复制代码
这部分                        WR_MASK        <=        2'b00;
                                RD_MASK        <=        2'b10;
就是,设置arbitor,尽管开了几个fifo,但同一时刻只能有个fifo与sdram device communicate,所以要屏蔽一下其他的fifo,就叫arbitor。
你的fifo开的越多,这个XX_MASK的位数就要多,比如8个,就要3 bit。
作者: tingtang    时间: 2011-12-9 12:01
回复 3# jr_wong


    哎呀呀!!!这个回帖显示的太慢,到最后一起出来的!!!一下子蹦出这么多。。。。
作者: jr_wong    时间: 2011-12-11 14:07
回复 7# tingtang


    哈哈,原来如此,谢谢了!!
作者: hongbutiao    时间: 2012-4-3 22:36
谢谢 各位大侠
作者: 693294195    时间: 2012-6-24 15:39
谁能不不能把DE2-115的SDRAM的详细驱动上传一个呢
作者: boarbing    时间: 2012-7-30 17:37
模仿着写添加了一个读端口,做了一个小测试,成功,还要再做高强度读取测试,估计会有问题。




欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/) Powered by Discuz! X3