精选文章 《深入浅出玩转FPGA》笔记

《深入浅出玩转FPGA》笔记

作者:浩瀚之水_csdn 时间: 2020-08-04 09:35:11
浩瀚之水_csdn 2020-08-04 09:35:11

关于这本书,算是囫囵吞枣地读完了。网上很多人推荐这本书,评价很不错。以我的观点来看,确实是本不错的关于FPGA方面的书,作者确实经验丰富,书中有很多值得学习的东西,但是可能不是很适合初学者看,比较适合有一定项目经验的人读。因为这本书本身就是将作者许多自己的亲身经历总结出来的经验编纂出来的,可能作者也是看烦了市面上一众读物都秉持着介绍某类知识一定要事无巨细地从头说到尾的风格,所以作者对基础的介绍非常少。初学者学习FPGA的开发和调试去看作者另一本《FPGA/CPLD边练边学--快速入门Verilog/VHDL》比较好。

说到底,我作为菜鸟,这本书很多内容我也还是一知半懂,可能还需要更多的积累。在这里记录一下这本书给我的新收获。

一、关于时钟的设计要点:

(1)避免使用门控时钟或系统内部逻辑产生的时钟,多用使能时钟去替代。

门控时钟指的是在数据无效时,将寄存器时钟关闭的技术,能够有效降低功耗,是低功耗设计的重要方法之一。组合逻辑中多用门控时钟,一般驱动门控时钟的逻辑都是只包含一个与门(或门)。如果有其它的附加逻辑,容易因竞争产生不希望的毛刺。

(2)对于需要分频或倍频的时钟,用器件内部的专用时钟管理(如PLL或DLL)单元去生成。

我的理解是FPGA内部逻辑资源宝贵,用来做时钟管理太浪费,而且有专用的干嘛不用呢。

(3)尽量对输入的异步信号用时钟进行锁存。

所谓异步信号,是指两个处于不同时钟频率或相位控制下的信号。这样的信号在相互接口的时候如果没有可靠的同步机制,则存在很大的隐患,甚至极有可能导致数据的误采集。所以需要学习一些异步信号的同步机制。

(4)避免使用异步信号进行复位或置位控制。

这一点很显然,异步信号会增加毛刺出现的可能性。

 

二、提升系统性能的代码风格

(1)减少关键路径的逻辑等级

很多时候时序不达要求是因为有几条关键路径内部逻辑门延时太长,可以通过修改代码减少某些路径的层级,但通常会导致其他路径多出一个或几个逻辑门,“面积换速度”。

(2)逻辑复制(减少重载信号的散出)与资源共享

如果某个信号扇出比较大,插入buffer可以解决,但是会增加延时。通过逻辑复制,即复制产生这个信号的逻辑来驱动后续电路,既使平均扇出降低又不增加延时,但面积会增大。

资源共享是逻辑复制的逆过程,可以节省面积,但以牺牲速度为代价。

(3)消除组合逻辑的毛刺

引入时序逻辑,即添加寄存器来锁存输出结果,在时钟有效沿再输出。

 

三、异步复位、同步释放

异步复位不稳定,同步复位消耗额外资源。这种异步复位、同步释放的双缓冲电路根本思想是将异步信号同步化。

《深入浅出玩转FPGA》笔记1

综合后的电路:

《深入浅出玩转FPGA》笔记2

四、乒乓操作及串并转换设计

FPGA设计的重要思想有:面积换速度、乒乓操作及串并转换设计、流水线设计、逻辑复制和模块复用、模块化设计等。

乒乓操作:一种数据流控制的处理技巧。

《深入浅出玩转FPGA》笔记3

第一个周期,数据进入缓冲区1;第二个周期,数据进入缓冲区2,同时输出数据选择控制将缓冲区1内的数据送出去;第三个周期,数据进入缓冲区1,缓冲区2内的数据被送出。如此循环,可以实现数据的无缝缓冲和处理。

串并转换:高速数据流处理的重要技巧之一。

《深入浅出玩转FPGA》笔记4

串行输入的数据通过FPGA内部的n个移位寄存器后,最后并行输出的是一个n位宽的并行总线数据。

 

五、同步设计的好处:

  1. 有效避免异步信号通信产生的冲突;
  2. 便于时序约束、时序分析及时序仿真;
  3. 便于板级时序问题定位;
  4. 有利于同器件间的代码移植,减少重复设计;
  5. 最小化器件升级对同一工程带来的影响。

目前经验尚浅,很多体会不是很深。

 

六、专用握手信号

握手通信原理,即通信双方使用了专用控制信号进行状态指示,是一种常用的跨时钟域信号处理方式。

《深入浅出玩转FPGA》笔记5

使用握手协议方式处理跨时钟域数据传输时,只需要双方的握手信号(req和ack)分别使用脉冲检测法进行同步。具体实现:发送域先将数据放入总线,然后发送req有效信号给接收域;接收域收到req有效信号后锁存数据总线,然后回送ack有效信号给发送域;发送域接收到ack有效信号后撤销当前req信号,接受域再检测到req信号撤销后也撤销ack信号,此时完成一次正常握手通信。

 

七、关于变量的定义

在编写testbench时,关于变量的定义一个常犯的错误就是将一个定义好的全局变量应用到了两个不同的always块中(如EX1C),由于两个always独立并行工作,会产生意想不到的后果。

《深入浅出玩转FPGA》笔记6

解决方法是可以在begin...end之间定义always的块名,这样两个always块中的变量i就互不相关了。

《深入浅出玩转FPGA》笔记7

八、HDL的三个最基本思想

连通性(Connectivity)、时间性(Time)和并行性(Concurrency)。

 

九、Testbench书写技巧

  1. 封装有用的子程序;
  2. 结构化Testbench;
  3. 防止对同一个寄存器同时进行读写操作;(使用非阻塞语句可以解决)
  4. 防止同时调用task。(可以在task中引入检错机制,检查task当前是否被调用)

《深入浅出玩转FPGA》笔记8

十、建立时间、保持时间

《深入浅出玩转FPGA》笔记9

《深入浅出玩转FPGA》笔记10

建立时间满足:

《深入浅出玩转FPGA》笔记11 即 《深入浅出玩转FPGA》笔记12

保持时间满足:

《深入浅出玩转FPGA》笔记13

时钟满足: 《深入浅出玩转FPGA》笔记14 由此可以计算FPGA的最大频率,系统时序优化主要是对传输路径延时 《深入浅出玩转FPGA》笔记15 做文章。

 

十一、逻辑仲裁设计要点

  1. 复位状态;
  2. 切换时序;当前状态执行完可以通过仲裁直接进入另一状态或者维持现有状态,不必一定要返回中间状态。
  3. 轮流响应;防止某一状态长期霸占总线。
  4. 超时退出。

十二、FPGA+CPU

  • 潜在优势:
  • 更易于满足大多数系统的功能性要求;
  • 潜在的改善了系统的性能;
  • 在某些应用中的灵活性和可升级性大大提高;
  • 处理器连接到外设的接口能够得到优化;
  • 软硬件互联的接口性能获得极大的提升;
  • 有利于设计的重用和新设计的快速成型;
  • 简单化芯片甚至整板的PCB布局布线。

 

其实这本书我还有很多地方没看明白,应该需要多看几遍。

参考文献:

《深入浅出玩转FPGA》第三版,吴厚航编著

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:Java经典排序算法

下一篇:2020危险化学品经营单位主要负责人证考试及危险化学品经营单位主要负责人复审模拟考试

您可能感兴趣

  • 行业内关于智能客服、聊天机器人的应用和架构、算法分享和介绍

    阿里巴巴 小蜜 阿里小蜜新一代智能对话开发平台技术解析 阿里小蜜:知识结构化推动智能客服升级 阿里云小蜜对话机器人背后的核心算法 大中台、小前台,阿里小蜜这样突破对话机器人发展瓶颈 机器如何猜你所想?阿里小蜜预测平台揭秘 阿里小蜜:智能服务技术实践及场景探索 云小蜜:在中国移动的落地实践 阿里小蜜这一年,经历了哪些技术变迁? 论文导读 | 阿里小蜜背后的技术秘密 拆开阿里小蜜的内核,看智能人...

  • 「LSTM 之父」亲笔万字长文,只为向世人证明:深度学习不是在母语为英语的地方被发明的

    导语:最重要的并不是谁发明了某项技术,而是技术本身对于人类文明发展所具有的无上价值! 雷锋网 AI 科技评论按:毫无疑问,深度学习是影响当今世界科技发展的最重要的技术之一。2018 年,深度学习「三巨头」因其在这个领域的卓越贡献荣获图灵奖。在人们感慨人工智能迎来春天的同时,也有人为「LSTM 之父」Jürgen Schmidhuber 未能分享这份荣誉而感到遗憾。事实上,除了 LSTM 之外...

  • 【BAT面试题系列】面试官:你了解乐观锁和悲观锁吗?

    前言 乐观锁和悲观锁问题,是出现频率比较高的 面试题。本文将由浅入深,逐步介绍它们的基本概念、实现方式(含实例)、适用场景,以及可能遇到的面试官追问,希望能够帮助你打动面试官。 目录 一、基本概念 二、实现方式(含实例) 1、CAS(Compare And Swap) 2、版本号机制 三、优缺点和适用场景 四、面试官追问:乐观锁加锁吗? 五、面试官追问:CAS有哪些缺点? 六、总结 一、基本...

  • 秋招总结--来自一枚2020届普通本科生的回顾

    一、先好好TMD吐一吐苦水,回顾2019年 2019年的秋招.....

  • Java 刷题11-6

    坐标苏州,双非本科,专业环境工程,之前没有任何编程经验,历经一年努力,终于在春招拿到心仪的offer。成功转行JAVA后端工程师。 由于转行时间较晚,2018年4月初正式开始接触编程。在此之前,没有参加过有关计算机的竞赛,也没有计算机的知识,唯一沾边的是会帮别人修电脑😂。 目前拿到的offer:三七互娱,无锡帆软,上海汉得,cvte(在等结果)以及部分苏州地区的IT公司。 这里简述一下这一年...

  • 一份你女朋友都能读懂的 Git 教程,还不赶紧学起来!

    用游戏的方式来学习,是一种有趣而高效的方式。 从刚接触电脑时的打字练习软件 金山打字通,到程序猿写代码的利器 Vim 都有小游戏(金山打字通游戏、VIM Adventures)来帮助我们入门。 当你的目标从掌握技能转变为打通游戏之后,学习本身也就不再痛苦。在完成每一关的过程中,都能增加我们的技能熟练度和成就感。 而 Learn Git Branching,就是一个用小游戏带你入门的 Git ...

  • Sping MVC不使用任何注解处理(jQuery)Ajax请求(基于XML配置)

      1. Spring      Spring框架是一个轻量级的解决方案,是一个潜在的一站式商店,用于构建企业就绪的应用程序。Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持。Spring处理基础结构,因此您可以专注于应用程序。Spring使您能够从“普通的Java对象”(POJO)构建应用程序,并将企业服务非侵入性地应用于POJO。此功能适用于Java SE...

  • java入门到秃路线导航,元芳你怎么看?【教学视频+博客+书籍整理】

    目录 一、Java基础 二、关于JavaWeb基础 三、关于数据库 四、关于ssm框架 五、关于数据结构与算法 六、关于开发工具idea 七、关于项目管理工具Mawen、Git、SVN、Gradle.... 八、关于计算机网络原理 九、关于设计模式 十、关于中间件Shiro、Lucene、Solr...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。