 
			 
				FPGA自学笔记—设计与验证
这本书打破了重实验现象,轻仿真验证的学习误区,书中每一个实验,无论是zui基础的点亮 LED灯,还是综合的多模块数字系统设计,以及复杂的 SDRAM 控制器设计,都严格按照“设计+验证”的流程进行。 同时,本书由浅入深,全流程的讲解;首先,通过知识背景的介绍,讲解设计中需要注意的问题;接着,一步一步地根据设计需求完成设计中的每一个部分;然后,编写Testbench文件,使用 ModelSim 软件对设计进行仿真验证;zui后,仿真验证通过后,再配置到 FPGA 器件中运行,如果板级运行不正确,则再回到仿真波形中查找可能的错误原因,在必要时使用板级验证工具如Signaltap Ⅱ进行板级调试。本书对于不同水平的技术人员,都是一本不错的自学和参考用书。
FPGA自学笔记—设计与验证
本书以Intel CycloneⅣ E系列FPGA 为例,系统介绍了FPGA 的硬件结构、电路设计以及逻辑设计和验证流程。书中以若干个具有工程实用意义的案例为背景,详细介绍了FPGA 数字逻辑设计中常见的功能模块设计思路、FPGA 片上资源的使用方法、开发软件中各种调试工具的使用,包括SignaltapⅡ、In System Sources and Probes Editor、In System Memory Content Editor。本书最后通过若干个综合性实例,讲解了复杂数字系统的设计方法和验证思路。作为实用型FPGA 教程,本书的每一个实验都有完整的仿真和验证过程,即强调了仿真验证在FPGA设计中的重要作用。
本书可作为工程应用类、电子信息类专业本科生以及相关专业专科生的EDA 基础类课程的教材;也可作为FPGA自学人员,以及从事FPGA开发的工程技术人员的培训教材和参考用书。
梅雪松,网名“小梅哥”,拥有多年电子设计经验,擅长知识的总结和传播,有《小梅哥和你一起深入学习FPGA》、《小梅哥FPGA学习笔记》两个系列网络博文;并推出了手把手式视频教程《FPGA设计思想与验证方法视频教程》,该教程在各大视频点击平台备受好评,网友称其为学习FPGA基础与提高教学视频的不二之选。同时,开设FPGA实地培训班,正式开始网络和实地FPGA培训,培训课程以其系统的知识讲解和生动的实例分析,得到了学员的一致肯定。
袁玉卓,山东大学博士,集成电路设计专业,知识面广,专业技术背景深厚。长期从事于FPGA技术的分享和交流,拥有丰富的项目科研和实践经验,
曾凯锋,杭州电子科技大学硕士,主要研究方向为FPGA与嵌入式系统设计,长期活跃于FPGA技术交流群,著有多篇FPGA设计和验证文章。
第1章 从头认识FPGA ……………………………………………………………… 1
1.1 CycloneⅣ EFPGA原理与应用 ……………………………………………… 1
1.1.1 CycloneⅣ E概述 ………………………………………………………… 1
1.1.2 CycloneⅣ E扩展资源介绍 ……………………………………………… 4
1.1.3 重点电路设计 ……………………………………………………………… 5
1.2 IntelFPGA开发环境 ………………………………………………………… 17
1.2.1 Quartus软件的发展史 …………………………………………………… 18
1.2.2 QuartusPrime的下载 …………………………………………………… 18
1.2.3 QuartusPrime的安装 …………………………………………………… 21
1.2.4 QuartusPrime软件的基本使用 ………………………………………… 27
第2章 FPGA开发软硬件平台介绍 ………………………………………………… 39
2.1 AC620开发套件………………………………………………………………… 39
2.1.1 AC620开发板的功能特点 ………………………………………………… 39
2.1.2 AC620开发板的使用 ……………………………………………………… 43
2.2 IntelFPGA开发流程 ………………………………………………………… 57
2.2.1 建立工程 …………………………………………………………………… 57
2.2.2 设计输入 …………………………………………………………………… 61
2.2.3 分析和综合 ………………………………………………………………… 61
2.2.4 功能仿真 …………………………………………………………………… 62
2.2.5 综合与布局布线 …………………………………………………………… 66
2.2.6 时序仿真 …………………………………………………………………… 66
2.2.7 I/O分配以及生成配置文件 ……………………………………………… 67
2.2.8 配置FPGA下载…………………………………………………………… 67
2.3 FPGA设计的烧写与投产 ……………………………………………………… 68
2.3.1 FPGA固件存储方案 ……………………………………………………… 68
2.3.2 CycloneⅣ EFPGA固件烧写方案 ……………………………………… 69
2.3.3 烧写文件JIC的产生 ……………………………………………………… 70
第3章 FPGA基本数字逻辑设计 …………………………………………………… 74
3.1 组合逻辑电路设计———译码器 ………………………………………………… 74
3.1.1 译_码器工作原理 …………………………………………………………… 74
3.1.2 译码器Verilog实现 ……………………………………………………… 75
3.1.3 激励创建及仿真测试 ……………………………………………………… 76
3.2 时序逻辑电路设计———计数器 ………………………………………………… 79
3.2.1 计数器工作原理 …………………………………………………………… 80
3.2.2 计数器Verilog实现 ……………………………………………………… 81
3.2.3 仿真及板级验证 …………………………………………………………… 82
3.3 IP核应用———计数器 ………………………………………………………… 85
3.3.1 IP核创建流程 ……………………………………………………………… 85
3.3.2 仿真及板级验证 …………………………………………………………… 89
3.3.3 已生成IP核的参数修改 ………………………………………………… 90
3.3.4 QuartusⅡ中IP核参数的修改…………………………………………… 94
3.4 BCD计数器设计与验证 ……………………………………………………… 95
3.4.1 BCD码原理 ………………………………………………………………… 95
3.4.2 BCD计数器的 Verilog实现 ……………………………………………… 96
3.4.3 激励创建及仿真测试 ……………………………………………………… 97
3.4.4 级联BCD计数器设计与仿真 …………………………………………… 98
3.5 阻塞赋值与非阻塞赋值原理分析 …………………………………………… 103
3.5.1 不同赋值方式的对比与实现 …………………………………………… 103
3.5.2 不同赋值方式的仿真及测试 …………………………………………… 105
3.6 状态机设计实例 ……………………………………………………………… 108
3.6.1 状态机工作原理 ………………………………………………………… 108
3.6.2 字符串检测状态机实现 ………………………………………………… 110
3.6.3 激励创建及仿真测试 …………………………………………………… 113
3.7 独立按键消抖设计与验证 …………………………………………………… 115
3.7.1 按键的物理结构及电路设计 …………………………………………… 115
3.7.2 硬件电路实现按键消抖 ………………………………………………… 116
3.7.3 状态机实现按键消抖 …………………………………………………… 118
3.7.4 激励创建及仿真测试 …………………………………………………… 124
3.7.5 任务及随机函数的使用 ………………………………………………… 125
3.8 模块化设计基础———加减法计数器 ………………………………………… 129
3.8.1 模块功能划分 …………………………………………………………… 129
3.8.2 模块功能设计 …………………………………………………………… 129
3.8.3 仿真及板级验证 ………………………………………………………… 132
3.9 8位7段数码管驱动设计与验证 …………………………………………… 134
3.9.1 数码管驱动原理 ………………………………………………………… 134
3.9.2 三线制数码管电路设计 ………………………………………………… 137
3.9.3 数码管动态扫描驱动设计 ……………………………………………… 138
3.9.4 ISSP生成及使用 ………………………………………………………… 145
3.9.5 板级调试与验证 ………………………………………………………… 149
3.9.6 QuartusⅡ中ISSP的使用方法 ………………………………………… 152
3.10 串口发送模块设计与验证 …………………………………………………… 153
3.10.1 异步串行通信原理及电路设计 ………………………………………… 154
3.10.2 UART异步串行通信发送模块设计与实现…………………………… 157
3.10.3 激励创建及仿真测试 …………………………………………………… 162
3.10.4 按键控制串口发送设计 ………………………………………………… 163
3.11 串口接收模块的设计与验证 ………………………………………………… 165
3.11.1 串口接收原理分析 ……………………………………………………… 166
3.11.2 UART异步串行通信接收模块设计与实现…………………………… 167
3.11.3 仿真及板级验证 ………………………………………………………… 171
第4章 FPGA片上专用资源使用 …………………………………………………… 176
4.1 嵌入式RAM 的使用———双端口RAM …………………………………… 176
4.1.1 CycloneⅣ体系结构及嵌入式存储器原理 ……………………………… 176
4.1.2 IP核使用———dpram …………………………………………………… 178
4.1.3 激励创建及仿真测试 …………………………………………………… 182
4.2 搭建串口收发与双口RAM 存储的简易应用系统 ………………………… 185
4.2.1 系统模块功能划分及接口设计 ………………………………………… 185
4.2.2 顶层文件设计 …………………………………………………………… 185
4.2.3 控制模块设计 …………………………………………………………… 186
4.2.4 仿真及板级验证 ………………………………………………………… 187
4.3 嵌入式RAM 的使用———ROM ……………………………………………… 190
4.3.1 IP核使用———ROM ……………………………………………………… 191
4.3.2 激励创建及仿真测试 …………………………………………………… 193
4.3.3 SignaTapⅡ使用及板级验证 …………………………………………… 195
4.4 嵌入式块RAM 的使用———FIFO …………………………………………… 201
4.4.1 FIFO的相关知识 ………………………………………………………… 202
4.4.2 IP核的使用———FIFO…………………………………………………… 204
4.5 PLL锁相环介绍与简单应用 ………………………………………………… 213
4.5.1 PLL相关知识 …………………………………………………………… 213
4.5.2 IP核使用———PLL ……………………………………………………… 215
4.5.3 仿真及板级验证 ………………………………………………………… 219
第5章 FPGA进阶数字逻辑设计 …………………………………………………… 223
5.1 无源蜂鸣器驱动设计与验证 ………………………………………………… 223
5.1.1 无源蜂鸣器电路设计 …………………………………………………… 223
5.1.2 无源蜂鸣器驱动原理 …………………………………………………… 224
5.1.3 PWM 发生器模块设计…………………………………………………… 225
5.1.4 仿真及板级验证 ………………………………………………………… 227
5.2 线性序列机与串行接口DAC驱动设计与验证……………………………… 232
5.2.1 DAC芯片概述及电路设计 ……………………………………………… 232
5.2.2 TLV5618型DAC芯片输出电压计算原理 …………………………… 234
5.2.3 TLV5618型DAC接口时序 …………………………………………… 235
5.2.4 线性序列机设计思想与接口时序设计 ………………………………… 236
5.2.5 基于线性序列机的DAC驱动设计 ……………………………………… 238
5.2.6 仿真及板级测试 ………………………………………………………… 241
5.3 线性序列机与串行接口ADC驱动设计与验证……………………………… 243
5.3.1 ADC芯片概述及电路设计 ……………………………………………… 244
5.3.2 ADC128S022型ADC接口时序 ………………………………………… 245
5.3.3 ADC128S022接口时序设计 …………………………………………… 247
5.3.4 基于线性序列机的ADC驱动设计 ……………………………………… 249
5.3.5 仿真及板级测试 ………………………………………………………… 252
5.4 HT6221红外遥控解码设计与验证 ………………………………………… 257
5.4.1 红外遥控系统组成及电路设计 ………………………………………… 257
5.4.2 红外遥控协议分析(NEC协议)………………………………………… 258
5.4.3 红外解码模块设计 ……………………………………………………… 260
5.4.4 仿真及板级验证 ………………………………………………………… 265
5.5 TFT显示屏驱动设计与验证 ………………………………………………… 267
5.5.1 TFT触摸屏驱动电路设计 ……………………………………………… 268
5.5.2 RGB接口TFT屏扫描方式……………………………………………… 270
5.5.3 RGB接口TFT屏时序分析……………………………………………… 271
5.5.4 RGB接口TFT屏驱动设计……………………………………………… 272
5.5.5 仿真及板级验证 ………………………………………………………… 275
第6章 FPGA综合数字系统设计 …………………………………………………… 280
6.1 八通道数字电压表 …………………………………………………………… 280
6.1.1 数字电压表功能划分 …………………………………………………… 280
6.1.2 按键输入模块 …………………………………………………………… 281
6.1.3 通道选择模块 …………………………………………………………… 281
6.1.4 ADC控制模块———ADC128S022 ……………………………………… 282
6.1.5 数据预处理模块 ………………………………………………………… 282
6.1.6 码制转换模块 …………………………………………………………… 284
6.1.7 数码管驱动模块 ………………………………………………………… 287
6.1.8 顶层设计 ………………………………………………………………… 288
6.1.9 基于查找表的数据电压换算 …………………………………………… 289
6.2 双通道幅频相可调DDS信号发生器 ………………………………………… 292
6.2.1 DDS原理与实现 ………………………………………………………… 293
6.2.2 数/模转换器(DAC)驱动模块设计 ……………………………………… 299
6.2.3 串口命令接收与解析 ……………………………………………………303
6.2.4 信号发生器顶层设计 …………………………………………………… 315
6.2.5 系统测试 ………………………………………………………………… 316
6.3 串口读/写EEPROM ………………………………………………………… 317
6.3.1 I2C基本概念 ……………………………………………………………… 317
6.3.2 I2C协议时序介绍 ………………………………………………………… 318
6.3.3 I2C器件地址 ……………………………………………………………… 319
6.3.4 I2C存储器地址 …………………………………………………………… 320
6.3.5 I2C写时序 ………………………………………………………………… 321
6.3.6 I2C单字节读时序 ………………………………………………………… 323
6.3.7 I2C读/写器件控制器设计 ……………………………………………… 325
6.3.8 I2C控制器仿真验证 ……………………………………………………… 335
6.3.9 串口读/写EEPROM 系统设计 ………………………………………… 341
6.3.10 串口读/写 EEPROM 仿真验证 ……………………………………… 351
6.3.11 串口读/写EEPROM 板级验证 ……………………………………… 355
6.4 基于串口猎人的虚拟示波器 ………………………………………………… 359
6.4.1 系统结构 ………………………………………………………………… 359
6.4.2 模块详解 ………………………………………………………………… 361
6.4.3 仿真验证 ………………………………………………………………… 375
6.4.4 基于串口猎人的板级验证 ……………………………………………… 385
6.5 SDRAM 控制器设计 ………………………………………………………… 391
6.5.1 SDRAM 基本概念………………………………………………………… 391
6.5.2 SDRAM 存取原理………………………………………………………… 392
6.5.3 SDRAM 器件引脚说明…………………………………………………… 394
6.5.4 SDRAM 特性 …………………………………………………………… 395
6.5.5 SDRAM 操作命令介绍…………………………………………………… 396
6.5.6 SDRAM 操作时序………………………………………………………… 403
6.5.7 SDRAM 控制器设计……………………………………………………… 418
6.5.8 SDRAM 控制器仿真验证………………………………………………… 425
6.5.9 SDRAM 控制器设计优化………………………………………………… 430
6.5.10 优化控制器仿真验证 ……………………………………………………436
6.6 串口传图帧缓存设计 ………………………………………………………… 440
6.6.1 系统结构 ………………………………………………………………… 440
6.6.2 仿真验证 ………………………………………………………………… 446
6.6.3 板级验证 ………………………………………………………………… 450
参考文献………………………………………………………………………………… 454
随着现场可编程逻辑器件结构和工艺的发展,FPGA的性能和容量逐年提升,同时功耗和价格持续降低。近年来,已经有越来越多的企业考虑并在其实际项目或产品中加入FPGA,或者直接以FPGA作为核心控制单元。FPGA作为一种硬件逻辑器件,其开发思路与常规的MCU或处理器有较大的差别,如何正确地学习并掌握FPGA的开发方法,对于高效地使用FPGA至关重要。
笔者曾自学FPGA近两年,但始终不得要领,后经专业人士指点,方才领悟FPGA之所以难学,是难在没有掌握正确的学习和开发方法。一旦掌握了正确的学习方法,一切就变得轻松了。在FPGA的学习和开发中最为关键的一点就是验证。
作为一本入门级的FPGA技术教材,本书主要针对刚接触FPGA的读者。这一类读者,往往都有一定的MCU开发经验,也正是这一点,让很多自学FPGA的人往往一开始就按照MCU开发的惯性思维来对待FPGA,结果就是耗费了几倍的精力,却没有太大的进步。所以本书在编排时,重点关注FPGA的开发流程。每个实验,无论是最基础的点亮LED灯,还是综合的多模块数字系统设计,以及复杂的SDRAM控制器设计,都严格按照“设计+验证”的流程进行。首先,通过知识背景的介绍,讲解设计中需要注意的问题;接着,一步一步地根据设计需求完成设计中的每一个部分;然后,编写Testbench文件,使用ModelSim软件对设计进行仿真验证;最后,仿真验证通过后,再配置到FPGA器件中运行,如果板级运行不正确,则再回到仿真波形中查找可能的错误原因,在必要时使用板级验证工具如SignaltapⅡ进行板级调试。
本书按照循序渐进的过程,分成6章,具体内容如下:
第1章,主要介绍了FPGA的硬件架构,软件开发工具的安装与基本使用。
第2章,介绍了本书所依靠的FPGA学习平台AC620开发板的相关特性,并通过一个实例介绍了FPGA的开发流程。
第3章,介绍了基于FPGA的一些基本数字逻辑电路设计,这些设计所依靠的背景都是大家所熟悉的一些内容,因此较容易接受,方便大家能够轻松入门。
第4章,介绍了CycloneⅣEFPGA上专用硬件资源PLL、嵌入式块RAM的使用;同时,本章通过这些硬件资源的使用,介绍了在QuartusPrime软件中调用IP进行设计的方法。
第5章,为进阶数字系统设计,主要介绍了项目中比较实用的一些外设的驱动。
第6章,为综合数字系统设计,通过若干个具有一定难度的综合实例,展示了FPGA复杂系统开发的常见思路和实现方法。
本书配套的相关视频及技术文件可在http://www.corecouurse.cn网站中观看和下载。
第二段评价: 自从收到《FPGA自学笔记—设计与验证》这本书,我迫不及待地开始探索它的内容。尽管我还没有深入到每一个技术细节,但整体的编排和语言风格已经让我感受到一股扑面而来的真诚与实用。作者显然是一位经验丰富的 FPGA 工程师,他用一种非常亲切的口吻,仿佛在和一位老朋友分享他的学习心得和实践经验。书中很多关于设计思路和排查问题的技巧,并不是教科书上常见的那些生硬的定义,而是经过实战检验的智慧结晶。我特别喜欢这种"笔记"式的叙述方式,感觉就像在偷看一位高手的备忘录,里面充满了各种“小窍门”和“要注意的地方”。我之前在调试一些复杂的逻辑时,经常会陷入死胡同,花大量时间却找不到问题根源,现在我期待这本书能提供一些系统性的方法论,教我如何用更高效的思维去分析和解决这些挑战。而且,"验证"这部分的内容,我希望它能超越简单的功能性测试,能涵盖性能验证、时序分析等方面,让我理解如何写出能够真正反映硬件行为的测试代码,从而快速定位并修复潜在的bug。
评分第一段评价: 这本书就像我 FPGA 之旅的一盏明灯,虽然我还没有开始翻阅,但光是这个书名《FPGA自学笔记—设计与验证》就足以让我充满期待。我之前尝试过几本 FPGA 的入门书籍,但总感觉它们要么过于理论化,要么代码示例晦涩难懂,让我望而却步。这次抱着试试看的心态,被这个名字深深吸引。我想,"自学笔记"这个词就意味着它会更接地气,更贴近初学者的实际困惑,而不是枯燥的理论堆砌。而"设计与验证"更是 FPGA 开发的核心,涵盖了从概念到实现的完整流程,这正是我目前最需要掌握的。我希望这本书能够提供清晰的思路,一步一步地引导我完成一个完整的 FPGA 项目,从需求分析、逻辑设计、硬件实现,到最后的仿真验证,每一个环节都能有详实的操作指导和代码示例。我尤其看重"验证"部分,因为这往往是初学者容易忽略但又至关重要的一环。如果这本书能让我理解如何有效地编写测试平台,如何覆盖各种测试场景,那将是对我能力的一次巨大提升。这本书不仅仅是一本书,更像是一个虚拟的导师,陪伴我克服学习路上的每一个难关。
评分第三段评价: 这本书的封面设计就透着一股专业与严谨,书名《FPGA自学笔记—设计与验证》也精准地概括了其核心内容。我目前正处于FPGA学习的瓶颈期,很多理论知识已经掌握,但实际应用起来却显得生疏。我期望这本书能提供一些真实的项目案例,通过实际操作来巩固和深化我对FPGA设计的理解。例如,书中是否会包含一些经典的FPGA应用,如数码管显示、按键输入处理、简单的通信协议接口等?这些小项目不仅能帮助我熟悉开发流程,还能让我体会到理论知识在实践中的落地。而"验证"部分,我希望它能深入讲解如何利用仿真工具进行高效的验证,包括如何编写可读性强、可维护性好的测试激励,如何使用覆盖率工具来评估测试的有效性,以及如何进行跨时钟域信号的处理和验证。我深知,一个良好的验证环境和策略,对于保证FPGA设计的质量至关重要,而这恰恰是我目前最欠缺的。这本书的出现,无疑为我提供了一个宝贵的学习资源,让我看到了突破瓶颈的希望。
评分第四段评价: 我是一名刚刚接触FPGA不久的学生,之前尝试过一些在线教程和零散的资料,但总感觉缺乏系统性。《FPGA自学笔记—设计与验证》这本书的到来,就像在我迷茫的航线上点亮了一盏灯塔。我特别看重"自学笔记"这个定位,它暗示着这本书会以一种更贴近个人学习体验的方式来讲解知识,而不是那种高高在上、难以企及的理论讲义。我想象中,这本书会从最基础的概念讲起,一步一步地引导我熟悉FPGA的开发环境,掌握常用的HDL语言(Verilog或VHDL),并学会如何将设计思路转化为实际的代码。更重要的是,"设计与验证"的组合,让我看到了一个完整的学习闭环。我希望书中能够详细介绍如何从需求出发,进行模块化设计,并提供各种调试技巧,帮助我快速定位和解决设计中的错误。而验证部分,我期待能够学习到如何编写有效的测试激励,如何利用仿真工具进行全面的功能验证,以及如何对时序进行初步的分析,这些都是我目前最迫切想掌握的技能,我相信这本书能够为我打下坚实的基础。
评分第五段评价: 拿到《FPGA自学笔记—设计与验证》这本书,我的内心充满了期待。虽然我尚未完全沉浸其中,但从书名和初步浏览来看,它无疑是一本极具价值的学习资料。我一直认为,FPGA的学习路径,尤其是对于自学者而言,最关键的在于“实践出真知”。而“设计与验证”这两个词,恰恰是FPGA开发中最核心、也最考验实际操作能力的部分。我希望这本书能通过详实的代码示例,生动地阐述各种设计模式和验证策略。想象一下,书中可能包含了如何实现一些经典的数字逻辑模块,比如状态机、FIFO、AXI总线接口等等,并且为每一个模块都提供了相应的验证环境和测试用例,让我能够通过亲手实践,深刻理解设计的原理和验证的重要性。我特别期待书中在验证方法论上能有所着重,例如如何构建一个易于扩展的测试平台,如何编写覆盖率高的测试激励,以及如何利用仿真结果来指导设计优化。这本书不仅是一份技术指南,更像是一位经验丰富的引路人,引领我在FPGA的广阔天地中,稳健前行,掌握核心技能。
评分好
评分学习了,适合初学者的,
评分正在看,很不错的一本书。
评分书印的很清楚,质量不错
评分书是真的不错。。。。。
评分好,不错
评分好好学习,希望有点用!
评分学习如逆水行舟 不进则退
评分不错,小梅的书,买来看看。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有