总目录
- Vivado中MIG ip核的生成流程
Vivado MIG ip核使用教程(二)
- Vivado中MIG ip核的各个接口介绍
- DDR3读写控制器
1 时钟和复位
时钟 | 方向 | 功能 |
---|---|---|
sys_clk_i | input | MIG ip核时钟 |
clk_ref_i | input | 参考时钟,可给与sys_clk_i同一个时钟 |
sys_rst | input | 系统复位 |
ddr3_ck_p、ddr3_ck_n | output | DDR3芯片时钟 |
ui_clk | output | 用户时钟,DDR3读写模块使用 |
ui_clk_sync_rst | output | 复位,高电平有效,可以取反后作为DDR3读写控制模块的复位信号来使用 |
- 举例:MIG ip核输入200M时钟(sys_clk_i),该时钟在MIG ip核中会经过分频、倍频,倍频产生400M的时钟(ddr3_ck_p、ddr3_ck_n)输出给DDR3芯片使用,分频产生100M的时钟(ui_clk)给DDR3读写模块使用。
- 用户时钟是,DDR3时钟的一半或1/4,当DDR3时钟频率超过350M时,二者只比只能是1/2。
2 Memory interface ports
连接到DDR3芯片
信号 | 功能 |
---|---|
init_calib_complete | DDR3初始化完成、校准完成标志 |
- init_calib_complete信号指示存储器完成了初始化,可以使用其接口,该信号主要在FPGA内部使用。
3 Application interface ports
连接到DDR3读写模块
3.1 基本接口
信号 | 方向 | 描述 |
---|---|---|
app_addr [ADDR_WIDTH – 1:0] | input | DDR3地址 |
app_cmd [2:0] | input | 读/写命令 |
app_addr[ADDR_WIDTH – 1:0] | input | 地址 |
app_en | input | app_en拉高时,信号app_addr[]、app_cmd[2:0]、app_sz、app_hi_pri有效 |
app_rdy | output | app_rdy信号拉高时,指示可以接收指令 |
- 时序图
注意: 当我们向DDR3中写入命令时,我们需要拉高app_en信号,直到app_rdy信号也拉高。这是因为只有app_en、app_rdy同时为高电平时,命令才会被写入DDR3。 - app_cmd
app_cmd为读写命令端口,用来控制对DDR3进行写操作还是读操作。虽然app_cmd端口有位宽有3bit,但是它只有0、1两种状态,分别对应写、读。通过控制app_cmd端口为0还是为1即可实现对DDR3的读写切换。
- app_en、app_rdy
这两个信号可以看作是FPGA与DDR3之间的握手信号。当我们使用DDR3时,我们首先需要在app_addr、app_cmd等端口上指定我们需要的值,然后拉高app_en信号,如果此时app_rdy信号也为高电平,则命令被写入DDR3。
因此,只有当app_en和app_rdy同时拉高时,命令才会被写入DDR3。
3.2 读数据接口
信号 | 方向 | 描述 |
---|---|---|
app_rd_data [APP_DATA_WIDTH - 1:0] | output | 从DDR3存储器中读出的数据 |
app_rd_data_valid | output | 读数据有效 |
app_rd_data_end | output | 指示当前时钟周期是读出的最后一个数据对应的时钟周期 |
3.3 写数据接口
信号 | 方向 | 描述 |
---|---|---|
app_wdf_data [APP_DATA_WIDTH - 1:0] | input | 写数据端口 |
app_wdf_end | input | 指示当前时钟周期是写入数据的最后一个时钟周期 |
app_wdf_mask [APP_DATA_WIDTH - 1:0] | input | 写数据屏蔽 |
app_wdf_rdy | output | 写数据准备好,指示此时可以向ip核写入数据 |
app_wdf_wren | input | 高电平指示写入数据有效 |
3.4 其他接口
信号 | 方向 | 描述 |
---|---|---|
app_sr_req | input | 拉低即可 |
app_ref_req | input | 拉高:向DDR3请求刷新 |
app_zq_req | input | 拉高:向DDR3请求ZQ校准 |
app_sr_active | output | 保留 |
app_ref_ack | output | 刷新反馈 |
app_zq_ack | output | ZQ校准反馈 |
app_wdf_mask [APP_MASK_WIDTH – 1:0] | input | 数据屏蔽 |
用不到的接口可以选择不连接