Lattice DDR3 ip核仿真过程中的一些问题总结

在官网下载DDR3 Demo后regenerate IP核,使用Active HDL对demo进行仿真,观察波形,发现cmd_burst_cnt设置为0(突发长度32)时,每个写命令会写64个write_data,对此产生了疑问,印象中使用ISE 编写XILINX SP6 DDR3的用户逻辑时,突发长度为32会写32个用户数据进DDR。为了弄明白Lattice DDR3的这个问题,反复设置了几次IP。

实验一

1.当bl=8,DQ位宽设置为16,cmd_burst_cnt=0时;write_data位宽为64。

  观察仿真波形可以看出,每发1次WRITE_CMD命令,write_data发送了64个64位的数据,发送的数据量为64*64bit。

                        em_ddr_addr增加了32*8=256(个)。

    (64*64=  16 * 256.)

2.当bl=8,DQ位宽设置为32,cmd_burst_cnt=0时;write_data位宽为128。

  观察仿真波形可以看出,每发1次WRITE_CMD命令,write_data发送了64个128位的数据,发送的数据量为64*128bit。

                        em_ddr_addr增加了32*8=256(个)。

    (64*128= 32 * 256.)

3.当bl=8,DQ位宽设置为8,cmd_burst_cnt=0时;write_data位宽为32。

  观察仿真波形可以看出,每发1次WRITE_CMD命令,write_data发送了64个32位的数据,发送的数据量为64*32bit。

                        em_ddr_addr增加了32*8=256(个)。

    (64*32= 8 * 256.)

通过以上实验总结出:DQ位宽为8时,em_ddr_addr增加1,存入8bit数据;

          DQ位宽为16时,em_ddr_addr增加1,存入16bit数据;

          DQ位宽为32时,em_ddr_addr增加1,存入32bit数据;

        也就是DQ位宽是多少,Lattice DDR3的每个物理地址存入的数据就是多少bit。

  以上实验弄明白了,Lattice DDR3的每个物理地址存多少bit数据的问题,以及cmd_burst_cnt=32时,为什么每发一次WRITE_CMD就要发送64个数据(发64个数据才能将此次增加的DDR3的物理地址刚好写满)。 

接下来还有一个问题,就是设置IP核的时候有一个BL选项,可以设置为BL=8和BL=4.想弄明白不同的BL值有什么影响,于是继续做实验。 

实验二

1.设置BL=4,cmd_burst_cnt=0,DQ位宽=16.

  观察仿真波形看到,每发一次WRITR_CMD,em_ddr_addr增加32*4=128个。说明BL=4时一个突发长度地址增加4,BL=8时一个突发长度地址增加8.

  从仿真波形也可以看到,datain_rdy是交替置1的,虽然write_data发送了64个64位的数据,但写入DDR的只有32个。

  写入DDR的数据量=32*64bit  =   16*128,这与实验一的结论是吻合的。

上一篇:Android保存多张图片到本地


下一篇:开启9008端口进入深刷模式