Lattice MachXO2-UMF学习笔记

       最近在研究MachXO2芯片的On-chip Flash,除了我们所知道存储比特流的用途,看还有什么是可以给用户使用的。

1. CPLD的存储单元

        MachXO2芯片包含两种内部的存储单元:SRAM 和 Flash

        下图为MachXO2中,ERB SRAM和UFM的配置容量。

1.1  Flash

        CPLD中的Flash也可以成为On-chip Flash或Internal Flash Memory,是非易失性存储器。与FPGA不同,Flash是位于CPLD内部的存储单元。

       On-chip Flash中提供了三个独立的扇区:

  •       Configuration Flash
  •       User Flash Memory (UFM)  
  •       Feature Row

       Configuration Flash用于存储压缩的Configuration Data。

       UFM可作为Configuration Flash的扩展、或存储EBR初始化数据、或作为一般闪存给用户存储数据使用。

       Feature Row是与芯片特征配置和芯片运行状态有关的数据,不要轻易改写。

1.2 SRAM

       SRAM中存储的是active configuration,即现行配置,芯片中正在运行的配置。SRAM本质上是定义FPGA行为的“熔断器”,是掉电易失的,因此需要每次上电后从On-chip Flash中加载数据进行配置。

2. UMF

2.1 UFM特性

容量:24~256 kbits(2000-HC为80kbits)

寿命:100,000次写循环

访问:可通过WISHBONE, SPI, I2C 和 JTAG接口访

UFM是芯片中提供的一个硬核资源,是用户可读写的内部Flash。其中只有在MachXO2 640及以上的芯片才包含UFM。

注:

(1)UFM执行Erase后为0(表现为只能0改写为1,不能1改写为0,要改写为0只能Erase)

(2)UFM要先执行Erase,再执行Write,这样才能改写成功

2.2 UFM用途

        UFM是CPLD芯片内部Flash的一个扇区,除作为Configuration Flash的扩展EBR初始化存储之外,还可以作为一般闪存给用户存储数据使用。

Configuration Flash的扩展

        一般情况下,On-chip-flash中用于存储Configuration Data的Configuration Flash扇区是足够大的,只要设计中不要包含非常多的预初始化EBR数据,Configuration Data就不会溢出。虽然溢出是极少情况,但是当发生溢出时,可以用UFM来存储溢出数据。

EBR初始化存储

       EBR:Embedded Block RAM

        Diamond软件默认会将EBR初始化数据存放在Configuration Flash扇区,当Diamond Spreadsheet View’s Global Preferences的配置中设置CONFIGURATION为CFG_EBRUFM,Diamond软件就会从第一个Page开始存储EBR初始化数据。

        当EBR初始化为全零时,是不会占用UFM资源的,因此为了最大化UFM的数量,可以将EBR初始化为全零模式。

一般闪存

        如果将UFM作为一般存储单元给用户使用,则需要防止Configuration Data溢出到UMF,需要在Diamond Spreadsheet View’s Global Preferences的配置中设置CONFIGURATION为CFG选项

        当UFM作为一般闪存使用时,可以芯片提供的外部接口去访问,比如MCU可以通过I2C去读写UFM,还可以由用户自己通过编写程序去获取UFM的内容。

2.3 UFM访问接口

        MachXO2器件的可以访问UFM的外部接口:SPI, I2C 和 JTAG,以及内部WISHBONE总线接口,各端口优先级如下,高优先级可以打断低优先级:

1. JTAG Port

2. Slave SPI Port

3. I2C Primary Port

4. WISHBONE Slave Interface

       虽然MachXO2提供了多个接口访问Flash,但是Flash的对外接口确实统一的,如下图16.1所示为 Flash Command Interface。Flash Command Interface通过解析不同的命令,来决定要访问的扇区和要执行的操作。

         User-Logic为用户自己编写的逻辑,这就说明,用户逻辑可以通过编写符合WISHBONE总线时序的程序,去访问Flash。

(注意:这里需要说明I2C Primary Port不是指主从,而是主要I2C端口,lattice中其实有连个I2C端口,Primary I2C和Secondary I2C,主要接口和辅助接口的意思,这两个I2C都也里设置为主从。区别就是Primary I2C是芯片已经预先分配好接口的,不可改变,而Secondary I2C的端口需要用户分配,两个I2C可访问的位置不一样,只有I2C Primary Port可以访问Flash Memory。

2.4 UFM访问控制

        UFM是以page为单位组织的Flash扇区,每个page包含128位,共16字节。

        因此UFM不能进行字节寻址,必须以page为单位进行读写,并且自动增量地址。如果需要修改某个字节,需要先将page全部读出,然后修改特定字节,再将整个page的数据写入。

        注意:Flash的擦除是以扇区为单位进行的,因此擦除只能选择擦除整个UFM扇区的内容。

        所以当要擦除UFM之前,应先读出UFM的内容作为备份。

2.5 UFM访问应用

       图16.1可知,I2C, SPI以及WISHBONE总线接口都是EFB中的硬核资源,那么在实际调用中需要使用Diamond软件来调用EFB,根据实际需要引出需要的接口,以使用外部接口I2C,内部使用  WISHBONE总线接口为例,说明如何调用。

2.5.1 软件Global Preferces配置

       首先使用I2C要在软件中使能I2C端口。因为I2C端口作为系统端口是可以作为一般IO使用的,默认设置就是当做普通用户IO使用。

        其次UFM作为一般闪存给用户使用,那么就要保证UFM不会被Configuration Data溢出占用

        因此在Diamond软件中,需要将Spreadsheet View-->Global Preferces做如下配置,如下图所示:

2.5.2 EFB例化  

        Diamond中,选择Tools-->IPexpress-->EFB,根据需求填好Project Path, File Name, Module Output,然后点击Customize,如 图 2.5.1

                                                                         图 2.5.1

         此时将出现“EFB配置”对话框,如图2.5.2所示,EFB窗口的左侧显示了与每个IP函数关联的I/O,使能不同的IP会出现对应的IP端口。我们需要使能Primary I2C的Configuration功能, 使能User Flash Memory,再设置WISHBONE总线频率。

          使能Primary I2C是通过I2C向UFM读写数据,因为只有Primary I2C的Configuration功能才能访问到UFM(见2.3小节的图16.1)。

                                                                     图 2.5.2

       选择I2C配置页面,如图 2.5.3所示。

       注意这里有两个I2C配置,如图2.5.3中方框标出,左侧Primary I2C的总线频率、I2C地址是可以用户配置的,这个I2C是不能访问UFM的。右侧UFM/Configuration I2C是可访问UFM的,它的地址是固定的100000不可改变,I2C总线频率与左侧配置相同。

        设置Primary I2C频率和地址,I2C可以选择7bit寻址或10bit寻址。最后Generate,例化EFB成功。

                                                                       图 2.5.3

      选择UFM配置页面,如图2.5.4所示,分配使用的page数量,根据需要选择UFM的初始化方式,初始化为0或者可以指定初始化文件。

注意使用的page数量填好后,自动产生分配好的起始页面Initialization Data Starts at Page,是从UFM的后端开始分配。因为如果要使用UFM去存储EBR的初始化数据,是从UFM前端开始分配,这也有效防止了两种数据的重叠。

                                                                             图2.5.4

       产生的EFB的sym和tmp文件如下,前缀wb为WISHBONE总线接口,前缀i2c为I2C接口,_irqo为中断信号。

2.5.3 UFM初始化文件

 图2.5.4中,在设置使用UFM的page数目下方,显示用户分配的UFM的初始化有两种方式:

1. 初始化为全0

2. 使用.mem初始化文件初始化

下面介绍使用.mem文件初始化,.mem文件格式支持二进制和十六进制,每一行就是一个page数据(16Bytes),因此初始化几页就写几行数据。

(1)Diamond中选择File-->New

在弹出界面中,左侧选择Other Files,右侧选择Memory Files,填好初始化文件,选择新建New。

(2)填写初始化文件内容

      每一格就是一个page的初始化内容,填写需要的内容然后保存。

       保存后Diammond自动生命.mem文件,为了查看.mem文件内容,我们用txt的形式把文件打开,正常使用时就用Diamond打开即可。

      由下图可以看出,共16个page的初始化数据,每一行由左到右是byte15~byte0。通过Wishbone或I2C读数据时,也是byte15开始输出。

(3)在EFB例化中绑定初始化文件

3.参考文档

本文参照文档如下:

FPGA-TN-02162-4-8-Using-User-Flash-Memory-and-Hardened-Control-Functions-in-MachXO2-Devices

FPGA-TN-02163-2-8-UFM-and-Hardened-Control-Functions-in-MachXO2-Reference-Guide

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值