跳转到主要内容
瑞苏盈科专栏
我与瑞苏盈科板卡的开发故事

FPGA小课堂-使用DDR4控制器实现多通道数据读写(17)

概述

在上一章节中,我们已经把测试工程的顶层例化模块进行说明,今天来使用仿真测试在不同情况下四个通道进行读写,并呈现出仿真结果。

仿真测试

1.四个通道同时发起写请求

    在四个测试通道中,首先同时产生写开始信号,再同时产生读开始信号,读写的长度为128,数据设置为递增数,初始地址需要注意不能重复,否则在ddr4侧可能会出现在同一个地址中重复写或重复读取,在同一个地址下重复写入数据时会将上一次写入的数据覆盖掉。

通过图1可以大体看出虽然四个通道的读写请求同时产生,但写结束和读结束的先后顺序都是根据通道号的大小排序的,通道号越小,优先级越高。

    我们将通道0的仿真波形放大,

图2和图3为通道0的写时序,在开始信号有效的同时,初始地址设置为0,写突发长度设置为127,实际发送的数量为128。可以看到发送的数据为0到127,共128个数据。并且每发送一个数据,写地址计数都会增加64,这个写地址计数相当于当前拍的数据的地址,每个数据占用64个地址。那么发送完128个数据后,地址计数到’h2000。也就是说,在没有将地址0到’h2000的数据读出前,下一次再向DDR4中写入数据时,写地址计数应该避免重复。

图4和图5为通道0的读时序,在读信号有效的同时,读初始地址为0,读突发长度设置为127,实际读取的数量为128。在读通道valid和ready同时拉高时,读数据有效,可以看到读取的数据为0到127。也就是说把之前写进DDR4的数据读了出来。

图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为通道0的写数据时序。初始地址为0,写入128个数据,值为0到127。写地址递增到’h2000。

  图9和图10为通道1的写数据时序。初始地址为’h2000,写入128个数据,值为128到255。

    使用通道2和通道3将写入DDR4的数据读出,通道2读取通道0写入的数据,通道3读取通道1写入的数据。

图11和图12为通道2的读数据时序,读初始地址为0,读取128个数据,值为0到127。也就是通道0写进DDR4中的数据。

  图13和图14为通道3读取数据的时序。读初始地址为’h2000,读取128个数据,值为128到255 。也就是通道1写进DDR4中的数据。

  图15为DDR4  IP的读写通道时序,可以看到每个通道的ID都不同,并且通过interconnect将同时的读写请求进行仲裁,依次将读写请求发送到DDR4 IP 。

总结

本章进行了两种测试仿真,一种为4个通道同时发起读写请求,一种为两个通道发起写请求,两个通道发起读请求。经过仿真验证,可以观察仿真时序情况。

文章来源:威视锐科技