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

这篇具有很好参考价值的文章主要介绍了从1开始学习FPGA——FPGA的一些基础知识(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一:FPGA的开发流程

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

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

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

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

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

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

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

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内部的基本结构如下图所示:

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

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

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

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

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

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

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

2.2 CLB(Xilinx)

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

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

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

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

2.1.1 LUT6(六输入查找表)

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

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

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(使能信号)。文章来源地址https://www.toymoban.com/news/detail-846147.html

到了这里,关于从1开始学习FPGA——FPGA的一些基础知识(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA基础知识

    FPGA是在PAL、PLA和CPLD等可编程器件的基础上进一步发展起来的一种更复杂的可编程逻辑器件。它是ASIC领域中的一种半定制电路,既解决了定制电路的不足,又克服了原有可编程器件门电路有限的缺点。 由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过

    2024年02月03日
    浏览(30)
  • 第一篇 FPGA基础知识

    FPGA的全称为Field-ProgrammableGateArray,即现场可编程门阵列。 在开始学习FPGA之前,同学们首先应该清楚地了解FPGA的概念,明白FPGA到底是什么东西,可以用来做什么。FPGA是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物,是作为专用集成电路(ASIC)领域中的一种半定制

    2024年02月07日
    浏览(51)
  • FPGA基础知识点

    基础知识 逻辑值 逻辑0:表示低电平,也就是对应电路GND 逻辑1:表示高电平,也就是对应电路VCC 逻辑X:表示未知,有可能是高电平也有可能是低电平 逻辑Z:表示高阻态,外部没有激励信号,是一个悬空状态 数字进制格式 Verilog数字进制格式包括 二进制(b) , 八进制(

    2024年02月03日
    浏览(39)
  • 全面解析FPGA的基础知识

    FPGA(Field- Programmable Gate Array),即现场可编程门阵列,它是在 PAL、GAL、CPLD等可编程器件的基础上进一步发展出来的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 FPGA 普遍用

    2024年01月25日
    浏览(31)
  • FPGA基础知识-行为级建模

    目录 学习目标 学习内容 1.结构化过程语句 2.过程赋值语句 3.时序控制 4.条件语句 5.多路分支语句 6.循环语句 7.顺序块和并行块      8.生成块 学习时间 学习产出 解释结构化过程always和initial在行为级建模中的重要性, 定义阻塞( blocking〉和非阻塞( non-blocking )过程性赋值语句

    2024年02月12日
    浏览(40)
  • FPGA基础知识-开关级建模

    目录 学习目标 学习内容 1.MOS开关 2.CMOS开关 3.双向开关  4.电源和地 5.阻抗开关 6.开关中的延迟说明 学习时间 学习总结 提示:这里可以添加学习目标 1.能够描述基本 MOS开关:nmos.pmos和cmos。 2.理解双向传输开关、电源和地的建模方法。 3.识别阻抗MOS开关。 4.解释在基本MOS 开关

    2024年02月10日
    浏览(29)
  • FPGA基础知识-任务和函数

    目录 学习目标 学习内容 1.任务和函数的区别 2.任务 3.函数 学习时间 学习总结 1.理解任务和函数之间的区别。 2.理解定义任务所需的条件,学会任务的声明和调用。 3.理解定义函数所需的条件.学会函数的声明和调用。 提示:这里可以添加要学的内容      在 Verilog中,任务

    2024年02月10日
    浏览(29)
  • FPGA基础知识-实用建模技术

    目录 学习目标: 学习内容: 1.过程连续赋值 2.改写参数 3.条件编译和执行 4.时间尺度 5.常用的系统任务 学习时间: 学习总结 提示:这里可以添加学习目标 1.掌握怎样在模块调用时用defparam语句重新定义参数值J解释条件编译和Verilog 插述部件的执行。· 2.认识和理解系统任务

    2024年02月10日
    浏览(30)
  • FPGA基础知识-时序和延迟

    目录 学习目标: 学习内容: 1.延迟模型的类型 2.路径延迟建模 3.时序检查 4.延迟反标注 学习时间: 学习总结 提示:这里可以添加学习目标 ·鉴别Verilog 仿真中用到的延迟模型的类型,分布延迟、集总( lumped)延迟和引脚到引脚〔路径)的延迟。 能解释rise. fall和 turn-off延迟

    2024年02月09日
    浏览(29)
  • FPGA基础知识-门级建模

    目录 学习目标 学习内容 1.门的类型  2.门延迟 学习时间 学习小结 学习Verilog 提供的门级原语 理解门的实例引用、门的符号以及andor,bufnot类型的门的真值表 学习如何根据电路的逻辑图来生成verilog描述 讲述门级设计中的上升、下降和关断延迟 解释门级设计中的最小、最大和

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包