MyFPGA Forum

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

有人把Sdram_Control_4Port扩展出更多端口吗,比如8PORT

[复制链接]
跳转到指定楼层
1#
发表于 2011-10-14 11:17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我简单看了看,感觉只要增加FIFO好像就可以。有谁这么做吗?
2#
发表于 2011-10-14 12:53:14 | 只看该作者
是的,要增加fifo和fifo的arbitor,因为同时只能有一个fifo和sdram通信。。
可以参考4port与2port的区别,进而改之。
3#
发表于 2011-12-8 21:10:35 | 只看该作者
回复 2# tingtang


请问增加fifo的arbitor是什么意思?要怎么样改呢?
本人是新手,很多不懂。先谢谢了。
4#
发表于 2011-12-9 11:53:35 | 只看该作者
回复 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,就是仲裁。
5#
发表于 2011-12-9 11:54:14 | 只看该作者
回复 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
复制代码
6#
发表于 2011-12-9 11:54:31 | 只看该作者
本帖最后由 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。
7#
发表于 2011-12-9 12:01:16 | 只看该作者
回复 3# jr_wong


    哎呀呀!!!这个回帖显示的太慢,到最后一起出来的!!!一下子蹦出这么多。。。。
8#
发表于 2011-12-11 14:07:23 | 只看该作者
回复 7# tingtang


    哈哈,原来如此,谢谢了!!
9#
发表于 2012-4-3 22:36:16 | 只看该作者
谢谢 各位大侠
10#
发表于 2012-6-24 15:39:09 | 只看该作者
谁能不不能把DE2-115的SDRAM的详细驱动上传一个呢
11#
发表于 2012-7-30 17:37:40 | 只看该作者
模仿着写添加了一个读端口,做了一个小测试,成功,还要再做高强度读取测试,估计会有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-6 19:46 , Processed in 0.044120 second(s), 15 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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