例说FPGA:可直接用于工程项目的第一手经验【1.1】

1.4 FPGA应用领域

目前FPGA虽然还受制于较高的开发门槛以及器件本身昂贵的价格,并从应用的普及率上来看和ARM、DSP还是有一定的差距,但是在非常多的应用场合,工程师们还是要别无选择地使用它。FPGA所固有的灵活性和并行性是其他芯片所不具备的,所以它的应用领域涵盖得很广。从技术角度来看,主要是有以下需求的应用场合(如图1-8所示):

·逻辑粘合,如一些嵌入式处理常常需要地址或外设扩展,CPLD器件尤其适合。已经少有项目会选择一颗FPGA器件专门用于逻辑粘合的应用,但是在已经使用的FPGA器件中顺便做些逻辑粘合的工作倒是非常普遍。

·实时控制,如液晶屏或电机等设备的驱动控制,此类应用也以CPLD或低端FPGA为主。

·高速信号采集和处理,如高速AD前端或图像前端的采集和预处理,近年来持续升温的机器视觉应用也几乎无一例外地使用了FPGA器件。

·协议实现,如更新较快的各种有线和无线通信标准、广播视频及其编解码算法、各种加密算法等,使用FPGA比ASIC更有竞争力。

·各种原型验证系统,由于工艺的提升,流片成本也不断攀升,而在流片前使用FPGA做前期的验证已成为非常流行的做法。

·片上系统,如Altera公司的Soc FPGA和Xilinx公司的Zynq,这类FPGA器件,既有成熟的ARM硬核处理器,又有丰富的FPGA资源,大有单芯片一统天下的架势。

当然了,若从具体的应用领域来看,FPGA在电信、无线通信、有线通信、消费电子产品、视频和图像处理、车载、航空航天和国防、ASIC原型开发、测试测量、存储、数据安全、医疗电子、高性能计算以及各种定制设计中都有涉猎。总而言之,FPGA所诞生并发展的时代是一个好时代,与生俱来的一些特性也注定了它将会在这个时代的大舞台上大放光彩。

1.5 FPGA开发流程

如图1-9所示。这个流程图是一个相对比较高等级的FPGA开发流程,从项目提上议程开始,设计者需要进行FPGA功能的需求分析,然后进行模块的划分,比较复杂和庞大的设计则会通过模块划分把工作交给一个团队的多人协作完成。各个模块的具体任务和功能划分完毕(通常各个模块间的通信和接口方式也同时被确定),则可以着手进行详细设计,包括代码输入、综合优化、实现(映射和布局布线)。为了保证设计达到预期要求,各种设计的约束输入以及仿真验证也穿插其间。在EDA工具上验证无误后,则可以生成下载配置文件烧录到实际器件中进行板级的调试工作。从图1-9中的箭头示意不难看出,设计的迭代性是FPGA开发过程中的一个重要特点,这就要求设计者从一开始就要非常认真细致,否则后续的很多工作量可能就是不断返工。

当然了,对于没有实际工程经验的初学者而言,这个流程图可能不是那么容易理解。不过没有关系,我们会简化这个过程,从实际操作角度,以一个比较简化的顺序的方式来理解这个流程。如图1-10所示,从大的方面来看,FPGA开发流程不过是三个阶段,第一个阶段是概念阶段,或者也可以称之为架构阶段,这个阶段的任务是项目前期的立项准备,如需求的定义和分析、各个设计模块的划分;第二个阶段是设计实现阶段,这个阶段包括编写RTL代码、并对其进行初步的功能验证、逻辑综合和布局布线、时序验证,这一阶段是详细设计阶段;第三个阶段是FPGA器件实现,除了器件烧录和板级调试外,其实这个阶段也应该包括第二个阶段的布局布线和时序验证,因为这两个步骤都是和FPGA器件紧密相关的。我们这么粗略的三个阶段划分并没有把FPGA整个设计流程完全的孤立开来,恰恰相反,从我们的阶段划分中,我们也看到FPGA设计的各个环节是紧密衔接、相互影响的。

第2章 FPGA板级电路设计

本章导读

本书所论及的所有实践工程将基于一套由多个电路板组成的FPGA开发平台,这套开发平台既有以Altera Cyclone IV FPGA为基础的核心板,也有诸如AD/DA、UART、USB2.0、CMOS摄像头、AV解码器、工业液晶屏接口、触摸屏接口、VGA接口、HDMI接口等外设为主的子板。本章将对基于FPGA的最小系统的各个设计要素进行讨论,同时也会对我们将要使用的这套开发平台的各个电路板进行简要的介绍,同时也会穿插着对电路设计的要点进行论述。

2.1 FPGA板级电路设计五要素

和纯粹基于PC的各种软件编程不同,FPGA器件的学习仅靠一台PC是不够的。对于任何一个学习者而言,能够拥有一块板载FPGA器件的电路板平台是非常必要的。当然了,前期的开发调试肯定还是离不开PC的。和基于PC的软件编程(如在Visual C++工具上实现C/C++语言的编程,在各种网络编程工具上实现.net/java语言的编程)相同的是,可编程器件的开发也有专用的语言(目前主流的语言是Verilog和VHDL)和专用的开发工具(如Xilinx公司的开发工具ISE/Vivado,Altera公司的开发工具Quartus II以及其他的第三方工具)。不同点也显而易见,PC的软件编程由于最终就是实现在PC本地或者网络上,那么它就不需要开发者配备额外的设备;而基于FPGA器件的开发,其最终的功能是需要实现在特定的FPGA器件内部的,因此开发者势必需要首先具备载有FPGA器件的一块电路板。除此以外,还需要具备一条用于连接PC和可编程器件的用于传输配置数据流的连接线,我们通常称此连接线为“下载线”。

如图2-1所示,对于任何一个FPGA开发者而言,一条下载线和一块板载FPGA器件的电路板应该说是最基本的硬件配备了。电路板的作用不言而喻,我们设计的目的便是希望通过对板载的FPGA器件编程,以控制电路板上的其他外设按照我们既定的功能运转;而下载线是起到连接PC和电路板的作用,它将协助开发人员将已经在PC的软件工具上预先设计好的功能配置数据流固化到电路板的FPGA器件中(可用于前期的开发、调试以及产品化后的升级)。

既然需要一块板载FPGA器件的电路板,那么这块电路板该如何设计呢?如图2-2和图2-3所示,分别为Xilinx公司最新的Zynq Soc FPGA开发板和Altera公司最新的Cyclone V Soc FPGA开发板。乍一看,整齐有序且美观大方,丰富的外设资源,恐怕大伙都要垂涎三尺了,而要咱们初学者也DIY一个,那真叫“比骆驼穿过针的眼还难”。

别心慌,先抛开电路板各种各样复杂的外设功能,我们可以先探讨一下单纯实现一片FPGA器件的核心电路(即能让FPGA工作起来的最基本且元器件最少的电路)是如何设计的。相比于其他嵌入式系统芯片的电路设计,单纯的FPGA核心电路其实还算是非常简单的。根据过往的设计经验,笔者简单地将FPGA核心电路归纳为五部分:电源电路、时钟电路、复位电路、配置电路和外设

电路,我们姑且称之为五要素。下面我们将逐一探讨各个要素在FPGA器件的运行中扮演的角色及其常规电路的设计方式。

2.1.1 能量供应——电源电路

自然界的任何生物体都需要有能量的供应,人需要吃饭喝水、花草树木需要阳光雨露、鸟兽虫鱼也都有可食之物。人工智能也是如此,炉灶需要煤气、汽车需要加油、亮灯需要供电……小小的芯片工作起来也离不开能量的供给。

FPGA器件需要有电源电压的能量供应才能工作。尤其对于规模较大的器件,其功耗也相对较高,其供电系统的好坏将直接影响到整个开发系统的稳定性。所以,设计出高效率、高性能的FPGA供电系统具有极其重要的意义。

不同的FPGA器件、不同的应用方式会有不同的电压电流的需求。如图2-4所示,简单归纳,可以将FPGA器件的电压需求分为三类:核心电压、I/O电压和辅助电压。

核心电压是FPGA内部各种逻辑电路正常工作运行所需要的基本电压,该电压用于保证FPGA器件本身的工作。通常选定某一款FPGA器件,其核心电压一般也都是一个固定值,不会因为电路的不同应用而改变。核心电压值可以从官方提供的器件手册中找到。

I/O电压顾名思义便是FPGA的I/O引脚工作所需的参考电压。在引脚排布上,FPGA与ASIC最大的不同,便是FPGA所有的可用信号引脚基本都可以作为普通I/O使用,其电平值的高低完全由器件内部的逻辑决定。当然了,它的高低电平标准也受限于所供给的I/O电压。任何一片FPGA器件,它的I/O引脚通常会根据排布位置分为多个bank。同一个bank内的所有I/O引脚所供给的I/O电压是共用的,可以给不同的bank提供不同的I/O电压,它们彼此是不连通的。因此,不同bank的不同I/O电压为FPGA器件的不同接口应用提供了灵活性。这里举一个例子,Cyclone III系列器件的某些bank支持LVDS差分电平标准,此时器件手册会要求设计者给用于LVDS差分应用的bank的I/O电压供1.5V电压,这就不同于一般的LVTTL或LVCOMS的3.3V供电需求。而一旦这些用于LVDS传输的I/O bank电压供给为1.5V,那么它就不能作为3.3V或其他电平值标准传输使用了。

除了前面提到的核心电压和I/O电压,FPGA器件工作所需的其他电压我们通常都称为辅助电压。例如FPGA器件下载配置所需的电压,当然了,这里的辅助电压值可能与核心电压值或I/O电压值是一致的。很多FPGA的PLL功能块的供电会有特殊要求,也可以认为是辅助电压。由于PLL本身是模拟电路,而FPGA其他部分的电路基本是数字电路,因此PLL的输入电源电压也很有讲究,需要专门的电容电路做滤波处理,而它的电压值一般和I/O电压值不同。

目前比较常见的供电解决方案主要是LDO稳压器、DC/DC芯片或电源模块。LDO稳压器为电流输出要求不高的应用提供了简单廉价的解决方案;而基于DC/DC芯片的解决方案能够保证较高的电源转换效率,散热容易一些,输出电流也更大,是大规模FPGA器件的最佳选择;而电源模块简单实用并且能够有更稳定的性能,只不过价格通常比较昂贵,在成本要求不敏感的情况下,是FPGA电源设计的一种最为简单快捷的解决方案。总而言之,对于电源方案的选择以及电源电路的设计,一定要事先做好前期的准备工作,如以下几点是必须考虑的:

·器件需要供给几档电压,压值分别是多少?

·不同电压档的最大电流要求是多少?

·不同电压档是否有上电顺序要求?(大部分的FPGA器件是没有此项要求的)

·电源去耦电容该如何分配和排布?

·电源电压是否需要设计特殊的去耦电路?

关于设计者需要确定的各种电气参数以及电源设计的各种注意事项,其实在器件厂商提供的器件手册(handbook)、应用笔记(application notes)或是白皮书(white paper)中一般都会给出参考设计。所以,设计者若希望能够较好地完成FPGA器件的电源电路设计,事先阅读大量的官方文档是必须的。

说到电源,也不能不提一下地端(GND)电路的设计,FPGA器件的地信号通常是和电压配对的。一般应用中,统一共地连接是没有问题的,但也需要注意特殊应用中是否有隔离要求。FPGA器件的引脚引出的地信号之间通常是导通的,当然也不能排除有例外的情况。如果漏接个别地信号,器件通常也能正常工作,但是笔者也遇到过一些特殊的状况,如Altera的Cyclone III器件底部的中央有个接地焊盘,如果设计中忽略了这个接地信号,那么FPGA很可能就不干活了,因为这个地信号是连接FPGA内部的很多中间信号的地端,它并不和FPGA的其他地信号直接导通。因此,在设计中也一定要留意地信号的连接,电源电路的任何细小疏忽都有可能导致器件的罢工。

2.1.2 心脏跳动——时钟电路

人体拥有非常奇妙的循环系统,而心脏是这个循环系统的发动机,它向全身各部位供应血液。如图2-5所示,心脏有四个空腔,上面两个叫心房(atrium),下面两个叫心室(ventric1e)。右心房收纳全身的静脉血,通过右心室从肺动脉泵出,此时肺动脉中流的是静脉血,通过肺中的气体交换,变成含氧丰富的动脉血,由肺静脉送至左心房,再通过左心室的主动脉泵向全身各个组织器官以满足其正常生理活动的需要。这便是人体无时无刻不在进行着的心跳过程。

了解了心脏之于人体内部循环系统的作用,反观时钟信号之于FPGA器件,其实也有着异曲同工之妙。伴随着每一次的心跳过程,都有血液的运转和流动;同样的,伴随着每一个时钟脉冲的产生,也都有数字信号的输入和输出。对于在FPGA器件内实现的任何时序逻辑应用,失去了时钟信号便意味着信号的传输将处于停滞状态。时钟信号的重要性可见一斑。

如图2-6所示,理想的时钟模型是一个占空比为50%且周期固定的方波。Tclk为一个时钟周期,T1为高脉冲宽度,T2为低脉冲宽度,Tclk=T1+T2。一般情况下,FPGA器件内部的逻辑会在每个时钟周期的上升沿执行一次数据的输入和输出处理,而在两个时钟上升沿的空闲时间里,则可以用于执行各种各样复杂的处理。而一个比较耗时的复杂运算过程,往往无法在一个时钟周期内切割成几个耗时较小的运算,然后在数个时钟上升沿后输出最终的运算结果。时钟信号的引入,不仅让所有的数字运算过程变成“可量化”的,而且也能够将各种不相关的操作过程同步到一个节拍上协同工作。

FPGA器件的时钟信号源一般来自外部,我们通常使用晶体振荡器(简称晶振)产生时钟信号。当然了,一些规模较大的FPGA器件内部都会有可以对时钟信号进行倍频或分频的专用时钟管理模块,如PLL或DLL。由于FPGA器件内部使用的时钟信号往往不只是供给单个寄存器使用,因为在实际应用中,成百上千甚至更多的寄存器很可能共用一个时钟源,那么从时钟源到不同寄存器间的延时也可能存在较大偏差(我们通常称为时钟网络延时),而我们知道,这个时间差过大是很要命的。因此,FPGA器件内部设计了一些称之为“全局时钟网络”的走线池。通过这种专用时钟网络走线,同一时钟到达不同寄存器的时间差可以被控制到很小的范围内。而我们又如何能保证输入的时钟信号能够走“全局时钟网络”呢?有多种方式,对于外部输入的时钟信号,只要将晶振产生的时钟信号连接到“全局时钟专用引脚”上;而对于FPGA内部的高扇出控制信号,通常工具软件会自动识别此类信号,将其默认连接到“全局时钟网络”上,而设计者若是不放心,也可通过编译报告进行查看,甚至可以手动添加这类信号。关于时钟电路的设计和选型,有如下几个基本事项需要考虑:

·系统运行的时钟频率是多少?(可能有多个时钟)

·是否有内部的时钟管理单元可用(通常是有)?它的输入频率范围是多少(需要查看器件手册进行确认)?

·尽可能选择专用的时钟输入引脚。

·时钟走线尽可能短,有条件最好做包地处理,确保外部输入时钟信号干净、稳定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1221234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[高质量代码分享] JavaScript 空值判断(工具)函数

[高质量代码分享] JavaScript 空值判断(工具)函数 文章目录 [高质量代码分享] JavaScript 空值判断(工具)函数 一、代码分享 二、代码解读 2.1 主要特点 2.1.1. **功能全面** 2.1.2. **配置选项灵活** 2.1.3. **类型处理层次清晰** 2.2 实现细节分析 2.2.1. 基本类型处理 2…

强烈安利专科生必用9款一键生成论文工具测评

强烈安利专科生必用9款一键生成论文工具测评 为什么需要一份权威的论文写作工具测评 随着学术研究的日益繁重,专科生在撰写论文过程中常常面临时间紧张、资料查找困难、格式不规范等问题。而AI写作工具的出现,为这一难题提供了新的解决方案。为了帮助专科…

吐血推荐9个AI论文软件,专科生搞定毕业论文!

吐血推荐9个AI论文软件,专科生搞定毕业论文! AI 工具让论文写作不再难 对于专科生来说,毕业论文可能是一道难以逾越的门槛。从选题、查资料到撰写、降重,每一步都充满了挑战。而随着 AI 技术的不断进步,越来越多的 AI …

影悦电影推荐系统的设计与实现开题报告

影悦电影推荐系统的设计与实现开题报告 一、研究背景与意义 (一)研究背景 在数字化浪潮与消费升级的双重驱动下,影视行业迎来了内容爆发式增长的新阶段。据相关行业报告显示,全球每年新增电影作品超万部,国内线上影视…

YOLO26改进 - 注意力机制 | 多扩张通道细化器MDCR 通过通道划分与异构扩张卷积提升小目标定位能力

前言 本文介绍了一种在YOLO26目标检测模型中引入高效解码器模块EMCAD的创新方法,以提升模型在资源受限场景下的性能与效率。EMCAD由多个模块构成,其中核心的EUCB(高效上卷积块)通过上采样、深度可分离卷积、激活归…

小额消费贷款产品特征抽取与推荐分析平台的设计与实现开题报告

一、研究背景与意义 (一)研究背景 随着数字金融的快速发展与居民消费观念的升级,小额消费贷款已成为满足大众短期资金周转、品质消费需求的重要金融工具。近年来,我国小额消费贷款市场规模持续扩大,参与机构不断增多…

YOLO26改进策略【Backbone/主干网络】| ICLR-2023 替换骨干网络为:RevCol 一种新型神经网络设计范式

一、本文介绍 本文记录的是基于RevCol的YOLO26目标检测骨干网络改进方法研究。 RevCol是一种新型神经网络设计范式,它由多个子网(列)及多级可逆连接构成,正向传播时特征逐渐解缠结且保持信息。可逆变换借鉴可逆神经网络思想,设计多级可逆单元用于解决模型对特征图形状的…

闲置京东超市卡变现认准京顺回收

在消费场景愈发多元化的当下,预付卡券闲置成了常见现象。相关数据显示,国内每年沉淀的闲置卡券规模超千亿元,其中电商平台卡券占比高达38%。大量京东超市卡因“遗忘使用”“需求改变”等原因被搁置,造成资源极大浪…

微服务架构设计大比拼:独立数据库 VS 集中式DAO,谁才是真香定律?

前言各位码农朋友们,今天咱们来聊一个让人又爱又恨的话题——微服务的数据层设计。相信不少小伙伴都经历过这样的场景:领导一拍脑袋说要搞微服务拆分,结果拆着拆着就发现,哎呀,数据库连接不够用了!这感觉就…

Span和mspan的关系在go中是怎么定义的

在 Go 语言底层实现中,“Span” 并不是一个独立的关键字或类型,而是指由 mspan 结构体管理的一段连续的、以 Page(页)为单位的内存空间。一个 mspan 管理着一个 Span(一段连续内存),且一个 mspan 只能有一种规格…

提示工程架构师必看:智能法律助手中的提示工程实战指南

提示工程架构师必看:智能法律助手中的提示工程实战指南 关键词:提示工程、智能法律助手、自然语言处理、法律应用、实战指南、架构设计、优化策略 摘要:本文深入探讨智能法律助手中提示工程的实战应用。首先阐述提示工程在自然语言处理及法…

YOLO26最新创新改进系列:Involution新卷积网络算子融合于YOLO网络,从经典的图像滤波方法中汲取灵感,更大的空间范围中总结上下文信息,有效涨点!

YOLO26最新创新改进系列:Involution新卷积网络算子融合于网络,从经典的图像滤波方法中汲取灵感,更大的空间范围中总结上下文信息,有效涨点! 购买相关资料后畅享一对一答疑! 畅享超多免费持续更新且可大幅…

YOLO26最新创新改进系列:融合简单但功能强大的主干网络-BoTNet模块,获得CNN+自然语言处理技术的优势,有效提升检测效果!

YOLO26最新创新改进系列:融合简单但功能强大的主干网络-BoTNet模块,获得CNN自然语言处理技术的优势,有效提升检测效果! 购买相关资料后畅享一对一答疑! 畅享超多免费持续更新且可大幅度提升文章档次的纯干货工具&…

星图 ai.csdn.net CSDN 的「大模型工坊」只能“一键微调”官方底座,不支持真正的预训练/RLHF,训练完可以私有化部署,但可控度、底座选择、数据安全都弱于公有云

结论一句话:CSDN 的「大模型工坊」只能“一键微调”官方底座,不支持真正的预训练/RLHF,训练完可以私有化部署,但可控度、底座选择、数据安全都弱于公有云。 下面给你逐项拆开看。 ① 产品定位(官网自述) …

CSS - code

CSS code 倾斜按钮<style>button {width: 180px;height: 80px;background: #409eff;border: none;outline: none;display: block;margin: 0 auto;color: #fff;font-size: 18px;border-radius: 15px 0;position: relative;transform: skew(-20deg);}button::before {posit…

YOLO26改进策略【Backbone/主干网络】| 替换骨干为PoolFormer,基于平均池化的Token混合器,通过聚合局部邻域特征实现信息交互

一、本文介绍 本文记录的是基于PoolFormer的YOLO26骨干网络改进方法研究。 PoolFormer提出了创新的MetaFormer通用架构,通过极简单的池化操作实现Token混合,能以低参数和计算成本高效捕捉图像全局与局部特征。将PoolFormer应用到YOLO26的骨干网络中,通过其分层结构和Token…

YOLO26改进策略【Backbone/主干网络】| CVPR 2024 替换骨干为InceptionNeXt,将大核深度卷积分解为四个并行分支,平衡速度与精度

一、本文介绍 本文记录的是基于InceptionNeXt的YOLO26骨干网络改进方法研究。 InceptionNeXt提出了新颖的Inception 深度卷积,将大核深度卷积分解为四个并行分支,有效提升计算效率并保持大感受野。将InceptionNeXt应用到YOLO26的骨干网络中,利用其独特的卷积结构,在处理图…

YOLO26改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR LSKNet (附网络详解和完整配置步骤)

一、本文介绍 本文记录的是基于LSKNet的YOLO26骨干网络改进方法研究。 LSKNet利用大核卷积获取上下文信息进行辅助,使模型能够产生具有各种大感受野的多个特征的同时,动态地根据输入调整模型的行为,使网络更好地适应图像中不同物体的检测需求。 本文在YOLO26的基础上配置…

YOLO26改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR ConvNeXt V2 (附网络详解和完整配置步骤)

一、本文介绍 本文记录的是将ConvNeXt V2应用到YOLO26中的改进方法研究。 本文将ConvNeXt V2应用于YOLO26,一方面利用全卷积掩码自动编码器在训练时优化特征学习,减少模型对大规模标注数据的依赖;另一方面,通过全局响应归一化层增强特征竞争,缓解特征坍塌问题,提高特征…

YOLO26改进策略【Backbone/主干网络】| 替换骨干网络为CVPR-2024 PKINet 获取多尺度纹理特征,适应尺度变化大的目标

一、本文介绍 本文记录的是利用PKINet优化YOLO26的目标检测方法研究。 在遥感图像目标检测中,目标尺度变化大,本文引入PKINet来捕获多尺度纹理特征,并在YOLO26的基础上配置了原论文中PKINET_T, PKINET_S, PKINET_B三种模型,以满足不同的需求。 文章目录 一、本文介绍 二、…