晚上依然被自愿加班,正纠结得看着VxWorks5.5的User’s Guide总结用户接口,忽然听到小青在一旁对彭兄谆谆教诲着什么,顿时好奇起来。他俩在一起一般就是扯淡,不是小青扯彭兄的淡(蛋),就是彭兄的淡(蛋)被小青扯……彭受不了了就会把老陈叫过来,然后跟小青一起扯老陈的淡(蛋)……今天他俩这明显是在讨论什么严肃的问题啊!于是我悄悄得滑过去,想听听他俩在讨论些什么。FPGA?这东西只能说听过,具体是怎么回事儿完全搞不懂,所以就在旁边听了一下并做为意外收获记录下来。

注:郑重声明小青是中科大的博士,男博士,而且博士在读期间是主要的方向就是FPGA。

FPGA(Field-Programmable Gate Array),按照主流的翻译叫做现场可编程门阵列,它存在的主要意义就是在一块芯片投入生产之前,用来验证电路逻辑设计是否正确,以防由于设计问题而造成的成本浪费。作用与虚拟机有点儿相似,相当于硬件的复用,这也是它的可重复擦写的特性决定的。那它是如何实现可重复擦写的呢

FPGA可以看作是一个大的SRAM(静态随机存储器),我们知道RAM的组成一般是二维的,相当于一个二维数组(横排为位宽,纵列为深度)。我们不妨把该数组的元素看成有四个内存空间的盒子,那么一个元素就好比一个“田”字,而每个元素有两个输入引脚(设为L1和L2),这样输入就有四种情况,如表1所示。

表1

  L1 L2
S0 0 0
S1 0 1
S2 1 0
S3 1 1

根据L1和L2输入情况的不同,每个元素就对应着四种状态S0、S1、S2和S3,大家可以想像“田”字中的空白部分(注意,每个空白部分是一个存储单元)对应着S0到S3四种状态。如果每种状态看作该元素的一种输出的话,那么是不是有种似曾相识的感觉呢?You got it!有两个输入引脚,有一个输出引脚,那么该元素就可以用来模拟一个“与”门,也就是说S0、S1、S2这三种状态对应的“田”字中的存储单元都初始化为0,S3状态对应的存储单元则初始化为1,那么当L1和L2的输入为0:0时,CPU就会从S0对应的存储单元取值;L1和L2的输入为0:1时,CPU就会从S1对应的存储单元取值;L1和L2的输入为1:0时,CPU就会从S2对应的存储单元取值;L1和L2输入为1:1时,CPU就会从S3对应的存储单元取值。寻址和取值情况如表2所示。

表2

  存储单元 L1 L2
S0 0 0 0
S1 0 0 1
S2 0 1 0
S3 1 1 1

这样的话,那“或”门该怎么模拟?那就将S0、S1和S2对应的存储单元初始化为1,S3对应的存储单元初始为0就哦了呗!如此说来该元素到底是什么门器件完全看这个“田”中的四个存储单元初始值是什么。这样的话不管是什么样的逻辑电路,有了最基本的“与”、“或”、“非”等门器件,接下来还不就是拼接的问题?那怎么拼接啊?难道要用手把这些“田”挪到相应的位置,然后再把相应的输入输出引脚连到一起?当然不是,你得到的不会是一个一个“田”,而是一个设计完善的FPGA电路板,电路板上已经将这些元素布置好,而其实我们关心的并不是它们的摆放位置和顺序,而是两个元素的输入和输出引脚连接情况。因为你将那这些元素的内存单元初始化好之后就相当于有了N个门器件,而你要形成一个更大的逻辑电路就需要把这些门器件按你的设计连接,起来形成你想要的逻辑处理单元,这才是FPGA的目的所在。在最初的情况下谁也不知道你要怎么连接这种门器件,所以设计人员把输入输出排成一个网型(如图1所示),并将这种线的交点做特殊处理,使得一个交点的连通情况可以人为配置,于是我们就可以通过配置这些“交点”来完成一块芯片的模拟了。

图1 元素的连接

(这图是从网下down下来的,由于画着太麻烦且只有晚上有时间写日志,困不行了都……)

听小青巴巴的讲完之后,我首先想到的问题是FPGA模拟出的芯片因为几乎所有的操作都是基于对RAM的存取,所以在速率上肯定会比较慢;其次,由于SRAM的成本较普通RAM高出很多,且FPGA的每个存储单元由6个晶体管组成(普通的为4个),所以总造价上来看,FPGA应该会比较所模拟的芯片高出不少。经小青的验证,我这两种想法也是正确的。再看最开始的听众彭兄,好像还是没太明白,估计他肯定还在想着他的GDB呢,满脑子都是调试中断吧!

注:我这完全是凭借我个人的理解来写的,没有参照任何资料,所以肯定会有不对的地方,但是对我来说理解到这种程度就够,因为这辈子也不一定会真的接触FPGA,我完全是做为一种知识上的扩展来学习和记录的,而且相信我的思维过程跟那些对FPGA只有基本概念的人有相通之处,所以更容易理解。欢迎批评指正……这么晚了?!被我女朋友知道要被骂了……睡了……

转载于:https://blog.51cto.com/snower/544227

意外收获——我与FPGA的第一次相关推荐

  1. 地摊重现江湖,疫情带给我们的意外收获

    地摊重现江湖,疫情带给我们的意外收获 2020年1月份出现的新冠肺炎疫情,影响了全体中国人,给国人留下了终身难忘的记忆. 疫情之下,很多的人很多的事都受到了影响.当然的,这些所谓的影响基本都是负面的: ...

  2. 解决MSN无法登录问题的意外收获

    解决MSN无法登录问题的意外收获 最近在运维过程中,遇到了两个历史悠久而且截然不同的疑难问题.但巧合的是,两个问题殊途同归,最后居然使用了同样的解决方法.为了庆祝送别这两个问题,也为了和大家共同学习, ...

  3. 尝试优化骨骼动画计算的意外收获——使用嵌入式汇编对float转int进行优化

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4984530.html 公司引擎目前是使用CPU计算骨骼动画(采用了D3DX提供的函数 ...

  4. 意外收获字节跳动内部资料,已开源

    前言 每年的3.4月份是各大企业为明年拓展业务大量吸纳人才的关键时期,招聘需求集中.空缺岗位多,用人单位也习惯在初秋进行大规模招聘. 金九银十,招聘旺季,也是一个求职旺季. 不打无准备的仗,在这种关键 ...

  5. EntityFramework Core不得不注意的性能优化意外收获,你会用错?

    前言 这两天在着实研究EF Core项目当中对于一些查询也没实际去检测,于是想着利用放假时间去实际测试下,结果本文就出来了,too young,too simple,后续博主会从底层翻译表达式树弄起, ...

  6. 意外收获字节跳动内部资料,一篇文章帮你解答

    前言 俗话说"生于忧患,死于安乐",其实大部分中年危机,就是在安乐中产生的. 有的人或许会反驳,"照你这么说,我还必须奋斗了,不奋斗就要死,难道选择安逸的生活就不对吗?我 ...

  7. 【迟到的Java岗面经】面7家,意外收获5家意向offer,越努力越幸运!

    个人简介 Java后台开发方向. 非计算机专业硕士,专业涉及到一些开发. 实验室项目主要是Java Web系统,挖掘小亮点. 回顾面试的那几个月,宛若梦一场. 一开始心态不好,看到要学习的东西一大堆, ...

  8. 5.1后意外收获红雪莲

    一晃五一黄金周就过去了.似乎感觉比上班要累多了!不停的逛商厦,不停的逛公园.每天几乎都是拖着疲惫而酸痛的腿上床! 不过7号去南湖的游玩挺值得回味.老五的划船技能实在是太专业了.两个小时的船程只用了40 ...

  9. 今天有了意外收获,原来还可以这样提交数据的

    原来以为提交数据方式无非是: 1.同步,submit=>onclick 2.异步,$.get(),$.post().$.ajax() 今天看一篇关于乱码的文章,受到了启发, 3.href 例如: ...

  10. 意外收获字节跳动内部资料,Android岗

    背景 知乎客户端中有一个自己维护的 Hybrid 框架,在此基础上开发了一些 Hybrid 页面,当需要前端或者客户端开发接口的时候,就涉及到联调的问题. 和一般的 前端 <=> 服务端, ...

最新文章

  1. 数据库中间件MyCat学习总结(1)——MyCat入门简介
  2. SSH访问控制,多次失败登录即封掉IP,防止暴力破解
  3. 超经典动态规划题:最大子序和
  4. 【BZOJ1010】【HNOI2008】玩具装箱(斜率优化,动态规划)
  5. 爬虫---Beautiful Soup 通过添加不同的IP请求
  6. Python基础——数据分析考核(基础版本)
  7. Exchange EMC打开出错 解决
  8. pom文件报错_maven-resources-plugin修改了我的文件
  9. uni-app微信小程序uni.getLocation获取位置;authorize scope.userLocation需要在app.json中声明permission;小程序用户拒绝授权后重新授权
  10. CrystalMaker 10.6.2 mac版 CrystalMaker X最新版
  11. 图像协方差矩阵_深度学习的预处理:从协方差矩阵到图像白化
  12. Mysql中的一绡规范约束,摘自《阿里巴巴 Java 开发手册》
  13. Matlab——plot polyfit polyval
  14. JavaScript中“基本类型”之争
  15. kindle索引_Kindle 卡索引问题解决方法汇总
  16. oracle全备份脚本,Oracle全库备份脚本
  17. 代码本色 processing编程练习
  18. Python:启程 数据分析-牛客网在线编程-中级函数12-23
  19. 发现新大陆,超级好用的轻量级接口测试工具 Postcat
  20. 旋转变换公式详细推导

热门文章

  1. centos 网络自动连接_自动连接最优信号 腾讯云?云兔解决物联网络连接问题
  2. Redis,唯快不破!
  3. 用梯度下降求解最小二乘线性回归python实现
  4. 有史以来最容易理解的控制反转(IoC)与注入依赖(DI)
  5. 题目399-整除个数(满满的套路)
  6. bt php,bt.php · jiehu0992/家谱familytree - Gitee.com
  7. java构建模式_《Java设计模式》之构建者模式
  8. python em和web_浅析Python的web.py框架中url的设定方法
  9. flink源码分析_源码解析 | 万字长文详解 Flink 中的 CopyOnWriteStateTable
  10. 图:Flash渲染控件安装失败原因所在.