[学习] FPGA之基本原理(可能理解不对)

 >> 什么是fpga

 

FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中 的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
  FPGA采用了逻辑单元阵列 LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:

a) 采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

b) FPGA可做其它全定制或半定制ASIC电路的中试样片。

c) FPGA内部有丰富的触发器和I/O引脚。

d) FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

e) FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。这个过程,在资料中称为“加载”或者“装载”,是不是有点怪怪的?类似于arm系列的芯片中bootrom加载bootloader到internal sram中。掉电后,FPGA恢复成白片,内部逻辑关系消失,因 此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一 片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。


>> lut

 

      查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。 目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。 当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

下面是一个4输入与门的例子,

实际逻辑电路
LUT的实现方式

a,b,c,d 输入

逻辑输出
地址
RAM中存储的内容

0000

0
0000
0
0001
0
0001
0
....
0
...
0
1111
1
1111
1

 

>> 基于查找表(LUT)的FPGA的结构

 

      通过上面对lut的描述,如果你联想到可以使用这个来实现fpga,那么就恭喜你,你简直是太聪明了。

      下面由小郭同志帮你以几个fpga为例来说明基于lut的fpga结构。

 

我们看一看xilinx Spartan-II的内部结构,如下图:

xilinx Spartan-II 芯片内部结构
Slices结构

Spartan-II主要包括CLBs,I/O块,RAM块和可编程连线(未表示出)。在spartan-II中,一个CLB包括2个Slices,每个slices包括两个LUT,两个触发器和相关逻辑。 Slices可以看成是SpartanII实现逻辑的最基本结构 (xilinx其他系列,如SpartanXL,Virtex的结构与此稍有不同,具体请参阅数据手册)

altera的FLEX/ACEX等芯片的结构如下图:

 

 

altera FLEX/ACEX 芯片的内部结构

 

 

 

逻辑单元(LE)内部结构

FLEX/ACEX的结构主要包括LAB,I/O块,RAM块(未表示出)和可编程行/列连线。在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE),每个LE包括一个LUT,一个触发器和相关的相关逻辑。LE是FLEX/ACEX芯片实现逻辑的最基本结构(altera其他系列,如APEX的结构与此基本相同,具体请参阅数据手册)

 

>> lut结构的fpga的基本工作原理

 

      上电后,程序加载到fpga中的internal ram中,接下来lut就可以工作了,据spec中讲述,这个过程很快,基本可以忽略。在军工和航天类的fpga中,可以把程序直接搞到flash或者eeprom中,不需要这个load的过程,实现上电运行的特性,类似于pld。

       下面接着描述基于lut结构的fpga的基本原理。

 

我们还是以这个电路的为例:

A,B,C,D由FPGA芯片的管脚输入后进入可编程连线,然后作为地址线连到到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数据然后输出,这样组合逻辑就实现了。 该电路中D触发器是直接利用LUT后面D触发器来实现。时钟信号CLK由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到触发器的时钟端。触发器的输出与I/O脚相连,把结果输出到芯片管脚。这样PLD就完成了图3所示电路的功能。(以上这些步骤都是由软件自动完成的,不需要人为干预)

这个电路是一个很简单的例子,只需要一个LUT加上一个触发器就可以完成。对于一个LUT无法完成的的电路,就需要通过进位逻辑将多个单元相连,这样FPGA就可以实现复杂的逻辑。

由于LUT主要适合SRAM工艺生产,所以目前大部分FPGA都是基于SRAM工艺的,而SRAM工艺的芯片在掉电后信息就会丢失,一定需要外加一片专用配置芯片,在上电的时候,由这个专用配置芯片把数据加载到FPGA中,然后FPGA就可以正常工作,由于配置时间很短,不会影响系统正常工作。 也有少数FPGA采用反熔丝或Flash工艺,对这种FPGA,就不需要外加专用的配置芯片。

由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM工艺或者是基于FLASH工艺的查找表结构,通过每次烧写改变查找表内容的方法实现对FPGA的重复配置。
       那么查找表取代与非门电路的原理是什么呢?我们知道,一个n输入的逻辑运算,不管是与或非运算还是异或运算等等,最多只可能存在2n种结果,若我们事先将相应的结果存放于一个存贮单元,不就相当于实际了与非门电路的功能了吗?FPGA的原理正是如此,它通过烧写文件去配置查找表的内容,从而在相同的电路情况下实现了不同的逻辑功能。
以例1为例,它的真值表如表1所示。我们只需用将输出y的值事先存放在一个1x16的SRAM或者FLASH中,然后用a、b、c、d做地址索引查找输出,就可以代替与门运算,得到等价的结果。

【例1】 一个四输入与门电路
assign y = a&b&c&d;

      表1   例1对应的真值表
输入                               输出
a b c d y
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 1

 

>> fpga中的宝贵资源
io资源:其决定了gpga的扩展性;
dcm:数字时钟管理器,用来实现倍频,并且可以消抖;
ip核:这个就不用说了吧
bram:可以用来实现成堆栈/fifo/ram等(这个怎么实现我就不明白了,没有做过)
      上面有些是自己总结,不可全信哦。

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

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

相关文章

忧云:喻红艺术展观后

长征空间。喻红的个展《忧云 wondering clouds》,中文标题似过诗意,而英文可能更准确表达其意图。这幅连体大画至少有15米长,非常壮观,色彩变化,人物的形态,复杂而有序。既有写实也有表现,既有真…

阶乘和

#include <stdio.h>// __int64的范围是 [0, 2^64),即0~18446744073709551615(约1800亿亿) static unsigned __int64 sum_fac(int n);int main(void) {printf("test sum_fac function.\n\n");for(unsigned int k0; k<20; k){printf("k%dth e sum is: %l…

未命名语句块中的声明

未命名语句块中的声明 命名块中的局部变量 Verilog允许在命名的begin…end或fork…join块中声明局部变量。局部变量声明的通常用法是声明一个临时变量进行循环控制。局部变量避免了对同名但用途不同的模块模块级变量的无意访问。下面的代码段声明了两个都叫i的变量&#xff0c…

故乡的路:十位少数民族摄影师联展

故乡的路&#xff1a;10位少数民族摄影师联展。映艺术中心。参展的有蒙古族、维吾尔族、回族、纳西族、傣族、白族、彝族、拉祜族、藏族等。民族是一个视点&#xff0c;故乡也是一个视点&#xff0c;两者的交叉&#xff0c;透过现代化的相机和镜头&#xff0c;获得了一种独特的…

kitl协议包简述

英文版参照网址http://blogs.msdn.com/ce_base/archive/2006/06/27/648747.aspx 下面是翻译过来的&#xff0c;可能有错哦&#xff0c;呵呵 KITL概述 KITL——Kernel Independent Transport Layer&#xff0c;CE驱动调试的基本调试协议。KITL提供 1、 传输初始化 2、 数…

敏捷转型中的看板

Scrumban最初是一种从Scrum向精益看板转换的机制&#xff0c;现在它已经支持双方向的转换&#xff0c;并可以应用到项目和精简BAU(常规商业运营)工作流。能够实施Scrum和精益方法的相互转换自然是很好的。但当你的客户不具备实践这些方法的条件时&#xff0c;你如何去帮助他们实…

GDIPlus灰度化图像

将RGB彩色图像转为8位的索引颜色 先定义一个宏 // Greyscale conversion #define GREY(r, g, b) (BYTE)(((WORD)r * 77 (WORD)g * 150 (WORD)b * 29) >> 8 //#define GREY(r, g, b) (BYTE)(((WORD)r * 169 (WORD)g * 256 (WORD)b * 87) >> 9)// Grayscale, 将…

SystemVerilog文本值和数据类型

SystemVerilog文本值和数据类型 1、增强的文本值赋值 给一个向量赋予文本值 在Veirlog语言中&#xff0c;一个向量可以很容易地赋值为全00、全x&#xff08;不确定&#xff09;或全z&#xff08;高阻态&#xff09;。 parameter SIZE 64; reg [SIZE-1 :0] data; data 0;//…

从IC设计来看Trace32的用途

通常的芯片设计&#xff0c;在开发阶段都会先在一个包含硬IP核的FPGA上进行&#xff0c;通过使用硬件描述语言HDL来对FPGA进行编程&#xff0c;这样既能加快设计速度又能够节省成本&#xff0c;最重要的是可以在芯片开发阶段发现可能存在的HW问题。一般的设计思路是首先将各个外…

使用GDI+保存图像为8bpp的灰度图像

使用GDI保存图像为8bpp的灰度图像&#xff0c;GDI真的有些特殊。。。。。 // Greyscale conversion #define GREY(r, g, b) (BYTE)(((WORD)r * 77 (WORD)g * 150 (WORD)b * 29) >> 8) // .299R .587G .114B //#define GREY(r, g, b) (BYTE)(((WORD)r * 169 (WORD)…

对象类型和数据类型

对象类型和数据类型 Verilog数据类型 Verilog语言具有针对硬件的变量类型和线网类型。这些类型具有特定的仿真和综合语义&#xff0c;表示芯片或系统中的实际连接行为。 &#xff08;1&#xff09;Verilog的reg、integer和time变量的每一位都有四种逻辑&#xff1a;0、1、Z、X…

尺度空间(Scale space)理论

尺度空间方法的基本思想是&#xff1a;在视觉信息处理模型中引入一个被视为尺度的参数&#xff0c;通过连续变化尺度参数获得不同尺度下的视觉处理信息&#xff0c;然后综合这些信息以深入地挖掘图像的本质特征。尺度空间方法将传统的单尺度视觉信息处理技术纳入尺度不断变化的…

[转] Windows CE 6.0 启动过程分析

看到这么好的文章&#xff0c;小郭觉得不转载就是天理不容&#xff0c;转了&#xff01;&#xff01;&#xff01;&#xff01; *************************************************************************************** 在Windows CE 6.0中&#xff0c;内核&#xff08;Ke…

数据类型规则的放宽

数据类型规则的放宽 SystemVreilog放宽了使用变量的限制 SystemVreilog放宽了变量的使用规则&#xff0c;大大简化了模型中数据类型的使用。在SystemVreilog中共&#xff0c;任何数据类型的变量都可以通过下列方式赋值&#xff0c;但只能采用其中的一种方式。 &#xff08;1&a…

真实,让文学回到原点:关于非虚构写作的思考

任何一种文学主张&#xff0c;其实都是先有实践&#xff0c;而后再有理论和命名。“非虚构写作”也是如此。如果大胆猜想&#xff0c;“非虚构写作”可能要追溯到远古的口传心记和结绳记事。当时的人类记录下身边发生的事情&#xff0c;应该就是非虚构&#xff0c;而口头讲述的…

4位16色灰度图像处理

定义几个辅助的宏&#xff0c;如下。 // 拆分合并BYTE #define HIBITS(w) ((BYTE)((((BYTE)(w)) >> 4) & 0xf)) #define LOBITS(w) ((BYTE)(((BYTE)(w)) & 0xf)) #define MAKEBITS(a, b) ((BYTE)(((BYTE)(((BYTE)(a)) & 0xf)) | ((…

[转] 常见WinCE启动失败原因分析

*********************************************** 一般情况下&#xff0c;为设计中的IC开发SW方案&#xff0c;难免会碰到Bootloader/EBoot/OS启动失败的情况&#xff0c;对于Bootloader和EBoot&#xff0c;由于源代码很少&#xff0c;直接使用Trace32调试是最佳方法&#xff…

树莓派安装mariadb redis

安装软件 sudo apt install mariadb-server mariadb-client sudo apt install redis 二. 配置 1, mariadb 配置 配置远程访问 maridb configuration: sudo mysql_secure_installation # 设置root密码 vim.tiny mariadb.conf.d/50-server.cnf # 设置去除本地绑定 #bind-addre…

Google云服务降价,整合持续集成工具,支持Windows和托管虚拟机

本周二&#xff0c;Google举行了云平台的现场活动&#xff08;点击查看视频记录&#xff09;&#xff0c;展示了一系列新特性、改进和全新定价模型。\u0026#xD;\n定价\u0026#xD;\nGoogle认为&#xff0c;云计算价格应该跟随硬件领域的摩尔定律&#xff0c;而且在过去数年间硬件…

静态和自动变量

静态和自动变量 自动变量–也可以称为动态变量&#xff0c;主要是用来描述在测试程序、抽象系统级、交易级或总线功能模型中的验证程序。自动变量的另一个用途就是编写可重入的任务&#xff0c;当一个任务的前一次调用仍然在执行时&#xff0c;可以再次对其调用。 自动变量也允…