易灵思FPGA-钛金的Hyperram Controller设置使用



一、Hyperam没简介

就是一个多路高速大号掉电易失Spi Flash,主要特点就是一个小封装和低功耗,具体的芯片的接口协议没研究,基本上每家FPGA或者MCU公司建议用hyperram的,都会有对应的控制器 ,直接搞控制器就行。

在这里插入图片描述

二、硬件设计

原理图设计没啥说的 ,正常链接管脚就行,400M的线速度 ,做好等长就行;
在这里插入图片描述
这是HyperRAM的上电和掉电过程
在这里插入图片描述
在这里插入图片描述

三.Interface Designer 设计

在这里插入图片描述

对于Ti60F100 来说 ,IC里面集成了hyperam 所以在interface design里面直接例化就行 ;
在这里插入图片描述

对于其他芯片来说 ,参考对应Ti60F225的实例工程,直接copy 对应的 IO管脚 ,interface 里面导出导入;input output inout 只需要根据自己实际硬件设计,关联好对应的pad就行;

在这里插入图片描述

四、代码定义

如果你用了AXI3接口 ,建议将这些参数提到顶层,方便实际用起来修改

//Hyeperram  Signal
#(
`ifndef EFX_IPM
    parameter                   AXI_DBW = 128,		//	AXI位宽 根据你的需求来
    parameter                   AXI_SBW = AXI_DBW/8,
`endif
    parameter                   AWR_LEN = 63,
    parameter                   TOP_DBW = 16		//	实际hyperram的位宽
)
	input  wire                 clk,				// PLL 输出给到逻辑 一般100M就行
    input  wire                 hbramClk,			//	PLL-OUT到逻辑  和控制器的参数设置给的一样即可  一般选择200M  250M不推荐
    input  wire                 hbramClk_cal,		//	和hbramClk 90度相位差
    input  wire                 hbramClk_pll_locked,//  PLL稳定信号后,IP再工作不迟
    output wire                 hbramClk_pll_rstn,	//  复位低有效

// =============== PLL Phase Settings ======================
    output wire [2:0]           hbc_cal_SHIFT,		//  动态校准PLL的,流程可参考笔者其他工程
    output wire [4:0]           hbc_cal_SHIFT_SEL,	//  动态校准PLL的,流程可参考笔者其他工程
    output wire                 hbc_cal_SHIFT_ENA,	//  动态校准PLL的,流程可参考笔者其他工程
// =============== HBRAM Related Signals ===================
    output wire                 hbc_rst_n,	//下面就是Hyperram的接口
    output wire                 hbc_cs_n,
    output wire                 hbc_ck_p_HI,
    output wire                 hbc_ck_p_LO,
    output wire                 hbc_ck_n_HI,
    output wire                 hbc_ck_n_LO,
    output wire [TOP_DBW/8-1:0] hbc_rwds_OUT_HI,
    output wire [TOP_DBW/8-1:0] hbc_rwds_OUT_LO,
    input  wire [TOP_DBW/8-1:0] hbc_rwds_IN_HI,
    input  wire [TOP_DBW/8-1:0] hbc_rwds_IN_LO,
    input  wire [TOP_DBW-1:0]   hbc_dq_IN_LO,
    input  wire [TOP_DBW-1:0]   hbc_dq_IN_HI,
    output wire [TOP_DBW/8-1:0] hbc_rwds_OE,
    output wire [TOP_DBW-1:0]   hbc_dq_OUT_HI,
    output wire [TOP_DBW-1:0]   hbc_dq_OUT_LO,
    output wire [TOP_DBW-1:0]   hbc_dq_OE,

如图所示 ,笔者通常将控制器的IP 直接加到工程中 ,修改红色框中的参数,比如频率,突发个数,突发模式等 ,方便各个平台移植 ,不用考虑软件兼容问题;
在这里插入图片描述

下图是控制器例化的文件,在IP 管理器里面生成 Hyperram Controller ,对应的IP文件夹底下直接copy;

逻辑端和Controller 的连接方式有两种 ,常见的Native 接口 和 AXI3接口 ;我们推荐Native ,主打的就是一个简单好上手。

红色是时钟 IP核的时钟一般给200M 和200M@90度 ;
绿色是逻辑和 通过和interface designer锁定,与实际物理上HyperRAM互相连接的管脚
黄色部分是用户逻辑和控制器相连接的Native 地址和数据接口;
在这里插入图片描述

官方的hyperram读写 实际回环测验控制器的数据流 是AXI3接口的,笔者觉得麻烦没怎么用;
下面是自己根据用户端接口,自己做了个读写的回环测验:

Native 的 读时序:

在这里插入图片描述

在这里插入图片描述

Native 的 写时序:

在这里插入图片描述

在这里插入图片描述


其他

  1. 首先要找FAE要 HyperRAM Controller CoreUser Guide 。 基本上所有的IO说明,设计注意事项里面都有提;

  2. Native模式下 ,读写FIFO的深度设置 ,根据公式:
    Write FIFO Depth Size = ((DQ Width * 2)/ Data width) * native_ram_burst_len

  3. 如上图所示,笔者给的数据就是32bit的,F225和F100的hyperram接口是16bit的,所以我一次突发写FIFO的个数最少是256 ,所以深度我就是256个;
    在这里插入图片描述

  4. 按照32bit ,256个突发 ,这一次我给的地址是000000h ,下一次写的地址 我就给 002000h;

  5. native 模式下的HyperRAM只能采用linear模式,必须要把
    native_ram_address[31] 这一根地址线一直拉高;

  6. 官方的例程里面 PLL会正式工作前,会有一个自动校准的调相功能,直接copy就行了;
    在这里插入图片描述

  7. 手册里面没有AXI3的时序;

  8. 有需要我补充的不吝赐教,我再补充更新。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值