打印
[FPGA]

例说FPGA连载42:DDR控制器集成与读写测试之DDR2 IP核接口时序

[复制链接]
708|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
例说FPGA连载42DDR控制器集成与读写测试之DDR2 IP核接口时序
特权同学,版权所有
配套例程和更多资料下载链接:
http://pan.baidu.com/s/1c0nf6Qc
        用户逻辑和DDR2 IP核之间的接口并不是什么新发明的特殊接口,不过是Avalon-MM总线而已。有人说这个美眉(Memory-Map)会不会太慢了,关键时刻耽误事?非也,MM总线的burst模式也可以流水线式连续传输数据,丝毫不逊色于ST(stream)传输方式。
        这里我们可以简单了解一下带local_*”的Avalon-MM总线burst模式传输协议的使用方法。
        可以比较简单山寨的理解前面已经给出的带local_*”的Avalon-MM信号接口:
● local_sizeburst读写的最大数据数量。通常IP核内部有FIFO用于支持这样的连续数据读写,在Megafunction中设定好的最大数据数量是Avl_size的上限值。
● local_bebyte enable信号,用于使能或说是屏蔽读写数据的各个高低字节。
● local_ready为总线当前状态指示。这里高电平表示ready,此时的local_read_reqlocal_write_req能够被锁存。
● local_burstbegin为突发传输起始标志位。它不受local_ready的影响,在发起一次读或写操作的第一个时钟周期,只需保持一个时钟周期的local_burstbegin为高电平状态,并且不用管此时的local_ready状态如何。
● local_addr为读写共用的总线地址,位宽由DDR2的存储总量和总线上读写数据的位宽来决定。如1GbitDDR2,外部芯片的数据位宽为16bitAvalon-MM读写的数据位宽64bit,那么它的地址不是以16bit位宽来计算的,而是以64bit位宽来计算的,即16M24位)。
● local_read_req为读请求,配合地址local_addr和突发传输起始标志位local_burstbegin发起一次burst读操作。在local_burstbegin拉高后,只需要确保在同一个时钟周期或其后第一次local_ready有效的时钟周期拉高一次local_read_req信号即可。
● local_rdata_valid为读出数据的有效标志位。IP核在收到burst读请求(local_read_req)后的若干个时钟周期开始连续送出数据(数据可能分多次连续送出),该信号和读出数据配合,高电平表示当前读出数据有效。
● local_rdata为读出数据。和local_rdata_valid配合送给用户逻辑。
● local_write_req为写请求信号。若发起一次n个数据写入的burst传输,第一个传输时钟周期首先拉高local_burstbegin以及local_write_req,且local_write_req必须保持到n个数据写入完成。只有在local_ready有效时,当前的local_write_reqlocal_addrlocal_wdata才是有效的。
● local_wdata为写入数据。
        接着我们再用几张时序图来解析前面的接口。
如图4.14所示,正常4个数据的burst读操作。默认情况下,local_addr为读出的首个数据对应的地址,随后将读出递增地址的数据。
4.14 四个数据读取操作时序
如图4.15所示,遇到local_ready拉低的读操作,必须保持local_read_reqlocal_sizelocal_addrlocal_ready拉高为止。
4.15 读忙时的四个数据读取时序
如图4.16所示,正常4个数据的burst写操作。默认情况下,local_addr设定的是写入的首个数据对应的地址,随后每次写入数据后地址自动递增。
4.16 四个数据写取操作时序
如图4.17所示,遇到local_ready拉低的4个数据的burst写操作。Local_ready拉高时,local_write_reqlocal_addrlocal_wdata所对应的地址和数据才是有效的。
4.17 写忙时的四个数据写时序

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

338

主题

338

帖子

28

粉丝