差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
fpga_design_tool [2021/09/13 00:38] gongyu |
fpga_design_tool [2021/09/13 22:56] (当前版本) gongyu [2. Verilog语言] |
||
---|---|---|---|
行 1: | 行 1: | ||
## FPGA的开发及工具 | ## FPGA的开发及工具 | ||
- | FPGA设计的各个阶段,FPGA厂商和EDA软件公司提供了很多优秀的EDA工具,尤其是FPGA厂商提供的集成开发环境。熟练掌握这些设计工具能够有效提高设计的效率,但是必须明白这些EDA软件只是一个工具,核心的FPGA设计流程是不变的。STEP小脚丫系列目前有支持Lattice和Intel-Altera的版本,未来将会开发基于Xilinx的FPGA芯片平台。 | + | FPGA设计的各个阶段,FPGA厂商和EDA软件公司提供了很多优秀的EDA工具,尤其是FPGA厂商提供的集成开发环境。熟练掌握这些设计工具能够有效提高设计的效率,但是必须明白这些EDA软件只是一个工具,核心的FPGA设计流程是不变的。 |
\\ | \\ | ||
FPGA设计软件: | FPGA设计软件: | ||
- | * [[http://www.latticesemi.com|Lattice公司]]: [[Diamond]] | + | * [[http://www.latticesemi.com|Lattice公司]]:支持Windows和Linux平台的[[Diamond]] |
- | * [[http://www.altera.com|Altera公司]]: [[Quartus Prime]] | + | * [[http://www.altera.com|Altera公司]]支持Windows和Linux平台的[[Quartus Prime]] |
- | * [[http://www.xilinx.com|Xilinx公司]]: [[https://www.xilinx.com/products/design-tools/vivado.html|Vivado Design Suite]] | + | * [[http://www.xilinx.com|Xilinx公司]]的[[https://www.xilinx.com/products/design-tools/vivado.html|Vivado Design Suite]] |
+ | * [[https://www.stepfpga.com/|苏州思得普科技有限公司]]开发的[[online_ide|在线FPGA综合设计工具]],在浏览器里运行,因此可以支持任何一种操作系统,且能够支持Lattice的XO2系列FPGA和Altera的MAX10系列FPGA,适合初学者使用。 | ||
\\ | \\ | ||
行 61: | 行 62: | ||
在设计FPGA逻辑中有两种硬件设计语言(HDL)可以选择,一种是[[Verilog]] HDL,还有一种是VHDL,在我们的设计中选用普及率更广,更容易上手的[[Verilog]],具体如何使用,可以参考文章末尾的几个PPT教程。 | 在设计FPGA逻辑中有两种硬件设计语言(HDL)可以选择,一种是[[Verilog]] HDL,还有一种是VHDL,在我们的设计中选用普及率更广,更容易上手的[[Verilog]],具体如何使用,可以参考文章末尾的几个PPT教程。 | ||
- | ### 3. 代码规范 | ||
规范的代码风格一方面能体现你足够专业,另一方面也是最重要的一方面,代码的规范性有利于开发交流,让代码的可读性大大增强,也有利于降低代码的出错率。 | 规范的代码风格一方面能体现你足够专业,另一方面也是最重要的一方面,代码的规范性有利于开发交流,让代码的可读性大大增强,也有利于降低代码的出错率。 | ||
* [[硬禾实战营Verilog代码规范]] | * [[硬禾实战营Verilog代码规范]] | ||
+ | |||
+ | ### 4. FPGA设计的3大法则 | ||
+ | #### 4.1 面积与速度的互换 | ||
+ | 这里的面积指的是FPGA的芯片资源,包括逻辑资源和I/O资源等;这里的速度指的是FPGA工作的最高频率(和DSP或者ARM不同,FPGA设计的工 作频率是不固定的,而是和设计本身的延迟紧密相连)。 在实际设计中,使用最小的面积设计出最高的速度是每一个开发者追求的目标,但是“鱼和熊掌不可兼得”,取舍之间展示了一个开发者的智慧。 | ||
+ | - 速度换面积: 速度优势可以换取面积的节约。面积越小,就意味着可以用更低的成本来实现产品的功 能。速度换面积的原则在一些较复杂的算法设计中常常会用到。在这些算法设计中,流水线设计常常是必须用到的技术。在流水线的设计中,这些被重复使用但是使 用次数不同的模块将会占用大量的FPGA资源。对FPGA的设计技术进行改造,将被重复使用的算法模块提炼出最小的复用单元,并利用这个最小的高速代替原 设计中被重复使用但次数不同的模块。当然,在改造的过程中必然会增加一些其他的资源来实现这个代替的过程。但是只要速度具有优势,那么增加的这部分逻辑依 然能够实现降低面积提高速度的目的。可以看到,速度换面积的关键是高速基本单元的复用。 | ||
+ | - 面积换速度: 在这种方法中面积的复制可以换取速度的提高。支持的速度越高,就意味着可以实现更高的产品性能。一些注重产品性能的应用领域可以采用并行处理技术,实现面积换速度。 | ||
+ | |||
+ | #### 4.2 硬件可实现原则 | ||
+ | FPGA设计通常会使用HDL语言,比如[[Verilog]] HDL或者VHDL。当采用[[HDL]]语言来描述一个硬件电路功能的时候,一定要确保代码描述的电路是硬件可实现的。 | ||
+ | Verilog HDL语言的语法与C语言很相似,但是它们之间有着本质的区别。C语言是基于过程的高级语言,编译后可以在[[CPU]]上运行。而Verilog HDL语言描述的本身就是硬件结构,编译后是硬件电路。因此,有些语句在C语言的环境中应用是没有问题的,但是在HDL语言环境下就会导致结果不正确或者 不理想。如: | ||
+ | <code verilog> | ||
+ | for(i=0;i<16;i++) | ||
+ | DoSomething(); | ||
+ | </code> | ||
+ | |||
+ | 在C语言中运行没有任何问题,但是在Verilog HDL的环境下编译就会导致综合后的资源严重浪费。 | ||
+ | |||
+ | #### 4.3 同步设计原则 | ||
+ | 同步电路和异步电路是FPGA设计的两种基本电路结构形式。 | ||
+ | 异步电路的最大缺点是会产生毛刺。同步设计的核心电路是由各种触发器构成的。这类电路的任何输出都是在某个时钟的边沿驱动触发器产生的。所以,同步设计可以很好地避免毛刺的产生。 | ||
+ | |||
+ | ### 5. FPGA设计需要的技能 | ||
+ | FPGA在各个领域都是必不可少的一种硬件工具,掌握并有效使用FPGA对当代的电子设计工程师来讲是非常必要的,要做到较好的FPGA设计需要具备如下的一些技能: | ||
+ | |||
+ | #### 5.1 具备自己设计高速数字电路板(PCB)的能力并且掌握DSP的基础理论 | ||
+ | * [[PCB]]硬件与接口设计 | ||
+ | * 逻辑电路设计 | ||
+ | * 硬件仿真 | ||
+ | * 硬件模块调试 | ||
+ | * PCB设计布局 | ||
+ | * 信号完整性及终端匹配 | ||
+ | * DSP算法的硬件实现 | ||
+ | * 功耗与去藕设计 | ||
+ | * 板级引脚分配 | ||
+ | * I/O特性的定义 | ||
+ | * 设计优化权衡 | ||
+ | * FPGA器件和封装选择 | ||
+ | |||
+ | #### 5.2 还要掌握至少一门硬件描述语言(HDL) | ||
+ | * HDL语言的设计输入 | ||
+ | * 测试平台的开发 | ||
+ | * 设计约束 | ||
+ | * 脚本实现自动化处理 | ||
+ | * HDL流程文件的配置管理 | ||
+ | * 支持设计复用 | ||
+ | |||
+ | #### 5.3 从系统高度设计你的系统 | ||
+ | * 处理器需求分析 | ||
+ | * 处理器架构选择 | ||
+ | * 系统级设计的层次结构定义 | ||
+ | * 系统模块的集成与接口测试 | ||
+ | * 数据流的定义 | ||
+ | * 硬件/软件实现的权衡 | ||
+ | * 功能划分和模块化设计 | ||
+ | * 系统级测试、调试和验证 | ||
+ | |||
+ | #### 5.4 具体实现 - 通过软件/DSP设计 | ||
+ | * 处理器代码模块的定义 | ||
+ | * DSP算法的软件实现 | ||
+ | * 在处理器上运行操作系统 | ||
+ | * 代码的编写和测试 | ||
+ | * 常规的代码调试和验证 | ||
+ | * 代码的配置管理 | ||
+ | |||
+ | #### 5.5 FPGA的选型决策原则 | ||
+ | - 功能/资源:逻辑单元、存储器、处理能力、IO、处理器内核、DSP | ||
+ | - 封装:满足管脚数量以及板卡的物理尺寸要求 | ||
+ | - 功耗:满足系统对供电的限制需求 | ||
+ | - 开发工具/难度:影响设计难度和开发时间,尽可能选择易于开发、调试的器件架构 | ||
+ | - 系统成本:包括配置RAM、外供电源、时钟等,除了器件成本之外还要考虑实现成本、支持成本等。 | ||
+ | - 购买难度:价钱/数量/供货渠道 | ||
+ | - 灵活性:便于将来的产品修改和升级 | ||
+ | - 技术支持:供应商是否能够提供良好的技术支持,乃至培训 | ||
+ | |||
+ | #### 5.6 FPGA应用中的注意事项 | ||
+ | |||
+ | **5.6.1 硬件设计** | ||
+ | - 管脚分配:输入/输出类型,预留功能管脚,方便布线 | ||
+ | - [[时钟]]:全局时钟 vs 局部时钟,[[PLL]] vs [[DLL]],是否驱动 | ||
+ | - 电源:内核电压/接口电压及其相应电流,上电时序 | ||
+ | - 编程:[[JTAG]]、配置、在线更新 | ||
+ | - 测试点:关键信号 - 时钟、电源、关键IO | ||
+ | |||
+ | **5.6.2 代码开发** | ||
+ | - 善用IP Core:调用原厂提供的经过验证过的IP内核 | ||
+ | - 硬件设计概念:并行工作、时延 | ||
+ | - 充分仿真:功能仿真、时序仿真、TestBench | ||
+ | - 调试:使用原厂提供的片上逻辑分析工具 | ||
+ | |||
+ | **5.6.3 FPGA学习和使用要借助的资源** | ||
+ | * 工具:开发板、评估板、调试工具、编译/仿真软件 | ||
+ | * IP Cores:原厂/官方提供、开源组织、其他人验证 | ||
+ | * 参考设计: 设计指南、系统应用、视频教程 | ||
+ | * 技术支持:原厂的FAE、第三方设计公司、社区/论坛/QQ群 | ||
+ | |||
+ | **5.6.4 IP Cores的有效使用** | ||
+ | {{ :opencores_logo.png?300|}} | ||
+ | 随着电子系统越来越复杂,我们不可能任何一个设计都从头自己写代码,必须学会站在巨人的肩上,充分利用现有的资源,尽快地完成自己的设计。经过几十年可编程逻辑技术的发展,可以说几乎所有的常见功能都能够找到可以参考甚至可以直接调用的IP内核,获取这些IP、能够争取地使用这些IP就是一种非常重要的能力。到哪里去找到可靠使用的内核呢?推荐如下几个途径: | ||
+ | * 来自原厂的IP内核:一般已经包含在其编译系统中,其官方网站上也会有很详细的文档介绍,关于该IP内核的功能、结构调用、所支持的器件、所占的系统资源等。 | ||
+ | * 国际知名开源网站上的IP核:比如www.opencores.org,这个网站几乎在全球的FPGA开发者中间家喻户晓,几乎任何重要的逻辑功能模块都能够在这个网站上找到相应的参考。那些经过WBC认证的代码质量会比较高,不过由于每个人的设计场景会稍微不同,直接调用这些IP Cores未必合适,能够参考这些IP核的设计思路也是对自己的设计非常有益的。 | ||
+ | {{ :opencores.png?600 |}} | ||
+ | * 我们StepFPGA将来也会围绕我们的小脚丫FPGA平台将用户构建的各种优秀功能模块经验证、审核以后发布出来,也希望通过这么一个开源的平台帮助大家的学习和设计。也希望更多的设计者能够将自己的设计贡献、分享出来。 | ||
+ |