Vivado下MIG核仿真指导手册

更新时间:2023-12-13 14:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Vivado下MIG核仿真手册

刘志强

1. IP-Core生成

根据所选芯片的不同,参照说明文档生成对应的MIG核:

? VC709-VX690T,参照文件夹“MIG核配置-VC709”下的说明。VC709板卡上有两条型号为

MT8KTF51264HZ-1G9的SODIMM条,最高工作频率932.84MHz,峰值带宽14.9GB/s,可根据需求选择配置一个或两个controller,相关参数及意义在configuration.pdf中均有说明;.xdc文件为约束文件,在配置阶段需要加载该文件用于指定具体管脚位置; ? EES256-VX485T,参照文件夹“MIG核配置-EES256”下的说明。EES256板卡是定制板卡,有

三条SODIMM条插槽,具体型号用户可自行选择,文件夹“ddr3-datasheet”下中列出了不同型号的内存条的具体参数。mig7-1controller.xdc约束文件中包含单个controller的管脚配置信息;mig7-3controller.xdc约束文件中包含了三个controller的管脚配置信息。

2.修改仿真文件

生成后的MIG核包含以下几个文件夹,其中“user_design/”文件夹包含了所有的设计文件,在仿真和综合过程中不做改动;“example_design/”文件夹包含了所有的仿真文件,需要修改的文件包括:

1) rtl/example_top.v: 在该文件中实例化要仿真的逻辑模块。原example_top.v实例化了

traffic_gen模块,可用于验证MIG核是否正常工作(仿真结束提示Test passed or failed);验证之后,可将traffic_gen模块替换为自己的逻辑进行后续的仿真;

2) sim/ddr3_model.v: 在ddr3_model模块中定义了一个memory数组(数组宽度最大为

64bits),用于模拟DDR3的访存行为。如果MIG核的数据接口为512bits,则需要实例化8个ddr3_model模块来完成模拟。改动后的ddr3_model.v在“仿真文件改动”目录下,主要修改的地方包括以下几个方面:

? 模块实例化参数parameter init_number = 0(line 86),用于指导不同的ddr3_model模

块加载不同的初始化数据文件;

? 初始化数据文件和地址文件(line 403 – line 416),后面会详细讨论ddr3的数据格式

和访存地址;

? 初始化数据长度memory_used(line 400 & line 1904),将该变量赋值为初始化数据长

度,如:初始化文件中包含1000行数据(与地址划分无关),则将该变量赋值为1000。

3) sim/ddr3_model_parameters.vh: ddr3_model.v的头文件,主要关注MEM_BITS参数,在

ddr3_model.v中,该参数决定了memory数组的最大深度,MEM_SIZE = (1<

4) sim/sim_tb_top.v: 在实例化ddr3_model模块部分,增加了实例化参数的赋值,参照“仿

真文件改动”目录下的sim_tb_top_modified_part.v的内容作对应的修改即可。

说明:example_top.v和sim_tb_top.v中,涉及到MIG核的所有配置参数,因此在源文件中

修改对应的部分;ddr3_model.v以及ddr3_model_parameters.vh可直接覆盖原来的文件。

图1 MIG核目录(左)和example_design目录(右)

3.ddr3_model.v初始化

3.1 数据组织方式

1) 单个ddr3_model.v的情况

MIG核的数据访存位宽不超过64bits时,只会实例化一个ddr3_model模块,从初始化数据文件中读取数据完成初始化,ddr3中的数据组织方式与初始化数据文件中的内容是一致的; 2) 多个ddr3_model.v的情况

MIG核的数据访存位宽超过64bits时,会实例化多个ddr3_model模块。如访存位宽为512bits时,会实例化8个ddr3_model模块。需要注意的是,ddr3中的访存数据并不是多个初始化数据文件的简单拼接。一个简单的例子如下:(从0到31)

ddr3访存数据:0x0000000100020003000400050006000700080009000a…001c001d001e001f 初始化文件应为: 文件名 Mem7 Mem6 Mem5 Mem4 Mem3 Mem2 Mem1 Mem0 说明:初始化数据可以参照memory_init_example.m程序。在该示例中,初始化地址采用了25位二进制,位宽取决于ddr3_model.v中MAX_BITS=(BA_BITS+ROW_BITS+COL_BITS-BL_BITS)的具体值;另,在仿真过程中,ddr3_model模块中memory的前五行数据会被写入数据,因此初始化数据时前八行填充无效数据,避免有效数据被覆盖的情况;初始化数据的格式可为浮点或定点,示例中展示了写入double类型数据的过程。

ddr3_model编号 文件内容 ddr3_model7 0x0000000000000000 64bits ddr3_model6 ddr3_model5 ddr3_model4 ddr3_model3 ddr3_model2 ddr3_model1 ddr3_model0 0x0004080c1014181c 0x0000000000000000 0x0105090d1115191d 0x0000000000000000 0x02060a0e12161a1e 0x0000000000000000 0x03070b0f13171b1f 3.2 字节地址& burst地址& memory地址

字节地址:以字节为计量单位,与实际的物理地址对应。如一个容量为2GB的SODIMM条,其地址空间为0x0000_0000 – 0x7fff_ffff,这里的地址空间对应的就是字节地址;

Burst地址:以Burst为计量单位,在DDR3中,一个burst的长度为64bits,即8个字节。MIG核用户接口中的地址是以Burst地址作为计量单位的。访存数据位宽为64bits时,连续访存时地址每次增加1;访存数据位宽为512bits时,连续访存地址每次增加8。如果地址没有对齐,读出的数据会发生错乱。 Memory地址:memory地址以行作为计量单位,一行对应着初始化数据文件中的一行数据,用在初始化地址文件中。ddr3_model.v中,addr = {bank, row, col} / BL_MAX, 其中{bank, row, col}对应的是burst地址,访存数据位宽为64bits时,BL_MAX=1;访存数据位宽为512bits时,BL_MAX=8。

在初始化数据时,一般会根据所选的SODIMM条的容量,进行数据的地址划分。如访存数据位宽为512bits时的一个数据划分的例子: 数据 无效 A B 起始地址 终止地址 起始地址 终止地址 起始地址 终止地址 字节地址(Dec) 0 511 512 6655 12800 25599 Burst地址(Dec) 0 56 64 824 1600 3192 Memory地址(Dec) 0 7 8 103 200 399 4. PHY_DDR.v接口说明

出于两个方面的考虑,PHY_DDR模块在MIG核的应用接口上做了一层封装:一是时钟分离,PHY_DDR模块中的异步时钟FIFO实现了将用户工作时钟与ddr3工作时钟分隔开;二是简化接口,并支持批量的数据访存。(MIG核访存位宽为512bits,其它位宽的需求可参照修改)。

MIGclk_ddrclk_ddrapp_rdyapp_enapp_cmd[2:0]app_addr[31:0]app_rd_data_validapp_rd_data[511:0]app_rd_data_endapp_wdf_rdyapp_wdf_wrenapp_wdf_data[511:0]app_wdf_mask[63:0]app_wdf_endfifo_cmdDDR3内部逻辑DDR3应用接口fifo_rdfusr_clkpe_en pe_cmdpe_addr[31:0]pe_sizepe_rdy_recvpe_wdf_datape_wdf_validpe_rdype_rd_data_validpe_rd_datafifo_wdf

图2 PHY_DDR接口

PHY_DDR模块的端口说明:

? usr_clk: 用户逻辑工作时钟;

? pe_en: 命令使能,用户逻辑提交读或写命令时须将该使能信号置高; ? pe_cmd: 命令内容,沿用了MIG核中的规定,3’b000表示写数据,3’b001表示读数据; ? pe_addr: 读写命令的起始地址,并且是burst地址;

? pe_size: 连续读写的数据个数,一个数据的大小为512bits

? pe_rdy_recv: 用户逻辑准备好了接收读取的数据,只有在该信号拉高的情况下,

PHY_DDR才会向用户逻辑发送读回的数据及对应的有效信号;该信号实现了反压机制,避免出现用户逻辑处理速度慢造成的数据覆盖或者溢出的情况。 ? pe_wdf_data: 用户逻辑提交的写回DDR3的数据;

? pe_wdf_valid: : 用户逻辑提交的写回DDR3的数据的有效标志,拉高表示数据有效; ? pe_rdy: 该信号表示PHY_DDR接口准备好了接收来自用户逻辑提交的命令或者写回数

据,对应的是fifo_cmd和fifo_wdf未满的情况。只有该信号拉高时,用户逻辑才允许提交访存命令或者写回数据;

? pe_rd_data_valid: 从DDR3读回的数据的有效标志,拉高表示该数据有效; ? pe_rd_data: 从DDR3读回的数据。

图3 DDR3访存性能曲线

DDR3在做连续的地址访存时能够更好的发挥带宽性能。图3展示利用该PHY_DDR接口做连续地址访存时的性能曲线,当连续读取32个数据时,平均带宽为6.11GB/s,带宽利用率为41%;连续读取256个数据时,平均带宽达到11.96GB/s,带宽利用率为80%。在实际的应用中,要结合访存特性和带宽需求,选择合适的pe_size.

5. 仿真

sim_tb_top.v为顶层文件,可利用Vivado自带的Simulator进行仿真或者链接到modelsim进行仿真。仿真的过程中,会有较长的初始化时间(50-60us),init_calib_complete置高表示初始化工作完成,仿真时该信号可用作用户工作逻辑的启动信号。

本文来源:https://www.bwwdw.com/article/b1e5.html

Top