一、 概述
在上一节中,我们使用DDR4的AXI接口做了一个简单的读写测试,这一节我们使用数据掩码(wstrb)来控制写入数据的有效字节。再使用不同的传输方式向DDR4中读写数据,这样可以更清晰的了解FIXED、INTR、WRAP的传输模式
二、 使用wstrb信号控制写入DDR4的有效字节
wstrb:输入的数据字节掩码,数据位宽512位,含有64个字节,wstrb位宽为64位,每一位对应数据wdata的字节位,在本次仿真测试中,使wdata的全部字节有效。
在之前的测试中,我们使wstrb的每一位都为1,表示写入的wdata的全部字节有效。这次我们只使数据的低32字节有效,写入和读取的数据数量为16个。
测试流程:首先在ddr4_test模块来产生数据,将数据通过ddr4_wr模块使用axi协议写进ddr4中,当数据写入ddr4后,再通知ddr4_rd模块使用axi协议读出ddr4中的数据。流程图1所示。
Ddr4_test模块功能:这个模块来控制读写DDR4的初始地址和数据数量。可以控制写进DDR4的数据值,和读出DDR4度出的数据值。在DDR4写数据完成后读出DDR4的数据。读写数据波形图如图2所示。
Ddr4_wr模块功能:DDR4写模块根据ddr4_test模块发来的写开始信号,写数据数量,初始地址,首先通过写地址通道发送写数据的初始地址、写数据数量、和控制参数,wstrb信号作为写数据的掩码。再通过写数据通道开始向DDR4中写入数据。当接收写响应通道的写响应成功标志时,表示DDR4写数据完成。写数据波形图如图3所示。标注了写地址通道、写数据通道、写响应通道握手情况。
Ddr4_rd模块功能:在DDR4读模块中,根据ddr4_test模块发出的读开始信号,在读地址通道中发送读起始地址、读长度和控制信号,给DDR4发起读请求,根据读数据通道读出数据,rd_data作为读数据,rd_en作为读数据有效信号发送给ddr4_test模块。如图4所示,标注了读地址通道、读数据通道握手情况。
可以通过图5可以看到,ddr4_wr模块中的写数据中,将写数据512位分割16份,每一份的值都为1。
通过图6可以看到,读出来的数据的高256位已经被清零,只留下低256位与写数据一致。
三、 FIXED突发模式说明
在FIXED模式下,所有传输的地址保持不变,每次写入DDR4的数据都对应同一地址。所以对于DDR4内存来说,使用FIXED模式向同一地址写入数据时,都会覆盖之前写入的数据。通常,在使用DDR4时需要处理大量的数据,所以基本会使用INCR模式进行数据传输。
四、 WRAP突发模式说明
使用WRAP模式进行读写测试时,在图7中可以看到,我发出的写长度为’hff,但只发送了16个数据后,写响应通道就给出了响应,由此说明在使用WRAP模式时,对于突发长度大于16时不能正确写入。WRAP模式在地址递增中类似于INCR模式,每传输一个数据,地址增加64,当写入地址抵达回绕上界时,地址会移动到回绕下界,之后再递增。突发长度必须为2、4、8、16其中之一。起始地址必须为数据字节数量的整数倍。
可见WRAP模式下,不论在哪个地址中开始写入,都会将回绕边界中的地址写满,可以更方便进行DDR4的循环访问。
WRAP模式仿真波形:如图8所示,在WRAP模式下,写突发长度16,发送的最后一个数据中,每个dw的值为0x10,。
如图9所示,读起始地址为0,读出16个数据,读出的第一个数据中,每个DW值为0x10。
在图10中,可以看到最后读出来的数据,每个dw值为0x0f。根据读写地址和数据,可以看出该波形正好对应之前的例子1。
结尾
对于DDR4的AXI4协议的说明告一段落,通过这几章的内容,应该会对DDR4的AXI协议有了一些了解,后边会把工程的架构说明,并放出工程框架,供大家参考。
文章来源:威视锐科技


