返回列表 发帖
我仔细的看下来,收获颇多啊
如果人生也能仿真...

TOP

ripple
我再问你问题哦
8 internal banks for concurrent operation
这句话是什么意思?

关于突发读写,  如果我现在对一个地址进行突发读, 突发长度是8, 结束之后, 我仍然想要后续的数据, 我继续发地址出去读, 就可以的吧

对于不同的bank, 就是说我在操作某个bank的时候, 我可以激活另外的bank, 从而消除等待时间。

对bank的刷新是怎么进行的?

TOP

我今天上午在网上搜索了一下资料
我现在觉得
intel  CPU的  32根地址线
通过内存控制器的管理   会依次变为   CS     BA[2:0]    RA[:]   CA[:]
具体的情况会根据你所插的内存情况来确定  

关于不同bank可以独立操作,也就是一个bank可以正在刷新,而另一个bank可以进行读写操作
这样操作系统可以把不同的程序, Load到不同的bank里面, 从而实现诸多程序访问内存的所需的时间降低, 在intel的说明书中有这么一句话
Up to 64 simultaneous open pages,32 per channle(assuming 8 ranks of 8 bank devices).
双通道   一个通道支持4个rank,  使用的内存颗粒是8bank的。

请ripple大师斧正!

TOP

我今天上午在网上搜索了一下资料
我现在觉得
intel  CPU的  32根地址线
通过内存控制器的管理   会依次变为   CS     BA[2:0]    RA[:]   CA[:]
具体的情况会根据你所插的内存情况来确定  

关于不同bank可以独 ...
bigpig145236 发表于 2009-7-29 12:17


我现在明白你的困惑了。你现在钻到CPU地址线和DRAM芯片怎么连接的胡同里去了!
其实intel cpu的32位地址线,是指CPU的寻址能力,这些地址线直接与NB相连。PC的地址解析是通过桥片一级一级往下转的。也就是CPU发地址后,先NB解码,如果是自己下面的设备(通常与NB直连的设备有内存控制器、VGA、PCI-E,以及SB。在这SB是一个很特殊的“设备”可以理解为桥设备。),则译码给相应的设备,如果是SB的,则直接向下转给SB。同样SB也采用类似的工作模式,当然包括PCI也是这样的。这样你就不会一直为CPU的地址是怎么连到DRAM颗粒上面的问题而苦恼了吧!
控制器属于NB的一个设备,哪它的连接肯定也只与NB相关了。在硬件设计时,需要找到内存控制器所在的NB,根据NB的信号引脚定义与内存颗粒对应的引脚互联即可。
从整个系统来看,CPU的寻址以及具体的地址分配是有具体定义的(在bios中可以做稍许调整)。然后你在NB的寄存器中设置相应的内存信息就好了。

TOP

Good!
ripple牛B啊
我要继续努力学习。

TOP

ripple
我又想到了一个问题

我读bank0 中的数据 突发长度为8
我能在这个读的过程中继续给bank0发命令吗

比如我在第一个时钟,发出对bank0的读命令,第二个时钟又对bank0发出了读命令,只是读不同的行列地址,  那么当潜伏期之后,假设为4个时钟周期, 那么第一个读命令之后四个时钟周期,内存开始发出数据,
现在问题来了,因为数据的突发长度为8(设定的), 可是当这突发数据没有传送完成的时候,内存会响应我的第二个读命令吗?就是终止突发读的后续数据输出,而是输出我的第二个地址对应的数据?

还有一个问题,于上类似, 就是我对bank0发起了读操作, 我需要等待4个时钟的潜伏器才能拿到数据,我又继续访问bank0, 第二次的时候还需要等待4个时钟的潜伏器吗?

我只是在内存颗粒的资料上看到,访问不同的bank , 等待完第一个潜伏器之后,就可以实现数据连续的输出。

ripple

TOP

呼唤   ripple大师!!!

TOP

大师就免了,混口饭吃而以。

对你问的问题答复如下:
Q1:我读bank0 中的数据 突发长度为8我能在这个读的过程中继续给bank0发命令吗?比如我在第一个时钟,发出对bank0的读命令,第二个时钟又对bank0发出了读命令,只是读不同的行列地址,那么当潜伏期之后,假设为4个时钟周期, 那么第一个读命令之后四个时钟周期,内存开始发出数据,现在问题来了,因为数据的突发长度为8(设定的), 可是当这突发数据没有传送完成的时候,内存会响应我的第二个读命令吗?就是终止突发读的后续数据输出,而是输出我的第二个地址对应的数据?
A1:acitve命令对于同一个bank进行操作时,必须要有一个active/precharge命令相对应。也就是你对一个bank进行操作后,必须进行一次precharge才能再次对这个bank进行操作。这样子,你上面描述的对同一个bank连续读操作命令是非法的。除非你打开auto precharge,第一次读操作完成后,控制器自动做一次precharge,然后你再次发read命令时,DRAM会响应。但是前提是连续两次的active时间需要满足tRRD参数。如果满足后,两次read操作的时间间隔大于4个clock,哪你应该是可以获得两次操作的完整数据的。

Q2:还有一个问题,于上类似, 就是我对bank0发起了读操作, 我需要等待4个时钟的潜伏器才能拿到数据,我又继续访问bank0, 第二次的时候还需要等待4个时钟的潜伏器吗?
A2:通过A1的说明,需要等待的时间为tRRD+Read latency;

Q3:我只是在内存颗粒的资料上看到,访问不同的bank, 等待完第一个潜伏器之后,就可以实现数据连续的输出。
A3:是的,但是数据有可能被截断了。这个时候需要看具体的命令以及各种参数的设置了,如latency。此外,你上面的描述存在一个前提,那就是一个方向的操作,即连续读操作或者连续写操作;如果一段出现读后面跟着写或者是些后面跟着读操作,哪恐怕就难了,整个数据需要有一个换手的时间,否则数据就在线上抢道,打架了!

TOP

恩   你讲的我明白了
我看一个内存颗粒的说明书先读后写的换手时间,这个问题我大概清楚了,
呵呵

我在网上搜到了一个关于RAM  Burst Length的说法

建議是4,但是由於受限於外頻的因素之影響
因此效用並不是很明顯


不過在雙通道平台應用上
另有一點,雖然這個值"理論"上是愈大愈好...
但是如果平常你不常作大量資料傳輸的話,是建議4,資料傳輸會較迅速
不常作大量資料傳輸設定成8反而會延誤時間
反之,如果是很常作大量資料傳輸(轉檔,3D GAME),設定為8會讓你有驚喜的結果

總之,這個值會影響到的變數很多(週邊平台,電腦主要用途)
不像CAS Latency可以輕易下定論(愈小愈好)

TOP

恩   你讲的我明白了
我看一个内存颗粒的说明书先读后写的换手时间,这个问题我大概清楚了,
呵呵

我在网上搜到了一个关于RAM  Burst Length的说法

建議是4,但是由於受限於外頻的因素之影響
因此效用並不是很明 ...
bigpig145236 发表于 2009-7-29 16:25


确实像你说的这样。关于效率的问题在《DDR/DDR2/DDR3中的prefetch》这个帖子里面有介绍一点!
不仅仅是针对DDR2,同样的道理,对于DDR3,由于BL长度仅支持8在一定的情况下,搞不好它的效率还没有DDR2的高。如果感兴趣可以看看DDR2 VS DDR3这篇文章。

TOP

返回列表