1.为什么FPGA的整体逻辑的速度有限制?

与ASIC相比较,AS指的是(application specific)专用集成应用,而FPGA是可编程逻辑,在实现的过程中,AS是直接用最基础的逻辑门实现数字电路的搭建,而FPGA是用LUT+FF搭建,它是可编程,也就是说可重构的,所以被设计成了一种岛状的逻辑块矩阵电路,每个逻辑块又有很多的子逻辑块组成,每个子逻辑块就包含有实现任意电路的元素,包括LUT(查找表)用于组合逻辑的实现,FF(触发器)用于时序逻辑的实现,逻辑块之间是布线的管道,,其中有各种固定长度的线以及连接这些线的开关。而对于ASIC而言,全部是按照数电逻辑实现的,导线也只是单纯的导线,没有开关的中断。

可以观察到这个FPGA的布线在十字路口那块有多么的复杂,研究表明,对于一个只有组合逻辑和时序逻辑,没有存储等的电路,在FPGA上实现需要40倍的ASIC面积以及3-4倍的关键路径延时,12倍的功耗。这些都是布线惹的祸,布线结构面积占了大约总面积的60%-70%。

FPGA的可编程单元可以由反熔丝、闪存单元以及SRAM内存单元实现。其中的反熔丝技术创建的是一个一次性编程的单元。

2.FPGA内部逻辑组成架构详解

先放一个基本的FPGA组成模块图:

全局的来看的话,

在FPGA中所有的逻辑功能都是由CLB来实现的,他的工作原理如下:

软件自动完成的内容包括:首先输入经过FPGA芯片IO管脚后进入可编程连线,作为地址线输入到LUT,LUT查找相应数据输出就实现了组合逻辑。clk通过GPIO输入后进入芯片内部的专用时钟通道,直接连接到触发器的时钟端,D触发器的输出接到I/O,实现结果输出到芯片管脚。

altera器件的结构组成:嵌入式阵列块(EAB)(用于存储)、逻辑阵列块(LAB)(用于逻辑实现)、快速通道互联(Fast Track),IO单元(IOE)。对于其基本的组成单位LE有:

LE作为FPGA的最小组成单元,其组成部分包括LUT,用于同步的D触发器,进位链,级联链。

cyclone的LE具体内部组成:

简化后如下图:

多个LE通过级联链以及进位链以及行列快速通道相连接,得到一个个LAB,对于Cyclone而言,是10个LE组成一个LAB,如下图

更加直观的话:

结论:LUT可以直接生成移位寄存器,怎么生成的呢?

IOB的具体组成:

EAB的组成:

EAB的字长可以控制 ,此外,EAB可以组合成更大的模块。它可以用来实现乘法器,实际上是一个输入输出上都带有寄存器的灵活的RAM电路,即可以用来做存储器,也可以实现逻辑功能。

EAB与LAB之间的关系:

但是在具体编程中如何实现指定所使用的资源是什么呢?

此外

扇入扇出太大或者太小的处理方法http://blog.sina.com.cn/s/blog_b381ebd10102vw6g.html

关于如何减少FPGA设计中逻辑资源的占用:(网上找的主要的几种解决的方法)

更改综合策略,采用资源共享;(如何更改?)如果某个某块大量使用寄存器时可以考虑是否可以采用RAM代替;从架构上分析冗余并进行优化,之后再结合个别FPGA的实现特征,如果实在对资源比较在意而对性能要求不高,就可以考虑用时间换空间,用并行替串行;良好的代码习惯和风格 暂时就那么多,以下都是我在编程时发现的问题,总结一下,怕以后忘了,以我目前的水平不明白类似关键路径,组合数目什么高深理论,这都是我从实际中学到的,比看书学的印象深刻得多.慢慢来吧,我想我以后也会明白那些高级的东西了!

一....尽量不要使用"大于""小于"这样的判断语句, 这样会明显增加使用的逻辑单元数量 .看一下报告,资源使用差别很大.

例程:always@(posedge clk)
begin
count1=count1+1;
if(count1==10000000)
feng=1; //no_ring
else if(count1==90000000)
begin
feng=0; //ring
count1=0;
end
end //这么写会用107个逻辑单元

// 如果把这句话if(count1==10000000)改成大于小于,报告中用了135个逻辑单元

二.....一定要想尽办法减少reg寄存器的长度

上次把[30:0]改到[50:0],报告里逻辑单元从100多直升到2000多!!!太吓人了,至于为什么我就不知道了哈!

三....case语句里一定要加default if一定要加else

如果是组合逻辑的设计,不加default或else的话,不能保证所有的情况都有赋值,就会在内部形成一个锁存器,不再是一个纯粹的组合逻辑了,电路性能就会下降.

例如:case({a,b})

2'b11 e=b;

2'b10 e=a;

endcase

//不加default,虽然只关心a=1时的结果,但是a=0的时候,e就会保存原来的值,直到a变为1

//那么e要保存原来的值,就要在内部生成锁存器了.

四....尽量使用Case语句 而不是if--else语句

复杂的if--else语句通常会生成优先级译码逻辑,这将会增加这些路径上的组合时延
用来产生复杂逻辑的Case语句通常会生成不会有太多时延的并行逻辑

五...组合逻辑的always块中,要注意所有的输入全部放入敏感变量表里

比如:always@(a or b)

begin

out=(a&b&c);

end

FPGA基础架构总结的更多相关文章

  1. MVP社区巡讲-云端基础架构:12月5日北京站 12月12日上海站

    紧跟当今的技术发展趋势还远远不够,我们要引领变革!加入本地技术专家社区,获取真实案例.实况培训演示以及探讨新一代解决方案.在此活动中,您将: 了解如何运用开源(OSS)技术.Microsoft 技术及 ...

  2. IT基础架构规划方案一(网络系统规划)

    背景                   某集团经过多年的经营,公司业务和规模在不断发展,公司管理层和IT部门也认识到通过信息化手段可以更好地支撑公司业务运营.提高企业生产和管理效率.同时随着新建办公 ...

  3. IT基础架构规划方案二(计算机系统与机房规划规划)

    计算机系统规划       服务器硬件选型规划方案       根据对某集团的实际调研,获取了企业业务应用系统的建设情况,随着企业信息化建设的推进,需要对各种信息化管理系统和应用系统的服务器选型进行选 ...

  4. IT基础架构规划方案三(IT基础软件和系统规划)

    IT基础软件和系统规划 操作系统选型规划方案 根据对某集团的实际调研,获取了企业业务应用系统的建设情况,随着企业信息化建设的推进,需要对各种信息化管理系统和应用系统的服务器选型进行选型规划,根据不同的 ...

  5. IT基础架构规划方案之实际网络设计案例

    根据某集团总部新办公大楼.厂房和分支机构(店面)的情况,以及IT部门对网络节点数.网络应用和分支机构(店面)的初步规划,对企业的总体网络拓扑结构进行设计,如下图. 设备选型和部署参考: 类型 设备选型 ...

  6. [翻译]用 Puppet 搭建易管理的服务器基础架构(4)

    我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第四部分. 原文地址:http://blog.jobbole.com/89214/ 本文由 伯乐在线 - Wing 翻译,黄利民 校稿 ...

  7. [翻译]用 Puppet 搭建易管理的服务器基础架构(3)

    我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第三部分. 本文由 伯乐在线 - Wing 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:Manuel Kiessling.欢迎加 ...

  8. [Search Engine] 搜索引擎分类和基础架构概述

    大家一定不会多搜索引擎感到陌生,搜索引擎是互联网发展的最直接的产物,它可以帮助我们从海量的互联网资料中找到我们查询的内容,也是我们日常学习.工作和娱乐不可或缺的查询工具.之前本人也是经常使用Googl ...

  9. 移动互联网实战--Web Restful API设计和基础架构

    前言: 在移动互联网的大潮中, Web Restful API逐渐成为Web Server重要的一个分支. 移动端和服务端的交互, 主流的方式还是通过Http协议的形式来进行. 请求以Get/Post ...

随机推荐

  1. 2020/1/28 PHP代码审计之命令执行漏洞

    0x00 命令执行漏洞原理 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.passthru.popen.proc_popen等函数可以执行 ...

  2. Python笔记_第四篇_高阶编程_正则表达式_3.正则表达式深入

    1. re.split 正则的字符串切割 str1 = "Thomas is a good man" print(re.split(r" +",str1)) # ...

  3. CodeForces 1292A NEKO's Maze Game(思维)

    #include <stdio.h> #include <string.h> #include <iostream> #include <string> ...

  4. 吴裕雄--天生自然深度学习TensorBoard可视化:命名空间

    # 1. 不同的命名空间. import tensorflow as tf with tf.variable_scope("foo"): a = tf.get_variable(& ...

  5. java图片上传,通过MultipartFile方式,如果后台获取null检查是否缺少步骤

    本方法基于springMvc 1.首先需要在webap下创建images 2.在springmvc.xml上引入 <bean id="multipartResolver" c ...

  6. 数据分析-Numpy-Pandas

    补充上一篇未完待续的Numpy知识点 索引和切片 数组和标量(数字)之间运算 li1 = [ [1,2,3], [4,5,6] ] a = np.array(li1) a * 2 运行结果: arra ...

  7. ZJNU 1069 - 表达式的转换——中级

    栈运用的模板题,对于符号进行出入栈操作,每次与栈顶的符号进行优先级判断,得出第一行后缀表达式. 在其后的化简计算中,每次用一个特殊符号(代码中使用了'?')代替原来的计算结果引用,并开一个数组表示每次 ...

  8. 小白学习之pytorch框架(2)-动手学深度学习(begin-random.shuffle()、torch.index_select()、nn.Module、nn.Sequential())

    在这向大家推荐一本书-花书-动手学深度学习pytorch版,原书用的深度学习框架是MXNet,这个框架经过Gluon重新再封装,使用风格非常接近pytorch,但是由于pytorch越来越火,个人又比 ...

  9. 你必须知道的基本位运算技巧(状压DP、搜索优化都会用到)

    一. 位操作基础 基本的位操作符有与.或.异或.取反.左移.右移这6种,它们的运算规则如下所示: 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ...

  10. ubuntu 深度学习cuda环境搭建,docker-nvidia 2019-02

    ubuntu 深度学习cuda环境搭建 ubuntu系统版本 18.04 查看GPU型号(NVS 315 性能很差,比没有强) 首先最好有ssh服务,以下操作都是远程ssh执行 lspci | gre ...