使用xilinx官方提供的MIG IP核进行设计,接口协议为AXI,关于AXI协议的内容此处不做过多介绍。
MIG核配置
关于IP核个参数的介绍可以参考野火教程,以下为目前使用的通用配置。
一些参数的设置
DDR物理接口的位宽为32bit
DDR用户接口的位宽为64bit
MIG核的XADC是关闭的,需要外部模块例化XADC模块读取FPGA的内部温度,并将温度传递给IP核。
突发长度为8,突发宽度为64bit,也就是说突发一次,地址就要增加8*8=64,因为地址是按照字节计算的,64bit是8个字节,每次突发长度是8,所以每次突发是64字节。
若要使用DDR进行数据缓存,那么数据量必须要是64字节的倍数。
DDR的读写地址是按照字节计算的,如果数据宽度为16bit,则地址需要乘以2.
用户读写接口模块设计
写模块设计
写接口时序
序号 |
信号名 |
位宽 |
方向 |
说明 |
1 |
wr_req_i |
1 |
input |
写请求信号:在写DDR前需要先发送写请求信号,用于启动写状态机,在收到响应信号后清零此信号 |
2 |
wr_req_ack_o |
1 |
output |
写请求响应信号:在收到写请求信号后,状态机跳转到响应状态,发送响应信号,并检测写请求信号是否清零,若清零则清零此信号 |
3 |
wr_b_addr |
32 |
input |
写DDR开始地址 |
4 |
wr_e_addr |
32 |
input |
写DDR结束地址 |
5 |
user_wr_clk |
1 |
input |
写FIFO时钟:与DDR的ui_clk相同 |
6 |
data_wren |
1 |
input |
写FIFO写请求 |
7 |
data_wr |
16 |
input |
写FIFO写数据 |
写接口状态机
序号 |
状态名 |
说明 |
1 |
wr_st_idle |
初始状态:等待写请求信号,收到后跳转 |
2 |
wr_st_ack |
写响应状态:收到写请求后产生写响应信号,并将写地址进行锁存;等写请求信号清零后,跳转 |
3 |
wr_st_check_fifo |
写FIFO检查状态:若此状态中再次收到写请求信号,则跳转到写响应状态;若FIFO中的可读数据(数量+2)大于等于一次写突发的长度,并且AXI接口写空闲,则产生写突发请求信号,并跳转 |
4 |
wr_st_wr_burst |
写突发状态:当写突发完成后,清零写突发请求,写地址增加64字节,写数据计数器增加64,跳转 |
5 |
wr_st_wr_burst_end |
写突发结束状态:若写数据计数器小于写长度,跳转到写FIFO检查状态,否则跳转到结束状态 |
6 |
wr_st_end |
写结束状态 |
读模块设计
读模块时序
序号 |
信号名 |
位宽 |
方向 |
说明 |
1 |
rd_req_i |
1 |
input |
读请求信号:在读DDR前需要先发送读请求信号,用于启动读状态机,在收到响应信号后清零此信号 |
2 |
rd_req_ack_o |
1 |
output |
读请求响应信号:在收到读请求信号后,状态机跳转到响应状态,发送响应信号,并检测读请求信号是否清零,若清零则清零此信号 |
3 |
rd_b_addr |
32 |
input |
读DDR开始地址 |
4 |
rd_e_addr |
32 |
input |
读DDR结束地址 |
5 |
user_rd_clk |
1 |
input |
读FIFO时钟:与DDR的ui_clk相同 |
6 |
data_rden |
1 |
input |
读FIFO写请求 |
7 |
data_rd |
16 |
output |
读FIFO写数据 |
8 |
ddr_rd_valid |
1 |
input |
DDR读有效标志:表示将DDR中的数据成功读出,缓存在FIFO中 |
读接口状态机
序号 |
状态名 |
说明 |
1 |
rd_st_idle |
初始状态:等待读请求信号,收到后跳转 |
2 |
rd_st_ack |
读响应状态:收到读请求后产生读响应信号,并将读地址进行锁存;等读请求信号清零后,跳转 |
3 |
rd_st_check_fifo |
读FIFO检查状态:若此状态中再次收到读请求信号,则跳转到读响应状态;若FIFO中的可写数据小于等于(10'd1000-DDR_RD_LEN),并且AXI接口读空闲,则产生读突发请求信号,并跳转 |
4 |
rd_st_rd_burst |
读突发状态:当读突发完成后,清零读突发请求,读地址增加64字节,读数据计数器增加64,跳转 |
5 |
rd_st_rd_burst_end |
读突发结束状态:若读数据计数器小于读长度,跳转到读FIFO检查状态,否则跳转到结束状态 |
6 |
rd_st_end文章来源:https://www.toymoban.com/news/detail-769248.html |
读结束状态文章来源地址https://www.toymoban.com/news/detail-769248.html |
到了这里,关于DDR3读写模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!