我们这一节继续结合仿真波形和逻辑分析仪测试波形来分析下MIGIP核的各个信号使用,这里主要说的是用户端的信号,这些信号直接与ip核进行交互,只有正确使用才能按我们的要求来读写数据。
1.我们先打开modelsim仿真软件,查看下example的仿真波形:
modelsim仿真波形1
2.通过官方仿真波形我们来做一下初步分析: DDR3读写指令信号
信号名 | 位宽 | I/O | 含义 |
---|---|---|---|
app_cmd | 2 | I | 为0时表示写指令,为1表示读指令 |
app_addr | 29 | I | 读、写数据对应的地址 |
app_en | 1 | I | 读写指令使能信号 |
app_rdy | 1 | O | MIG IP空闲指示信号 |
当app_en信号拉高时并且app_rdy信号也为高电平时,读写命令和地址才会被写入到MIG IP内部的一个指令FIFO中。如果app_rdy为低电平,则app_en、app_addr和app_cmd需要保持状态,直到app_rdy变为高电平为止,对应时序图如下所示。
通过modelsim仿真波形1我们也可以看到,app_rdy为低电平,则app_en、app_addr和app_cmd需要保持状态,直到app_rdy变为高电平为止。也可说Figure 1-53图中四个信号主要用来控制读写地址的写入。特别要说明的是app_rdy信号是MIG IP核读写命令接收准备完成标志,高电平有效信号,连续读写也就是背靠背模式下和写数据没有关系。
3.写数据相关的信号如下表所示,MIG IP数据和指令是分开的,可以不进行对齐。
下图是非背靠背模式的写数据与写命令的时序图,写数据可以与写命令对齐,写数据也可以提前写命令,写数据也可以滞后写命令,写数据滞后写命令不应该超过2个时钟的限制。
如上图所示,写数据有三种情形均可以正确写入:
(1)写数据时序和写命令时序发生在同一拍;
(2)写数据时序比写命令时序提前一拍;
(3)写数据时序比写命令时序至多延迟两拍;
结合上图,写时序总结如下:首先需要检查 app_wdf_rdy,该信号为高表明此时 IP 核数据接收处于准
备完成状态,可以接收用户发过来的数据,在当前时钟拉高写使能(app_wdf_wren),给出写数据(app_wdf_data)。这样加上发起的写命令操作就可以成功向 IP 核写数据。
4.下图是背靠背模式的写数据与写命令的时序图,对于背靠背写,其实也有三种情形,唯一点不同的是,它没有最大延迟限制,如下图所示。
注意当数据比地址写入多很多时,app_wdf_rdy 会一直为低,当地址比数据写入多很多时,app_rdy 会一直为低。这里我们后面结合逻辑分析仪看一下。
这里还需要注意一点,在连续读的时候,读到的数据顺序跟请求的命令/地址是相对应的。通常使用DDR3 的时候,为了最大限度地提高 DDR3 效能,充分利用突发写的特点,非背靠背很少用,而更多地采用背靠背操作。
5.读数据相关的信号如下表所示,比较简单。
发出读命令后,用户只需等待数据有效信号(app_rd_data_valid)拉高,为高表明此时数据总线上的数据是有效的返回数据。需要注意的是,在发出读命令后,有效读数据要晚若干周期才出现在数据总线上。下面是背靠背读的情况,如下图所示。
6.MIG IP 核用户接口部分信号定义
7.以上我们就大概了解了上面信号的用法,下面我们再结合逻辑分析仪看看实际跑起来的信号。我们任然使用黑金的例程来进行测试实验。如图为一次完整的写入数据过程:
结合程序
我们看到当接收到wr_burst_req请求时将app_en置1,写入写数据指令,同时状态机跳转到MEM_WRITE状态。在MEM_WRITE状态中,主要写入地址和数据,写入地址时,只要app_rdy为高,我们就可以一直写入,直到地址达到我们想要的写入长度512个。同时写入数据,只要app_wdf_rdy=1,写入数据就一直写入,直到写入数据个数达到我们设定的数据长度。
这里有一点尤其重要
注意当数据比地址写入多很多时,app_wdf_rdy 会一直为低,当地址比数据写入多很多时,app_rdy 会一直为低。
我们看到进入写状态就一直写入数据和地址,在2处由于app_rdy信号拉低,这时候写入的数据数量比地址多很多,app_wdf_rdy就会拉低等待。同样地址比数据写入很多时,app_rdy就会主动拉低等待数据写入。
但是根据逻辑分析仪波形我们看到,只出现了数据等待地址的情况,也就是数据写得快,地址写得慢的情况,所以黑金的板子在编写例程时是按数据等待地址的思路编写的,跑下来也没出现问题。
到这里通过仿真波形和逻辑分析仪抓取波形我们就基本明白各个信号的含义了,这个为我们后面编写控制逻辑打下了一个很好的基础。