当前位置: 首页 > news >正文

《FPGA全程进阶---实战演练》第二章之硬件平台的搭建

       学习FPGA,多多少少应该要懂得硬件电路的设计,这样不单单增加了自己的技能,而且还能够对FPGA的硬件实现有更好的了解。

1 模块划分

       对于一个基本的FPGA硬件平台,常用的几个电路部分:(1)电源电路;(2)复位电路;(3)时钟电路;(4)外设电路;(5)配置电路。如图2.1所示。

wps210B.tmp

图2.1 常用电路模块

1.1电源电路

       电源电路是FPGA的核心,是“心脏”,若是电源电路设计的不合理,很可能导致整个系统的溃败,不能正常运行或者失败。对于FPGA来说,基本上包括三类电压:(1)核心电压;(2)I/O电压;(3)辅助电压;

      (1) 核心电压是保证FPGA正常工作的基本电压,属于FPGA内部系统电压。

      (2) I/O电压是FPGA的I/O引脚工作所需的参考电压。不同bank的I/O所需要的电压不尽相同,对于一些LVDS的I/O电压,可能会需要1.5V,这就不同于LVTTL电平的I/O口。

      (3) 除了上述之外的部分的电压,称为辅助电压,例如一些PLL电路的设计等。

       需注意以下情况:

     (1)器件需要几档电压,电压值分别为多少;

     (2)不同档最大电流是多少;

     (3)不同档是否有上电要求;

     (4)电源的去耦电容如何分配和排布;

     (5)电源电压是否需要设计特殊的去耦电路;

    (6)个别芯片需要注意接地问题,FPGA的地信号通常是和电压配对的,一般应用中,统一共地是没有问题的。但个别芯片底部中央有个接地焊盘,这个地信号是连接FPGA内部的很多中间信号的地端,它并不和FPGA的其他地信号直接导通,要注意中间接地焊盘。

1.2 时钟电路

        FPGA的时钟信号源一般来自外部,在大规模的FPGA内部会带有PLL或DLL等可以对时钟信号进行倍频或分频。由于FPGA内部有大量的寄存器资源,而往往在做逻辑使用时,大量的寄存器会有同一个时钟源,由于时钟到达每一个寄存器所需要的时间不一样,这就导致延迟,若到达寄存器的延迟过大的话,会导致系统混乱,不能正常工作,所以FPGA内部设计了“全局时钟网络”的走线池,通过这种专用走线,可以将同一时钟到达寄存器的时间差控制到最小的范围之内。只需将外部晶振的引脚接到FPGA专用引脚上面即可,EDA软件会自动识别此类信号,并将此信号分配到全局时钟网络上。

       需注意以下情况:

      (1)系统运行的最高时钟频率是多大;

      (2)时钟走线尽可能短,有条件可以做包地处理;

      (3)尽可能选择专用的时钟输入引脚;

      (4)是否有可用的内部时钟管理模块,(PLL或者DLL,通常是有的)其输入频率是多少(查器件手册,有一个范围);

1.3 配置电路

       FPGA芯片的配置是通过JTAG实现在线可编程,当断电时SRAM数据丢失,不能恢复,因此FPGA通常需要外挂一个用于保存当前配置数据流的PROM或Flash芯片,通常称为“配置芯片”。CPLD大多都是基于PROM或Flash来实现可编程特性,对它们进行编程时就已经配置好数据流固化好了,重新上电还能够运行固有的配置数据,CPLD不需要配置芯片。

      需注意以下情况:

    (1)配置芯片尽量离FPGA近些;

    (2)尽量使用官方指定的电路和引脚;

    (3)必要时增加阻抗匹配电阻;

1.4复位电路

    复位电路的设计,尽量采用专用引脚。FPGA内部大量的寄存器在上电工作之前需要有一个确定的初始状态以确保正常运行。而上电时间对于FPGA的复位来说也至关重要,FPGA是基于SRAM结构,若上电复位时间较短,那么FPGA器件内部很可能没有复位完成,若上电复位时间较长,对于用户交互使用会有一定的影响,所以上电复位时间要确定好。

    需注意以下情况:

   (1)使用FPGA专用引脚;

   (2)上电复位时间要确定;

   (3)尽可能选择专用的时钟输入引脚;

转载于:https://www.cnblogs.com/raymon-tec/p/5001569.html

相关文章:

  • 【APUE】Chapter5 Standard I/O Library
  • centos下yum安装crontab+mysql自动备份
  • JAVA Socket 编程---Socket 和 ServerSocket
  • redhat+11g+rac 安装数据库软件时只有一个节点可选
  • 软件生命周期之需求分析和设计
  • 线程的正确停止
  • C++类的存储
  • PHP+Swoole网络通信框架
  • spark-submit提交任务到集群
  • 结合Scikit-learn介绍几种常用的特征选择方法
  • js图片处理
  • bconsole中相关命名说明
  • Oracle更改redo log的大小
  • parallels desktop克隆ubuntu虚拟机网卡丢失
  • 泛型vector
  • 11111111
  • 2017-09-12 前端日报
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Gradle 5.0 正式版发布
  • JS数组方法汇总
  • Node项目之评分系统(二)- 数据库设计
  • PHP的类修饰符与访问修饰符
  • scala基础语法(二)
  • TypeScript实现数据结构(一)栈,队列,链表
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue2 SSR 的优化之旅
  • Vue实战(四)登录/注册页的实现
  • vue学习系列(二)vue-cli
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 如何使用 JavaScript 解析 URL
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • "无招胜有招"nbsp;史上最全的互…
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (12)Hive调优——count distinct去重优化
  • (30)数组元素和与数字和的绝对差
  • (4) PIVOT 和 UPIVOT 的使用
  • (C++)八皇后问题
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Git) gitignore基础使用
  • (二)springcloud实战之config配置中心
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (六)Hibernate的二级缓存
  • (三)Honghu Cloud云架构一定时调度平台
  • **CI中自动类加载的用法总结
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET 反射 Reflect
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET序列化 serializable,反序列化
  • @Data注解的作用
  • @RequestMapping-占位符映射
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决