内容简介
本书探讨了FPGA设计实践过程中最可能遇到的深层次问题,并提供了经验指导。作者把多年推广到诸多公司和工程师团队的经验以及由专门的开发标准和应用要点汇集的许多知识进行浓缩,用来完善工程师的专业知识,帮助他们成为高级FPGA设计者。同时,本书能够帮助读者弥补工业实践经验的不足,免去读者学习的困难。
本书涵盖了FPGA设计的多个层面,包括架构设计、具体实现方法以及性能优化策略,之后讲解了跨时钟设计、仿真进阶以及综合布局时序的一些处理,同时通过设计实例进行深入分析,旨在为读者提供全面而深入的FPGA设计知识。读者不仅能掌握FPGA设计的基本原理和技术细节,还能学会如何应对实际工程挑战,提升设计效率和性能。
本书适合希望在FPGA领域有所作为的专业人士阅读和参考。
目录
目录
译者序
原书前言
原书致谢
本书内容导图
第1章 速度架构设计
1.1高吞吐量
1.2低延迟
1.3时序
1.3.1添加寄存器层
1.3.2并行结构
1.3.3逻辑结构扁平化
1.3.4寄存器平衡
1.3.5路径重新排序
1.4要点总结
第2章 面积架构设计
2.1流水线折叠
2.2基于控制的逻辑重用
2.3资源共享
2.4复位对面积的影响
2.4.1没有复位的资源
2.4.2没有置位的资源
2.4.3没有异步复位的资源
2.4.4复位RAM
2.4.5使用触发器置位/复位引脚
2.5要点总结
第3章 功耗架构设计
3.1时钟控制
3.1.1时钟偏移
3.1.2管理偏移
3.2输入控制
3.3降低供电电压
3.4双沿触发器
3.5修改端接配置
3.6要点总结
第4章 设计示例:高级加密标准
4.1AES架构
4.1.1字节替换模块的一级流水线
4.1.2行移位模块的零级流水线
4.1.3列混淆模块的两级流水线
4.1.4加轮密钥模块的一级流水线
4.1.5紧凑型架构
4.1.6部分流水线架构
4.1.7全流水线架构
4.2性能与面积
4.3其他优化
第5章 高级设计
5.1抽象设计技术
5.2图形状态机
5.3DSP设计
5.4软/硬件协同设计
5.5要点总结
第6章 时钟域
6.1跨时钟域
6.1.1亚稳态
6.1.2解决方案1:相位控制
6.1.3解决方案2:两级触发器同步
6.1.4解决方案3:FIFO结构
6.1.5分离同步模块
6.2ASIC原型中的门控时钟
6.2.1时钟模块
6.2.2移除门控
6.3要点总结
第7章 设计示例:I2S和SPDIF
7.1I2S
7.1.1协议
7.1.2硬件架构
7.1.3分析
7.2SPDIF
7.2.1协议
7.2.2硬件架构
7.2.3分析
第8章 实现数学函数
8.1硬件除法
8.1.1乘移法
8.1.2迭代除法
8.1.3Goldschmidt方法
8.2Taylor和Maclaurin级数展开
8.3CORDIC算法
8.4要点总结
第9章 设计示例:浮点单元
9.1浮点格式
9.2流水线架构
9.2.1Verilog实现
9.2.2资源和性能
第10章 复位电路
10.1异步复位与同步复位
10.1.1完全异步复位的问题
10.1.2完全同步复位
10.1.3异步置位,同步撤销
10.2混合复位类型
10.2.1不可复位的触发器
10.2.2内部生成的复位
10.3多时钟域
10.4要点总结
第11章 高级仿真
11.1测试平台架构
11.1.1测试平台组件
11.1.2测试平台流程
11.2系统激励
11.2.1MATLAB
11.2.2总线功能模型
11.3代码覆盖率
11.4门级仿真
11.5翻转覆盖率
11.6运行时陷阱
11.6.1时间精度
11.6.2毛刺抑制
11.6.3组合延迟建模
11.7要点总结
第12章 面向综合的编码
12.1决策树
12.1.1优先级与并行性
12.1.2完整条件
12.1.3多个控制分支
12.2陷阱
12.2.1阻塞与非阻塞
12.2.2for循环
12.2.3组合逻辑环
12.2.4推断锁存器
12.3设计组织
12.3.1分区
12.3.2参数化
12.4要点总结
第13章 设计示例:安全哈希算法
13.1SHA-1架构
13.2实现结果
第14章 综合优化
14.1速度与面积的权衡
14.2资源共享
14.3流水线操作、重定时和寄存器平衡
14.3.1复位对寄存器平衡的影响
14.3.2重新同步寄存器
14.4FSM编译
14.4.1移除不可达状态
14.5黑盒
14.6物理综合
14.6.1前向注释与后向注释
14.6.2基于图的物理综合
14.7要点总结
第15章 布图规划
15.1设计分区
15.2关键路径布图规划
15.3布图规划风险
15.4最佳布图规划
15.4.1数据路径
15.4.2高扇出
15.4.3器件结构
15.4.4可重用性
15.5降低功耗
15.6要点总结
第16章 布局和布线优化
16.1最优约束
16.2布局和布线之间的关系
16.3逻辑复制
16.4跨层次优化
16.5I/O寄存器
16.6打包因子
16.7映射逻辑到RAM
16.8寄存器排序
16.9布局种子
16.10引导式布局和布线
16.11要点总结
第17章 设计示例:微处理器
17.1SRC架构
17.2综合优化
17.2.1速度与面积
17.2.2流水线
17.2.3物理综合
17.3布图规划优化
17.
前言/序言
原书前言
在设计咨询行业中,我接触过无数的FPGA (现场可编程门阵列)设计、方法论和设计技术。无论我的客户是《财富》100强企业还是初创公司,他们都不可避免地会做一些正确的事情,也会犯许多错误。在接触了各个行业的多种设计之后,我开始从这些经验中总结出自己的技术库和方法库。在指导新的FPGA设计工程师时,我会基于这些经验给他们提出建议和推荐。到目前为止,在讨论FPGA设计具体实践方面,我总结的这些建议中的许多内容都已经被相关的白皮书和应用手册(appnotes) 所引用。本书的目的是将多年在不同公司和工程师团队中积累的经验,以及从特定技术的白皮书和应用手册中收集的大量智慧,浓缩成一本书,用于完善FPGA设计工程师的知识水平,并帮助他们成为高级FPGA设计工程师。
市面上关于FPGA设计的书籍有很多,但真正能解决问题的却寥寥无几。本书详细探讨了高级的应用主题,同时试图剔除不必要的理论、对未来技术的推测以及过时的技术细节。本书以简洁明了的格式编写,直接讨论了各个主题,不浪费读者的时间。书中许多章节都假定读者已掌握某些基础知识,为了简洁起见,对于涵盖背景信息和理论框架方面的内容,不进行详细的讨论。相反,本书深入探讨了在设计中遇到的相关问题。在某种程度上,本书可以弥补有限的行业经验和缺少经验丰富的导师指导的不足,并且希望能让读者少走一些弯路。正是这种高级且实用的方法使本书独具特色。
关于本书有一点需要注意,本书不会像小说那样从头到尾有连贯情节。对于一组彼此之间没有内在联系的高级主题,若要实现这种连贯性,就不得不加入大量冗余无关的内容。因此,为了组织本书,我按照典型的设计流程来安排各章节的顺序。本书的前几章讨论了架构、仿真、综合、布图规划等内容。这在本书开头提供的内容导图中有所体现。为了便于日后参考查阅,章节排列在导图中相关模块的旁边。
本书其余章节中包含大量示例。为简洁起见,选用Verilog作为默认的硬件描述语言(HDL)进行描述,Xilinx作为默认的FPGA供应商,Synplicity作为默认的综合和布图规划工具。本书涵盖的大多数主题都能轻松映射到对应的VHDL上,并在Altera、Mentor Graphics等公司的工具上运行,但为了完整性而涵盖所有这些内容只会使重点变得模糊。即使本书的读者使用的是其他技术,本书仍能发挥其价值。
Steve Kilts
美国明尼苏达州明尼阿波利斯市