一、 概述
在上一章节中,我们已经把测试工程的顶层例化模块进行说明,今天来使用仿真测试在不同情况下四个通道进行读写,并呈现出仿真结果。
二、 仿真测试
1、四个通道同时发起写请求
在四个测试通道中,首先同时产生写开始信号,再同时产生读开始信号,读写的长度为128,数据设置为递增数,初始地址需要注意不能重复,否则在ddr4侧可能会出现在同一个地址中重复写或重复读取,在同一个地址下重复写入数据时会将上一次写入的数据覆盖掉。
图1
通过图1可以大体看出虽然四个通道的读写请求同时产生,但写结束和读结束的先后顺序都是根据通道号的大小排序的,通道号越小,优先级越高。
我们将通道0的仿真波形放大,
图2
图3
图2和图3为通道0的写时序,在开始信号有效的同时,初始地址设置为0,写突发长度设置为127,实际发送的数量为128。可以看到发送的数据为0到127,共128个数据。并且每发送一个数据,写地址计数都会增加64,这个写地址计数相当于当前拍的数据的地址,每个数据占用64个地址。那么发送完128个数据后,地址计数到’h2000。也就是说,在没有将地址0到’h2000的数据读出前,下一次再向DDR4中写入数据时,写地址计数应该避免重复。
图4
图5
图4和图5为通道0的读时序,在读信号有效的同时,读初始地址为0,读突发长度设置为127,实际读取的数量为128。在读通道valid和ready同时拉高时,读数据有效,可以看到读取的数据为0到127。也就是说把之前写进DDR4的数据读了出来。
图6
图6为ddr4 IP的仿真波形,可以看到每个通道的读写请求,interconnect都分配了不同的序号ID,interconnect根据ID序号将不同通道的请求进行区分,相同通道的读写请求的ID相同。并通过仲裁依次将各个通道的读写请求发送到ddr4中。因为同时只能读或写,所以在读写未完成时交替操作。
2、两个通道写,另外两个通道读
使用通道0和通道1同时向DDR4中写入数据,数据写进DDR4后,之后再使用通道2和通道3读出数据。
通道0向DDR4中写入0到127的数据,通道1向DDR4中写入128到255的数据。通道0写初始地址为0,通道1写初始地址为’h2000,写突发长度都为127。
图7
图8
图7和图8为通道0的写数据时序。初始地址为0,写入128个数据,值为0到127。写地址递增到’h2000。
图9
图10
图9和图10为通道1的写数据时序。初始地址为’h2000,写入128个数据,值为128到255。
使用通道2和通道3将写入DDR4的数据读出,通道2读取通道0写入的数据,通道3读取通道1写入的数据。
图11
图12
图11和图12为通道2的读数据时序,读初始地址为0,读取128个数据,值为0到127。也就是通道0写进DDR4中的数据。
图13
图14
图13和图14为通道3读取数据的时序。读初始地址为’h2000,读取128个数据,值为128到255 。也就是通道1写进DDR4中的数据。
图15
图15为DDR4 IP的读写通道时序,可以看到每个通道的ID都不同,并且通过interconnect将同时的读写请求进行仲裁,依次将读写请求发送到DDR4 IP 。
三、 总结
本章进行了两种测试仿真,一种为4个通道同时发起读写请求,一种为两个通道发起写请求,两个通道发起读请求。经过仿真验证,可以观察仿真时序情况。
本文章由威三学院出品
对课程感兴趣可以私信联系

京公网安备11022902000513号
