信号 |
方向 |
描述 |
app_addr [ADDR_WIDTH - 1:0] |
输入 |
该输入指示当前请求的地址。 |
app_cmd [2:0] |
输入 |
该输入选择当前请求的命令。 |
app_en |
输入 |
这是app_addr [],app_cmd [2:0],app_sz和app_hi_pri输入的高有效选通。 |
app_rdy |
输出 |
此输出表明UI已准备好接受命令。如果在启用app_en时取消断言信号,则必须重试当前的app_cmd和app_addr,直到app_rdy被声明为止。 |
app_hi_pri |
输入 |
该高电平有效输入提升当前请求的优先级。 |
app_rd_data [APP_DATA_WIDTH - 1:0] |
输出 |
这提供了读命令的输出数据。 |
app_rd_data_end |
输出 |
该高电平有效输出表明当前时钟周期是app_rd_data []上输出数据的最后一个周期。 |
app_rd_data_valid |
输出 |
该active-High输出表明app_rd_data []是有效的。 |
app_sz |
输入 |
该输入被保留并且应该被绑定到0 。 |
app_wdf_data [APP_DATA_WIDTH - 1:0] |
输入 |
这提供了写入命令的数据。 |
app_wdf_end |
输入 |
这个高电平有效输入表明当前时钟周期是app_wdf_data []上输入数据的最后一个周期。 |
app_wdf_mask [APP_MASK_WIDTH - 1:0] |
输入 |
这提供了app_wdf_data []的掩码。 |
app_wdf_rdy |
输出 |
该输出表明写入数据FIFO已准备好接收数据。写入数据在app_wdf_rdy = 1'b1 和app_wdf_wren = 1'b1 时被接受。 |
app_wdf_wren |
输入 |
这是app_wdf_data []的主动高频闪。 |
app_correct_en_i |
输入 |
置位时,该高电平有效信号纠正单位数据错误。只有在GUI中启用ECC时,此输入才有效。 在示例设计中,该信号总是与1相关联。 |
app_sr_req |
输入 |
该输入被保留并且应该被绑定到0。 |
app_sr_active |
输出 |
该输出保留。 |
app_ref_req |
输入 |
该高电平有效输入请求向DRAM发出刷新命令。 |
app_ref_ack |
输出 |
该高电平有效输出表示存储器控制器已将请求的刷新命令发送到PHY接口。 |
app_zq_req |
输入 |
该高电平有效输入请求向DRAM发出ZQ校准命令。 |
app_zq_ack |
输出 |
此高电平有效输出表示存储器控制器已将请求的ZQ校准命令发送到PHY接口。 |
ui_clk |
输出 |
这个UI时钟必须是DRAM时钟的一半或四分之一。 |
init_calib_complete |
输出 |
校准完成后,PHY断言init_calib_complete。 |
app_ecc_multiple_err [7:0] (1) |
输出 |
该信号适用于启用了ECC并且与app_rd_data_valid一起有效的情况。如果来自外部存储器的读取数据在读取脉冲串的每个脉冲中具有两个比特错误,则app_ecc_multiple_err [3:0]信号非零。SECDED算法不会校正相应的读取数据,并在此信号上放置一个非零值,以通知用户界面上已损坏的读取数据。 |
ui_clk_sync_rst |
输出 |
这是主动高UI重置。 |
input [27:0] app_addr,
input [2:0] app_cmd,
input app_en,
input [511:0] app_wdf_data,
input app_wdf_end,
input app_wdf_wren,
表1-2: example_design/ rtl / traffic_gen目录中的文件
名称(1) |
描述 |
memc_traffic_gen.v |
这是流量发生器的顶层。 |
cmd_gen.v |
这是命令生成器。该模块提供独立的控制来生成命令类型,地址和突发长度。 |
cmd_prbs_gen.v |
这是一个伪随机二进制序列(PRBS)发生器,用于产生PRBS命令,地址和突发长度。 |
memc_flow_vcontrol.v |
该模块在内存控制器内核和cmd_gen ,read_data_path 和write_data_path 模块之间生成流控制逻辑。 |
read_data_path.v |
这是读取数据路径的顶层。 |
read_posted_fifo.v |
该模块存储发送到存储控制器的读命令,其FIFO输出用于生成读数据比较的期望数据。 |
rd_data_gen.v |
该模块为memc_flow_vcontrol.v 生成读取和就绪信号的时序控制。 |
write_data_path.v |
这是写入数据路径的顶层。 |
wr_data_g.v |
该模块为memc_flow_vcontrol.v 生成写入和准备信号的时序控制。 |
s7ven_data_gen.v |
该模块生成不同的数据模式。 |
a_fifo.v |
这是一个使用LUT RAM的同步FIFO。 |
data_prbs_gen.v |
这是一个用于生成PRBS数据码型的32位线性反馈移位寄存器(LFSR)。 |
init_mem_pattern_ctr.v |
该模块为流量生成器生成流量控制逻辑。 |
traffic_gen_top.v |
该模块是流量生成器的顶层,包含memc_traffic_gen 和init_mem_pattern_ctr 模块。 |
用户接口模块:
提出了用户设计的用户界面
提供了一个简单而又方便的替代本地接口
读取与写入数据缓冲
重新排序读取返回值,以匹配请求的顺序
提出了平面地址空间,并将其转换成SDRAM所需的地址
内存控制器模块:
接收来自用户设计的请求
重新排序请求,以尽量减少死状态,从而达到最高的SDRAM性能
管理SDRAM的row / rank配置
执行高级的SDRAM管理比如刷新、激活或预充电
物理层(PHY)模块:
通过一个简单的界面连接至内存控制器模块,同时将信号转换成实际的信号发送至SDRAM, 反之亦然
在多时钟域内转换和同步控制信号和数据
初始化SDRAM
执行DDR3写操作
执行时钟与读取数据的居中校准
修改示例设计
所提供的example_top设计包含流量生成器模块,并且可以进行修改以调整不同的命令和数据模式。可以在example_top.v / vhd 模块中修改几个高级参数。表1-11 描述了这些参数。
表1-11: 流量发生器参数在example_top模块中设置
参数 |
描述 |
值 |
家庭 |
指示家庭类型。 |
该参数的值是“VIRTEX7”。 |
MEMORY_TYPE |
指示内存控制器类型。 |
“DDR2”,“DDR3” |
nCK_PER_CLK |
这是内存控制器时钟与DRAM时钟比率。 |
4,2(取决于在GUI中选择的PHY到控制器时钟比率) |
NUM_DQ_PINS |
这是总内存DQ总线宽度。 |
此参数支持从8到最大72的DQ宽度,以8为增量。可用的最大DQ宽度取决于所选存储设备的频率。 |
MEM_BURST_LEN |
这是内存数据突发长度。 |
这必须设置为8。 |
MEM_COL_WIDTH |
这是存储器列地址位的数量。 |
该选项基于选定的存储设备。 |
DATA_WIDTH |
这是用户界面数据总线宽度。 |
对于nCK_PER_CLK = 4, DATA_WIDTH = NUM_DQ_PINS×8。 |
ADDR_WIDTH |
这是内存地址总线宽度。它等于RANK_WIDTH + BANK_WIDTH + ROW_WIDTH + COL_WIDTH。 |
|
MASK_SIZE |
此参数指定用户界面数据总线中的掩码宽度。 |
|
PORT_MODE |
设置端口模式。 |
该参数的有效设置是: BI_MODE:生成WRITE数据模式并监控READ数据以进行比较。 |
BEGIN_ADDRESS |
设置内存起始地址边界。 |
该参数定义端口地址空间的起始边界。该值的最低有效位[3:0]被忽略。 |
参数 |
描述 |
值 |
END_ADDRESS |
设置内存结束地址边界。 |
该参数定义端口地址空间的结束边界。该值的最低有效位[3:0]被忽略。 |
PRBS_EADDR_MASK_POS |
设置32位AND MASK位置。 |
该参数与PRBS地址生成器一起使用,将随机地址向下移入端口地址空间。END_ADDRESS值与该掩码中具有“ 1 ”的位位置的PRBS地址进行AND运算。 |
CMD_PATTERN |
该参数设置要生成的命令模式电路。对于较大的设备,可将CMD_PATTERN设置为“CGEN_ALL”。该参数允许生成所有支持的命令模式电路。但是,有时候 由于较小的设备资源有限,因此必须限制特定的命令模式。 |
该信号的有效设置是: • CGEN_FIXED:地址,突发长度和指令直接来自fixed_addr_i,fixed_bl_i和fixed_instr_i输入。 • CGEN_SEQUENTIAL:地址按顺序递增,增量由数据端口大小决定。 • CGEN_PRBS:32级线性反馈移位寄存器(LFSR)产生伪随机地址,突发长度和指令序列。种子可以从32位cmd_seed输入设置。 • CGEN_ALL(默认):该选项打开上述所有选项,并允许addr_mode_i,instr_mode_i和bl_mode_i在运行时间内选择生成类型。 |
参数 |
描述 |
值 |
DATA_PATTERN |
该参数设置要通过rtl逻辑生成的数据模式电路。对于较大的设备, DATA_PATTERN可以设置为“DGEN_ALL”,从而可以生成所有支持的数据码型电路。在硬件中,使用vio_data_value_mode选择和/或更改数据模式。该模式只能在更改时才能更改 DATA_PATTERN被设置为DGEN_ALL。 |
此参数的有效设置是: • ADDR(默认):地址用作数据模式。 • HAMMER:在DQS的上升沿期间,所有1 s都在DQ引脚上,在DQS 的下降沿期间,所有0 s都在DQ引脚上。 • WALKING1:步行1 s为对DQ管脚和的起始位置1 取决于地址值。 • WALKING0:步进0 s位于DQ引脚上,起始位置0 取决于地址值。 • NEIGHBOR:除一个DQ引脚外,所有DQ引脚均为Hammer模式。地址确定异常引脚位置。 • PRBS:32级LFSR生成随机数据并以起始地址播种。 • DGEN_ALL:该选项打开所有可用选项: 0x1:固定--32位fixed_data。 0x2:ADDRESS - 32位地址作为数据。 0x3:HAMMER 0x4:SIMPLE8 - 简单8个数据模式,每8个字重复一次。 0x5:WALKING1s - 步行1在DQ引脚上。 0x6:WALKING0s - 步行0位于DQ引脚上。 0x7:PRBS - 32级LFSR生成随机数据。 0x9:慢速锤 - 这是慢速的锤子数据模式。 0xA:PHY_CALIB模式 - 0xFF,00,AA,55,55,AA,99,66。该模式仅在地址0处生成READ命令。 |
CMDS_GAP_DELAY |
该参数允许每个用户突发命令之间的暂停延迟。 |
有效值:0到32。 |
SEL_VICTIM_LINE |
选择状态始终处于逻辑高电平的受害DQ线路。 |
该参数仅适用于锤子模式。此参数的有效设置是0到NUM_DQ_PINS。 当value = NUM_DQ_PINS时,所有DQ引脚都具有相同的Hammer模式。 |
1.流量发生器可能支持比7系列内存控制器更多的选项。设置必须与内存控制器中支持的值匹配。
命令模式instr_mode_i ,addr_mode_i ,bl_mode_i 和data_mode_i
所述的traffic_gen 模块可以分别独立地设定。所提供的init_mem_pattern_ctr 模块具有接口信号,允许您使用Vivado调试逻辑核心虚拟I / O(VIO)实时修改命令模式。
这是变化的命令模式:
1. 将vio_modify_enable 设置为1 。
2. 将vio_addr_mode_value 设置为:
1:Fixed_address 。
2:PRBS地址。
3:顺序地址。
参数 |
描述 |
值 |
EYE_TEST |
强制流量生成器仅生成写入单个位置,并且不会生成读取事务。 |
此参数的有效设置为“TRUE”和“FALSE”。 当设置为“TRUE”时,vio_instr_mode_value中的任何设置都将被覆盖。 |
3. 将vio_bl_mode_value 设置为:
1:固定bl。
2:PRBS bl。如果bl_mode 值设置为2,则addr_mode值被强制为2以生成PRBS地址。
4. 将vio_data_mode_value 设置为:
0:保留。
1:固定数据模式。数据来自fixed_data_i 输入总线。
2:DGEN_ADDR (默认)。该地址被用作数据模式。
3:DGEN_HAMMER 。在DQS的上升沿期间,所有1 s都在DQ引脚上,在DQS 的下降沿期间,所有0 s都在DQ引脚上。
4:DGEN_NEIGHBOR 。除了一个引脚,DQS的上升沿期间,所有1 都位于DQ引脚上。地址确定异常引脚位置。
5:DGEN_WALKING1 。步行1 秒在DQ引脚上。的起始位置1 取决于地址值。
6:DGEN_WALKING0 。步行0 秒在DQ引脚上。起始位置0 取决于地址值。
7:DGEN_PRBS 。一个32级LFSR产生随机数据并以起始地址播种。该数据模式仅适用于PRBS地址模式或顺序地址模式。
修改端口地址空间
SADDR |
从eaddr |
PRBS_SADDR_MASK_POS |
PRBS_EADDR_MASK_POS |
为0x1000 |
为0xFFFF |
0x00001000 |
0xFFFF0000地址 |
为0x2000 |
为0xFFFF |
0x00002000 |
0xFFFF0000地址 |
0x3000处 |
为0xFFFF |
0x00003000 |
0xFFFF0000地址 |
0x4000的 |
为0xFFFF |
0x00004000 |
0xFFFF0000地址 |
0x5000处 |
为0xFFFF |
0x00005000 |
0xFFFF0000地址 |
为0x2000 |
0x1FFF的 |
0x00002000 |
0xFFFFE000 |
为0x2000 |
0x2FFF |
0x00002000 |
0xFFFFD000 |
为0x2000 |
0x3FFF |
0x00002000 |
0xFFFFC000 |
为0x2000 |
0x4FFF |
0x00002000 |
0xFFFF8000 |
为0x2000 |
0x5FFF |
0x00002000 |
0xFFFF8000 |
为0x2000 |
0x6FFF |
0x00002000 |
0xFFFF8000 |
为0x2000 |
0x7FFF的 |
0x00002000 |
0xFFFF8000 |
为0x2000 |
0x8FFF |
0x00002000 |
0xFFFF0000地址 |
为0x2000 |
0x9FFF |
0x00002000 |
0xFFFF0000地址 |
为0x2000 |
0xAFFF |
0x00002000 |
0xFFFF0000地址 |
为0x2000 |
0xBFFF |
0x00002000 |
0xFFFF0000地址 |
可以通过更改顶级测试平台文件中的BEGIN_ADDRESS和END_ADDRESS参数来修改端口的地址空间。这两个值必须设置为与端口数据宽度对齐。PRBS_SADDR_MASK_POS和PRBS_EADDR_MASK_POS这两个附加参数用于默认PRBS地址模式,以确保超出范围的地址不会发送到端口。PRBS_SADDR_MASK_POS创建一个OR掩码,将PRBS生成的地址的值低于BEGIN_ADDRESS的值移入端口的有效地址空间。应将PRBS_SADDR_MASK_POS设置为等于BEGIN_ADDRESS参数的32位值。PRBS_EADDR_MASK_POS创建一个AND掩码,将带有END_ADDRESS以上值的PRBS生成地址向下移动到端口的有效地址空间中。应将PRBS_EADDR_MASK_POS设置为32位值,1 并且所有剩余的位都被设置为0 。表1-12 显示了设置两个掩码参数的一些示例。
表1-12: 地址空间和PRBS掩码的示例设置
表1-12: 地址空间和PRBS掩码的示例设置
SADDR |
从eaddr |
PRBS_SADDR_MASK_POS |
PRBS_EADDR_MASK_POS |
为0x2000 |
0xCFFF |
0x00002000 |
0xFFFF0000地址 |
为0x2000 |
0xDFFF |
0x00002000 |
0xFFFF0000地址 |
为0x2000 |
0xEFFF |
0x00002000 |
0xFFFF0000地址 |
为0x2000 |
为0xFFFF |
0x00002000 |
0xFFFF0000地址 |
流量发生器信号描述
流量发生器信号如 表1-13所示。
表1-13: 流量发生器信号说明
信号 |
方向 |
描述 |
CLK_I |
输入 |
该信号是时钟输入。 |
memc_init_done |
输入 |
这是来自内存控制器的输入状态信号,表示它已准备好接受流量。 |
manual_clear_error |
输入 |
输入信号清除错误标志。 |
memc_cmd_addr_o [31:0] |
产量 |
当前交易的起始地址。 |
memc_cmd_en_o |
产量 |
该高电平有效信号是命令FIFO的写使能信号。 |
memc_cmd_full_i |
输入 |
这连接到内存控制器的app_rdy的反转。当该输入信号有效时,TG继续断言memc_cmd_en_o ,memc_cmd_addr_o 值和memc_cmd_instr,直到memc_cmd_full_i 被取消断言。 |
memc_cmd_instr [2:0] |
产量 |
当前指令的命令码。 命令写入:3'b000 命令阅读:3'b001 |
memc_rd_data_i [DWIDTH - 1:0] |
输入 |
读取从内存返回的数据值。 |
memc_rd_empty_i |
输入 |
该高电平有效信号是存储器控制器中读数据FIFO的空标志。它表示FIFO中没有有效的数据。 |
memc_rd_en_o |
产量 |
该信号仅用于类似MCB的接口。 |
memc_wr_data_o [DWIDTH - 1:0] |
产量 |
将数据值写入存储器控制器的写入数据FIFO中。 |
memc_wr_en_o |
产量 |
该高电平有效信号是写数据FIFO的写使能。它表明memc_wr_data 上的值是有效的。 |
memc_wr_full_i |
输入 |
该高电平有效信号是来自存储器控制器的写入数据FIFO的完整标志。当该信号为高电平时,TG保持写数据值并保持memc_wr_en的置位状态,直到memc_wr_full_i 变为低电平。 |
qdr_wr_cmd_o |
产量 |
该信号仅用于向QDR II +用户界面发送写入命令。 |
vio_modify_enable |
输入 |
允许vio_xxxx_mode_value 改变流量模式。 |
信号 |
方向 |
描述 |
vio_data_mode_value [3:0] |
输入 |
该信号的有效设置是: • 0x0:保留。 • 0x1:固定 - 通过fixed_data_i 输入定义的fixed_data的32位。 • 0x2:ADDRESS - 32位地址作为数据。数据是基于逻辑地址空间生成的。如果设计具有256位用户数据总线,则用户总线中的每个写入节拍在字节边界中将具有256/8的地址增量。如果起始地址是1,300,则数据是1,300,然后是下一个周期中的1,320。为了简化逻辑,用户数据模式是重复地址值位[31:0]的增量。 • 0x3:HAMMER - 在上升沿期间,所有1都在DQ引脚上 DQS,并且所有的0都在DQ引脚的下降沿 DQS,但参数中定义的VICTIM线除外 “SEL_VICTIM_LINE”。该选项仅在参数DATA_PATTERN =“DGEN_HAMMER”或“DGEN_ALL”时有效。 • 0x4:SIMPLE8 - 简单8数据模式,每8个字重复一次。模式可以由“simple_datax”输入定义。 • 0x5:WALKING1s - 步行1位于DQ引脚上。1的起始位置取决于地址值。该选项仅在参数DATA_PATTERN =“DGEN_WALKING”或“DGEN_ALL”时有效。 • 0x6:WALKING0s - 步进0位于DQ引脚上。起始位置0取决于地址值。该选项仅在参数DATA_PATTERN =“DGEN_WALKING0”或“DGEN_ALL”时有效。 • 0x7:PRBS - 32级LFSR生成随机数据并以起始地址播种。该选项仅在参数DATA_PATTERN =“DGEN_PRBS”或“DGEN_ALL”时有效。 • 0x9:慢速锤 - 这是慢速的锤子数据模式。 • 0xA:PHY_CALIB模式 - 0xFF,00,AA,55,55,AA,99,66。该模式仅在地址零处生成READ命令。这是只有在有效的Virtex ® -7系列。 |
vio_addr_mode_value [2:0] |
输入 |
该信号的有效设置是: • 0x1:固定地址模式。该地址来自fixed_addr_i输入总线。在FIXED地址模式下,data_mode被限制在fixed_data_input。没有生成PRBS数据模式。 • 0x2:PRBS地址模式(默认)。该地址由内部32位LFSR电路产生。种子可以通过cmd_seed输入总线进行更改。 • 0x3:SEQUENTIAL地址模式。地址由内部地址计数器生成。增量由用户界面端口宽度决定。 |
信号 |
方向 |
描述 |
vio_instr_mode_value [3:0] |
输入 |
该信号的有效设置是: • 0x1:由fixed_instr_i 定义的命令类型(读/写)。 • 0x2:随机读取/写入命令。 • 0xE:只写入地址零。 • 0xF:只读地址零。 |
vio_bl_mode_value [3:0] |
输入 |
该信号的有效设置是: • 0x1:fixed_bl_i输入中定义的固定突发长度。 • 0x2:用户突发长度由内部PRBS发生器生成。每个突发值定义了生成的背靠背命令的数量。 |
vio_fixed_instr_value |
输入 |
有效的设置是: • 0x0:写入指令 • 0x1:读指令 |
vio_fixed_bl_value |
输入 |
有效的设置是1到256。 |
vio_pause_traffic |
输入 |
即时暂停流量生成。 |
vio_data_mask_gen |
输入 |
该模式仅在数据模式模式为数据地址时使用。如果启用此功能,则会在内存中填充内存模式后生成一个随机memc_wr_mask。如果相应的memc_write_mask被声明,写数据字节通道会被8'hFF卡住。 |
cmp_data [DWIDTH - 1:0] |
产量 |
预期数据与内存中的回读数据进行比较。 |
cmp_data_valid |
产量 |
比较数据有效信号。 |
cmp_error |
产量 |
只要cmp_data与内存中的回读数据不相同,该比较错误标志就会置位。 |
错误 |
产量 |
当回读数据不等于期望值时,该信号有效。 |
ERROR_STATUS [N:0] |
产量 |
错误信号有效时,该信号锁存这些值: • [31:0]:读取起始地址 • [37:32]:读取突发长度 • [39:38]:保留 • [40]:mcb_cmd_full • [41]:mcb_wr_full • [42]:mcb_rd_empty • [64 +(DWIDTH - 1):64]:expected_cmp_data • [64 +(2×DWIDTH - 1):64 + DWIDTH]:read_data |
simple_data0 [31:0] |
输入 |
用户定义的简单数据0用于简单8重复数据模式。 |
simple_data1 [31:0] |
输入 |
用户定义的简单数据1用于简单8重复数据模式。 |
simple_data2 [31:0] |
输入 |
用户定义的简单数据2用于简单的8个重复数据模式。 |
simple_data3 [31:0] |
输入 |
用户定义的简单数据3用于简单的8重复数据模式。 |
simple_data4 [31:0] |
输入 |
用户定义的简单数据4用于简单的8个重复数据模式。 |
信号 |
方向 |
描述 |
simple_data5 [31:0] |
输入 |
用户定义的简单数据5用于简单的8重复数据模式。 |
simple_data6 [31:0] |
输入 |
用户定义的简单数据6用于简单的8重复数据模式。 |
simple_data7 [31:0] |
输入 |
用户定义的简单数据7用于简单的8个重复数据模式。 |
fixed_data_i [31:0] |
输入 |
用户定义的固定数据模式。 |
fixed_instr_i [2:0] |
输入 |
用户定义的固定命令模式。 000 :写入命令 001 :读命令 |
fixed_bl_i [5:0] |
输入 |
用户定义的固定突发长度。每个突发值定义生成的背对背命令的数量。 |
内存初始化和流量测试流程
上电后,初始化存储器控制块指示流量发生器通过存储器初始化过程用选定的数据模式初始化存储器。
内存初始化
1. 该data_mode_i 输入被设置为选择的数据模式(例如,data_mode_i [3:0] = 0010 的地址作为数据图案)。
2. 该start_addr_i 输入被设置为限定下边界的地址。
3. 该end_addr_i 输入被设置为限定所述上边界的地址。
4. 将bl_mode_i 设置为01 以从fixed_bl_i 输入获取突发长度。
5. 该fixed_bl_i 输入设置为16或32。
6. 将instr_mode_i 设置为0001 ,以获得从指令fixed_instr_i 输入。
7. 该fixed_instr_i 输入被设置到存储器设备中的“WR”指令值。
8. 为顺序地址模式填充内存空间,addr_mode_i 设置为11 。
9. 该mode_load_i 被断言一个时钟周期。
当内存空间使用所选数据模式初始化时,初始化内存
控制块指示流量生成器开始通过流量测试流程过程运行流量(默认情况下,addr_mode_i ,instr_mode_i 和bl_mode_i 输入设置为选择PRBS模式)。
交通测试流程
1. 该addr_mode_i 输入被设置为想要的模式(PRBS是默认值)。
2. 该cmd_seed_i 和data_seed_i 输入值用于内部PRBS发生器设置。其他模式不需要此步骤。
3. 该instr_mode_i 输入被设置为想要的模式(PRBS是默认值)。
4. 该bl_mode_i 输入被设置为想要的模式(PRBS是默认值)。
5. 该data_mode_i 输入应具有相同的值作为详述的存储器模式初始化阶段存储器初始化。
6. 将run_traffic_i 输入被触发,才能启动运行流量。
7. 如果在测试期间发生错误(例如,读取的数据与期望的数据不匹配),错误位将被设置,直到应用复位。
8. 接收到错误时,error_status总线将锁定表1-13,页面66中定义的值。
通过一些修改,可以更改示例设计,以便在run_traffic_i 取消断言时动态更改addr_mode_i ,instr_mode_i 和bl_mode_i 。但是,在更改设置后,需要重复执行存储器初始化步骤,以确保将适当的模式加载到内存空间中。
注意:
° 禁用芯片选择选项时,仿真测试平台始终将存储器模型芯片选择位设置为零以实现正确操作。
° 禁用数据遮罩选项时,模拟测试台始终将存储器模型数据遮罩位置零以便正确操作。
7系列FPGA存储器接口解决方案内核如图1-49 所示。
X-Ref目标 - 图1-49
6 \ VWHPFORFNV \ VBFONBSDQGV \ VBFONBQV \VBFONBL5HIHUHQFHFORFNFONBUHIBSDQGFONBUHIBQFONBUHIBLDQGV \ VWHPUHVHWV \VBUVWBQSRUW FRQQHFWLRQVDUHQRWVKRZQLQEORFNGLDJUDP
图1-49: 7系列FPGA存储器接口解决方案
用户FPGA逻辑
图1-49 所示的用户FPGA逻辑模块是任何需要连接到外部DDR2或DDR3 SDRAM的FPGA设计。用户FPGA逻辑通过用户界面连接到内存控制器。内核提供了一个示例用户FPGA逻辑。
AXI4从接口模块
AXI4从机接口将AXI4事务映射到UI,为存储器控制器提供工业标准总线协议接口。
用户界面块和用户界面
UI块将用户界面呈现给用户FPGA逻辑块。它通过提供一个平坦的地址空间和缓冲读写数据来为本地接口提供一个简单的替代方案。
内存控制器和本地接口
内存控制器(MC)的前端向UI块提供本地接口。本地接口允许用户设计提交内存读取和写入请求,并提供将数据从用户设计移动到外部存储设备的机制,反之亦然。内存控制器的后端连接到物理接口并处理该模块的所有接口要求。内存控制器还提供重新排序选项,对接收到的请求进行重新排序以优化数据吞吐量和延迟。
PHY和物理接口
PHY的前端连接到内存控制器。PHY的后端连接到外部存储设备。PHY处理所有的存储设备信号排序和时序。
IDELAYCTRL
任何使用IDELAY的银行都需要IDELAYCTRL。IDELAY与数据组(DQ)相关联。任何使用这些信号的银行/时钟区域都需要IDELAYCTRL。
MIG工具实例化一个IDELAYCTRL,然后使用IODELAY_GROUP属性(请参阅iodelay_ctrl.v 模块)。基于此属性,Vivado Design Suite可在设计中根据需要正确复制IDELAYCTRL。
IDELAYCTRL参考频率应设为200 MHz。基于