从1开始学习FPGA——FPGA的一些基础知识(1)

        这应该是笔者的第一篇CSDN博客了,之所以起名叫从1开始学习FPGA,原因在于笔者已经有一定的FPGA基础,并且使用FPGA完成了一些项目。但是基本没有系统成理论的学习FPGA,经常是用到哪看到哪,导致很多之前用过的东西往往经过一段时间就忘了。开始写CSDN博客更多的是当一个笔记使用,并且不断监测自己学习,如果我的文章可以帮助到读者是更好不过的了。如果存在错误还望帮助指出,感激不尽。

一:FPGA的开发流程

1.需求分析及模块划分:任何工程开始都是从需求开始的,这是开发的基础。确定好需求以后,就要进行模块划分。FPGA终归是硬件设计,硬件设计就可以按照一块块进行功能划分,像是接口部分(IIC、SPI),运算部分(FFT、FIR),每一部分都可以按照既定的功能进行单独开发,开始按照功能进行合理的分配划分是较为重要的一件事;

2.代码设计及行为仿真:代码设计好理解,就是按照功能写相应的RTL级代码(Verilog或VHDL),行为仿真则是针对这一部分的RTL级代码进行仿真验证的,不同的FPGA厂家有不同的仿真软件,这个后面讲到仿真再细说;

3.综合优化、综合约束、功能仿真:这里先说一下综合的概念,综合(synthesis)指的是将RTL级的代码转换为基本门电路的过程。也就是说将语言描述的电路逻辑转化成与门、或门、非门、触发器等基本逻辑单元的互连关系。也就是我们常说的门级网表。给个例子(图片来源于知乎罗成)

综合约束则是给综合的时候添加的一些约束条件,这样才可以保证我们生成的基本门电路可以满足我们的设计要求,后面说到的时候再细讲;

功能仿真是针对基本门电路的仿真

3.时序约束、时序仿真、实现:实现(implement)是FPGA设计的下一步,上面提到综合的含义是指将RTL语言转换为门级电路,实现的含义则是指将门级电路进行布局布线的处理,从这一步开始才是真正的下沉到硬件端。FPGA的底层并不是真的一个个与或非门和触发器,而是由一个个可编程逻辑块(CLB)组成的。实现的含义就是告诉FPGA我们应该怎样连接这些CLB,从而实现我们需要的逻辑功能。不同的FPGA芯片、不同的约束条件都会产生不同的布局布线结果。

时序仿真和时序约束则是我认为的FPGA设计过程中第二重要的问题了(第一当然是功能设计,功能都没法实现就不要说别的问题了),具体的设计方法会在后面细讲,这也是我从1开始学习的主要原因。

4.板级调试:就是下载到板子里进行调试,没必要细讲

二:FPGA的内部组成——CLB

        目前市面上常见的FPGA大体上由一下几部分组成:可编程逻辑块(CLB,configurable)、输入输出单元(IOB,IO Bank),内嵌存储器、时钟资源管理器(DCM)、布线资源、其他硬件外设。本文主要讲解了其中最重要的CLB,其他单元待后面使用到的时候在进行细讲

        CLB是FPGA最核心的资源。目前市面上主流的FPGA主要是Xilinx和Altera两家为主,虽然名称上可能有些区别,但实际内部结构还是相似的。一般芯片手册中的逻辑资源大都是指的CLB。

2.1 CLB(Altera)

        以Cyclone Ⅲ这款器件为例子,每个CLB中间包含16个逻辑资源单元(logic element),LE是能实现用户逻辑功能的最小单位。LE内部的基本结构如下图所示:

        从图中可以看到,每个LE内部除了大量的逻辑门以外,还包含了一些其他的部分。从左往右看,依次进行介绍。

 LUT:查找表,这部分是实现FPGA组合逻辑功能的核心。如图所示的芯片包含了一个四输入的查找表,查找表的功能类似一个四选一选择器。在我们使用FPGA的组合逻辑功能时,FPGA的综合过程会将所有的结果写入LUT中,在实际运行时,实际上是将data1到data4的数据当作并行地址线使用,直接在LUT中找到相应地址对应的数据并输出出来。因此从硬件层面上每个LUT可以当作分布式RAM或者是移位寄存器使用。

同步置位和清除逻辑:根据LAB侧的时钟对时序逻辑进行同步置位及同步清除。

异步清除逻辑:主要处理的是芯片级的复位,没什么需要多说的。

进位链:主要是实现进位操作,协助进行一些计算。

可编程寄存器:一个可编程的寄存器,用于实现时序电路的一些操作

2.2 CLB(Xilinx)

        以7系列的FPGA为例子,其组成如下图所示:

可以看到,7系列的CLB分为两种,分别是CLBLL及CLBLM。其中每个CLBLL包含了两个SLICEL,而CLBLM包含了一个SLICEL以及一个SLICEM。无论是SLICEL还是SLICEM,都包含了4个6输入查找表(LUT6)、3个数据选择器(MUX)、1个进位链(Carry Chain)和8个触发器(Flip-Flop),尽管大体上结构是相同的,两者的LUT6存在着一定的差异,进而导致了两者的不同。

2.1.1 LUT6(六输入查找表)

LUT6可以实现一下几部分功能:

1)逻辑函数发生器:从LUT6的结构中可以看出来,任何6输入以下的逻辑运算都可以通过一个LUT6来实现,通过每个slice中的数据选择器进行级联,可以实现更多输入的逻辑函数发生器。

2)ROM:每个LUT6都可以配置为一个64×1的ROM,其中64为深度,1为ROM的宽度,同样结合数据选择器可以将LUT6进行级联,配置为更大深度的ROM。

3)分布式RAM:从上面的查找表功能可以看到,SLICEM可以配置为分布式RAM以及移位寄存器。当配置为分布式RAM的时候,RAM的写操作为同步逻辑,读操作为异步逻辑,如果要实现同步读操作,则需要占用额外的触发器,这样的坏处是多了一个时钟的时延,但是相应的提升了系统的性能。每个LUT可以配置为一个64×1的分布式RAM。

4)移位寄存器:每个LUT6可以被配置为一个深度为32的移位寄存器。

2.1.2 MUX(多路选择器)

        每个SLICE中含有三个MUX,分别称为F7AMUX、F7BMUX、F8MUX,其中,F7AMUX、F7BMUX的输入端为两个LUT,即以LUT的输出作为MUX的输入,F8MUX的输入则是F7AMUX、F7BMUX。因此,每个LUT可以被配置为一个4选1MUX(两个输入作为地址端输入,四个输入端口作为信号端输入),两个LUT配合一个MUX7可以作为一个8选1MUX;4个LUT配合两个MUX7及一个MUX8可以作为一个16选1的MUX使用。

2.1.3 进位链

        进位链用于实现加法以及减法运算,每个进位链中包含了2输入异或门。

2.1.4 触发器

        每个SLICE中含有8个触发器,其中4个只能被配置为边沿触发(FF),另外4个可以被配置为边沿触发或电平触发(FF/L)。当后者被配置为电平触发时,前者将无法使用。当这8个触发器被配置为D触发器时,输入信号包含:CLK(时钟信号),S/R(置位/复位信号,高电平有效),CE(使能信号)。

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IP(Intellectual Property)即知识产权。美国 Dataquest 咨询公司将半导体产业的 IP 定 义为“用于 ASIC 或 FPGA 中的预先设计好的电路功能模块”。简而言之,这里的 IP 即电 路功能模块。 IP 核在数字电路中常用于比较复杂的功能模块(如 FIFO、 RAM、 FIR 滤波 器、 SDRAM 控制器、 PCIE 接口等)设计成参数可修改的模块,让其他用户可以直接调用 这些模块。随着设计规模增大,复杂度提高,使用 IP 核可以提高开发效率,减少设计和调 试时间,加速开发进程,降低开发成本,是业界的发展趋势。利用 IP 核设计电子系统,引 用方便,修改基本元件的功能容易。具有复杂功能和商业价值的 IP 核一般具有知识产权, 尽管 IP 核的市场活动还不规范,但是仍有许多集成电路设计公司从事 IP 核的设计、开发 和营销工作。 IP 核有三种不同的存在形式: HDL 语言形式,网表形式、版图形式。分别对应我们常 说的三类 IP 内核:软核、固核和硬核。这种分类主要依据产品交付的方式,而这三种 IP 内核实现方法也各具特色。 PLL(Phase Locked Loop,即锁相环)是最常用的 IP 核之一,其性能强大,可以对输 入到 FPGA 的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望 时钟,实际上,即使不想改变输入到 FPGA 时钟的任何参数,也常常会使用 PLL,因为经 过 PLL 后的时钟在抖动(Jitter)方面的性能更好一些。 Altera 中的 PLL 是模拟锁相环,和 数字锁相环不同的是模拟锁相环的优点是输出的稳定度高、相位连续可调、延时连续可 调;缺点是当温度过高或者电磁辐射过强时会失锁(普通环境下不考虑该问题)。
开始有计划写这本书的时候, Altera 还叫 Altera, 还没有加入 Intel 的大家庭, Xilinx 的 ZYNQ 也才刚刚开始有人探索, Altera 大学计划第一次将亚洲创新大赛由传统的 SOPC 大赛 换成了 SOC 大赛,软核变硬核,性能翻几番。 那个时候,能出一本认认真真讲 FPGA 设计的 书, 会得到非常高的评价。 而我,则由于工作变动, 中间拖沓了半年,当半年后再来准备动 笔时,才恍然领悟到, Altera 即将成为 Intel 的可编程事业部, 基于嵌入式硬核的 SOC FPGA 芯片开始获得了大量的关注,已经有不少大的小的公司在着手这方面的教学内容与板卡设 计。原本计划编写的内容在新技术新产品面前,好像显得非常的不值一提。 总感觉当大家把 目光都投在了前沿的可编程 SOC 上的时候,我再编写这样一本单纯讲解 FPGA 数字逻辑设计 的书会显得与时代脱节。 于是,编书的动力没有了那么强烈, 这事,又这么放了下来。 在这期间,我也向着 SOC FPGA 做了积极努力的探索, 学习了 Cyclone V SOC 的开发流 程, 从裸机到基于 Linux 嵌入式系统,实现了 FPGA 和 ARM Cortex-A9 CPU 之间的双向控制和 数据传输。 在做完这之后,就感觉遇到了瓶颈, 瓶颈主要来自于两个方面,第一是对 Linux 软件开发不熟悉,而 SOC FPGA 的处理器端应用又恰好需要对 Linux 的底层和应用都需要一 定的了解。 另一方面是对 FPGA 设计经验的欠缺,使用到 SOC FPGA 架构的场合,往往都是 一些较为复杂的系统,在系统中,本身就对 FPGA 的设计内容要求较高, 如视频流的处理, 运算加速逻辑的设计, 通信接口的实现等。 所以, 欠缺了任何一方面的知识, 在使用 SOC FPGA 架构的时候都会困难重重。如果 FPGA 方面没有踏实的功底,那么使用 SOC FPGA 也仅 仅只能是当做通用的嵌入式处理器使用, 无法将其结构的优势发挥出来 。 如果没有 ARM 嵌 入式处理器方面的踏实功底, SOC FPGA 也仅仅只能是个 FPGA。 所以, 编写这样一本单纯讲解 FPGA 数字逻辑的书还是非常有意义的,因为这才是真正合理应用 SOC FPGA 优势架构的 基础。
第一章、为什么工程师要掌握FPGA开发知识? 5 第二章、FPGA基本知识与发展趋势 7 2.1 FPGA结构和工作原理 7 2.1.1 梦想成就伟业 7 2.1.2 FPGA结构 8 2.1.3 软核、硬核以及固核的概念 15 2.1.4 从可编程器件发展看FPGA未来趋势 15 第三章、FPGA主要供应商与产品 17 3.1.1 赛灵思主要产品介绍 17 第四章、FPGA开发基本流程 29 4.1 典型FPGA开发流程与注意事项 29 4.2 基于FPGA的SOC设计方法 32 基于FPGA的典型SOC开发流程为 32 第五章、FPGA实战开发技巧 33 5.1 FPGA器件选型常识 33 5.1.1器件的供货渠道和开发工具的支持 33 5.1.2 器件的硬件资源 33 5.1.3 电气接口标准 34 5.1.4 器件的速度等级 35 5.1.5 器件的温度等级 35 5.1.6 器件的封装 35 5.1.7 器件的价格 35 5.2 如何进行FPGA设计早期系统规划 36 5.3.综合和仿真技巧 37 5.3.1 综合工具XST的使用 37 5.3.2 基于ISE的仿真 42 5.3.3 和FPGA接口相关的设置以及时序分析 45 5.3.4 综合高手揭秘XST的11个技巧 51 5.4 大规模设计带来的综合和布线问题 52 5.5 FPGA相关电路设计知识 54 FPGA开发全攻略—工程师创新设计宝典 上册基础篇 5.5.1 配置电路 54 5.5.2 主串模式——最常用的FPGA配置模式 56 5.5.3 SPI串行Flash配置模式 58 5.5.4 从串配置模式 62 5.5.5 JTAG配置模式 63 5.5.6 System ACE配置方案 64 5.6 大规模设计的调试经验 68 5.6.1 ChipScope Pro组件应用实例 68 5.7 FPGA设计的IP和算法应用 74 5.7.1 IP核综述 74 5.7.2 FFT IP核应用示例 75 5.8 赛灵思 FPGA的专用HDL开发技巧 79 5.8.1 赛灵思 FPGA的体系结构特点 79 5.8.2 赛灵思 FPGA 芯片专用代码风格 79 ISE与EDK开发技巧之时序篇 83 5.10 新一代开发工具ISE Design Suit10.1介绍 85 5.10.1 ISE Design Suit10.1综述 85 5.10.2 ISE Design Suit 10.1的创新特性 85 5.11 ISE与第三方软件的配合使用技巧 92 5.11.1 Synplify Pro软件的使用 92 5.11.2 ModelSim软件的使用 99 5.11.3 Synplify Pro、ModelSim和ISE的联合开发流程 104 5.11.4 ISE与MATLAB的联合使用 105 5.12 征服FPGA低功耗设计的三个挑战 108 5.13 高手之路——FPGA设计开发中的进阶路线 111 附录一、FPGA开发资源总汇 112 附录二、编委信息与后记 113

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值