【FPGA】XILINX DDR3的MIG IP核的配置

XILINX DDR3的MIG IP核的配置

1.MIG的IP核引脚说明
在这里插入图片描述
app_addr:地址线
app_cmd:指令线(读写指令)
app_en:MIG使能信号
app_rdy:MIG能接受指令的指示信号
app_hi_pri:优先级信号(没有用到)
app_rd_data:读取的数据
app_rd_data_end:读取突发最后一个数据的标志位
app_rd_data_valid:已经读到数据时,表示数据有效
app_sz:(不经常使用)
app_wdf_data:写入的数据
app_wdf_end:写入突发最后一个数据的标志位
app_wdf_mask:屏蔽数据
app_wdf_rdy:写数据准备好
app_wdf_wren:写数据使能
app_correct_en_i:纠错功能,在后面配置MIG时勾选即可
app_sr_req:(没有用到)
app_sr_active:(没有用到)
在这里插入图片描述
app_ref_req:刷新请求
app_ref_ack:刷新请求反馈
app_zq_req:校准请求
app_zq_ack:校准请求反馈
ui_clk:用户时钟,是DRAM的一半或者四分之一,一般DDR的时钟使用400M,且这时候ui_clk只能是四分之一
init_calib_complete:初始化完成标志
app_ecc_multiple_err:纠错指示
ui_clk_sync_rst:高电平有效的指示信号
app_ecc_single_err:纠错指示
2.MIG的时序
(1)写时序
在这里插入图片描述
首先将app_rdy拉高,表示可以接收指令;
指令线给write指令;
地址线给地址;
使能信号拉高。
(2)背靠背写指令(连续写)
在这里插入图片描述
(3)读时序
在这里插入图片描述
读时序和写时序的不同在于多了app_rd_data_valid,此信号为高时数据才有效。
3.MIG的配置
(1)打开MIG:
点击IP Catalog-搜索MIG-双击Memories interface Generator
(2)配置MIG:
打开界面如下,点击Next:
在这里插入图片描述
**MIG Output Options:**选择Create Design,表示创建memory控制器;
**Component Name:**名字默认即可;
**Multi-Controller:**多用途控制器,默认为1即可;
**AXI4 Interface:**是否使用AXI4接口,这里不使用就不勾选;
点击Next;
在这里插入图片描述
是否兼容以下芯片,这里不需要兼容就不用勾选;
点击Next;
在这里插入图片描述
选择DDR的类型,我用DDR3就选第一个;
点击Next;
在这里插入图片描述
**Clock Period:**工作时钟,根据DDR运行时钟和FPGA时钟进行选择(这里选择了一个极限时钟2500ps/400MHz)
**PHY to Controller Clock Ratio:**用户时钟和DDR时钟的比例关系,为4:1,那么用户时钟就是100MHz;
**Vccaux_io:**根据MIG性能设置的电压,默认1.8V;
**Memory Type: **类型默认为Components即可;
**Memory Part: **芯片选择,我使用的是nanya的128M16的芯片,因为里面没有,只要选择128M16的芯片即可(这里选择MT41J128M16XX-125);
**Data Width:**数据位宽是16位;
**ECC: **数据位宽必须是72位以上才能选择;
**Data Mask:**数据屏蔽,我没有使用到,如果需要可以勾选;
Number of Bank Machines: Bank的控制器,数值越大,性能越强,同时耗费资源越多,这里选择为4;
**ORDERING: **是否允许重排序,可以提高运行效率,允许就选择normal;
点击Next;
在这里插入图片描述
在这里插入图片描述
Input Clock Period:输入时钟,这里有个bug,理论应该是200M, 但是这里是400M,就算修改后面打开任然是400M,不会影响;
**Read Burst Type and Length:**读的类型,连续或者交替,这里选连续sequential;
**Output Driver lmpedance Control:**输出阻抗控制;
**RTT:**终结电阻,可进行动态控制。本次实验选择RZQ/4;
Controller Chips Select Pin: CS的片选信号,可以接出来,选择enable;
**Memory address Mapping Selection:**寻址方式,一般是bank过了行过了列;
点击Next;
在这里插入图片描述
在这里插入图片描述
**System Clock:**系统时钟是否需要添加缓存器,这里不需要,选择“No Buffer”;
**Reference Clock:**时钟是否需要添加缓存器,这里不需要,选择“No Buffer”;
**System Reset Polarity:**复位有效电平选择。本实验选择“ACTIVE LOW”低电平有效。
Debug Signals Control:该选项用于控制 该选项用于控制 该选项用于控制 该选项用于控制 MIG IP核是否把一些调试信号引出来,它会自动添加到 核是否把一些调试信号引出来,它会自动添加到 ILA, 这些 信号包括一DDR3芯片的校准状态信息。本实验选择“ OFF”,不需要让 IP核生产各种调试信 号。
**Sample Data Depth:**采样深度选择。当“ Debug Signals Control”选择“ OFF”时,所有采样深度是不 可选的。
Internal Vref:内部参考管脚,表示将某些当成普通的 输入来用。由于开发板IO资源 较为紧张,因此这里需要选择“ ON”,把参考管脚当做普通的输入来用。
IO Power Reduction: IO管脚节省功耗设置。本实验选择“ ON”,即开启。
XADC Instantiation: XADC模块例化。使用 MIG IP核运行的时候需要进温度补偿,可以直接选择 XADC模块的温度数据引到 MIG IP核来使用,否则需要额外提供温度数据所以本实验选择“ Enable”
点击Next;
在这里插入图片描述
在这里插入图片描述
**阻抗匹配设置:**默认50;
点击Next;
在这里插入图片描述
**引脚模式选择:**第二个;
点击Next;
在这里插入图片描述
**引脚配置:**这里可以直接选择第二个,"Read XDC"读取通过引脚分配文件读取引脚配置,也可以手动设置;
IO标准有三种:
SSTL15:速度快
DIFF_SSTL15:差分SSTL,速度快;
LVCMOS:噪声容限大;
点击Validate进行生效-OK
点击Next;
在这里插入图片描述
在这里插入图片描述
信息展示点击Next;
在这里插入图片描述
在这里插入图片描述
接受协议:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击生成
完成!!!

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!以下是一个用Python 3编写的脚本,可以使用fio对固态硬盘进行测试,并将结果提取到Excel中,并使用logging模块记录测试步骤和调试信息。请确保已经安装了fio和openpyxl模块。 ```python import subprocess import openpyxl import logging def erase_disk(device): logging.info("Erasing disk: {}".format(device)) subprocess.run(["blkdiscard", device]) def run_fio_test(device): logging.info("Running fio test on disk: {}".format(device)) block_sizes = [4, 8, 16, 32, 64] # 可根据需要修改 results = [] for block_size in block_sizes: logging.info("Running fio test with block size: {}k".format(block_size)) result = subprocess.run(["fio", "--filename={}".format(device), "--direct=1", "--rw=write", "--bs={}k".format(block_size), "--numjobs=1", "--size=1G", "--time_based", "--runtime=60", "--name=test"], capture_output=True, text=True) results.append(result.stdout) return results def extract_results(results): logging.info("Extracting results to Excel") wb = openpyxl.Workbook() sheet = wb.active sheet.title = "FIO Results" for i, result in enumerate(results): lines = result.splitlines() for line in lines: if "bw=" in line: bw = line.split("bw=")[1].split(",")[0].strip() iops = line.split("iops=")[1].split(",")[0].strip() latency = line.split("lat=")[1].split(",")[0].strip() sheet.cell(row=i+2, column=1).value = bw sheet.cell(row=i+2, column=2).value = iops sheet.cell(row=i+2, column=3).value = latency wb.save("fio_results.xlsx") if __name__ == "__main__": logging.basicConfig(filename="test.log", level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") device = "/dev/sda" # 替换为您要测试的磁盘设备 erase_disk(device) results = run_fio_test(device) extract_results(results) ``` 此脚本首先定义了一个`erase_disk`函数,用于擦除待测试的磁盘。然后定义了`run_fio_test`函数,使用不同的块大小运行fio测试,并将结果存储在一个列表中。然后,`extract_results`函数将结果提取到Excel文件中。最后,在`main`函数中,配置logging模块记录步骤和调试信息,然后依次执行擦除磁盘、运行fio测试和提取结果。 请根据您的实际情况修改`device`变量为您要测试的磁盘设备的路径。运行脚本后,测试结果将保存在名为`fio_results.xlsx`的Excel文件中,并且步骤和调试信息将记录在`test.log`文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值