跳转到主要内容

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

概述

在之前使用通道0和通道1来产生两组不同频率的sin波形,并截取一部分写入了ddr4中,又通过通道2和通道3将ddr4中存储的sin波形数据读出,在之前已经通过仿真了解了ddr4写通道的传输过程,本章节使用仿真工具观察ddr4多通道读写的具体流程,并验证结果。

流程图

仿真波形

1.由两个dds产生两组sin波形,波形频率分别为2MHz和5MHz。

图1中,使用两个dds根据aclken的使能情况,来分别输出sin波形。

    2.chnl_test_0模块产生写使能、写地址、写长度来驱动ddr4的写请求,并接收dds的波形数据,将波形数据传输给ddr4控制模块。

图2中,发送写指令来控制数据的传输,wdata_in_0为传输的数据,data_sin_0为通道0中的sin波形数据。

对于通道0的写地址,在两通道都写完数据后,产生写请求,将通道1的地址计数作为通道0下一次的写地址。写长度固定为256突发。

    通过wr_start_0_cnt的计数可以看出总共计数了10次,共十次突发,每次突发256个数据。通道0共截取了2560个数据写进ddr4中。

   3.通道0的ddr4_axi_wr_ctrl模块,将数据波形根据写请求传输到interconnect中。

图3中,通过写通道将2MHz的sin波形数据写进ddr4中。

   4.chnl_test_1模块产生写使能、写地址、写长度来驱动ddr4的写请求,并接收dds的波形数据,将波形数据传输给ddr4控制模块。

 图4中,发送写指令来控制数据的传输,wdata_in_1为传输的数据,data_sin_1为通道1中的sin波形数据。

 对于通道1的写地址,在两通道都写完数据后,产生写请求,将通道1的地址计数+’h4000作为通道1下一次的写地址。写长度固定为256突发。

   共发起10次写突发指令,每次突发写入256个数据。通道1共截取了2560个sin波形数据。那么两个通道共5120个数据,存储到ddr4中,按照从0地址开始写入数据,那么地址计数到5120*64=327680。

   5.通道1的ddr4_axi_wr_ctrl模块,将数据波形根据写请求传输到interconnect中。

图5中,通过写通道将5MHz的sin波形数据写进ddr4中。

   6.在ddr4IP中,写数据通道波形

图6为ddr4中的写通道波形,其中每次发起写指令时,地址会递增’h4000。并且在ddr4侧,写突发的地址为连续的,通过awid来区分通道0和通道1。

    7.

图7为两通道的sin波形数据经过interconnect后的数据传输情况,会将通道0 和通道1 的数据交替写入。根据interconnect的控制,向ddr4发起写请求,在valid与vready握手时传输数据。

   8.通道2模块通过发起读指令来读取2MHz波形数据。

图8中,在rd_en_2拉高期间,数据有效。为读取的2MHz波形,可以看出每次读出的波形都为2MHz,并且有效数据为连续波形。

   9.通道3模块通过发起度周玲来读取5MHz波形数据。

图9中,在rd_en_3拉高期间,数据有效。为读取的5MHz波形,可以看出每次读出的波形都为5MHz,并且有效数据为连续波形。

总结

经过仿真验证,可以详细观察并了解多通道读写的数据在每个阶段的传输情况。对于读写指令,由用户控制,这些指令发送到interconnect中,再经过interconnect的仲裁,它会向ddr4发起读写指令,并可以通过id标识将每个通道进行区分。最终实现ddr4的多通道读写功能。

文章来源:威视锐科技