1、什么叫 FPGA

        FPGA 是一种可以重构电路的芯片,是一种硬件可重构的体系结构。它的英文全称是 Field
Programmable Gate Array,中文名是现场可编程门阵列。
        通过编程,用户可以随时改变它的应用场景,它可以模拟 CPU、GPU 等硬件的各种并行运
算。通过与目标硬件的高速接口互联,FPGA 可以完成目标硬件运行效率比较低的部分, 从而在系统层面实现加速。

2、什么叫数字 IC

        IC 就是半导体元件产品的统称,IC 按功能可分为:数字 IC、模拟 IC、微波 IC 及其他 IC。
        数字 IC 就是传递、加工、处理数字信号的 IC,是近年来应用最广、发展最快的 IC 品种,可
分为通用数字 IC 和专用数字 IC。
        通用 IC:是指那些用户多、使用领域广泛、标准型的电路,如存储器(DRAM)、微处理器
(MPU)及微控制器(MCU)等,反映了数字 IC 的现状和水平。
        专用 IC(ASIC):是指为特定的用户、某种专门或特别的用途而设计的电路。

3、 FPGA 设计流程

        以 Xilinx Vivado 开发工具为例,主要有以下步骤:
        系统规划、RTL 输入、行为仿真、逻辑综合、综合后仿真(可选)、综合后设计分析(时序及资源)、设计实现(包括布局布线及优化)、布线后仿真、板级调试、bitstream 固化。
        1. 系统规划:在 FPGA 设计项目开始之前,需要进行系统的功能定义和模块的划分。然后根
据任务要求(系统的功能和复杂度),对工作速度和器件本身的资源,成本,以及连线的可布性进行评估,从而选择合适的设计方案和器件类型。
        2. RTL 输入:RTL,Register Transfer Level,直译为寄存器转换级,要描述各级寄存器(时序 逻辑中的寄存器),以及寄存器之间的信号的是如何转换的(时序逻辑中的组合逻辑)。通俗
来讲,RTL 的输入一般为两种,使用硬件描述语言 Verilog HDL/VHDL 进行编写或者原理图输入。原理图就是比较老的做法了,通过门电路的拖拽连接起来设计系统,所以现在基本都是用语言来描述了。
        3. 行为仿真/功能仿真:在编译前对用户所设计的电路进行逻辑功能验证,此时是没有任何
延迟信息的,仅对初步的功能进行检测。
        4. 逻辑综合:综合的含义就是将高级层次的描述转化为低级层次的描述,就目前层次来看,
综合优化是指将设计输入编译成基本逻辑单元组成的逻辑连接网表。
        5. 综合后仿真(可选):综合后仿真检查综合结果是否和原设计一致。仿真时,将综合生成
的标准延时文件反标注到综合仿真模型中,可以估计门延时带来的影响,但是无法估计线延时,因此和布线后的实际情况有一定的差距。一般的设计可以省略这一步。
        6. 综合后设计分析(时序及资源):综合之后会告诉我们,目前的系统设计消耗了多少FPGA的资源,比如,消耗了多少 LUT、RAM、DSP48,等等。我们可以根据这些报告来选择对设计进行优化。
        7. 设计实现(包括布局布线及优化):利用实现工具把逻辑映射到目标器件结构的资源中。
布局将逻辑网表中的硬件原语和底层单元合理的配置到芯片内部的固有硬件结构上,需要在速度最优与面积最优之间做出选择;布线在布局的基础上,利用芯片内部的各种连线资源,合理正确的连接各个元件。
        8. 布线后仿真:意思与前面的综合后仿真一致,因为此时已经进行了布局布线,所以在时
序中包含的延迟信息更真实。能较好地反映芯片的实际工作情况。
        9. 板级调试:产生使用的数据文件(bitstream-比特流文件),然后将编程数据下载到 FPGA
芯片中,测试实际运行结果。最好的方式是外接逻辑分析仪查看,但这样需要占用一些 IO接口,而且一般人手头没有逻辑 。那比较实用的方向就是使用内嵌式逻辑分析仪 ILA。
        10. bitstream 固化:这其实是最最最最后一步了。只有在你确保当前的设计已经完美无瑕
可以拿来用的时候,才会把它固化到 FPGA 上。这样,每次上电运行的就变成这个系统了。

4、FPGA应用

FPGA的应用方向:
        ①用于通信设备的高速接口电路设计,这一方向主要是用 FPGA 处理高速接口的协议,并完成高速的数据收发和交换。
        ②数字信号处理方向或者数学计算方向。
        ③ SOPC 方向。

5、FPGA 内部资源

        目前主流 FPGA 都采用了 SRAM 工艺的查找表(LUT)结构,LUT 本质上就是一个 RAM。
        FPAG 内部组成部分主要有:可编程输入/输出块(IOB)、可配置逻辑块(CLB)、嵌入式块 RAM(BRAM)、丰富的布线资源、底层内嵌功能资源、内嵌专用硬核资源等。
        ①可编程输入/输出块:为了便于管理和适应多种电器标准,FPGA 的 IOB 被划分为若干个组(bank),每个 bank 的接口标准由其接口电压 VCCO 决定,一个 bank 只能有一种 VCCO,但不同 bank 的 VCCO 可以不同。只有相同电气标准的端口才能连接在一起,VCCO 电压相同是接口标准的基本条件。
        ②可配置逻辑块:由查找表和可编程寄存器组成,查找表完成纯组合逻辑功能,内部寄存器可配置成触发器或锁存器。
        ③嵌入式块 RAM:可以配置成单端口 RAM、双端口 RAM、内容地址存储器(CAM)以及FIFO
等常用存储结构。
        ④丰富的布线资源:布线资源连通 FPGA 内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。主要分为四类:全局布线资源、长线资源、短线资源、分布式布线资源。
        ⑤底层内嵌的功能单元:主要包括 DLL、PLL、DSP、CPU 等,现在越来越丰富的内嵌的功能单元,使得 FPGA 成为了系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向SOC 平台过渡。
        ⑥内嵌专用硬核资源:内嵌的专用硬核是相对底层软核而言的,指 FPGA 处理能力强大的硬核,等效于 ASIC 电路。主要有乘法器、串并收发器、PCI-E、以太网控制器等。

6、IC 设计流程

1) 确定项目需求
        首先做一款芯片需要有市场,一般公司会先做市场调研,比如最近市面上比较火的人工智能 芯片,物联网芯片,5G 芯片,需求量都比较大。有了市场的需求我们就可以设计芯片的 spec了。先由架构工程师来设计架构,确定芯片的功能,然后用算法进行模拟仿真,最后得出一个可行的芯片设计方案。 有了芯片的 spec,下一步就可以做 RTL coding 了。
2) 前端设计
        架构/算法设计分析
        目的:完成芯片中数字部分的高层次算法或架构的分析与建模,为硬件提供一个正确的软件功能模型,更为重要的是,通过大量的高层次仿真和调试,为 RTL 实现提供总体性的设计指导。数字部分越复杂,这一点越重要。

        工具:MATLAB、C++、C、System C、System Verilog 等。不同类型的芯片都不同的选择,
如数字信号处理类芯片,偏好 MATLAB。
        特点:这部分工作至关重要,基本上奠定了整个芯片的性能和功耗的基础。这部分工作主要
由具有通信、信号处理、计算机、软件专业背景的工程师完成,也有很多微电子专业背景的工程师参与。
3) RTL 实现
        目的:依据第一步的结果,完成由高层次描述到 Verilog HDL 实现的过程。
        工具:GVim/Emac、Verilog/VHDL
        特点:这一步能明显区别中训练有素的工程师和初学者。前者在写代码的过程中,具有极强
的大局观,能够在书写 Verilog HDL、描述逻辑功能的同时,还能够兼顾逻辑综合、STA、P&R、DFX、功耗分析等多方面因素,最终提供一份另其他环节的工程师都赏心悦目的代码。
        Coding Style Check
        目的:排除 RTL 代码中 CDC(Clock Domain Cross)、Lint 等问题。
        CDC:跨时钟域检查
        LInt:代码潜在问题检查(例如 A+B 的进位溢出)
        工具:Syglass、LEDA、0inCDC
        特点:目前大部分芯片中的数字部分基本上都采用局部同步和全局异步的设计策略,因此,
在设计中需要小心注意跨时钟域的数据同步问题。
        输入:RTL,SDC,lib/sglib
        输出:wave file,report
4) 功能验证
        目的:在无延迟的理想情况在,通过大量的仿真,发现电路设计过程中的人为或者非人为引起的 bug。主要指标是功能覆盖率。
        工具:Modelsim、VCS、NC-Verilog、(DVE/Verdi 波形查看器)
        语言:C++、C、System C、System Verilog,基于 UVM 的方法学等。主要是 System Verilog,
        特点:验证工程师近年来已经成为 IC 设计中需求量最大的岗位。这个阶段会占用大量的时
间,数以月计。
5) 逻辑综合+DFT
        目的:将 RTL 代码映射为与工艺库相关的网表。
        工具:DesignCompiler、RTL Compiler。DesignCompiler 在市场中占有垄断性地位,几乎成为逻辑综合的标准。
        特点:
        a.从芯片生产的角度来看,在该步骤之前,所有的工作都可近似看做一个虚拟性的,与现实无关。而从逻辑综合起,后续所有的工作都将与工艺的物理特性、电特性等息息相关。逻辑综合工具的功能主要是将 VerilogHDL 格式的文本映射为网表格式的文本,因此,它的功能等同于文本编译器。那么转换的方式有很多种,工具如何选取呢?逻辑综合过程中,整个文本格式的编译过程是在给定的人为约束条件下进行的,通过这些约束和设定的目标来指导工具完成 Compiler 的工作。所以,逻辑综合过程可以看成一个多目标(频率、面积、功耗)多约束的工程优化问题。
        b.该步骤中,通常会插入 DFT、clock gating 等。
        c.该步骤中通常加入 Memory、各种 IP 等。为了在各种工艺库以及 FPGA 原型验证平台之间有一个更方便的移植,注意适当处理这些 Memory、IP 等的接口。该步骤中也可加入 I/O、PLL 等。
        DFT(Design For Test): 为了保证芯片内部的制造缺陷尽量能够哦被检测到,通过在电路中插入扫描链(Scan Chain)的方式,测试 IC 在生产制造过程中是否出现问题。加入 DFT 会增加 20%~30%的面积。但为了保证良率,为了给客户的片子是合格的需要将具有缺陷(工厂制造缺陷)的片子筛除。
        输入文件:
        a.RTL 代码:由 ASIC design engineers 团队提供;交接前,必须保证在第 3 步的 check 中没 有任何问题;
        b.工艺库(.db):由晶圆厂提供;
        c.约束(SDC):由逻辑综合工程师和 ASIC design engineers 共同商定。
        输出文件:
        a.网表:包含了 RTL 中的所有的逻辑信息,除此以外,可能还会有 DFT、clock gating、I/O
等;网表主要用于 P&R 等流程;
        b.标准延迟文件 SDF:主要包含了网表中所有器件的延迟信息,用于时序仿真;PT 会结合
后端工具生成的一个更为精确的 sdf ,所以,通常会用 PT 的 sdf 文件做后仿真。
        Project 文件:.ddc;
        c.各种报告:timing report、area report、constrain report、clock report、violation report 等
等,以及工具的 log 文件。(此处最好能够熟悉各种脚本语言,将各种 report 处理为友好易读形式)
6) 形式验证
        目的:RTL 代码和逻辑综合后的网表是否具有一致的功能。(尤其是在后端做 ECO 的时候)
        工具:Formality、Conformal
        输入文件:RTL 代码、netlist(逻辑综合输出)、约束
        输出文件:match 和 verify 报告。
7) 静态时序分析
        目的:分析设计中所有的路径,确保满足内部时序单元对建立时间和保持时间的要求。
        工具:PrimeTime、Tempus。PrimeTime 在市场中占有垄断性地位,几乎成为 STA 的标准
        特点:
                输入:spef 文件、PnR 网表,标准单元库 db 文件,IP 的 dp 文件
                输出:SDF,timing ECO 文件
        特点:
        a.从逻辑综合开始,基本上每做一步大的调整,都会完成一次 STA 分析,以保证每步都能实现时序收敛。鉴于该特性非常重要,PrimeTime 成为了 Signoff 的重要工具。
        b.所用到的 SDC 同逻辑综合;
        c.通常设计中会存在大量的违例路径,STA 要修大量的 setup、hold 等,如何修这些违例,可以体现工作经验的重要性。此外,如果是前端修 timing 违例,一般会修的很快,但是会带来一个重大的问题,代码被前端修改后是否存在新的 bug,还需重新仿真确认,仿真会消耗掉数以月计的时间,所以除非万不得已,不会找前端修 timing。
        注:静态时序分析和形式验证这属于验证范畴。
        STA 主要是在时序上对电路进行验证,检查电路是否存在建立时间(setup time)和保持时
间(hold time)的违例(violation)。而形式验证是从功能上对综合后的网表进行验证。常用的就是等价性检查(LEC)方法,以功能验证后的 HDL 设计为参考,对比综合后的网表功能,他们是否在功能上存在等价性。
        静态时序分析和形式验证出现在设计流程中前后端过程,有一些地方在前端中没有提到,应该是在后端当中比较重要,作为验证设计工作的一部分,在前端中也加入静态时序分析和形式验证可以提高设计的可靠性。

FPGA / IC 设计(一)相关推荐

  1. 常见数字IC设计、FPGA工程师面试题

    转载自:常见数字IC设计.FPGA工程师面试题 我怕弄丢了,找不到了,所以转载过来吧,回答的还挺具有参考意义. 借个位置,顺便把另外一篇好文的地址附上:FPGA中的亚稳态 1:什么是同步逻辑和异步逻辑 ...

  2. 【2022秋招】IC设计/FPGA开发秋招经历总结(2)——公司专题

    接上篇~ [2022秋招]IC设计/FPGA开发秋招经历总结_Richie_L的博客-CSDN博客 笔者的意向岗位是数字IC/FPGA,项目经历有FPGA相关,涉及信号处理以及单片机等.目前笔者的面试 ...

  3. 数字 IC 设计、FPGA 设计秋招笔试题目、答案、解析(1)2022 紫光展锐(上)

    引言 最近收到诸多粉丝的来信,要求出一版<数字 IC 设计.FPGA 设计秋招笔试题精讲>,于是,通过几天几夜的加班加点,终于出了这一版<2022 紫光展锐秋招笔试题目.答案.解析& ...

  4. 【2022秋招】IC设计/FPGA开发秋招经历总结

    现在是2022年10月末,来给自己的秋招做一个阶段性总结.笔者正式的秋招是暑假出差回来之后开始的,7月15日至今,历时差不多3个月.当然前期也做了一些准备工作,比如简历制作和学校组织的模拟面试以及就业 ...

  5. 从 Spec.到芯片_(数字IC、模拟IC、FPGA/CPLD设计的流程及EDA工具)

    从 Spec.到芯片→ 先来看张图,本图体现出了集成电路产业链:设计业.制造业.封测业. 关于制造.封装测试我们看两张图稍作了解即可: 关于设计,是本文主要内容,主要从下方几个方面了解: 1.IC设计 ...

  6. 搭建属于自己的数字IC EDA环境(五):搭建FPGA自动化环境(Linux下vivado Tcl脚本自动化开发),业余IC设计流程与通路

    1.简述 一个完整的IC EDA环境也不能缺少了FPGA,FPGA原型验证是IC设计流程中重要的一环.一个芯片从设计到流片需要投入大量的人力.财力以及很长的研发周期,如果流片失败,对于公司来说是一笔很 ...

  7. 数字IC设计 FPGA——再谈加法器设计(使用Verilog 原语 进行四位加法器设计)

    数字IC设计 FPGA--再谈加法器设计(使用Verilog 原语 进行四位加法器设计) 前面介绍了关于xilinx FPGA CLB的基本原理和结构,以及如何使用原语进行设计(在一般的设计中使用不到 ...

  8. 数字 IC 设计、FPGA 设计秋招笔试题目、答案、解析(2)2021 华为海思(上)

    引言 最近收到诸多粉丝的来信,要求出一版<数字 IC 设计.FPGA 设计秋招笔试题精讲>,于是,通过几天几夜的加班加点,终于出了这一版<2021 华为海思秋招笔试题目.答案.解析& ...

  9. 数字IC设计/FPGA工程师秋招面经

    秋招面经 秋招总结 迷茫期 低谷期 兴奋期 秋招面试常问问题 投递公司 学习的FPGA课程 总结 秋招总结 已经一个多月没更新博客了,并不是因为博主的只是储备量空了,而是因为我去准备秋招去了,接下来将 ...

  10. 数字 IC 设计、FPGA 设计秋招笔试题目、答案、解析(3)2022 大疆创新数字芯片 B 卷

    引言 最近收到诸多粉丝的来信,要求出一版<数字 IC 设计.FPGA 设计秋招笔试题精讲>,于是,通过几天几夜的加班加点,终于出了这一版<2022 大疆创新秋招笔试题目.答案.解析& ...

最新文章

  1. Android开发之自定义Dialog二次打开报错问题解决
  2. 【Flutter】FutureBuilder 异步编程 ( FutureBuilder 构造方法 | AsyncSnapshot 异步计算 )
  3. python学习之路-第七天-python面向对象编程简介
  4. Alpha冲刺第二天
  5. 国家航天局+华为云:做地球的守护者
  6. 【shell脚本学习-3】
  7. kafka基础之核心概念
  8. 花书+吴恩达深度学习(十九)构建模型策略(训练模型顺序、偏差方差、数据集划分、数据不匹配)
  9. OpenCV】透视变换 Perspective Transformation(续)
  10. 相对地址转化为绝对地址
  11. Conky--linux自定义桌面监控
  12. linux系统下安装中文字体步骤
  13. 利用python和百度地图API实现数据地图标注
  14. VsCode建立工程
  15. T410i开机显示fan error修复
  16. 51单片机汇编密码锁(可修改密码,课程设计,含论文)!(大三上)
  17. 【优化系列】汇编优化技术(九):WebAssembly(wasm)平台SIMD优化
  18. java获取当前年份(java获取当前年份后两位)
  19. stm32驱动sd卡(1)
  20. 美国在线计算机硕士申请难度,美国计算机硕士申请难度大PK

热门文章

  1. 如何提高学生线上学习率的有效方法——以高一数学基础模块复习教学为例
  2. 【机器学习】详解 TF-IDF 与 TF-IWF
  3. uniapp 引入外部链接js
  4. 段码液晶屏应用于山地自行车码表
  5. python基础读后感_《Python基础教程读书笔记》
  6. 达梦DM7数据库服务启动异常,管道文件已存在,DmAPService dead but pid file exists
  7. 知识变现海哥|短视频微课制作常用的八种方式
  8. .大道至简之二:如何准确把握趋势
  9. 实验四 201421440038 徐凤娇
  10. Windows11 出现桌面管理器dwm.exe占用内存过高的解决方法