描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302666950
资深硬件工程师近10年FPGA项目开发经验的总结。
理论结合大量实例,详解Xilinx FPGA的设计方法与技巧。
提供练习题、教学课件(PPT),方便学习与教学。
内容丰富:首先从FPGA的理论知识入手,详细介绍FPGA芯片设计的背景、常用专业术语、硬件描述语言的基本语法;然后介绍FPGA的验证方法和知识产权应用;最后详细介绍低速接口和高速接口设计实例,并总结FPGA的开发技巧。
实例丰富:讲解中穿插多个典型实例,带领读者上手实践,并加深对FPGA设计与验证技术的理解,进而快速掌握FPGA的设计流程,上手开发实际产品和项目。
图文并茂:讲解中给出大量的示意图,帮助读者高效、直观地理解FPGA的各种概念和实现原理。
注重技巧:总结大量的开发技巧,让读者少走很多弯路,从而加速新产品的上市,甚至提前交付项目。
源码实用:本书涉及的实例源码大多来源于实际项目,其注释丰富,易于阅读,读者稍加修改即可直接用于自己的项目。
提供习题:每章都提供习题,帮助读者巩固和提高所学的知识。
配教学PPT:提供配套教学PPT,方便相关院校的授课教师教学时使用。
《Xilinx FPGA工程师成长手记》以Xilinx公司的FPGA为开发平台,以Verilog HDL、System Verilog、VHDL和Vivado为开发工具,详细介绍FPGA常用接口的实现方法,并通过大量实例,分析FPGA实现过程中的具体技术细节。《Xilinx FPGA工程师成长手记》提供相关实例的源码文件和配套教学PPT,以方便读者学习和相关高校教学。
《Xilinx FPGA工程师成长手记》共10章,分为2篇。第1篇Xilinx FPGA基础知识,包括FPGA概述、FPGA的基本理论、FPGA的硬件描述语言和FPGA功能验证;第2篇Xilinx FPGA逻辑设计,包括FPGA的知识产权、FPGA代码封装、FPGA低速接口设计、FPGA高速接口设计、FPGA硬件调试和FPGA开发技巧。
《Xilinx FPGA工程师成长手记》内容充实,实例丰富,非常适合FPGA开发和接口设计领域的入门读者阅读,也适合硬件设计领域的工程师和科研人员阅读,还适合作为相关院校电子信息等专业本科生和研究生的教材。
第1篇 Xilinx FPGA基础知识
第1章 FPGA概述 2
1.1 什么是FPGA 2
1.2 FPGA芯片厂商 2
1.2.1 国外FPGA厂商简介 2
1.2.2 国内FPGA厂商简介 3
1.3 FPGA的应用领域 4
1.3.1 数据采集领域 4
1.3.2 逻辑接口领域 5
1.3.3 数字信号处理领域 5
1.3.4 其他领域 5
1.4 FPGA的设计流程 5
1.4.1 需求分析 6
1.4.2 设计输入 6
1.4.3 功能仿真 7
1.4.4 逻辑综合 7
1.4.5 布局布线 7
1.4.6 芯片编程与调试 8
1.4.7 文档和代码管理 8
1.5 FPGA的人才需求 9
1.6 FPGA工程师的基本技能 10
1.7 本章习题 11
第2章 FPGA的基本理论 12
2.1 FPGA时钟 12
2.1.1 时钟模型 12
2.1.2 时钟抖动 12
2.1.3 时钟偏斜 13
2.1.4 时钟设计 13
2.2 FPGA复位 14
2.2.1 复位的概念 14
2.2.2 复位方式 14
2.2.3 复位设计 15
2.3 FPGA时序 15
2.3.1 时序的概念 15
2.3.2 建立时间 16
2.3.3 保持时间 17
2.3.4 亚稳态 17
2.4 FPGA异步时钟域 17
2.4.1 异步时钟域的概念 17
2.4.2 异步时钟域数据转换策略 18
2.5 FPGA约束 23
2.6 FPGA的专业术语 24
2.7 本章习题 25
第3章 FPGA的硬件描述语言 26
3.1 硬件描述语言概述 26
3.1.1 硬件描述语言简介 26
3.1.2 硬件描述语言的类型 27
3.2 VHDL语法基础 27
3.2.1 VHDL模块结构 27
3.2.2 VHDL的基本语法 29
3.2.3 VHDL模块调用 29
3.3 Verilog HDL语法基础 30
3.3.1 Verilog HDL模块结构 30
3.3.2 Verilog HDL的基本语法 31
3.3.3 Verilog HDL模块调用 36
3.4 System Verilog语法基础 37
3.4.1 System Verilog模块结构 37
3.4.2 System Verilog的基本语法 38
3.4.3 System Verilog模块调用 38
3.5 FPGA设计规范及编程技巧 39
3.5.1 FPGA设计规范 39
3.5.2 FPGA设计注释 41
3.5.3 FPGA设计技巧 41
3.6 本章习题 42
第4章 FPGA功能验证 43
4.1 验证概述 43
4.1.1 验证定义 43
4.1.2 验证计划 44
4.1.3 验证方法 44
4.1.4 验证的作用 44
4.2 编写仿真激励 45
4.2.1 编写测试激励的流程 45
4.2.2 编写时钟测试激励 45
4.2.3 编写复位测试激励 47
4.3 系统函数 48
4.3.1 常用的系统函数 48
4.3.2 编写测试激励实例 49
4.4 验证软件 51
4.4.1 仿真软件 51
4.4.2 仿真过程 51
4.4.3 仿真实例 52
4.5 验证技巧 61
4.5.1 变量初始化 61
4.5.2 模块封装 62
4.5.3 回环测试 63
4.5.4 计数器 63
4.5.5 读文件和写文件 64
4.5.6 避免出现蓝线 65
4.6 本章习题 66
第2篇 Xilinx FPGA逻辑设计
第5章 FPGA的知识产权 68
5.1 MMCM IP核设计 68
5.1.1 MMCM简介 68
5.1.2 MMCM IP核定制 68
5.1.3 MMCM IP核仿真 73
5.2 FIFO IP核设计 75
5.2.1 FIFO简介 75
5.2.2 FIFO IP核定制 75
5.2.3 FIFO IP核仿真 80
5.3 RAM IP核设计 83
5.3.1 RAM简介 83
5.3.2 RAM IP核定制 83
5.3.3 RAM IP核仿真 88
5.4 Counter IP核设计 91
5.4.1 Counter简介 91
5.4.2 Counter IP核定制 91
5.4.3 Counter IP核仿真 94
5.5 本章习题 96
第6章 FPGA代码封装 97
6.1 IP核封装 97
6.1.1 IP核简介 97
6.1.2 自定义IP核封装 98
6.1.3 自定义IP核验证 107
6.2 网表封装 108
6.2.1 网表简介 108
6.2.2 自定义网表封装 108
6.2.3 自定义网表验证 116
6.3 本章习题 121
第7章 FPGA低速接口设计 122
7.1 SPI逻辑设计 122
7.1.1 SPI总线概述 122
7.1.2 SPI实例设计 123
7.1.3 SPI实例验证 126
7.1.4 SPI硬件调试 127
7.2 UART逻辑设计 128
7.2.1 UART总线概述 128
7.2.2 UART实例设计 129
7.2.3 UART实例验证 133
7.2.4 UART硬件调试 135
7.3 IIC逻辑设计 136
7.3.1 IIC总线概述 136
7.3.2 IIC实例设计 139
7.3.3 IIC仿真验证 143
7.3.4 IIC硬件调试 144
7.4 CAN逻辑设计 145
7.4.1 CAN总线概述 145
7.4.2 CAN实例设计 147
7.4.3 CAN逻辑验证 151
7.4.4 CAN硬件调试 153
7.5 本章习题 155
第8章 FPGA高速接口设计 156
8.1 DDR3接口设计 156
8.1.1 存储器简介 156
8.1.2 DDR3 IP核简介 158
8.1.3 DDR3读写功能设计 160
8.1.4 DDR3读写功能逻辑仿真 172
8.1.5 DDR3读写功能硬件调试 174
8.2 PCIE接口设计 182
8.2.1 PCIE简介 183
8.2.2 PCIE IP核简介 184
8.2.3 PCIE通信功能设计 185
8.2.4 PCIE通信功能仿真 191
8.2.5 PCIE接口硬件调试 195
8.3 本章习题 201
第9章 FPGA硬件调试 202
9.1 FPGA硬件调试概述 202
9.1.1 FPGA硬件调试简介 202
9.1.2 FPGA调试IP核 202
9.2 闪烁灯硬件调试 203
9.2.1 闪烁灯系统设计 203
9.2.2 闪烁灯程序设计 204
9.2.3 闪烁灯硬件调试 205
9.3 本章习题 219
第10章 FPGA开发技巧 220
10.1 FPGA时钟管理 220
10.1.1 使用时钟IP核设计时钟 220
10.1.2 使用硬件描述语言设计时钟 222
10.1.3 使用时钟原语设计时钟 223
10.2 FPGA复位设计 225
10.2.1 使用时钟IP核锁存信号进行复位 226
10.2.2 使用硬件描述语言进行复位 226
10.3 FPGA时钟域处理 227
10.3.1 使用异步FIFO处理跨时钟域数据实例 227
10.3.2 使用双端口RAM处理跨时钟域数据实例 228
10.3.3 使用延迟法处理跨时钟域数据实例 230
10.3.4 使用应答机制处理跨时钟域数据实例 231
10.3.5 采用格雷码转换处理跨时钟域数据实例 233
10.4 FPGA通用模块设计 236
10.4.1 接口通用模块设计 236
10.4.2 内部逻辑通用模块设计 237
10.4.3 仿真通用模块设计 237
10.4.4 调试通用模块设计 238
10.5 FPGA开发检查表 238
10.5.1 FPGA需求分析 238
10.5.2 FPGA方案设计 240
10.5.3 FPGA设计输入 240
10.5.4 FPGA功能仿真 243
10.5.5 FPGA硬件调试 244
10.6 本章习题 245
Xilinx FPGA工程师成长手记
目录
·XII·
·XI·
FPGA(Field Programmable Gate Array,现场可编程门阵列)是在PAL和GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。最初,FPGA主要应用于传统领域,随着信息产业与微电子技术的发展,其发展速度越来越快。尤其近几年,FPGA的发展非常迅猛,其影响力越来越大。例如,比特币挖矿、数据采集、人工智能等领域都可以看到FPGA的身影。如今,FPGA的应用遍及航空航天、汽车、医疗和工业控制等领域。
2010年,笔者在大学导师那里第一次接触FPGA,那时感觉FPGA很神秘。正是这种神秘感,吸引笔者进入了该行业,开始了FPGA编程之旅。笔者大学毕业至今一直从事FPGA逻辑设计与验证的相关工作,这些工作经历使得笔者积累了丰富的项目开发经验,如今已在FPGA接口应用领域取得了一些成就。
基于上述经历,笔者想通过一本书将自己多年以来积累的FPGA设计心得和项目开发经验分享给需要的人。具体而言,笔者编写本书的主要原因有以下4点:
* 行业需求使然。FPGA行业发展迅猛,应用领域广泛,人才缺口很大,而图书市场上缺少通俗易懂且实用性强的能带领读者快速上手的图书。
* 笔者一直在思考,有没有一种低门槛、易消化、易掌握和易上手的方法,让初学者可以快速掌握FPGA技术,笔者想通过本书来尝试解决这个问题。
* 笔者想通过本书分享自己多年积累的FPGA设计心得和项目开发经验,让FPGA学习人员少走弯路,能更快地将所学知识应用于产品和项目开发,从而加速产品和项目的上市。
* 笔者想通过一本书,让行业内入职的新人可以通过自学快速掌握FPGA,从而节省大量的培训时间和成本。
本书以一位FPGA从业者的身份,详细介绍FPGA产品或项目开发所需要的基本技能。本书首先从FPGA的理论知识讲起,详细介绍FPGA芯片的发展背景、常用专业术语和硬件描述语言的基本语法,然后介绍FPGA的验证方法和知识产权应用,最后结合实例详细介绍低速接口设计与高速接口设计,并总结FPGA的开发技巧,以加深读者对FPGA设计与验证技术的理解。通过阅读本书,读者可以系统地掌握FPGA设计的精髓和流程,并达到实际上手开发产品或项目的水平。
本书特色
* 内容丰富:首先从FPGA的理论知识入手,详细介绍FPGA芯片设计的背景、常用专业术语、硬件描述语言的基本语法;然后介绍FPGA的验证方法和知识产权应用;最后详细介绍低速接口和高速接口设计实例,并总结FPGA的开发技巧。
* 实例丰富:在讲解中穿插多个典型实例,带领读者上手实践,并加深对?FPGA设计与验证技术的理解,进而快速掌握FPGA的开发流程,上手开发实际产品和项目。
* 图文并茂:在讲解中给出大量的示意图,帮助读者高效、直观地理解FPGA的各种概念和实现原理。
* 注重技巧:总结大量的开发技巧,让读者少走很多弯路,从而加速新产品的上市,甚至提前交付项目。
* 源码实用:本书涉及的实例源码大多来源于实际项目,并给出详细的注释,读者对这些源码稍加修改即可直接用于实际项目。
* 提供习题:每章都提供习题,帮助读者巩固和提高所学的知识。
* 配教学PPT:提供配套教学PPT,方便相关院校的授课教师教学时使用。
本书内容
第1篇 Xilinx FPGA基础知识
本篇涵盖第1~4章,主要介绍FPGA的概念、设计流程、基本理论、描述语言和功能验证等内容。通过学习本篇内容,读者可以快速掌握FPGA设计的基础知识。
第1章FPGA概述,主要介绍FPGA的芯片厂商、应用领域、设计流程,以及FPGA工程师需要掌握的基本技能。通过学习本章内容,读者可以对FPGA有个大致的了解。
第2章FPGA的基本理论,主要介绍FPGA的时钟、复位、时序、异步时钟域和约束等相关知识。通过学习本章内容,读者可以系统地了解FPGA的基本理论知识。这些知识在FPGA设计中经常用到,其伴随FPGA设计的整个过程,是FPGA逻辑设计不可缺少的一部分。
第3章FPGA的硬件描述语言,主要介绍VHDL、Verilog HDL和System Verilog语言的语法基础,以及FPGA设计规范与编程技巧。通过学习本章内容,读者可以快速掌握FPGA的常用硬件描述语言,以便进行项目开发。
第4章FPGA功能验证,主要介绍验证的基本概念、仿真激励的编写、常用系统函数任务的调用,以及Vivado仿真软件的使用等。通过学习本章内容,读者可以学会验证自己编写的模块是否满足功能要求。
第2篇 Xilinx FPGA逻辑设计
本篇涵盖第5~10章,主要介绍FPGA的常用IP核设计、用户代码封装、低速接口设计、高速接口设计、硬件调试和开发技巧等内容。FPGA在逻辑接口领域的应用非常广泛。例如,在实际产品的设计中,很多情况下需要与PC(个人计算机)进行数据通信,将采集的数据发送给PC处理,或者将处理后的结果传送给PC进行显示等。通过学习本篇内容,读者可以快速掌握FPGA接口设计的核心基础知识,从而为实际项目开发打下坚实的基础。
第5章FPGA的知识产权,主要介绍MMCM、FIFO、RAM、Counter等常用IP核的设计与应用。通过学习本章内容,读者可以快速掌握常用IP核的设计方法。
第6章FPGA代码封装,主要介绍用户代码的IP核封装和网表文件封装的基本流程。通过学习本章内容,读者可以快速掌握FPGA代码封装的方法,为代码加密设计打下基础。
第7章FPGA低速接口设计,主要介绍SPI、UART、IIC和CAN这4种总线的逻辑设计方法。通过学习本章内容,读者可以掌握低速接口设计的方法,包括方案设计、代码设计、功能仿真和硬件调试。
第8章FPGA高速接口设计,主要介绍DDR3和PCIE这两种接口的设计方法。通过学习本章内容,读者可以快速掌握高速接口的设计方法,包括方案设计、代码设计、功能仿真与硬件调试。
第9章FPGA硬件调试,基于Vivado软件环境,以一个简单的闪烁灯为例,介绍其FPGA硬件调试流程。通过学习本章内容,读者可以简单地了解FPGA的硬件调试流程。对于一些复杂的FPGA设计,可以通过本章介绍的调试方法进行硬件逻辑功能的调试。
第10章FPGA开发技巧,主要介绍笔者基于Xilinx FPGA进行逻辑设计与验证过程中总结的一些FPGA项目开发技巧与心得体会,包括FPGA时钟管理、FPGA复位设计、FPGA时钟域处理、FPGA通用模块设计和FPGA检查表开发。通过学习本章内容,读者可以掌握FPGA的开发技巧,从而少走弯路,提高FPGA产品设计的效率。
读者对象
* FPGA接口设计入门人员;
* FPGA接口设计从业人员;
* 硬件设计工程师;
* 硬件设计科研人员;
* 高校电子信息等相关专业的学生。
配套资源获取
本书提供实例源码文件、习题参考答案和教学PPT等配套资源。这些资源有两种获取方式:一是关注微信公众号“方大卓越”,回复数字“26”获取下载链接;二是在清华大学出版社网站(www.tup.com.cn)上搜索到本书,然后在本书页面上找到“资源下载”栏目,单击“网络资源”或“课件下载”按钮进行下载。
致谢
在编写本书的过程中,笔者查阅了大量的资料,参考了Xilinx公司官方网站(http://www.xilinx.com)提供的英文资料以及Vivado提供的IP核数据手册与帮助文档,在此对资料的作者和提供者表示衷心的感谢!另外也要感谢北京至芯开源科技有限责任公司总经理雷斌、FPGA资深工程师党亚鹏、FPGA高级工程师宋哲和系统架构工程师郝焕妮,他们4位为本书提出了宝贵的意见和建议,在此表示衷心的感谢!此外,感谢妻子全力照顾家庭,为笔者编写本书腾出了大量的时间。
售后服务
由于笔者水平所限,书中可能还存在疏漏与不足之处,恳请广大读者批评与指正。同时也欢迎广大读者就FPGA设计和验证等相关技术与笔者交流。
联系邮箱:[email protected]。
寇强
2024年6月于西安
Xilinx FPGA工程师成长手记
前言
·VI·
·V·
近10年,寇强先生在FPGA领域默默地付出,辛勤地耕耘,他利用工作和生活之余,将自己多年的FPGA设计经验编纂成册,这实属难能可贵,令人钦佩!他编写的这部FPGA图书,内容翔实,案例丰富,涵盖从基础知识到功能仿真再到实战案例的方方面面内容,对FPGA设计工程师有很好的指导和借鉴意义,非常值得阅读。
——FPGA资深工程师 党亚鹏
本书从一名电子工程师逐渐成长的视角出发,系统地阐述时钟、复位、时序分析、跨时钟域处理、高低速接口设计和硬件调试等关键技术。本书内容丰富,实例典型,代码注释详细,不仅可以作为FPGA新手的入门读物,给他们的学习带来很大的启发,而且可以作为高等院校电子信息工程、计算机科学与技术等相关专业的教材,帮助相关学生快速掌握FPGA设计技术。
——FPGA高级工程师 宋哲
寇强对信息技术有着浓厚的兴趣,受邀为他的新书《Xilinx FPGA工程师成长手记》写推荐语,令我非常高兴。本书以图文并茂的方式详细介绍FPGA的理论知识、编程语言、验证方法和知识产权(IP核)等基础知识,并通过多个低速和高速接口实例阐述FPGA接口设计方法,而且为读者总结了大量的FPGA设计技巧,这有助于避开FPGA设计过程中的很多弯路,加速其产品研发上市。本书不仅适用于FPGA初学者,对于从事FPGA设计的工程师而言也具备较高的参考价值。
——系统架构工程师 郝焕妮
第1章 FPGA概述
本章以FPGA是什么、FPGA芯片厂商和FPGA的应用领域为出发点,让读者快速了解什么是FPGA,FPGA的作用及FPGA的行业发展前景。通过介绍IC和FPGA的设计流程,让读者快速了解FPGA的设计流程。本章的最后将介绍FPGA人才需求和FPGA的基本技能,让读者了解一名合格的FPGA工程师需要掌握哪些基本技能。
本章的主要内容如下:
q 什么是FPGA。
q FPGA芯片厂商介绍。
q FPGA的应用领域介绍。
q FPGA的设计流程介绍。
q FPGA的人才需求介绍。
q FPGA工程师的基本技能介绍。
1.1 什么是FPGA
FPGA(Field Programmable Gate Array)是在PAL和GAL等可编程器件的基础上进一步发展的产物。它是作为(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。近几年,FPGA的发展非常迅速,影响也越来越大,如数据采集和人工智能等领域都可以看到FPGA的身影。
FPGA是一种器件或芯片,通俗地说是一种功能强大的数字芯片,在该芯片上可以进行数字电路设计。
一句话概括:FPGA是一种可以通过编程来改变其内部结构的芯片。
1.2 FPGA芯片厂商
在FPGA领域,Xilinx(赛灵思)和Altera(阿尔特拉)这两家公司占据了90%的市场份额,而Lattice(莱迪思)和Actel(阿克泰尔)公司只能在特殊领域占有一定的份额。
1.2.1 国外FPGA厂商简介
1.Xilinx公司
Xilinx是全球领先的可编程逻辑完整解决方案的供应商。Xilinx公司研发的高级集成电路、软件设计工具及作为预定义系统级功能的IP(Intellectual Property)核应用非常广泛。客户使用Xilinx及其合作伙伴的自动化软件工具和IP核对器件进行编程,可以完成特定的逻辑操作。Xilinx公司成立于1984年,其首创了现场可编程逻辑阵列(FPGA)这项技术,并于1985年首次推出商业化产品。
2.Altera公司
自发明世界上第一个可编程逻辑器件开始,Altera公司一直秉承创新的传统,是世界上“可编程芯片系统”(SOPC)解决方案倡导者。Altera公司结合带有软件工具的可编程逻辑技术、知识产权(IP)和技术服务,在世界范围内为14 000多个客户提供高质量的可编程解决方案。
3.Lattice公司
Lattice半导体公司于1983年在俄勒冈州成立,1985年在特拉华州重组。Lattice半导体公司提供业界范围最广的现场可编程逻辑阵列(FPGA)、可编程逻辑器件(PLD)及其相关软件,包括现场可编程系统芯片(FPSC)、复杂的可编程逻辑器件(CPLD)、可编程混合信号产品(ispPAC)和可编程数字互连器件(ispGDX)。
4.Actel公司
Actel公司成立于1985年,位于美国纽约。Actel公司专注于美国军工和航空领域,产品以反熔丝结构FPGA和基于Flash的FPGA为主,具有抗辐照和可靠性高的优势。2010年该公司被安美森收购。
1.2.2 国内FPGA厂商简介
目前市场上应用比较多的是Xilinx和Altera公司的产品,由于我国众多产品推行国产化,所以国产FPGA取代国外FPGA是未来的发展趋势。国内FPGA厂商介绍如下。
1.安路科技
上海安路信息科技有限公司(简称安路科技)成立于2011年,其总部位于浦东新区张江高科技园区。安路科技专注于为客户提供高性价比的可编程逻辑器件、可编程系统级芯片、定制化嵌入式eFPGA IP及相关软件设计工具和创新系统解决方案。
2.高云半导体
广东高云半导体科技股份有限公司(简称高云半导体)是一家专业从事国产现场可编程逻辑器件研发的高科技企业,旨在推出具有核心自主知识产权的民族品牌FPGA芯片,为客户提供集设计软件、IP核、参照设计、开发板和定制服务等一体化的完整解决方案。
通过最新工艺的选择和设计优化,高云半导体的产品可以比现有市场上的国际同类产品速度更快或相当,但功耗大大降低,可以大批量替换国际FPGA主流芯片,使我国在中高密度FPGA应用中摆脱国际高端芯片需要进口的限制,在部分4G和5G通信网络建设、数据中心安全、工业控制等应用中有自己的国产芯片。
3.西安智多晶
西安智多晶微电子有限公司(简称西安智多晶,XIST)于2012年11月在西安成立,是由一支海外归国华侨团队创立的高科技公司。
西安智多晶专注于可编程逻辑电路器件技术的研发生产,为客户提供高质量、低功耗、低成本和马上可投入量产的系统集成解决方案。经过多年的发展,其产品从单一的CPLD产品发展为多元系列化的CPLD和FPGA产品,并为客户提供FPGA和CPLD的系统解决方案。
4.紫光同创
深圳市紫光同创电子有限公司(简称紫光同创)于2013年12月20日在深圳市市场监督管理局南山局登记成立。该公司系紫光集团的下属公司,专业从事可编程逻辑器件(FPGA、CPLD等)的研发与生产销售,是中国FPGA“领导”厂商,致力于为客户提供完善、具有自主知识产权的可编程逻辑器件平台和系统解决方案。该公司的产品覆盖通信、工业控制、视频监控、消费电子、数据中心等应用领域。
5.上海遨格芯
上海遨格芯微电子有限公司(简称上海遨格芯)于2015年3月11日在上海市自贸区市场监督管理局登记成立。该公司经营范围包括微电子科技、信息科技、集成电路芯片领域内的技术开发等。该公司自创办以来,始终专注于研发自主知识产权的FPGA核心软件和硬件技术,已经推出三个系列的CPLD、FPGA和Programmable SoC产品进入量产,已得到多家知名厂商认证,在多元化的市场量产出货,是首家得到国内商用市场认可的国产FPGA供应商,并且其产品已通过三星供应商认证。
1.3 FPGA的应用领域
FPGA最初是应用于传统的领域,随着信息产业及微电子技术的发展,FPGA的发展也非常迅速,如今,FPGA的应用遍及航空航天、汽车、医疗和工业控制等领域,下面主要从三个领域介绍FPGA的应用。
1.3.1 数据采集领域
使用FPGA进行数据采集的应用非常广泛,如视频数据采集和AD数据采集等。在AD数据采集系统中,主要利用FPGA采集AD数据,通常的实现方法是利用A/D转换器将模拟信号转换为数字信号,先发送给FPGA处理器进行数据采集,然后发送给处理器进行数据处理,如利用单片机(MCU)、微处理器(ARM)或者数字信号处理器(DSP)进行运算和处理。
1.3.2 逻辑接口领域
在实际项目或产品设计中,很多情况下需要FPGA与PC进行数据通信。例如,FPGA负责进行AD数据采集,然后通过以太网接口把采集数据发送给PC进行数据处理。PC与外部系统通信的接口比较丰富,如USB接口、PCIE接口和UART接口等,这时就需要FPGA实现USB接口、PCIE接口和UART接口。
如果需要实现较多的接口设计,就需要较多的外围芯片,系统体积和功耗都比较大。采用FPGA实现逻辑接口方案,可以大大简化外围电路的设计,因为FPGA可编程I/O资源丰富,所以FPGA可以实现各种接口设计。常用的低速接口包括SPI接口、UART接口、IIC接口和CAN接口等;常用的以太网接口包括GMII接口、RGMII接口、SGMII接口和QSGMII接口等;常用的存储器接口包括DDR2接口、DDR3接口和DDR4接口;常用的高速接口包括SRIO接口和PCIE接口等。
1.3.3 数字信号处理领域
无线通信、软件无线电、高清影像编辑和处理等领域,对信号处理所需要的计算量提出了极高的要求。传统的解决方案一般是采用多片DSP并联构成多处理器系统来满足设计需求,但多处理器系统带来的主要问题是设计复杂度和系统功耗大幅度增加,使系统稳定性受到影响。FPGA支持并行计算,而且密度和性能都在不断提高,可以在很多领域替代传统的多DSP解决方案。
1.3.4 其他领域
目前,FPGA工艺技术已达7nm和10nm级,可实现4至5亿门器件规模。无线通信、人工智能、消费电子和医疗科学等领域正在成为全球FPGA市场规模增长的主力。FPGA不仅在数据采集领域、逻辑接口领域和数字信号处理领域应用广泛,在以下这些新兴行业中也能看见它的身影。
q 汽车电子领域,如网关控制器、车用PC和远程信息处理系统。
q 军事领域,如安全通信、雷达、声呐和电子战等。
q 测试和测量领域,如通信测试和监测、半导体自动测试设备和通用仪表。
q 消费产品领域,如显示器、投影仪、数字电视、机顶盒和家庭网络。
q 医疗领域,如软件无线电、电疗和生命科学。
1.4 FPGA的设计流程
FPGA的设计流程是遵循着ASIC的设计流程发展的,包括需求分析(功能定义)、设计输入(代码输入)、功能仿真(设计验证)、逻辑综合、布局布线、芯片编程与调试,如图1.1所示。设计文档和代码管理属于产品研发环节,不属于FPGA设计环节但非常重要,希望读者能养成将设计文档和代码及时归档的习惯。
图1.1 FPGA的设计流程
4说明:“设计文档和代码管理”属于产品研发环节,不属于FPGA设计流程但非常重要,希望读者能养成将设计文档和代码及时归档的习惯。
1.4.1 需求分析
磨刀不误砍柴工,FPGA设计的需求分析是整个设计的第一步。如何将系统的功能需求转换成FPGA的设计需求,是FPGA架构设计的首要问题。需求分析就是与客户进行积极沟通,从而形成一个可以实现的需求说明书,简单地说就是确定客户需要实现什么功能。
如果需求分析不明确,则会在项目收尾阶段出现一些问题,这些问题可能会导致项目返工。FPGA需求不明确的直接结果如下:
q 性能不满足需求;
q 设计频繁变更;
q 系统不稳定,调试问题不收敛。
1.4.2 设计输入
设计输入也称为编写代码,即根据客户需求,使用硬件描述语言、原理图或者知识产权设计用户需要的逻辑功能。
1.硬件描述语言
硬件描述语言用来实现客户需要的逻辑功能。硬件描述语言主要分为3种,分别为Verilog HDL、VHDL和System Verilog语言。
2.原理图
用户使用底层原语或模块设计客户需要的逻辑功能,原理图设计一般较少使用。
3.知识产权设计
用户使用FPGA厂商提供的知识产权核(IP核)或第三方IP核设计客户需要的逻辑功能。常用的IP核有FIFO IP核、RAM IP核和ROM IP核等。
1.4.3 功能仿真
FPGA设计主要基于模块进行逻辑设计。基本的FPGA模块编写完成后,要使用仿真软件对设计模块进行功能仿真,验证设计模块的基本功能是否符合预期。功能仿真也称为前仿真。
常用的仿真软件有Mentor公司的Modelsim仿真软件,Synopsys公司的VCS,Cadence公司的NC-Verilog和NC-VHDL。功能仿真可以加快FPGA的设计,减少设计过程中的错误。一般FPGA厂商自带的FPGA开发软件都支持功能仿真,如Xilinx厂商的开发工具ISE和Vivado都可以进行功能仿真。
1.4.4 逻辑综合
这里主要从3个方面介绍逻辑综合,分别为综合、综合优化和逻辑综合。
综合就是将硬件描述语言(Hardware Description Language,简称HDL)转化为针对特定架构的网表描述或门级电路的过程。
综合优化(Synthesize)是将硬件语言、原理图或IP核等设计输入翻译成由与门、或门、非门、RAM和触发器等基本逻辑单元组成的逻辑连接(网表),并根据约束条件优化生成的逻辑连接输出网表文件的过程。
逻辑综合有系统级和实现过程两种定义。从系统级定义,逻辑综合在实质上是设计流程的一个阶段,在这个阶段中将较高级抽象层次的描述自动地转换成较低级层次的描述;从实现过程定义,逻辑综合通过综合器把HDL程序转换成标准的门级结构网表,而并非真实的门级电路,真实的电路需要利用ASIC和FPGA制造厂商的布局布线工具根据逻辑综合后生成的标准的门级结构网表来产生。
1.4.5 布局布线
布局布线是设计实现的一个步骤。设计实现可理解为利用FPGA开发工具(Xilinx 开发软件Vivado)把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入、输出功能连接的布线通道进行连线并产生相应文件。简单地说,设计实现就是将综合输出的逻辑网表适配到特定的器件上并生成用于配置FPGA的位流文件。设计实现通常可分为如下5步:
(1)转换:将多个设计文件进行转换并合并到一个设计库文件中。
(2)映射:将网表中的逻辑门映射成物理元素,即把逻辑设计分割到构成可编程逻辑阵列内的可配置逻辑块与输入、输出块及其他资源中。
(3)布局与布线:布局是指从逻辑网表中取出定义的逻辑和输入、输出块,并把它们分配到FPGA内部的物理位置;布线是指利用自动布线软件使用布线资源选择路径试着完成所有的逻辑连接。
(4)时序提取:产生一个反标文件,供给后续的时序仿真使用。
(5)配置:产生FPGA配置时需要的位流文件。
1.4.6 芯片编程与调试
芯片编程与调试是FPGA设计的最后一个环节,这里主要从4个方面介绍芯片编程与调试,分别为芯片配置、配置形式、调试方法和电路验证。
芯片编程也叫芯片配置,是在功能仿真与时序仿真都正确的前提下,将综合形成的位流下载到具体的FPGA芯片中。
FPGA设计有两种配置形式:直接由计算机经过专用下载电缆进行配置,由外围配置芯片进行上电时自动配置。
在线FPGA调试方法基本有两种:使用嵌入式逻辑分析仪,以及使用全功能外部逻辑分析仪。从成本与灵活性上分析,大多数FPGA厂商提供了嵌入式逻辑分析仪内核,而其价格要低于全功能外部逻辑分析仪,具体选择哪种方法取决于项目的调试需求。
电路验证:将位流文件下载到FPGA器件内部后进行实际器件的物理测试,如果得到正确的验证结果,则证明设计正确。
1.4.7 文档和代码管理
对于公司来说,对设计文档和设计代码的管理非常重要。
1.设计文档的管理
一个规范的设计文档主要有以下两个优势。
1)便于阅读代码
在项目开发中,设计人员应按照规范完成项目的设计工作,清晰归类工程文件夹,使项目拥有完整的文档,代码书写规范,文件头包含的信息完整,从而使团队的其他成员阅读时一目了然。
2)便于维护与移植代码
在项目开发中,开发人员将自己的设计思路和调试记录在文档中,有利于以后对模块功能的添加和维护,在项目联调时不但方便项目组其他成员阅读代码,而且方便不同厂家FPGA之间的移植及FPGA到ASIC的移植。
2.设计代码的管理
FPGA设计代码的管理主要分为两个方面,分别为FPGA工程管理和FPGA文档管理。
1)FPGA工程管理
清晰的文档命名能够让我们的思路非常清晰,因此FPGA工程文件夹的目录要求层次鲜明,归类清晰。FPGA工程管理文件夹举例如下:
q 第一级文件夹为FPGA工程名称。
q 第二级文件夹为FPGA工程资料(需要多个文件夹,分别存放不同的资料),主要资料包括设计源文件、设计激励文件、IP核文件、设计文档,其中,设计文档包括FPGA需求分析、FPGA概要设计、FPGA详细设计、FPGA仿真文件和FPGA调试文件等。
2)FPGA文档管理
一个规范的FPGA代码文档应该包含的内容如下:
q 输入、输出信号列表及含义。
q 输入、输出信号的时序及时序的限制条件。
q 内部关键状态机跳转状态转移图。
q 内部关键电路时序图及时序说明。
q 关键算法说明,定点数据流图。
q 性能描述。
1.5 FPGA的人才需求
由于FPGA应用领域非常广泛,所以FPGA人才需求逐年递增,甚至FPGA工程师供不应求。这里主要从三个方面来分析FPGA人才需求现状,分别为FPGA人才紧缺、FPGA工程师从事的工作及FPGA人才培养。
1.FPGA人才紧缺原因
造成FPGA人才紧缺的原因主要有两个,分别是FPGA需求生产失衡和FPGA入门难度高。
1)FPGA需求与生产失衡
FPGA具有灵活、高效、可重复编程,可实现定制性能、定制功耗、高吞吐量和低批量延迟的特性,因此在人工智能、云服务、5G、自动驾驶和视觉处理等领域的应用越来越广泛,这种高速的发展带来的问题就是人才严重不足。
2)FPGA入门难度高
FPGA行业入门难度高的原因主要有两个,分别为非系统学习及FPGA设计与硬件直接相关。
q 非系统学习。目前,高校还没有针对FPGA人才制定系统的培训体系,因此新手入门难,从业人员的提升更难。
q FPGA设计与硬件直接相关。FPGA的设计需要一些调试仪器,如示波器、万用表、频谱仪和信号发生器等,这些设备比较昂贵,因此FPGA行业入门门槛较高。新手在遇到一些问题时,若由于没有调试设备而无法定位,很有可能会放弃学习。
2.FPGA工程师从事的工作
FPGA工程师包括硬件工程师和软件工程师。硬件工程师主要根据项目需求、FPGA内部架构、工作环境及相关驱动条件来构造硬件平台,包括硬件原理图设计、PCB设计、硬件芯片焊接、硬件调试。软件工程师主要负责一些相关的算法,并通过逻辑代码加以实现。
3.FPGA人才培养
FPGA人才紧缺问题已经暴露了国内FPGA快速发展的“短板”,在解决方法上,仍然需要政府、企业和高校联动,共同建立国内的FPGA生态,促进我国FPGA的发展。下面介绍几种FPGA自学的方法:
q FPGA培训。定期参加FPGA培训,可以是线上或者线下培训,以系统地掌握FPGA设计流程和基础知识。
q FPGA自学。通过网络资源和图书资源学习FPGA技术,直到参与项目或者产品设计。
1.6 FPGA工程师的基本技能
一个FPGA工程师应该具备哪些基本技能呢?这里主要从以下5个方面进行描述。
1.掌握硬件描述语言
硬件描述语言是电子系统硬件行为描述、结构描述和数据流描述的语言。硬件描述语言主要有VHDL、Verilog HDL和System Verilog,目前最流行的是Verilog和System Verilog,本书将以这两种语言为基础进行逻辑设计与仿真激励设计。
(建议:掌握一种FPGA的编程语言。
2.掌握开发软件
FPGA设计常用的开发软件如下:
q Intel公司的FPGA开发软件QuartusII。
q Xilinx公司的FPGA开发软件ISE和Vivado。
q Lattice公司的FPGA开发软件Diamond。
(建议:每个FPGA厂商都有自己的开发软件,可以掌握多个厂商的FPGA开发软件。
3.掌握仿真软件
FPGA设计常用的仿真软件如下:
q Intel公司的FPGA仿真软件QuartusII。
q Xilinx公司的FPGA仿真软件ISE和Vivado。
q Mentor公司的FPGA仿真软件Modelsim。
q Synopsys公司的FPGA仿真软件VCS。
(建议:每个FPGA厂商都有自己的仿真软件,可以掌握多个厂商的FPGA仿真软件。
4.掌握调试工具
FPGA设计常用的调试工具如下:
q Intel公司的FPGA调试工具Signaltap。
q Xilinx公司的FPGA调试工具ISE Chipscope和Vivado Debug。
q Lattice公司的FPGA调试工具Reveal。
(建议:每个FPGA厂商都有自己的调试工具,可以掌握多个厂商的FPGA调试工具。
5.具有英文阅读能力
具有较高的英文阅读能力是FPGA工程师的基本技能,因为经常需要使用英文软件、登录英文网站、阅读英文手册,并且需要用英文来编写代码。
1.7 本 章 习 题
1.FPGA是什么?
2.FPGA芯片厂商有哪些?
3.FPGA应用领域有哪些?
4.FPGA的设计流程是什么?
5.FPGA工程师的基本技能有哪些?
评论
还没有评论。