具体描述
本书用简洁的语言向读者展示了什么是fpga、fpga如何工作、如何对fpga编程以及fpga设计中遇到的各种概念、器件和工具,如传统的基于hdl/rtl的仿真和逻辑综合、最新的纯c/c++设计捕获和综合技术以及基于dsp的设计流程。另外,本书还涉及大量丰富的、工程师所需的技术细节。
本书适用于使用fpga进行设计的工程师、进行嵌入式应用任务开发的软件工程师以及高等院校电气工程专业的师生。
作者简介
Clive“Max”Maxfield世界半导体设计界知名专家,FPGA专业网站Programmable Logic DesignLine(www.pldesignline.com)主编。Maxfield先生拥有丰富的电路设计和开发经验,更以杰出的写作才能享誉全球。他曾经长期为EDN、EE Design等一流杂志和网站撰写专栏,并撰写了多部电子技术方面的畅销书。
目录信息
1.1 什么是fpga
1.2 fpga为什么令人感兴趣
1.3 fpga的用途
1.4 本书内容
1.5 本书不包括什么
1.6 读者对象
第2章 基本概念
2.1 fpga的核心
2.2 简单的可编程功能
2.3 熔丝连接技术
2.4 反熔丝技术
2.5 掩模编程器件
2.6 prom
2.7 基于eprom的技术
2.8 基于eeprom的技术
2.9 基于闪存的技术
2.10 基于sram的技术
2.11 小结
第3章 fpga的起源
3.1 相关的技术
3.2 晶体管
3.3 集成电路
3.4 sram/dram和微处理器
3.5 spld和cpld
3.5.1 prom
3.5.2 pla
3.5.3 pal和gal
3.5.4 其他可编程选择
3.5.5 cpld
3.5.6 abel、cupl、palasm、jedec等
3.6 专用集成电路(门阵列等)
3.6.1 全定制
3.6.2 micromatrix和micromosaic
3.6.3 门阵列
3.6.4 标准单元器件
3.6.5 结构化asic
3.7 fpga
3.7.1 fpga平台
3.7.2 fpga-asic 混合
3.7.3 fpga厂商如何设计芯片
第4章 fpga结构的比较
4.1 一点提醒
4.2 一些背景信息
4.3 反熔丝与sram与其他
4.3.1 基于sram的器件
4.3.2 以sram为基础器件的安全问题和解决方案
4.3.3 基于反熔丝的器件
4.3.4 基于eprom的器件
4.3.5 基于e2prom/flash的器件
4.3.6 flash-sram混合器件
4.3.7 小结
4.4 细粒、中等微粒和粗粒结构
4.5 mux与基于lut的逻辑块
4.5.1 基于mux的结构
4.5.2 基于lut的结构
4.5.3 基于mux还是基于lut
4.5.4 3、4、5或6输入lut
4.5.5 lut与分布ram与sr
4.6 clb、lab与slices
4.6.1 xlilinx 逻辑单元
4.6.2 altera逻辑部件
4.6.3 slicing和dicing
4.6.4 clb和lab
4.6.5 分布ram和移位寄存器
4.7 快速进位链
4.8 内嵌ram
4.9 内嵌乘法器、加法器、mac等
4.10 内嵌处理器核(硬的和软的)
4.10.1 硬微处理器核
4.10.2 软微处理器核
4.11 时钟树和时间管理器
4.11.1 时钟树
4.11.2 时钟管理器
4.12 通用i/o
4.12.1 可配置i/o标准
4.12.2 可配置i/o阻抗
4.12.3 核与i/o电压
4.13 吉比特传输
4.14 硬ip、软ip和固ip
4.15 系统门与实际的门
4.16 fpga年
第5章 fpga编程(配置)
5.1 引言
5.2 配置文件
5.3 配置单元
5.4 基于反熔丝的fpga
5.5 基于sram的fpga
5.5.1 迅速的过程欺骗了眼睛
5.5.2 对嵌入式(块)ram、分布ram编程
5.5.3 多编程链
5.5.4 器件的快速重新初始化
5.6 使用配置端口
5.6.1 fpga作为主设备串行下载
5.6.2 fpga作为主设备并行下载
5.6.3 fpga作为从设备并行下载
5.6.4 fpga作为从设备串行下载
5.7 使用jtag端口
5.8 使用嵌入式处理器
第6章 谁在参与游戏
6.1 引言
6.2 fpga和fpaa提供商
6.3 fpna 提供商
6.4 全线eda提供商
6.5 专业fpga和独立eda提供商
6.6 使用专门工具的fpga设计顾问
6.7 开源、免费和低成本的设计工具
第7章 fpga与asic设计风格
7.1 引言
7.2 编码风格
7.3 流水线和逻辑层次
7.3.1 什么是流水线
7.3.2 电子系统中的流水线
7.3.3 逻辑层次
7.4 异步设计实践
7.4.1 异步结构
7.4.2 组合回路
7.4.3 延迟链
7.5 时钟考虑
7.5.1 时钟域
7.5.2 时钟平衡
7.5.3 门控时钟与使能时钟
7.5.4 pll和时钟调节电路
7.5.5 跨时钟域数据传输的可靠性
7.6 寄存器和锁存器考虑
7.6.1 锁存器
7.6.2 具有“置位”和“复位”输入的触发器
7.6.3 全局复位和初始化条件
7.7 资源共享(时分复用)
7.7.1 使用它或者放弃它
7.7.2 其他内容
7.8 状态机编码
7.9 测试方法学
第8章 基于原理图的设计流程
8.1 往昔的时光
8.2 eda初期
8.2.1 前端工具,如逻辑仿真
8.2.2 后端工具如版图设计
8.2.3 cae + cad = eda
8.3 简单的原理图驱动asic设计流程
8.4 简单(早期)的原理图驱动fpga设计流程
8.4.1 映射
8.4.2 包装
8.4.3 布局和布线
8.4.4 时序分析和布局布线后仿真
8.5 平坦的原理图与分层次的原理图
8.5.1 沉闷的扁平原理图
8.5.2 分等级(基于模块)的原理图
8.6 今天的原理图驱动设计流程
第9章 基于hdl的设计流程
9.1 基于原理图流程的问题
9.2 基于hdl设计流程的出现
9.2.1 不同的抽象层次
9.2.2 早期基于hdl的asic设计流程
9.2.3 早期基于hdl的fpga设计流程
9.2.4 知道结构的fpga流程
9.2.5 逻辑综合与基于物理的综合
9.3 图形设计输入的生活
9.4 绝对过剩的hdl
9.4.1 verilog hdl
9.4.2 vhdl和vital
9.4.3 混合语言设计
9.4.4 udl/i
9.4.5 superlog 和 systemverilog
9.4.6 systemc
9.5 值得深思的事
9.5.1 担心,非常担心
9.5.2 串行与并行多路复用器
9.5.3 小心锁存器
9.5.4 聪明地使用常量
9.5.5 资源共用考虑
9.5.6 还有一些不可忽视的内容
第10章 fpga设计中的硅虚拟原型
10.1 什么是硅虚拟原型
10.2 基于asic的svp方法
10.2.1 门级svp(由快速综合产生)
10.2.2 门级svp(由基于增益的综合产生)
10.2.3 团簇svp
10.2.4 基于rtl的svp
10.3 基于fpga的svp
10.3.1 交互式操作
10.3.2 增量式布局布线
10.3.3 基于rtl的fpgasvp
第11章 基于c/c++等语言的设计流程
11.1 传统的hdl设计流程存在的问题
11.2 c对c++与并行执行对顺序执行
11.3 基于systemc的设计流程
11.3.1 什么是systemc以及它从哪里来
11.3.2 systemc 1.0
11.3.3 systemc 2.0
11.3.4 抽象级
11.3.5 基于systemc设计流程的可选方案
11.3.6 要么喜爱它,要么讨厌它
11.4 基于增强型c/c++的设计流程
11.4.1 什么是增强型c/c++
11.4.2 可选择的增强型c/c++设计流程
11.5 基于纯c/c++的设计流程
11.6 综合的不同抽象级别
11.7 混合语言设计和验证环境
第12章 基于dsp的设计流程
12.1 dsp简介
12.2 可选择的dsp实现方案
12.2.1 随便选一个器件,不过不要让我看到是哪种器件
12.2.2 系统级评估和算法验证
12.2.3 在dsp内核中运行的软件
12.2.4 专用dsp硬件
12.2.5 与dsp相关的嵌入式fpga资源
12.3 针对dsp的以fpga为中心的设计流程
12.3.1 专用领域语言
12.3.2 系统级设计和仿真环境
12.3.3 浮点与定点表示
12.3.4 系统/算法级向rtl的转换(手工转换)
12.3.5 系统/算法级向rtl的转换(自动生成)
12.3.6 系统/算法级向c/c++的转换
12.3.7 模块级ip环境
12.3.8 别忘了测试平台
12.4 dsp与vhdl/verilog混合设计环境
第13章 基于嵌入式处理器的设计流程
13.1 引言
13.2 硬核与软核
13.2.1 硬核
13.2.2 微处理器软核
13.3 将设计划分为硬件和软件部分
13.4 硬件和软件的世界观
13.5 利用fpga作为自身的开发环境
13.6 增强设计的可见性
13.7 其他一些混合验证方法
13.7.1 rtl(vhdl或verilog)
13.7.2 c/c++、systemc等
13.7.3 硬件模拟器中的物理芯片
13.7.4 指令集仿真器
13.8 一个相当巧妙的设计环境
第14章 模块化设计和增量设计
14.1 将设计作为一个大的模块进行处理
14.2 将设计划分为更小的模块
14.2.1 模块化设计
14.2.2 增量设计
14.2.3 存在的问题
14.3 总有其他办法
第15章 高速设计与其他pcb设计注意事项
15.1 开始之前
15.2 我们都很年轻,因此
15.3 变革的时代
15.4 其他注意事项
15.4.1 高速设计
15.4.2 信号完整性分析
15.4.3 spice与ibis
15.4.4 起动功率
15.4.5 使用内部末端阻抗
15.4.6 串行或并行处理数据
第16章 观察fpga的内部节点
16.1 缺乏可见性
16.2 使用多路复用技术
16.3 专用调试电路
16.4 虚拟逻辑分析仪
16.5 虚拟线路
16.5.1 问题描述
16.5.2 虚拟线路解决方案
第17章 ip
17.1 ip的来源
17.2 人工优化的ip
17.2.1 未加密的rtl级ip
17.2.2 加密的rtl级ip
17.2.3 未经布局布线的网表级ip
17.2.4 布局布线后的网表级ip
17.3 ip核生成器
17.4 综合资料
第18章 asic设计与fpga设计之间的移植
18.1 可供选择的设计方法
18.1.1 只做fpga设计
18.1.2 fpga之间的转换
18.1.3 fpga到asic的转换
18.1.4 asic到fpga的转换
第19章 仿真、综合、验证等设计工具
19.1 引言
19.2 仿真(基于周期、事件驱动等)
19.2.1 什么是事件驱动逻辑仿真器
19.2.2 事件驱动逻辑仿真器发展过程简述
19.2.3 逻辑值与不同逻辑值系统
19.2.4 混合语言仿真
19.2.5 其他延迟格式
19.2.6 基于周期的仿真器
19.2.7 选择世界上最好的逻辑仿真器
19.3 综合(逻辑/hdl综合与物理综合)
19.3.1 逻辑/hdl综合技术
19.3.2 物理综合技术
19.3.3 时序重调、复制及二次综合
19.3.4 选择世界上最好的综合工具
19.4 时序分析(静态与动态)
19.4.1 静态时序分析
19.4.2 统计静态时序分析
19.4.3 动态时序分析
19.5 一般验证
19.5.1 验证ip
19.5.2 验证环境和创建testbench
19.5.3 分析仿真结果
19.6 形式验证
19.6.1 形式验证的不同种类
19.6.2 形式验证究竟是什么
19.6.3 术语及定义
19.6.4 其他可选的断言/属性规范技术
19.6.5 静态形式验证和动态形式验证
19.6.6 各种语言的总结
19.7 混合设计
19.7.1 hdl语言到c语言的转换
19.7.2 代码覆盖率
19.7.3 性能分析
第20章 选择合适的器件
20.1 丰富的选择
20.2 要是有选型工具就好了
20.3 工艺
20.4 基本资源和封装
20.5 通用i/o接口
20.6 嵌入式乘法器、ram等
20.7 嵌入式处理器核
20.8 吉比特i/o能力
20.9 可用的ip
20.10 速度等级
20.11 轻松的注解
第21章 吉比特收发器
21.1 引言
21.2 差分对
21.3 多种多样的标准
21.4 8bit/10bit编码等
21.5 深入收发器模块内部
21.6 组合多个收发器
21.7 可配置资源
21.7.1 逗号检测
21.7.2 差分输出摆幅
21.7.3 片内末端电阻
21.7.4 预加重
21.7.5 均衡化
21.8 时钟恢复、抖动和眼图
21.8.1 时钟恢复
21.8.2 抖动和眼图
第22章 可重配置计算
22.1 可动态重配置逻辑
22.2 可动态重配置互连线
22.3 可重配置计算
第23章 现场可编程节点阵列
23.1 引言
23.2 算法评估
23.3 picochip公司的picoarray技术
23.3.1 一个理想的picoarray应用:无线基站
23.3.2 picoarray设计环境
23.4 quicksilver公司的acm技术
23.4.1 设计混合节点
23.4.2 系统控制器节点、输入输出节点及其他节点
23.4.3 空间与时间分割
23.4.4 在acm上创建和运行程序
23.4.5 还有更多的内容
23.5 这就是硅,但与我们知道的并不相同
第24章 独立的设计工具
24.1 引言
24.2 paracore architect
24.2.1 产生浮点处理功能模块
24.2.2 产生fft功能模块
24.2.3 基于网络的接口
24.3 confluence系统设计语言
24.3.1 一个简单的例子
24.3.2 还有更多的功能
24.3.3 免费评估版本
24.4 你是否具有这种工具
第25章 创建基于开源的设计流程
25.1 如何白手起家创办一家fpga设计工作室
25.2 开发平台:linux
25.3 验证环境
25.3.1 icarus verilog
25.3.2 dinotrace和gtkwave
25.3.3 covered代码覆盖率工具
25.3.4 verilator
25.3.5 python
25.4 形式验证
25.4.1 开源模型检查
25.4.2 基于开源的自动推断
25.4.3 真正的问题是什么
25.5 访问公共ip元件
25.5.1 opencores
25.5.2 ovl
25.6 综合与实现工具
25.7 fpga开发板
25.8 综合材料
第26章 fpga未来的发展
26.1 一种担忧
26.2 下一代结构和技术
26.2.1 十亿晶体管级器件
26.2.2 超快速i/o
26.2.3 超快速配置
26.2.4 更多的硬ip
26.2.5 模拟与混合信号器件
26.2.6 asmbl与其他结构
26.2.7 不同的结构粒度
26.2.8 asic结构中的嵌入式fpga内核
26.2.9 asic和fpga结构中嵌入fpna内核或者相反
26.2.10 基于mram的器件
26.3 设计工具
26.4 期待意外的发生
附录a 信号完整性简介
附录b 深亚微米延迟效应
附录c 线性移位寄存器
术语表
索引
· · · · · · (收起)
读后感
用户评价
关于量子计算原理的介绍,这本书的处理方式相当高明,它成功地在保持科学严谨性的同时,避开了令初学者望而却步的深奥物理背景。作者从信息论的角度切入,首先建立了经典比特与量子比特(Qubit)在信息容量上的本质区别,然后引入了叠加态和量子纠缠这两个核心概念。书中用大量的类比和简化模型,例如抛硬币或薛定棋先生的猫,来辅助理解这些反直觉的现象。最精彩的部分在于对Shor算法和Grover算法的深入剖析,它不仅仅是展示了量子电路图,更侧重于解释这些算法如何在量子力学特性下实现指数级或平方级的加速。对于如何设计和模拟量子门操作,书中的MATLAB/Python脚本示例非常清晰,允许读者立即动手进行实验验证。这本书为我打开了一扇通往未来计算范式的大门,它让我明白,未来的计算能力提升,可能不再是单纯依赖于晶体管的微缩,而在于对自然界基本规律的更深层次的利用。
作为一本专注于高级数据结构与算法的书籍,它给我的震撼在于其对“优雅”的追求。作者似乎对冗余的解释深恶痛绝,每一页都充满了密度极高的信息。它没有花费笔墨去重述基础排序和搜索,而是直奔主题,例如B树、红黑树在数据库索引中的实际应用,以及动态规划在复杂路径优化问题上的巧妙运用。书中对于图论算法的阐述尤其出色,特别是关于最大流/最小割问题,作者不仅给出了经典的Ford-Fulkerson方法,还详尽对比了Edmonds-Karp和Dinic算法的性能差异和适用场景。我尤其欣赏它在分析时间复杂度时的细致入微,不仅仅是O(n log n)这样的抽象描述,而是结合特定硬件架构下的实际缓存命中率来讨论算法的“真实”性能。这本书更像是一本武功秘籍,它没有教你如何跑起来,而是教你如何以最少的力气,完成最复杂的任务。
我最近入手了一本关于嵌入式系统编程的宝典,这本书简直是为我这种想深入理解底层硬件和软件交互的工程师量身定制的。它并没有过多地纠缠于那些光怪陆离的软件框架,而是扎扎实实地从最基础的处理器架构讲起,详尽地剖析了流水线、缓存一致性这些核心概念。特别是关于实时操作系统(RTOS)在资源受限环境下的调度算法,作者用非常直观的图表和实例代码,将那些晦涩难懂的理论变得触手可及。我特别欣赏它在描述中断处理和上下文切换时的严谨性,每一个时钟周期的延迟和开销都被精确地量化分析,这对于追求极致性能优化的项目来说,简直是如获至宝。书中对于调试技巧的介绍也极为实用,它没有停留在使用通用工具的表面,而是深入讲解了如何通过逻辑分析仪和示波器来捕捉和诊断那些只在特定时序条件下才会出现的“幽灵Bug”。这本书的阅读过程,与其说是学习,不如说是一场与高手并肩作战的实战演练,让人对整个嵌入式生态的理解提升到了一个新的维度。
我最近在研究高性能数值计算方面的资料,发现这本关于并行计算的书籍,其深度和广度都远超我的预期。它将重点放在了如何有效地利用现代多核CPU和GPU架构进行大规模数据处理。书中对OpenMP和CUDA编程模型的对比分析非常到位,不是简单地介绍API,而是深入探讨了内存访问模式、线程同步开销以及内核启动延迟对整体性能的影响。关于向量化指令集(如SIMD),作者用汇编级别的视角展示了编译器是如何将C++代码自动转化为高效的矢量操作,并提供了手工编写内在函数(Intrinsics)来突破编译器限制的实例。最让我受益的是关于矩阵乘法(GEMM)的阻塞算法优化,书中通过三层嵌套循环的巧妙重排,展示了如何最大限度地利用L1/L2缓存,将计算性能从几十GFLOPS提升到数百GFLOPS。这本书不是写给那些只想调用并行库的程序员,而是写给那些渴望榨干每一滴硬件性能的“性能黑客”的。
这本书在计算机图形学领域的讲解,可以说是独树一帜,它完全摒弃了传统教材中那种偏重理论推导的枯燥叙事方式。相反,它以“从零开始构建一个渲染引擎”为主线,将复杂的数学模型和几何变换巧妙地融入到实际的代码实现中。我尤其对其中关于光线追踪算法的优化部分印象深刻,作者没有直接给出最终的优化方案,而是引导读者逐步分析朴素算法的性能瓶颈,然后循序渐进地引入空间划分结构,如BVH树的构建与遍历,每一步的逻辑推进都像是精心设计的解谜游戏。书中大量的C++代码片段不仅展示了算法的实现,更体现了现代软件工程的最佳实践,例如资源管理和多线程并行渲染的策略。对于那些希望从“会用”图形库转变为“理解和创造”图形技术的读者来说,这本书提供了一条清晰且充满挑战的路径。读完后,我感觉自己不仅掌握了一套工具,更领悟了一种将抽象数学转化为视觉奇迹的能力。
入门好书
入门好书
对FPGA的起源发展描述最详细,作为软件工程师很多原来模糊的概念都说清楚了。
不错得书,在硬件设计领域特别是前端在涉及到fpga开发方面,这本书解开了我很多疑惑
感觉是本比较工程的书,不少实际经验的东西,读读还是不错的。 不过对译者的中文功力实不敢恭维。