自我介绍什么的后面再说,先把原理和实现过程展示出来。

本文主要论述在ARM嵌入式系统中如何实现FPGA从串配置的方法,将系统程序及配置数据存储在片外Flash中,利用ARM的通用I/O口产生配置时序。我们的实验目的就是测试通过单片机外部的MCU给FPGA加载程序,实现一键烧写多个FPGA程序,进而节省操作人员的时间(不用一个一个重复下载同样的程序)
在这里我们选择ARM家族的LPC1768:LPC1768 是NXP 公司推出的基于ARM Cortex-M3 内核的微控制器LPC17XX 系列中的一员。LPC17XX 系列Cortex-M3 微处理器用于处理要求高度集成和低功耗的嵌入式应用。LPC1700 系列微控制器的操作频率可达100MHz。

FPGA采用xilinx公司A系列中的

XC7A50T

,数据手册:A系列数据手册-ug470;

接下来详细讨论FPGA的从串配置的时序,同时论述LPC1768从串配置A7系列FPGA的软、硬件实现方法。

1.从串配置原理
Xilinx公司的A7系列FPGA可采用从串、主串、从并、主并、JTAG等方式进行配置,与从串配置相关的引脚功能及配置如下:
①M[2:0]:配置模式选择位。M2,M1,M0均接上拉电阻,即M[2:O]=111时为从串模式。
②CCLK:配置时钟位,由LPC1768微处理器提供,上升沿有效。
③DIN:串行数据输入位。
④DOUT:串行数据输出位,用于菊花链式配置。
⑤)PROG_B:低电平异步复位FPGA内部逻辑位。内部配置Memory完全复位后,该引脚指示高电平,此时才能开始配置FPGA。
⑥ INIT_B:由低电平到高电平跳变时,采样配置模式选择位M[2:0],确定配置方式;配置过程中若出现配置错误,INIT_B将呈现低电平。
⑦DONE:复位时为低电平,若配置成功则为高电平。

从串模式的时序图如下:

数据手册中对从串模式时序介绍

2.具体来聊聊FPGA的配置过程:
①系统上电后,首先将PROG_B置为高电平,之后将PROG_B置为低电平,复位FPGA内部逻辑重新配置FPGA,延时100 μs充分复位内部逻辑后,将PROG_B置为高电平。
②INIT_B保持低电平,将PROG_B置高电平大于50us后,FPGA将INIT_B置为高电平,在INIT_B由低向高跳变的瞬间,采样配置模式选择位M[2:0],采用从串配置模式。
③FPGA采样配置模式后,微处理器开始配置FPGA时钟CCLK和数据,在CCLK的每个上升沿,每bit数据被传入到DIN,数据字节先发低位,再发高位,配置过程中若发生错误,则INIT_B呈现低电平。
④所有配置数据传送完成,FPGA校验无误,则DONE呈现高电平,否则为低电平。
⑤DONE为高后,FPGA释放全局三态(GTS),激活IO管脚,释放全部置位复位(GSR)和全局写使能(GWE)有效,开始执行配置区里的逻辑,从串模式配置完成。

现在开始动手来手撕代码:

首先生成一个PROG_B由高电平再到低电平延时一段时间再拉高的时序波形,目的是为了给FPGA配置逻辑异步复位,表示设备已清除配置存储器,相关代码如下图:

ARM模拟从串模式初始时序

如果异步复位配置成功接下来我们应该接收到FPGA反馈的INIT_B信号,此时的INIT_B信号会被拉高,所以呢我们应该检测它的上升沿(原理就是持续检测低电平,满足才可以通过while语句再检测高电平,直到两个while语句都通过),代码如下图

添加边沿检测INIT_B信号

接下来我们要开始配置CCLK信号和数据了,这个我们参考的模拟I2C的思路(这个就是浏览器随便一搜,相关讲解很详细,我就不多赘述),一个时钟周期内发bit大小的数据(时钟低电平的时候将数据准备好,高电平的时候发出去)每8个bit为一个byte。代码如下图:

配置时钟和数据

我们前期的准备工作都做好了,之后开始配置其他的一些子模块以及写主函数。打开芯片的数据手册来查找我们要发送多少个字节以及一些注意事项(数据是高位先发还是低位先发等等)根据下面得图可知我们一共需要发送17536096个bits

数据手册相关内容

有了这些信息我们再将SPIFlash里面的数据通过我们的从串模式DATAIN管脚发送给FPGA,我们的FPGA收到数据并且验证成功之后会将DONE信号拉高,最后我们检测到DONE信号拉高就可以判断从串模式配置成功了,部分代码如下

对DONE信号进行验证
主函数调用子模块

这样我们就做好了一个从串模式的代码,经过测试发现我们需要2分钟左右才可以配置成功,这个时间远远达不到我们得要求,需要开始优化代码,首先分析造成配置时间过长的原因:

(1)从SPIFlash读取数据的时间太长了

(2)每次传数据中间的延时时间太久了。为了改善这个问题我们将SPIFlash一次多读取一些数据,还有就是将延时缩小到满足要求的最小值。代码如下图:

讲每次从flash中提取的数据增多
提高读取速率

修改完上面的两处变量我们就可以将配置的时间提升到13s左右(serial clock rate通过查手册是数值越小,速率越快(最小可以取到01)。SPIFlash影响配置速度的主要原因是每次读取数据等待的时间太久,所以我们减少读取的次数,每次多读取一些数据,我们取最大的值1024还可以取64,128,256,512)。

对于缩小延迟时间这个比较特殊,我们需要单独的说明:我们的延时函数

延时函数

经过我测量在i=10000的时候正好生成周期为1us的方波(LPC1768主频是100MHZ),说明我们的延时函数还是比较精准的。再去查询FPGA从串模式下的最小数据传输间隔时间为2.5ns,LPC1768运行一个语句的时间为1/100MHZ等于10ns,综上所述我们即使不给延时也可以满足FPGA对于时间的间隔,最后查询建立时间和保持时间的要求,也是可以满足的所以我们原来加延时的地方都来可以注释掉。

实验过程中的“坑”

!!!仔细看芯片手册,图上面显示的和下面的注释可能不一样。比如这次LPC1768输出数据的时候时序图上面是低位在前,而底下注释的是高位在前,所以导致最后传输数据结束后FPGA没有配置成功。

第一次写这种分享技术贴,哪里不对希望多多指正,介绍一下自己,我就是一个刚开始工作3个月的应届生,这个项目是我进公司领导给颁布的第一个小项目,自己之前没有接触过这个从串模式,刚开始还是很抗拒的,因为是一个全新的内容,一点头绪都没有,而且网上还没有例程之类的参考,完全是0到1。但是还好坚持下来了,最终完成了这个项目,所以写点小经验来记录一下,如果哪里有错误请指出。

我也是第一次写这个,写作的动力还是因为看到了一个B站UP主“老石谈芯”的一个视频,大概的意思是:

1、你不必是个天才2、每天分享一点内容3、教给别人你会的东西

所以,以后我也会经常分享工作和学习之中的感悟和经验,我是新入职的硬件工程师,你们好

fpga电平约束有什么作用_FPGA从串模式相关推荐

  1. fpga电平约束有什么作用_FPGA时序约束有什么样的作用

    何谓静态时序分析(Static Timing Analysis,简称STA) 它可以简单的定义为:设计者提出一些特定的时序要求(或者说是添加特定的时序约束),套用特定的时序模型,针对特定的电路进行分析 ...

  2. fpga电平约束有什么作用_Xilinx FPGA的约束设计和时序分析总结

    欢迎FPGA工程师加入官方微信技术群 点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群 在进行FPGA的设计时,经常会需要在综合.实现的阶段添加约束,以便能够控制综合.实现过程,使设计 ...

  3. FPGA时序约束篇之时序分析与时序约束的作用

    FPGA时序约束篇之时序分析与时序约束的作用 一.写在前面 二.名词解释 三.举个栗子 3.1 降低时钟频率 3.2 提升时钟频率 END 一.写在前面   在每个初学者学习FPGA设计时,都会听前辈 ...

  4. FPGA UCF约束文件全解

    (一)约束的分类: 利用FPGA进行系统设计常用的约束主要分为3类.(1)时序约束:主要用于规范设计的时序行为,表达设计者期望满足的时序条件,知道综合和布局布线阶段的优化算法等.(2)布局布线约束:主 ...

  5. FPGA时序约束、时序分析(一)

    很多人询问关于约束.时序分析的问题,比如:如何设置setup,hold时间?如何使用全局时钟和第二全局时钟(长线资源)?如何进行分组约束?如何约束某部分组合逻辑?如何通过约束保证异步时钟域之间的数据交 ...

  6. (53)多路时钟复用FPGA如何约束二(片内时钟复用约束)

    1.1 多路时钟复用FPGA如何约束二(片内时钟复用约束) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)多路时钟复用FPGA如何约束二(片内时钟复用约束): 5)结束 ...

  7. (52)多路时钟复用FPGA如何约束一(片外时钟复用约束)

    1.1 多路时钟复用FPGA如何约束一(片外时钟复用约束) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)多路时钟复用FPGA如何约束一(片外时钟复用约束): 5)结束 ...

  8. (126)FPGA面试题-做了哪些FPGA时序约束?

    1.1 FPGA面试题-做了哪些FPGA时序约束? 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-做了哪些FPGA时序约束: 5)结束语. 1.1.2 ...

  9. FPGA时序约束设计经验总结

    1.1 FPGA时序约束设计经验总结 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA时序约束设计经验总结: 5)结束语. 1.1.2 本节引言 "不积 ...

最新文章

  1. Ubantu Mark
  2. 重磅直播|基于激光雷达的感知、定位导航应用
  3. Nhibernate常见的错误
  4. java知识总结-15
  5. 【转】Photoshop网站设计:DesignStudio
  6. upc组队赛1 小C的数学问题【单调栈】(POJ2796)
  7. 当年我见过最烂的上网行为审计产品
  8. 【GISER Painter】矢量切片(Vector tile)
  9. c语言读入文件排序,帮忙-如何对文件排序啊
  10. tf.TensorArray
  11. 自然语言项目之Python语种检测代码实现
  12. 反编译python编写的exe文件的详细方法
  13. 移远 BC95 海思 NBIOT 物联网模块 规格 手册 说明
  14. Android 小知识:使用shell screencap / screenshot命令截屏
  15. 计算机应用研究参考文献格式,参考文献编写规则-计算机应用研究.PDF
  16. 联想小新V1070-FXSE(FX版)怎么重装系统教程
  17. php无限评论回复_php实现无限级评论功能
  18. 个人收款码和商家收款码有哪些区别
  19. 关于城市居民膳食结构与食品营养的意见
  20. HDLBits Bulid a circuit from a simulation wavefrom 系列

热门文章

  1. python 笔记 之 sqlalchemy操作数据库-说明
  2. Task三个列子的分享
  3. DB2安全(一)——概述
  4. Device.js——检测设备平台、操作系统的Javascript 库
  5. Hadoop Streaming框架使用(一)
  6. 编写更好的CSS代码
  7. zabbix监控交换机出图断断续续
  8. python-函数进阶
  9. 逆序对(树状数组解决)
  10. 每天一个linux命令(61):vi命令 /企业常用的linux命令清单