fpga工程师年终总结_第1页
fpga工程师年终总结_第2页
fpga工程师年终总结_第3页
fpga工程师年终总结_第4页
fpga工程师年终总结_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

fpgafpga 工程师年终总结工程师年终总结 篇一:FPGA 研发牛人心得总结 FPGA 研发之道 FPGA 是个什么玩意? FPGA 是个什么玩意? 首先来说: FPGA 是一种器件。其英文名 feild programable gate arry 。很长,但不通俗。通俗来说,是一种功能强 大似乎无所不能的器件。通常用于通信、络、图像处理、 工业控制等不同领域的器件。就像 ARM、DSP 等嵌入式器件 一样,成为无数码农码工们情感倾泻而出的代码真正获得 生命的地方。只不过,一样的编程,却是不一样的思想。 嵌入式软件人员看到的是 C。而 FPGA 工程师看到是硬件描 述语言,verilog 或 VHDL。软件看到是函数、对象、重构。 FPGA 工程师则是模块、流水、复用。从现象上看,都是代 码到下载程序再到硬件上运行。不能只看现象而忽略本质。 FPGA 开发本质上是设计一颗 IC, “*的身子,丫鬟的命” 不是所有 verilog/VHDL 代码,都能获得青睐去流片成为真 正的芯片,而更多的则成为运行在 FPGA 器件上,成为完成 相同功能的替代品。其实现的功能却一点也不逊色于百万 身价流片的近亲。从而成为独树一帜的行业。 FPGA 开发的流程,是通过 verilog/VHDL 等硬件描述语 言通过 EDA 工具编译、综合、布局布线成为下载文件,最 终加载到 FPGA 器件中去,完成所实现的功能。那硬件描述 语言描述的是什么?这里描述的就是组合逻辑电路和时序 逻辑电路。组合逻辑电路就是大家所熟知的 与门、或门、 非门。时序逻辑电路则是触发器。数字芯片上绝大部分逻 辑都是这两种逻辑实现的。也就是基本上每个电子行业的 人所学过的数字电路。顺便说一下,感谢香农大师,在其 硕士毕业论文就奠定了数字电路的的根基。只 不过在 FPGA 中,与或非的操作变成了查找表的操作。 于是所有的数字电路变成了查找表和寄存器,这就构成了 FPGA 的基础。查找表负责逻辑实现,寄存器存储电路状态。 二者配合,双剑合璧,天衣无缝。这是最初的 FPGA 的雏形。 现代 FPGA 内部出了查找表和寄存器之外,还有 RAM 块, 用于存储大量的数据块,这是因为 RAM 块较寄存器来存储 大量数据更能节省芯片实现的面积。FPGA 内部的时序电路 则需要时钟的输入,通常 FPGA 内部需要时钟种类较多,因 此需要在片内产生所需的的相关的时钟,如不同频率,不 同相位的时钟,因此时钟管理单元 DCM/PLL 也是必不可少 的内部部件。除此之外,FPGA 内部还包括接口 I/O,I/O 分 为普通 I/O 和高速 I/O,高速 I/O 支持例如高速的 SERDES,用于实现 XAUI,PCIE 等高速接口,这些接口动辄 几 Gbps 到 10Gbps 以上。此外种类多种多样的硬核 IP 也是 各 FPGA 厂商差异化竞争利器,例如 POWERPC、ARM 等硬核 IP。从而构成 CPU+FPGA 于一体的集可编程性和可重构的处 理平台。因此,相对来所,FPGA 虽然发展有二三十年的历 史,其基本架构一直不变不大。 回到问题开始的地方,FPGA 的英文翻译过来是现场可 编程门阵列。这是相对 ASIC 来说的,ASIC 的硬件也可看做 是门阵列,但是其是非可编程的器件。流片完成其功能就 固化了,而 FPGA 的可编程性就在其能够重新下载配置文件, 来改变其内在的功能,这就是其可编程性的由来。从前端 开发流程来说,FPGA 和 ASIC 开发并无二至。由于 ASIC 开 发一次性投入成本较高,FPGA 无疑是一种经济的替代方案, 用于实现的高速的数据并行处理。如业务能够支撑大规模 应用并且协议固化,则能够分摊成本的 ASIC 实现就有成本 的优势。 FPGA 作为一种器件,技术上主要垄断在少数大 公司手中,那就是双巨头 ALTERA 和 XILINX。除此之外还有 一些份额相对较小的公司,例如 ACTEL 和 LATTICE。不止是 FPGA 的硬件芯片,其配套的 EDA 工具技术壁垒更高。因此 相对于 CPU 来说,FPGA 的国产化 更不乐观,不过已经有国内的厂商来从事这一行业, 例如国微和京微雅格等,也在一些细分市场上推出自己的 FPGA 产品。 FPGA 和他那些小伙伴们 (一) 系统架构组成 通常来 讲, “一个好汉三个帮” ,一个完整的嵌入式系统中由单独 一个 FPGA 使用的情况较少。通常由多个器件组合完成,例 如由一个 FPGA+CPU 来构成。通常为一个 FPGA+ARM,ARM 负 责软件配置管理,界面输入外设操作等操作,FPGA 负责大 数据量运算,可以看做 CPU 的专用协处理器来使用,也常 会用于扩展外部接口。常用的有 ARM+FPGA,DSP+FPGA,或 者络处理器+FPGA 等种种架构形式,这些架构形式构成整个 高速嵌入式设备的处理形态。 不得不说的是,随着技术的进步,现在 CPU 中集成的 单元也随之增加,例如 TI 的“达芬奇”架构的处理器内部 通常由 ARM+DSP 构成。同时异构的处理器形态业逐渐流行, 如 ARM9+ARM7 的结构。这类一个主要处理系统(ARM9)外带 辅助处理系统(ARM7)的设计,同样成为现在处理器设计的 流行方向。主处理系统运行嵌入式操作系统,而辅助处理 单元则专注某一些的专用领域的处理。这些系统的应用减 少了 FPGA 作为 CPU 协处理单元的领域。因为毕竟 FPGA 相 比 ARM 等流行嵌入式处理器价格要相对较高。 在这种情形下,FPGA 的厂商似乎也感受到了压力,不 约而同推出了带 ARM 硬核的 FPGA,例如 ALTERA 的 和 XILINX 的 ZYNQ 和 ALTERA 的 SOC FPGA。这是即是互相竞争 的需要,也是同众多 CPU 厂商一掰手腕的杰总。即使在这 两种在趋势下,经典的处理器+FPGA 的设计仍然可看做为高 性能嵌入式系统的典型配置。 经典的处理器+FPGA 的配置中有多种的架构形式,即多 个处理器单元,可能是 ARM,MIPS,或者 DSP,FPGA 也可能是 多片的配置,具体架构形式于具体处理的业务相关和目标 设备的定位也相关。因为 FPGA 作为简单业务流大数据 量的处理形态仍然是 CPU 无可比拟的优势,FPGA 内部可以 开发大量业务数据并行,从而实现高速的数据处理。 在实现高速处理方面,CPU 的另一个发展趋势是多核, 多核处理器也能处理大数据量的业务的并行,例如业界 TERILA 已推出 64 核的多核处理器,采用 MIPS 处理器,通 过二维 MASH 络连接在一起,形成 NOC 的结构。在性能上已 经和现有的高速 FPGA 的处理能力上不相上下。但是多核处 理器的不得不说的问题就是,同一业务流分配到多核处理 上后,如需交互,例如访问同一资源,就会造成读写的缓 存一致的问题,解决的这一问题的天然思路是加锁,即在 变量访问上加自旋锁,但是带来的问题就是处理性能的急 剧下降。而 FPGA 无论并行处理和同一变量的访问,都可以 变成工程师的设计水平的问题,没有原理性的挑战。 没 有一种器件可以满足全人类的众多需求,因此不用担心 FPGA 没有用武之地。必定是一系列产品的组合。下面主要 介绍一下 FPGA 可以作为现今热门场景的几种应用。 (1)络存储产品,特别是现在的 NAS,或者 SAN 设备 上,其存储的时间、接口、安全性等都要求较高,而 FPGA 无论处理性能还是扩展接口的能力都使其在这一领域大有 作为。现在高端 FPGA 单片就可以扩展 32 个或者更多 4G 或 者 8G 的 FC 接口。并且其协议处理相对的固定,也使 FPGA 在这一领域有大量的可能应用。 (2)高速络设备,现在高速络设备 10G、40/100G 以 太设备领域,同样 FPGA 也是关键的处理部件。特别是 IPv6 的商用化及大数据对于基础设施的高要求,都使这一领域 的处理应用会逐渐广泛,这一领域通常是高速络处理器 (NP)+FPGA 的典型架构。 (3)4G 等通信设备,对于新一代通信基站的信号处理, FPGA+DSP 阵列的架构就是绝配。特别是在专用处理芯片面 世之前,这样的架构可以保证新一代通信基础设施的迅速 研发和部署。 没有完美的架构,只有合适的组合,各种芯片和架构 都是为应用服务,互相的渗透是趋势,也是必然。FPGA 相 对处理器的可编程领域,仍然属于小众(虽然人数也不少) 。 但是正像一则笑话所说:大腿虽然比根命根子粗,但决没 有命子重要。这算开个玩笑。FPGA 的实现为以后的芯片化 留下了许多可能和想象空间,从而在应用大量爆发时通过 芯片化来大幅降低成本,这这也正是其他可编程器件所不 能比拟的。 FPGA 和他那些小伙伴们 (二) 器件互联 系统架构确 定,下一步就是 FPGA 与各组成器件之间互联的问题了。通 常来说,CPU 和 FPGA 的互联接口,主要取决两个要素: (1)CPU 所支持的接口。 (2)交互的业务。 通常来说,FPGA 一般支持与 CPU 连接的数字接口,其 常用的有 EMIF,PCI,PCI-E,UPP,口(MII/GMII/RGMII) , DDR 等接口。作为总线类接口,FPGA 通常作为从设备与 CPU 连接,CPU 作为主设备通过访问直接映射的地址对 FPGA 进 行访问。根据是否有时钟同步,通常总线访问分为同步或 异步的总线,根据 CPU 外部总线协议有所不同,但数据、 地址、控制信号基本是总线访问类型中总线信号所不能省 略的。CPU 手册中会对信号定义和时序控制有着详细的说明, FPGA 需要根据这些详细说明来实现相应的逻辑。同时 CPU 还可以对访问时序进行设置,比如最快时钟,甚至所需的 最小建立时间和保持时间,这些一般 CPU 都可以进行设置, 而这些具体参数,不仅影响 FPGA 的实现,也决定总线访问 的速度和效率。对于同步总线,只需要根据输入时钟进行 采样处理即可,但对于异步总线,则需要的对进入的控制 信号进行同步化处理,通常处理方式是寄存两拍,去掉毛 刺。因此用于采样的时钟就与 CPU 所设置的总线参数相关, 如采样时钟较低,等控制信号稳定后在译码后输出, 篇二:最近也面试了很多 FPGA 工程师 最近也面试了很多 FPGA 工程师,没找到合适,我觉得 很多人从开始的时候就误入歧途了,对新手学习 FPGA 设计 我也说一点看法吧。我认为要从基础开始做,基础牢,才 有成为高手的可能。 我觉得有以下几步必须要走: 第一步:学习了解 FPGA 结构,FPGA 到底是什么东西, 芯片里面有什么,不要开始就拿个开发板照着别人的东西 去编程。很多开发板的程序写的很烂,我也做过一段时间 的开发板设计,我觉得很大程度上,开发板在误人子弟。 不过原厂提供的正品开发板,代码很优秀的,可以借鉴。 只有了解了 FPGA 内部的结构才能明白为什么写 Verilog 和 写 C 整体思路是不一样的。 第二步:掌握 FPGA 设计的流程。了解每一步在做什么, 为什么要那么做。很多人都是不就是那几步吗,有什么奇 怪的?呵呵,我想至少有一半以上的人不知道 synthesize 和 traslate 的区别吧。 了解了 FPGA 的结构和设计流程才有可能知道怎么去优 化设计,提高速度,减少资源,不要急躁,不要去在为选 择什么语言和选择哪个公司的芯片上下功夫。语言只是一 个表达的方式,重要的是你的思维,没有一个好的指导思 想,语言用得再好,不过是个懂语言的人。 第三步:开始学习代码了。我建议要学代码的人都去 Altera 或 Xilinx 的站上下原厂工程师的代码学习。不要一 开始就走入误区。 个人愚见,欢迎大家讨论。 做 fpga 主要是要有电路的思想,作为初学者,往往对 器件可能不是熟悉 ,那么应该对于数字电路的知识很熟悉 吧,fpga 中是由触发器和查找表以及 互联线等基本结构组 成的,其实在我们在代码里面能够看到的就是与非门以及 触发器,不要把 verilog 和 c 语言等同起来,根本就是不 同的东西,没有什么可比性,在写一句程序的时候应该想 到出来的是一个什么样的电路,计数器 选择器 三态门等 等,理解时序,逻辑是一拍一拍的东西,在设计初期想的 不是很清楚的时候可以画画时序图,这样思路会更加的清 晰,还有就是仿真很重要, 不要写完程序就去往 fpga 中去加载,首先要仿真,尤 其是对比较大型一点的程序,想像自己是在做 asic,是没 有二次机会的,所以一定要把仿真做好, 还有很多新手对于语言的学习不知道选 vhdl 好还是 verilog 好,个人偏好 verilog,当然不是说 vhdl 不好, 反正写出来的都是电路,那当然就不要在 语言的语法上面花太多的功夫了,verilog 言简意赅 assign always case if else 掌握这些几乎可以写 出 90%的电路了, 上面是我的一些愚见,希望对大家有所帮助 做一块板 子,实现一个协议,先从 简单入手,譬如 RS232,然后到复杂,PCI 协议,然后 再设计一些高速的,譬如 ddr sdram,基本上你对 fpga 的 了解就已经很深了 能搞到 51,MEGA,STM32 的源码和相关库,就小 CASE 啦,编译-综合-下载,OL 学习 FPGA 最重要的是要了解综合和时序仿真,你熟知 你写的每个进程到 RTL 级中都会综合成什么样的电路,只 有这样你才能使用有限的资源设计出好的逻辑硬件。 篇三:一个合格的 FPGA 工程师需要掌握哪些知识 一个合格的 FPGA 工程师需要掌握哪些知识?这里根据 自己的一些心得总结一下,其他朋友可以补充啊。 语言及其于硬件电路之间的关系。 2.器件结构(最好熟练掌握 Spartan3,Vertix4 系列 的器件结构,及其资源于 Verilog 行为描述方法的关系。 ) 。 3.开发工具(熟练掌握 Synplify,Quartus,ISE,Modelsim)。 4.数字电路(组合电路,触发器,特别是 D 触发器构 成分频器,奇数倍分频占空比为 50%,时序电路,并且能用 Verilog 语言描叙。 ) 。 5.熟悉 FPGA 设计流程(仿真,综合,布局布线,时序 分析) 。 6.熟练掌握资源估算(特别是 slice,lut,ram 等资源 的估算) 。 7.同步设计原理。 8.熟练掌握基本概念(如建立时间,保持时间,流量 (即所做 FPGA 设计的波特率)计算,延迟时间计算(所做 FPGA 设计) ,竞争冒险,消除毛刺的方法等等) 。 9.具备具体设计经验(对应届生而言如毕业设计) 。 10.良好的设计思路(流水线设计即熟称打拍子,在速 率资源功耗之间的折中考虑) 。 一个合格的 FPGA 工程师至少在以下三个方面的一个非 常熟悉: 1.嵌入式应用 应用 3.高速收发器应用 将自己的走过的弯路和总结的经验与大家分享一下, 希望对您有一点点 的参考价值。 首先从先从如何成为一个合格的设计者说起吧!初学 者觉得一切都是挑战,一切都新鲜,不知从何处下手。我 总结了学习 EDA 逻辑设计的 4 个步骤,请拍砖! 1。 首先,应该好好学习一下 FPGA/CPLD 的设计设计 流程。 不要简单的以为就是设计输入仿真综合 实现那么一回事,要抠细,要学精,要多问每个步骤 的注意事项,区分相关步骤的联系和区别。比如要搞清楚 功能仿真、综合后仿真、Translate 后仿真、Map 后的仿真、 布局布线后仿真的作用都是什么,什么时候应该做,什么 时候可以不做这些仿真!学习清楚了设计流程最大的好处 就是有利于培养良好的 EDA 设计习惯,日后会受益非浅! 2。 关于设计输入和 Coding Style。 设计输入最好学习 HDL 语言,Verilog、VHDL 都可以, 可以把状态机输入和原理图输入作为补充内容,但不是重 点。我在前面的帖子已经反复强调了 Coding Style 的重要 性。因为它是逻辑设计人员的一个基本业务素质。而且 Coding Style 不是看几篇文章,学几条原则就能够成为高 手的,他需要您在工作中不断的体会和积累,在学习的最 初,有 Coding Style 的意识,设计者就会有意的积累,对 日后发展很有好处。反之则后患无穷。 3。 培养硬件的意识,培养系统的观念。 我也在交流和授课的时候很强调硬件意识,如果从形 式上看,逻辑设计随着智能化和优化手段的不断发展最后 会越来越灵活,越来越简单。比 如我们现在在使用大型 FPGA 时就很少谈如何用 Floorplanner 优化,手动布线,如果用手动方式,其工作 量太大了啊!一个设计的优劣,关键看其设计者的硬件意 识,和系统意识。硬件意识就是要求先做到对设计的硬件 胸有成竹,HDL 代码仅仅是一个表述心中硬件的工具。系统 意识要求设计者有宏观的观念,对设计的全局有个合适的 安排,比如时钟域,模块复用,约束,面积,速度等问题。 要知道在系统上复用模块节省的面积远比在代码上小打小 闹来的实惠得多。 4。 最后才是工具软件的使用。 现在 EDA 软件都越来越友好,越来越“傻瓜化” ,如果 您费了 1 年还没有基本摸清软件的使用,我敢说,那是一 个比较烂的软件(起码在用户接口上) ,因为这是和 EDA 这 种方式的理念背道而驰的。但是作为设计者,软件是工具, 应该熟练掌握各个步骤不同方面的软件,这样才能最大程 度地发挥您的聪明才智,才能使您如虎添翼!需要对相关 器件的要有一定的了解,对和这些器件之间的控制、数据 交换等通信要清晰,对性能和功能清楚。而且作为基本的 素质要求要能看懂原理图,和 PCB 要不没法调试,呵呵。 另外比较重要的一点是对 FPGA 设计的一些基本原则要 有一个清晰的认识,比如: “面积和速度的互换” , “流水线设计方式” , “乒乓操 作” 。 对最基本和最常用的模块要非常熟悉,比如单口/双口 RAM,同步/异步 FIFO 等等。 除了问题要多想想自己的设计。虽然综合,布线工具 的性能有差异,但是一个设计的优劣根本还是设计者的思 路是否巧妙。当我们的设计达不到要求或者性能太差的时 候,请不要埋怨综合工具太滥,布线结果太差,因为工具 不会想人那么聪明。这时候,我们应该静下心,想一下自 己的设计是不是有什么问题,结构是否合理,代码的风格 是否符合工具的要求。系统结构的改进带来的优化远远超 过最好的优化工具所能达到的结果 篇四:FPGA 工程师如何_写简历的几点建议 FPGA 工程师如何 写简历的几点建议(转载) FPGA 工程师如何 写简历的几点建议(转载) rickyice 发表于 XX-11-10 10:18:00 本来是给下面一篇帖子的回复,写了写,觉得还是放 在前面,看得人会多点。 我做了 10 年的 FPGA 了,中间也做过 ASIC(前端) , DSP 也有 10 年了,嵌入式短些,只有 2 年。在小公司待过, 也在大公司待过,给别人写过简历,也收过简历,有一点 心得,写出来和大家分享 1、首先要确认你的竞争力,下面的帖子在问是否会被 大公司看中,你说的知名大公司指的是哪些公司?各公司 的业务范围和需求都不一样。大小也很难从人数和资产上 界定,我认识一个公司只有 80 人,但是在业界绝对是老大, 别的公司设计产品都要借鉴一下他们的。招聘的重点是看 你是否能适应公司的业务,所以,写简历的第一点是简历 要有侧重点,不能只有一份,ASIC 工程师和 FPGA 工程师的 要求就不一样,其中分前端工程师、后端工程师、编码工 程师、算法工程师、测试工程师等等,要求不一样,你都 投一份简历,就很难从 HR 那里被送到实际要招人的组长手 里,HR 会觉得你专业或经历不适合。这是刚出校门的人简 历最大的弊病。 2、大部分人简历最大的问题是只有做过的项目简介, 但是没有描述你的工作和最后的效果。要知道真正招人的 很关心 你做过哪些项目,主要关心的是在项目中做了什么, 达到了什么效果。比如我以前收到的简历就有写做过 ASIC 的,但是一看时间只有 3 个月,根本不可能做完,再问问 做的内容,主要是做测试,这样写是不行的。 3、另外还有效果,每一个设计应该是功能和性能的结 合。最后要描述你实现了哪些功能和效率有多高。这样人 家起码会认为你是个严谨的工程师,无论 ASIC 还是 FPGA, 最后的性能报告都是很重要的。比如 E1 的接口设计,很多 人都会做,但是你能实现得比别人效率高、或者面积小, 就能说明你的能力。这也是面试时公司会去了解的重点, 这样连后面的面试你也会占优势。 4、一个公司的招聘流程(真正招人的,不是为了人才 储备的)一般不会搞海选,HR 把认为基本符合要求的简历 给要人的组长,他看好了才会通知面试,而这些人都是资 深工程师,你的项目他一看就知道有没有水分,一般有水 分的都难以面试,因为组长需要的工程师是能干活少吹牛 的,写明白你在以前的项目中做了什么有很多好处,没人 指望刚毕业的就什么都会,只要组长觉得有潜质就有希望。 所以把你做的写清楚,组长才能看出你是否有潜质。 5、简历里另一个误区是经验,每个公司都需要有经验 的工程师,但是每个老板都知道,真正有经验的工程师报 价不会低,老板可是要在能完成任务的前提下尽量解决开 支的。所 以一个组常常是一个巨有经验的,带两个很有经验的, 几个有点经验的,加上几个刚入门的。所以不要夸大自己 的经验,放低姿态,重点表现你的潜力,反而有利。组长 不太喜欢要很有经验的,因为会打破小组的平衡;更不喜 欢巨有经验的,会踢了自己的饭碗;所以有点经验的是首 选,刚入门也不错,因为比较好调教。所以刚毕业的学生 只要在简历中让人觉得有点经验就够了。 6、简历要重点突出。简历先给 HR 看,他们多半不懂 技术,只是根据招人指标看是否符合,所以一定要把你符 合招聘要求中的部分写成一个模块,比较靠前,HR 一看见 这部分就 ok 了,后面根本不看。第二个看的人多半是你将 来的上司,所以要把他关心的部分单独写几个模块,要详 细:你从哪毕业(学的什么就可以简略) 、做过些什么、做 得怎么样、会什么、程度如何、还有哪些辅助本领(技术 上的) ,最后看的人是你的大老板,他就看看你的资历(好 评价你的成本) ,有的企业文化好的地方会看看课外的爱好 什么的(都不是主要的) 。所以要写得模块分明,字得间隔 要大,标题要明显,让每个人看到他想看的,尽量少费话。 没话说宁可少说,起码给人一个简洁的映象。要知道 FPGA 或者说硬件工程师大部分都是有些急脾气的,未必耐烦看 完很长的简历。 FPGA 设计者的 5 项基本功 得佟林传里,佟林练的基本功是“绕大树、解皮 绳” ,然后才练成了什么“鬼影随行、柳叶绵丝掌” 。 在我看来,成为一名说得过去的 FPGA 设计者,需要练 好 5 项基本功:仿真、综合、时序分析、调试、验证。 需要强调的一点是,以上基本功是针对 FPGA 设计者来 说的,不是针对 IC 设计者的。对于 IC 设计,我不懂,所 以不敢妄言. 对于 FPGA 设计者来说,练好这 5 项基本功,与用好相 应的 EDA 工具是同一过程,对应关系如下: 1. 仿真:Modelsim, Quartus II(Simulator Tool) 2. 综合:Quartus II (Compiler Tool, RTL Viewer, Technology Map Viewer, Chip Planner) 3. 时序:Quartus II (TimeQues t Timing Analyzer, Technology Map Viewer, Chip Planner) 4. 调试:Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor) 5. 验证:Modelsim, Quartus II(Test Bench Template Writer) 掌握 HDL 语言虽然不是 FPGA 设计的全部,但是 HDL 语 言对 FPGA 设计的影响贯穿于整个 FPGA 设计流程中,与 FPGA 设计的 5 项基本功是相辅相成的。 对于 FPGA 设计者来说,用好“HDL 语言的可综合子集” 可以完成 FPGA 设计 50%的工作设计编码。 练好仿真、综合、时序分析这 3 项基本功,对于学习 “HDL 语言的可综合子集”有如下帮助: 1. 通过仿真,可以观察 HDL 语言在 FPGA 中的逻辑行 为。 2. 通过综合,可以观察 HDL 语言在 FPGA 中的物理实 现形式。 3. 通过时序分析,可以分析 HDL 语言在 FPGA 中的物 理实现特性。 对于 FPGA 设计者来说,用好“HDL 语言的验证子集” , 可以完成 FPGA 设计另外 50%的工作调试验证。 1. 搭建验证环境,通过仿真的手段可以检验 FPGA 设 计的正确性。 2. 全面的仿真验证可以减少 FPGA 硬件调试的工作量。 3. 把硬件调试与仿真验证方法结合起来,用调试解决 仿真未验证的问题,用仿真保证已经解决的问题不在调试 中再现,可以建立一个回归验证流程,有助于 FPGA 设计项 目的维护。 FPGA 设计者的这 5 项基本功不是孤立的,必须结合使 用,才能完成一个完整的 FPGA 设计流程。反过来说,通过 完成一个完整的设计流程,才能最有效地练习这 5 项基 本 功。对这 5 项基本功有了初步认识,就可以逐个深入学习 一些,然后把学到的知识再次用于完整的设计流程。如此 反复,就 篇五:4 个 FPGA 工程师面试题目 4 个 FPGA 工程师面试题目(经历) FPGA 与 CPLD 内部结构区别? CPLD 以 altraMAX7000 这种 PLD 为例,可分为三块结构:宏 单元(Marocell),可编程连线(PIA)和 I/O 控制块。宏单 元是 PLD 的基本结构,由它来实现基本的逻辑功能。可编 程连线负责信号传递,连接所有的宏单元。I/O 控制块负责 输入输出的电气特性控制,比如可以设定集电极开路输出, 摆率控制,三态输出等。 这种基于乘积项(实际就是与或阵列)的 PLD 基本都 是由 EEPROM 和 Flash 工艺制造的,一上电就可以工作,无 需其他芯片配合。布线方式是全局的,所以延时可预测。 CPLD 适合做逻辑设计。 FPGA FPGA 基于 LUT,LUT 本质上就是一个 RAM,每一个 LUT 可以看成一个有 4 位地址线的 16x1 的 RAM。这也是为什么 FPGA 需要外接一个 rom 来上电配置。 以 xilinx 的 Spartan-II 为例,主要包括 CLBs,I/O 块,RAM 块和可编程连线。在 spartan-II 中,一个 CLB 包 括 2 个 Slices,每个 slices 包括两个 LUT,两个触发器和 相关逻辑。 Slices 可以看成是 SpartanII 实现逻辑的最基 本结构。 FPGA 的制造工艺确定了 FPGA 芯片中包含的 LUT 和触发 器的数量非常多,往往都是几千上万,PLD 一般只能做到 512 个逻辑单元,而且如果用芯片价格除以逻辑单元数量, FPGA 的平均逻辑单元成本大大低于 PLD。 所以如果设计中 使用到大量触发器,例如设计一个复杂的时序逻辑,那么 使用 FPGA 就是一个很好选择。 和 Register 区别?行为描述中 Latch 如何产生? 本质的区别在于:latch 是电平触发,reg 是边沿触发。 时序设计中尽量使用 reg 触发。 行为描述中,如果对应所有可能输入条件,有的输入 没有对应明确的输出,系统会综合出 latch。 比如:always( a or b) /缺少 else 语句 begin if(a=1) q end 3.对竞争冒险的理解,以及如何消除? 在组合逻辑中,由于门的输入信号通路中经过了不同 的延时,导致到达该门的时间不一致叫竞争。产生毛刺叫 冒险。如果布尔式中有相反的信号则可能产生竞争和冒险 现象。解决方法:一是添加布尔式的消去项,二是在芯片 外部加电容。 4.用 Verilog 设计一个 5 分频器。 5 分频,奇数分频都可以类似这么做,只需要改 div1 和 div2 的参数。div1 为奇数分频除 2 的余数。采用上升延 和下降延分别触发不同波形,最后叠加的方式产生奇数分 频。 module divfreq(clk, clk1x, rst, clk1xpose, clk1xnege, coutpose, coutnege); input clk; input rst; output clk1x; output clk1xpose; output clk1xnege; output2:0 coutpose; output2:0 coutnege; reg clk1xpose; reg clk1xnege; reg2:0 coutpose; reg2:0 coutnege; parameter div1 = 2 , div2 = 4; / div1 5 / 2, div2 = 5 - 1 assign clk1x = clk1xpose | clk1xnege; always(posedge clk or negedge rst) begin if(!rst) clk1xpose = 0; else if(coutpose = div1) clk1xpose = clk1xpose; else if(coutpose = div2) clk1xpose = clk1xpose; else clk1xpose = clk1xpose; end always(negedge clk or negedge rst) begin if(!rst) clk1xnege = 0; else if(coutnege = div1) clk1xnege = clk1xnege; else if(coutnege = div2) clk1xnege = clk1xnege; else clk1xnege = clk1xnege; end always(posedge clk or negedge rst) begin if(!rst) coutpose = 0; else if(coutpose = div2) coutpose = 0; else coutpose = coutpose + 1; end always(negedge clk or negedge rst) begin if(!rst) coutnege = 0; else if(coutnege = div2) coutnege = 0; else coutnege = coutnege + 1; end endmodule posted XX-08-07 15:59 阅读(1480) 评论(0) 扬智科技面试题: 扬智 vlsi 笔试部分题目 第一部分:每题 10 分 设计前端到后端的流程和 eda 工具 2.按图进行时序分析(图略) 3.简述 latch 和 filp-flop 的异同 4.寄生效应在 ic 设计中怎样加以克服和利用(这是我 的理解,原题好像是说,ic 设计过 程中将寄生效应的怎样 反馈影响设计师的设计方案) 5.同步异步传输的差异, (还给了一堆英语关键词,利 用关键词解释就可以了) 6.用 filp-flop 和 logic-gate 设计一个 1 位加法器, 输入 carryin 和 current-stage,输出 carryout 和 next- stage 第二部分:共 40 分 设计一个自动饮料售卖机,饮料 10 分钱,硬币有 5 分 和 10 分两种,并考虑找零, 1.画出 fsm(有限状态机) 2.用 verilog 编程,语法要符合 fpga 设计的要求 3.设计工程中可使用的工具及设计大致过程 篇六:FPGA 工程师 电子设计 FPGA 工程师:如何在 FPGA 中实现状态机? 作者: Adam Taylor 关键词:状态机 通信协议 控制器 FPGA 导读 安全高效的状态机设计对于任何使用 FPGA 的 工程师而言都是一项重要技能。选择 Moore 状态机、Mealy 状态机还是混合机取决于整个系统的需求。无论选择哪种 类型的状态机,充分掌握实现方案所需的工具和技巧,将 确保您实现最佳解决方案。本文主要介绍如何在 FPGA 中实 现状态机 FPGA 常常用于执行基于序列和控制的行动,比如实现 一个简单的通信协议。对于设计人员来说,满足这些行动 和序列要求的最佳方法则是使用状态机。状态机是在数量 有限的状态之间进行转换的逻辑结构。一个状态机在某个 特定的时间点只处于一种状态。但在一系列触发器的触发 下,将在不同状态间进行转换。 理论上讲,状态机可以分为 Moore 状态机和 Mealy 状 态机两大类。它们之间的差异仅在于如何生成状态机的输 出。Moore 状态机的输出仅为当前状态的函数。典型的例子 就是计数器。而 Mealy 状态机的输出是当前状态和输入的 函数。典型的例子就是 Richards 控制器。定义状态机 当需要定义一个状态机时, 首先要绘制一张状态图。状态图可用来显示状态、状 态间的转换和状态机的输出。图 1 显示了 Moore 状态机的 状态图(左)和 Mealy 状态机的状态图(右) 。 图 1 用于开/关 LED 的 Moore 状态机(左)和 Mealy 状态机(右)的状态图。 如果您要在物理组件中实现这些状态图(工程师在 FPGA 问世之前就是这么做的) ,首先就得生成当前状态和后 续状态表,然后生成实现状态机所需的逻辑。不过由于我 们将使用 FPGA 来实现设计,因此我们可以直接从状态转换 图开始工作。 算法状态图 虽然有许多状态机是使用图 1 所示的状态图方法进行 设计的,但另外还有一种描述状态机行为的方法,这就是 算法状态图法。ASM 图(图 2)在外观上更加接近软件工程 流程图。它由三个基本部分构成: 1.状态框。它与状态名称有关,并包含 Moore 状态输 出列表。 2.决策框。如果检验某条件为真,则进行下一状态的 判断。 3.条件输出框。让状态机根据当前状态和输入描述 Mealy 输出。 一些工程师认为,如果使用 VHDL 等硬件描述语言,则 采用 ASM 格式进行描述的状态机更易于映射到实现方案中。 图 2,用于图 1 所示的状态机(Moore 状态机(左) , Mealy 状态机(右) )的算法状 态图。 Moore 和 Mealy:应该选择哪个? 实现 Moore 状态机还是 Mealy 状态机,取决于状态机 需要实现的功能,以及特定的反应次数要求。两种状态机 之间的最大差别在于状态机如何对输入做出反应。在输入 和设置的适当输出之间,Moore 状态机一般有一个时钟周期 的延迟。这就意味着 Moore 状态机无法对输入变化立即做 出反应,这点在图 3 中可以清楚地看到。而 Mealy 状态机 则能够立即对输入做出反应,这通常意味着:实现相同的 函数,Mealy 状态机比 Moore 状态机需要更少的状态。 Mealy 状态机的不足之处就是在与另一个状态机进行通信时, 如果输出出乎意料地严重依赖于其它事件的序列或时序, 就可能会发生紊乱情况。 图 3,截屏显示了 Moore 状态机(上)和 Mealy 状态机 (下)输出的仿真结果。当然,并非只能使用单纯的 Moore 状态机或 Mealy 状态机,也可以将这两种状态机混合使用, 从而更有效地实现所需的函数。比如说,用于接收 RS232 串行数据的状态机就可以是混合机。 实现状态机 使用 VHDL 这样的高级语言,可以轻松地直接从状态图 实现状态机。VHDL 支持多种枚举类型,方便您定义实际的 状态名称。举例如下: TYPE state IS (idle, led_on, led_off) ; 上面的类型定义对应的是图 1 中所示的状态图,即用 于在按下按钮时切换发光二极管开/关的状态机。 实现状态机有许多种方法,可分为两类基本方法。第 一类基本方法就是一次性将所有内容集成到单个进程中。 第二类基本方法是双进程法,将组合逻辑和顺序逻辑分开。 一般来说,大多数工程师都倾向于实现单进程状态机。 与传统上讲授的双进程法相比,这种方法具有以下优势: 可以避免组合过程中信号覆盖不完全造成的闭锁风 险。 状态机的输出与时钟保持同步。 通常比双进程实现方案更容易调试。 无论您决定采用哪一种方法来实现状态机,都需要使 用 CASE 语句来评估下一状态的判定和任何输出。 状态机编码 状态变量存储在触发器中,使用下一时钟边缘上的下 一状态进行更新(即使没有状态变化也是如此) 。如何使用 触发器来表示状态值具体取决于状态的数量和是否选择用 某种特定的方法来管理综合工具。状态编码最常见的三种 类型是: 顺序码-状态编码遵循传统的状态二进制序列。 格雷码-除了状态编码使用格雷码,且状态编码串 之间只有一个位变化外,其它基本与顺序编码方法类似。 独热码-这种方法在状态机中为每一种状态分配一 个触发器。只有一个触发器当前设置为高位,其余均设置 为低位。故称为“独热” 。 顺序编码和格雷编码都需要一定数量的触发器,可以 通过下列等式来确定: 相比之下,独热编码法所需的触发器数量和状态数量 一样多。 状态编码的自动分配取决于状态机所包含的状态数量。 同时还需要考虑您选择使用的综合工具。您可以根据下列 经验法则来选取编码方法: 顺序:少于 5 种状态。 独热:5-50 种状态。 格雷:多于 50 种状态。 一般情况下您不必去考虑使用哪一种状态编码方法, 而是让综合引擎工具确定合适的实现方案,只在选择的方 法出现问题时进行考虑。但是,如果您要全盘自行掌控, 并定义状态编码方法,也没必要手动操作,只需使用状态 编码为每一种状态设定常数即可。相反地,可以使用代码 中的一个属性来驱动综合工具,从而选择特定的编码方法。 具体如下所示:TYPE state IS (idle, led_on, led_off) ; SIGNAL current_state : state := idle; ATTRIBUTE syn_encoding STRING; ATTRIBUTE syn_encoding OF current_state : SIGNAL IS “sequential”; 其中“sequential”也可以是“gray”和“onehot” 。 您还可以通过结合使用“safe”属性来确保在状态机进入 非法状态时能够恢复到有效状态。 另外,您也可以使用 syn_encoding 属性直接定义状态 编码的值。例如,假设您想要使用下列状态编码法来对三 态状态机进行编码:Idle = “11, ”led_on = “10, ” led_off = “01(与较传统的顺序”00“、 ”01“和” 10“不同): TYPE state IS (idle, led_on, led_off) ; SIGNAL current_state : state := idle; ATTRIBUTE syn_encoding STRING; ATTRIBUTE syn_encoding OF current_state : SIGNAL IS ”sequential“; 工程师负责在综合工具中使用正确的设置,以确保该 工具不会忽略任何属性。例如,赛灵思 XST 工具要求将 FSM 选项设置为 USER,而 Synopsys 的 Synplify 则要求关闭 FSM 编译器。 前面给出的等式可确定状态机实现方案所需的触发器 数量。由于不是所有的状态机都是 2 的幂次方,因此某些 状态在设计中将不会用到。实现状态机的工程师必须负责 确保未使用的状态在设计中得到妥善处理。可以采用几种 适用于多种设计的基本技巧来实现这一目标。对于高度可 靠的安全关键型设计,则需要采用其它更高级的技巧。 不过对于大多数应用来说,只需要确保状态机能够妥 善地处理未使用的状态并在进入非法状态时能够正确地恢 复。要做到这一点有两种主要的方法。第一种方法是使用 综合工具实现一个安全的状态机。综合工具通常会插入额 外的逻辑,用于检测非法状态并将状态机返回到有效状态。 第二种方法是加强对实现逻辑的控制,声明所有 2 的幂次 方状态机的状态,并 篇七:FPGA 工程师面试题集锦- FPGA 工程师面试题集锦-1 1、同步电路和异步电路的区别是什么(仕兰微电子) 2、什么是同步逻辑和异步逻辑(汉王笔试) 同步逻辑是时钟之间有固定的因果关系.异步逻辑是各 时钟之间没有固定的因果关系. 3、什么是“线与“逻辑,要实现它,在硬件特性上有什么 具体要求(汉王笔试) 线与逻辑是两个输出信号相连可以实现与的功能.在硬 件上,要用 oc 门来实现,由于不用 oc 门可能使灌电流过大,而烧坏逻辑门. 同时在输出端口 应加一个上拉电阻. 4、什么是 Setup 和 Holdup 时间(汉王笔试) 5、setup 和 holdup 时间,区别.(南山之桥) 6、解释 setup time 和 hold time 的定义和在时钟信 号延迟时的变化.(未知) 7、解释 setup 和 hold time violation,画图说明,并 说明解决办法.(威盛 VIA 上海笔试试题) Setup/hold time 是测试芯片对输入信号和时钟信号 之间的时间要求.建立时间是指触发 器的时钟信号上升沿 到来以前,数据稳定不变的时间.输入信号应提前时钟上升 沿(如上升沿有效)T 时间到达芯片,这个 T 就是建立时间- Setup time.如不满足 setup time,这个数据就不能被这一 时钟打入触发器,只有在下一个时钟上升沿,数据才能被打 入触发器. 保持时间是指触发器的时钟信号上升沿到来以 后,数据稳定不变的时间.如果 hold time 不够,数据同 样不能被打入触发器. 建立时间(Setup Time)和保持时间(Hold time).建立 时间是指在时钟边沿前,数据信 号需要保持不变的时间.保 持时间是指时钟跳变边沿后数据信号需要保持不变的时间. 如果不满足建立和保持时间的话,那么 DFF 将不能正确地采 样到数据,将会出现 metastability 的情况.如果数据信号 在时钟沿触发前后持续的时间均超过建立和保持时 间,那 么超过量就分别被 称为建立时间裕量和保持时间裕量. 8、说说对数字逻辑中的竞争和冒险的理解,并举例说 明竞争和冒险怎样消除.(仕兰微 电子) 9、什么是竞争与冒险现象怎样判断如何消除(汉王笔 试) 在组合逻辑中,由于门的输入信号通路中经过了不同的 延时,导致到达该门的时间不一致叫竞争.产生毛刺叫冒险. 如果布尔式中有相反的信号则可能产生竞争和冒险现象.解 决方法: 一是添加布尔式的消去项,二是在芯片外部加电容. 10、你知道那些常用逻辑电平 TTL 与 COMS 电平可以直 接互连吗(汉王笔试) 常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论