建议收藏:不能不刷的100道数字IC笔/面试题!

2023-11-06

一、IC设计流程及相应EDA开发工具

  • 前端设计(逻辑设计)

    • 1、规格制定

      • 根据客户需求(具体的功能和性能要求)制定芯片规格Spec
    • 2、详细设计

      • 设计方案,具体实现架构,模块划分
    • 3、HDL编码

      • 将实际的硬件电路功能通过HDL语言描述出来,形成RTL(寄存器传输级)代码;工具:SUMMIT 公司的VISUALHDL、Altera的Quartus
    • 4、仿真验证——前仿真

      • 检验编码设计的正确性,检验的标准就是第一步制定的规格,看设计是否满足了规格中的所有要求。
      • 仿真验证工具:Mentor公司的ModelsimSynopsys的VCS,还有Cadence的NC-verilog均可以对RTL级的代码进行设计验证。
      • 该部分称为前仿真,接下来逻辑部分综合之后再一次进行的仿真可以称为后仿真。
    • 5、逻辑综合Design Compiler

      • 将HDL代码翻译成门级网表Netlist。综合需要设定约束条件,就是你希望综合出来的电路在面积、时序等目标参数上达到的标准。逻辑总和需要基于特定的综合库,不同的库中,门电路基本标准单元(standard cell)的面积,时序参数是不一样的。所以,选用的综合库不一样,综合出来的电路在时序,面积上是有差异的。
      • 逻辑综合工具Synopsys的Design Compiler、Synplify 公司的 Synplicity 
      • 一般来说,综合完成后需要再次做仿真验证(这个也称为后仿真,之前的称为前仿真),仿真工具选择上面的三种仿真工具均可
    • 6、Static Timing Analysis,静态时序分析

      • 属于验证范畴,主要在时序上对电路进行验证:检查电路是否存在建立时间(setup time)和保持时间(hold time)的违例(violation)。
      • 工具:Synopsys的Prime Time
    • 7、形式验证

      • 也是验证范畴,从功能上(STA是时序上)对综合后的网表进行验证。常用的就是等价性检查方法,以功能验证后的HDL设计为参考,对比综合后的网表功能,是否在功能上存在等价性——为了确保逻辑综合过程中没有改变原先HDL描述的电路功能。
      • 工具:Synopsys的Formality
      • 前端的终点就是门级网表文件
  • 后端设计(物理设计)

    • 1、DFT(Design For Test)可测性设计

      • 芯片每步往往都自带测试电路,DFT的目的就是在设计时就考虑将来的测试。
      • DFT的常见方法是,在设计中插入扫描链,将非扫描单元(如寄存器)变为扫描单元。
      • 工具:Synopsys的DFT Compiler
    • 2、布局规划(Floor Plan)

      • 布局规划就是放置芯片的宏单元模块,在总体上确定各种功能电路的摆放位置,如IP模块,RAM,I/O引脚邓邓。布局规划能直接影响芯片最终的面积。
      • 工具为Synopsys的Astro
    • 3、CTS

      • Clock Tree Synthesis,时钟树综合,简单点说就是时钟的不限。由于时钟信号在数字芯片的全局指挥作用,它的分布应该是对称式的连接到各个寄存器单元,从而使时钟从同一个时钟源到达各个寄存器时,时钟延迟差异最小。这也是为什么时钟信号需要单独布线的原因。
      • CTS工具:Synopsys的Physical Compiler.
    • 4、布线(Place & Route)

      • 这里的布线就是普通信号布线了,包括各种标准单元(基本逻辑门电路)之间的走线。
      •  Xilinx 有 Foundation Series 和 Alliance Series 两个系列。 Altera 的两个系列是 MaxPlusII 和 Quartus 。

二、静态时序分析和动态时序分析的比较

1、静态时序分析

静态时序分析(static timing analysis,STA)遍历电路存在的所有时序路径,根据给定工作条件(PVT)下的时序库.lib文件计算信号在这些路径上的传播延时检查信号的建立和保持时间是否满足约束要求,根据最大路径延时和最小路径延时找出违背时序约束的错误

 静态时序分析的优点:

  • 不需要给输入激励;
  • 几乎能找到所有的关键路径(critical path);
  • 运行速度快,占用内存较少,不仅可以对芯片设计进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计。因此静态时序分析已经越来越多地被用到数字集成电路设计的验证中

静态时序分析的缺点: 

  • 只适用同步电路
  • 无法验证电路的功能
  • 需要比较贵的工具支持
  • 对于新工艺可能还需要建立一套特征库,建库的代价可能要几百万。

静态时序分析的工具:

  • Synopsys的prime time,
  • Cadence的Encounter Timing System等

2、动态时序分析

动态时序分析(dynamic timing analysis,DTA)通常是所有的输入信号都会给一个不同时刻的激励在testbench(.sp或者.v)中设置一段仿真时间,最后对仿真结果进行时序和功能分析。 这里的仿真可以是门级或者晶体管级,包括spice格式和RTL格式的网表。(可以理解为仿真

如下图所示的spice中给激励的语句和波形:

动态时序分析的优点

  • 晶体管级的仿真比较精确,直接基于工厂提供的spice 工艺库计算得到;
  • 适用于任何电路,包括同步、异步、latch等等
  • 不需要额外搞一套特征库
  • 不需要很贵的时序分析工具。

动态时序分析的缺点:

  • 需要给不同的测试激励,这使得在分析的过程中关键路径无法检查全 (致命性的);随着规模增大,所需要的向量数量以指数增长,且这种方法难以保证足够的覆盖率。
  • 规模大的电路spice仿真特别慢 (致命性的)

动态时序的工具 :

  • spice仿真器: hspice, finesim, hsim, spectre等;
  • verilog仿真器: ModelSim,VCS,NC-Verilog,Verilog-XL等。

从上面的分析可以看出,静态时序的主要缺点是烧钱,需要很贵的工具。这一点国内的公司也容易解决,要么融资很多不差钱,要么用盗版。

动态时序分析2个致命性的缺点关键路径无法检查全意味着里面可能有fail的path,芯片流片出来无法工作;仿真特别慢意味着你的schedule可能受到影响,无法按时交货。所以动态时序分析只适用于小规模的电路,通过给激励就能完成时序的检查,同时仿真的时间还能接受。
作者:IC君
链接:https://www.jianshu.com/p/c97a2dae9d97
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


三、ASIC和FPGA的区别是什么?具体说说FPGA的组成及开发流程?

(一)ASIC和FPGA的区别区别

1、概念区别

ASIC(Application Specific Integrated Circuit, 专用集成电路)是一种在设计时就考虑了设计用途的IC。

FPGA(Field Programmable Gate Array, 现场可编程门阵列)也是一种IC。顾名思义,只要有合适的工具和适当的专业基础,工程师就可以对FPGA进行重新编程

2、开发流程区别

FPGA开发是利用HDLquartus、vivado等EDA工具,重新配置(configure)芯片的功能,而ASIC通常都具有较少的可重配置能力。

ASIC基本都是基于标准单元开始设计的,还需要进行Place&Route(布局&布线)。当芯片存在任何问题时,必须再次重新投片,直到达到你想要的功能和性能。ASIC设计流程非常昂贵,至少需要几个月的时间才能完成

ASIC在离开生产线后再也无法改变。这就是为什么设计师在大规模量产之前需要完全确保设计正确无误。工程师可以利用FPGA的可重配置这一优势,进行ASIC的原型验证,以便在将设计发送到代工厂之前,可以在实际世界中对其进行全面的测试。

FPGA是一大堆预制的门和触发器,具有可编程互连的特性。可以使用这些基本模块配置成你想要的任何逻辑功能。如果有错误,可以在几秒钟内重新编程,而不需要数月才能知道结果。然而,在FPGA中,有时候需要额外的硬件开销来进行正确的连接

3、成本区别

ASIC在重复成本方面具有很大的优势,因为在设计中浪费的材料非常少。对于FPGA,总是有很多的硬件资源被浪费。这意味着FPGA的重复成本通常高于同类ASIC的重复成本

尽管ASIC的重复成本非常低,但其非重复成本相对较高且通常达到数百万。由于它是非重复性的,因此每个IC的成本随着量的增加而减少。

所以,在ASIC量产到一定量之后,使用ASIC可以比使用FPGA更便宜。与FPGA相比,ASIC在功耗,性能,尺寸和成本方面具有很大优势。


(二)FPGA组成结构及功能

1、FPGA的基本结构组成

目前主流的FPGA芯片仍是基于查找表(LUT)。FPGA芯片主要由以下6部分组成:

  1. 可编程输入/输出单元(IOB):支持多种电平标准、LVDS、DDR2/3
  2. 基本可编程逻辑单元(CLB = LUT + Register):LUT、DFF、MUX​​​​​​​​​​​
  3. 完整的时钟管理模块:GC、DCM、PLL、MMCM等
  4. 丰富的布线资源
  5. 嵌入式块RAM:FIFO、ECC
  6. 底层嵌入功能单元和内嵌专用硬核(IP:DSP、PCIe、Serdes、ARM、PC)

对于一款芯片,我们肉眼看到的如图所示,看不出它有任何特点。


当我们对其内部放大时,看到如图所示结构,密密麻麻小方格,仍然完全看不出有什么特点:

 

当我们再对其内部进行放大时,看到如图所示结构,这时可以看到芯片内部的最基本组成单元:可编程逻辑单元、布线资源、可编程IO

2、FPGA各个基本结构的功能

1.可编程输入/输出单元(IOB)

目前大多数FPGA的I/O单元被设计为可编程模式,即通过软件的灵活配置,可适应不同的电器标准与I/O物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等。

ILOGIC/LOGIC资源可支持以下操作(这些资源之间的所有连接均由所编写代码控制):

  1. 边沿触发D型触发器
  2. 电平敏感性锁存器
  3. 异步/组合
  4. IDDR/ODDR模式

2.基本可编程逻辑单元(CLB)

FPGA的基本可编程逻辑单元是由查找表(LUT)和寄存器(Register)组成的,是实现时序电路和组合电路的主要逻辑资源

  • 查找表完成纯组合逻辑功能。
  • FPGA内部寄存器可配置为带同步/异步复位和置位时钟使能的触发器,也可以配置成为锁存器

FPGA一般依赖寄存器完成同步时序逻辑设计。一般来说,比较经典的基本可编程单元的配置是一个寄存器加一个查找表,但不同厂商的寄存器和查找表的内部结构有一定的差异,而且寄存器和查找表的组合模式也不同。

学习底层配置单元的LUT和Register比率的一个重要意义在于器件选型和规模估算。由于FPGA内部除了基本可编程逻辑单元外,还有嵌入式的RAM、PLL或者是DLL,专用的Hard IP Core等,这些模块也能等效出一定规模的系统门,所以简单科学的方法是用器件的Register或LUT的数量衡量。

3.时钟资源

全局时钟是一种专用互联网络,是专为覆盖对FPGA中各种资源的所有时钟输入设计的。这些时钟网络的设计旨在降低歪斜、占空比失真和功耗。其设计的目的还在于支持甚高频信号。

全局时钟控制资源和网络通常由以下通路和组件构成:

  1. 全局时钟输入
  2. 全局时钟缓冲器
  3. 时钟树和时钟网络-GCLK
  4. 时钟区域

区域时钟每区域有2个区域时钟缓冲器BUFR和4个区域时钟树。区域时钟网络是一组独立于全局时钟网络的时钟网络。与全局时钟不同,区域时钟信号(BUFR)的跨度限于三个时钟区域,而IO时钟信号只驱动一个区域。

第三种时钟资源是IO时钟,可以达到非常高的速度,可用于局部的IO串行器/解串器。

4.丰富的布线资源

布线资源连通FPGA内部所有单元,连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。布线资源的划分:

1)全局性的专用布线资源:以完成器件内部的全局时钟和全局复位/置位的布线

2)长线资源:用以完成器件Bank间的一些高速信号和一些第二全局时钟信号的布线(这里不懂什么是“第二全局时钟信号”);

3)短线资源:用来完成基本逻辑单元间的逻辑互连与布线

4)其他:在逻辑单元内部还有着各种布线资源和专用时钟、复位等控制信号线

由于在设计过程中,往往由布局布线器自动根据输入的逻辑网表的拓扑结构和约束条件选择可用的布线资源连通所用的底层单元模块,所以常常忽略布线资源。其实布线资源的优化与使用和实现结果有直接关系。

5.嵌入式块RAM

目前大多数FPGA都有内嵌的块RAM。嵌入式块RAM可以配置为单端口RAM、双端口RAM、伪双端口RAM、CAM、FIFO等存储结构。

CAM,即为内容地址存储器。写入CAM的数据会和其内部存储的每一个数据进行比较,并返回与端口数据相同的所有内部数据的地址。简单的说,RAM是一种写地址,读数据的存储单元;CAM与RAM恰恰相反。

除了块RAM,Xilinx和Lattice的FPGA还可以灵活地将LUT配置成RAM、ROM、FIFO等存储结构。

6.底层嵌入功能单元和内嵌专用硬核

底层嵌入功能单元是指通用程度较高的嵌入式功能模块(软核)。如锁相环(Phase Locked Loop,PLL)DLL(Delay Locked Loop)DSP(Digital Signal Processing)和CPU等。

与“底层嵌入单元”是有区别的,这里指的硬核主要是那些通用性相对较弱,不是所有FPGA器件都包含硬核。


(三)以CycloneⅡ为例介绍FPGA器件

CYCLONEⅡ系列FPGA器件由美国Altera公司出品,属于中端产品。采用了90nm的工艺,增加了片内逻辑单元数。为了方便说明,在此仅选用EP2C5进行分析讲解。

1、FPGA的命名规则

先了解一下FPGA的命名规则,这样就可以从芯片名字的角度来看这是怎么样性能的一款芯片了。

例如EP2C20F484C6,含义:

EP——工艺,

2C——cyclone2,

20——LE数量约为20K,

F——封装形式,

484——管脚数,

C——温度范围(确定其是工业级,军品级,还是商业级),

6——速度(数字越小速度越快)。

2、内部结构及组成

1.逻辑单元与逻辑阵列

        逻辑单元(Logic Element,LE)在FPGA器件内部,用于完成用户逻辑的最小单元。一个逻辑阵列包含16个逻辑单元以及一些其他资源, 在一个逻辑阵列内部的16个逻辑单元有更为紧密的联系,可以实现特有的功能。

        一个逻辑单元主要由以下部件组成:

  • 一个四输入的查询表(LookUp Table,LUT)
  • 一个可编程的寄存器
  • 一条进位链
  • 一条寄存器级连链。

        查询表: 用于完成用户需要的逻辑功能,CYCLONEⅡ系列的查询表是4输入1输出的,可以完成任意4输入1输出的组合逻辑。

        可编程寄存器:可以配置成D触发器,T触发器,JK触发器,SR触发器。每个寄存器包含4个输入信号,数据输入、时钟输入、时钟使能、复位输入。

        一个逻辑单元包含3个输出,两个用于驱动行连接、列连接、直接连接,另外一个用于驱动本地互联。 这三个输出是相互独立的。输出信号可以来自于查询表也可以来自于寄存器。

        本地互连通路是逻辑阵列的重要组成部分,芯片级设计思路上的考虑与节省我们就不讨论,从实际运用出发,直接看看这个互连通路是干什么用的。本地互连通路提供了一种逻辑阵列内部的连接方式, 逻辑阵列内部还包含一种对外的高速连接通路,称之为直接连接通路。

        直接连接通路连接的是相邻的逻辑阵列,或者与逻辑阵列相邻的M4K存储器块、乘法器、锁相环等。

CYCLONEⅡ系列FPGA的逻辑单元有两种工作模式:普通模式和算数模式。

  • 普通模式适合于一般的逻辑运算。算数模式适用于实现加法器、计数器、累加器、比较器等。
  • 逻辑阵列的主体是16个逻辑单元,另外还有一些逻辑阵列内部的控制信号以及互连通路。前面所讲的互联通路和直接连接通路就是逻辑阵列中的部分。
  • 逻辑阵列还包括一些控制信号:两个时钟信号,两个时钟使能信号,两个异步复位信号,一个同步复位信号,一个同步加载信号。

2.内部连接通路

        在FPGA内部存在各种连接通路,连接不同的模块,比如逻辑单元之间、逻辑单元与存储器之间。FPGA内部资源是按照行列的形式排列的,所以连接通路也分为行列的。

  • 行连接又分为R4连接、R24连接和直接连接
    • R4连接就是连接4个逻辑阵列,或者3个逻辑阵列和1个存储块, 或者3个逻辑阵列和1个乘法器。简单地说就是连接4个模块吧。R24就是24个模块。
  • 列连接是C4,C16,含义不用说了吧,是连接4个模块和16个模块。

3.时钟资源

CYCLONEⅡ系列FPGA有关时钟资源部分主要包括全局时钟树和锁相环两部分。

  • 全局时钟树又称全局时钟网络,负责把时钟分配到器件内部的各个单元,控制器件内部所有资源
  • 锁相环则可以完成分频、倍频、移项等相关时钟的基本操作
  • 全局时钟树是一种时钟网络结构,可以为FPGA内部的所有资源提供时钟信号,这些资源包括内部的寄存器、内部的存储器、输入输出管脚寄存器等。
  • CYCLONEⅡ系列FPGA中每条全局时钟树都对应一个时钟控制模块,时钟控制模块的作用是从多个时钟源种选择一个连接到全局时钟树,进而提供给片内的各种资源。这些时钟源包括锁相环的输出,专用时钟引脚的输入,两用时钟引脚的输入或者内部逻辑。
  • 专用时钟引脚是为时钟输入专门设计的引脚,在有可能的情况下应该尽量将时钟信号连接到专用管脚上。
    • EP2C5有8个专用时钟引脚(CLK),4个位于芯片左侧,4个位于芯片右侧。
    • 两用时钟引脚(DPCLK)通常用于介入时钟或者异步控制信号,EP2C5有8个两用时钟引脚,芯片每一侧两个。CYCLONEⅡ系列FPGA允许对两用时钟引脚的输入延时进行设置,是我们更好地控制时序。

4.内部存储器

CYCLONEⅡ系列FPGA的内部存储器是以M4K存储器块的形式存在的,每一个存储器块的大小为4608bitM4K块包括输入/输出寄存器,作用相信大家都知道。还拥有本地互联通路,作用前面讲过了哦。

好的。直接来看端口吧,从端口看作用,了解怎样去控制。

clock——输入——时钟信号

clock_en——输入——时钟使能信号

aclr——输入——异步复位信号

renwe——输入——读写使能信号

byteena——输入——字节使能信号

addressstall——输入——地址锁存信号

address——输入——地址

datain——输入——数据输入

dataout——输出——数据输出

看了这些端口以及端口说明,相信作用就不言而喻了吧,换言之,当我们想使用内部存储模块的时候,控制好这些端口的数据流就能够使用好这部分的资源了,当然存储器的使用离不开时序的控制,如果没有得到自己想要的结果,极有可能是时序控制部分出了问题。

CYCLONEⅡ系列FPGA中的M4K存储器可以被配置成以下模式:

单口模式:存储器不能同时进行读写操作。

简单双口模式:支持同时对存储器进行读写操作,读端口和写端口可以位宽不同,如果对同一地址进行读写,则输出端数据为改地址更新前的数据。

完全双口模式:两个端口可以任意组合,同时为写端口,同时为读端口,或者一个为写端口一个为读端口。存储器位宽不能为32或36。潜在威胁,如果两端口同时向一个地址写入数据的时候,会导致该地址中的数据出现不可预知的状况。

移位寄存器模式:节约用逻辑单元中构建寄存器而消耗。利用时钟下降沿写入数据,时钟上升沿读出数据,配置好该模式后是自动完成的哦。

只读存储器模式:存储器的内容通过存储器初始化文件(.mif)指定。

FIFO模式:用于数据的缓冲、多路数据的对齐、变换时钟域等。

5.乘法器

在数字信号处理运算中,主要包括滤波、快速傅里叶变换、离散余弦变换等。在写运算常常会涉及到大量的乘法运算,所以在FPGA中设计了嵌入的乘法器,专门用在这方面的信号处理。如果使用逻辑单元来搭建乘法器,会消耗不少逻辑单元并且会抑制运算速度的提高。

嵌入的乘法器包含有可选的输入/输出寄存器。寄存器的使用会提高电路性能但是会产生延时。乘法模块还包括两个控制信号,signa和signb来控制乘数A和乘数B是否有符号。另外一个乘法器还可以拆开成两个并行的乘法器,例如EP2C5有1个18bit*18bit的乘法器,可以作为两个9bit*9bit的乘法器使用,但是需要注意的是,符号控制信号就一对,所以要求两个乘法器在相同位置的数据输入必须同时为符号数或者无符号数。

6.输入/输出引脚

在输入/输出引脚和FPGA内部逻辑单元之间存在输入/输出单元(IOE),每个输入输出单元包含1个输出缓冲和3个寄存器。3个寄存器分别用于锁存输入数据、输出数据、和输出数据使能信号。


(四)FPGA开发流程

1、设计输入

设计输入方式:IP核、原理图、HDL

原理图输入:用基本逻辑门电路或晶体管搭建电路;

HDL输入:采用硬件描述语言描述电路;

  • HDL语言具有不同层次上的抽象,这些抽象层有开关级、逻辑门级、RTL级、行为级和系统级,如图3。其中开关级、逻辑门级又叫结构级,直接反映的是结构上的特性,大量的使用原语调用,很类似最开始原理图转成门级网表。RTL级又可称为功能级。

IP核:什么是IP核?任何实现一定功能的模块叫做IP(Intellectual Property)。

  • IP按照来源的不同可以分为三类,第一种是来自前一个设计的内部创建模块,第二种是FPGA厂家,第三种就是来自IP厂商;

这里集中探讨原理图和HDL的优缺点。

  • 原理图的优点就是结构直观性,HDL的优点是严密性、支持甚宽的抽象描述层次、易于移植、方便仿真调试等等,缺点就是不具备对方的优点。当时出现HDL的时候,人们确实是想着原理图该退出历史舞台了,但是到现在它还依然存在着。存在即是有道理的,存在就得用它,但是又得使用HDL,于是存在一种混合编程的形式。
  • 除了顶层模块用原理图之外,其他的内部子模块全部使用HDL来描述HDL描述的模块可以通过工具转换成符号,然后在顶层模块中引用这些符号,这就完成混合编程。

2、编译

原理图、HDL、IP核这些都将通过编译后生成门级的网表

3、映射

我们通过编译得到一张门级网表之后,接下来就得考虑如何与我们选择的硬件平台结合起来,毕竟我们使用的硬件平台是由一个一个的LUT(假设这类FPGA)组成的。那么这个结合的过程就是映射过程

  • 我们把讲基于SRAM技术的FPGA的二选一多路器拿出来举个例子,如图6,可以按照红色线将二选一多路器完全劈成两边,原来的一个表就可以规划到其他两个表或表内容中,因为被劈成的两部分可单独成表也可以被规划到其他电路形成的表里

再强调的是,映射是和器件有关的,即使是同一个系列,不同型号的FPGA内部就够也是有区别的,好比从外观看都是一个单元楼内的单元房,但是每个单元房内装修、家具摆设等都是不一样的。

4.1、布局

        讲到这一块,正好有这么一个例子来讲解这个概念。近来报道朝鲜希望在俄罗斯远东地区租用数十万公顷的土地用来培育农产品。咱先撇开今后的购买的成功与否,假设成功了,并且有了这个详细的希望培育的农作物的品种及数量,有各式各样的蔬菜、主粮、禽类畜养场、果树等等。我们前面做的那些流程得到的LUT门级网表就好比这样的清单。

        得到这样的清单之后,我们再假设在这十万公顷的土地上,阳光、水资源、温差都有一定的分布。大家知道农作物的的成长和高量产或者与阳关有关,或者与水资源有关,或者与温差有关,并且禽类的畜养材料与农作物的副产有关。所以接下来要做的事情就是根据现有的自然条件和农产品的所需环境特点合理布局,哪些地适合做什么。

        紧接着我们回到FPGA开发中来,我们通过前面的步骤得到的清单就是LUT门级网表。网表里提供的仅仅是从逻辑关系上一些LUT结构的连接。我们需要将这些LUT结构配置到FPGA具体的哪个位置。需要说明的是,FPGA里任何硬件结构都是按照横纵坐标进行标定的,图中选中的是一个SLICE,SLICE里面存放着表和其他结构,它的位置在X50Y112上。不同的资源的坐标不一样,但是坐标的零点是公用的。

    在FPGA里布局需要考虑的问题是,如何将这些已有的逻辑上连接的LUT及其它元素合理的放到现有的FPGA里,达到功能要求的时候保证质量。具体点就比如,乘法器这样的电路适合放在RAM附近,当然,硬件乘法器的硬件布局一般也是在存储器附近,有利于缩短乘法的延时时间,什么样的电路需要配置高速等等。

        十万公顷的地布局规划好了,农产品就会有很好的丰收,同样FPGA开发布局布好了,由FPGA搭建起来的电路就会更加稳定和扩展性。

4.2、布线

        上小节中,我们把十万公顷的地给安排好了,哪些地该种什么。具体实施之前还有一些是必须做的,比如农作物的浇灌,没有一个很好的灌溉系统是一个问题;再比如丰收了得采摘吧,这个时候,能够让大卡车到达每一块农地的公路枢纽也是需要解决的问题。将每一块或者相关的田地连接的灌水系统和公路的建设,就好比我们这个布线的过程。

        我们在FPGA内通过布局,知道那些LUT具体分布到哪个SLICE,但是一方面如何让这些SLICE连接起来,二方面如何让输入的信号到达相应的开始处理点和如何让输出到达输出IO上,并且连接的电路整体性能好,这就是布线这个环节需要完成的内容。要达到布线最优话,当然这里面设计到布线算法和很多细节问题,比如涉及到布线资源、PLL资源分布。但是这些对我们理解布线这个概念没有很多益处,暂且不深入,本质上就是一个线路求最优的问题

5、约束

        约束,在图1上看到,在综合和布局布线这两个流程环节里都出现了,我们暂且规定其为约束一和约束二,或者说综合约束和布局布线约束布局布线约束又可以分为位置约束、时序约束

        约束,就是对这些环节操作定制规则。一般开发环境会对这些约束有个默认,这些默认的设置对大部分情况下还是适用的,但是通常布局布线约束中的I/O约束是我们每一个工程都必须给定的。同时开发工具开放其他约束接口,允许我们设置这些规则,具体的有哪些约束怎么去做在后面介绍工具使用的时候进行讨论,这里先明白这些约束的基本概念。

综合约束

    相信大家已经下意识的将综合约束和综合过程挂在一起了,没错,综合约束确实是在综合过程中做的,用来指导综合过程,包括编译和映射。我们已经知道综合过程是将RTL级电路描述转换到FPGA上的硬件单元(LUT)中,形成以FPGA存在的硬件单元构成的电路。

        我们还是拿前面有过的例子来说明,不同的约束将导致生成性能不同的电路。综合这么一个完成式Y=A1*A2+A3*A4的电路,没有加资源共享得到的电路如图8左边所示的电路,而加了资源共享的约束后,得到的电路结构如图8右边的电路。

        通过之前的分析,得到左边的电路结构资源消耗多但是速度快,而右边的结构消耗资源少,但是速度慢,乘法器需要分时复用

        当然这只是一个例子,但是足以说明,不同的综合指导原则也就是综合约束,将会产生不同的电路当得到的电路性能不能满足需求的时候,适当考虑综合约束,来达到一个速度和面积的转换的效果,实现性能的提升

        电路实现的速度和消耗的面积是贯穿在FPGA开发过程中两个 矛盾的问题,综合约束是其中一种小范围内实现速度和面见平衡点移动的方式。

位置约束

    没错,你又想对了,位置约束和我们布局有关系,它就是指布局的策略。根据所选择的FPGA平台现有硬件资源分布来决定我们布局。

    其中最典型的位置约束就是I/O约束。一个典型的系统是既有输入也有输出的,而不管是输入还是输出,都是从I/O上为端点的。输入从哪个端点进来,输出从哪个端点出去,输入是需要支持什么样的电气特性的端点,输出又是需要支持什么样的电气特定的端点。这些都是I/O约束做的事情。任何一个工程,都必须有这么一个约束。

        还有一种典型的位置约束是在增量编译里涉及的物理界定。增量编译的出现就是因为在FPGA开发过程中综合和布局布线的长耗时性而提出的。思想就是把FPGA切成很多个小块的FPGA,然后约定具体哪块小FPGA放置什么模块,实现什么样的功能,从物理上进行界定。当修改工程后,开发平台就会检测哪些小FPGA内没有进行修改,哪些进行了修改,然后将修改过的部分重新进行综合布局布线步骤。这样一来,相比原来修改一点,全工程重新经过那些过程来讲,时间节省下来了。

时序约束

        估计没有多少悬念了,时序约束很大程度上和布线有关。为什么要做这个约束?

        由于一方面信号在芯片内传递是需要消耗时间的,另一方面大量存在的寄存器有反应时间,而我们开发的最开始的时候这些时间都是理想化的。但是考虑到真实情况下,如果跑的速度比较高,达到了200M这么个速度,当然这个高速和具体的芯片有关,高性能的芯片本身跑的速度可以达到很高,200M相对来说就不是高速,对一些低性能芯片还可能达不到200M。这个时候,这些时间达到了同样一个系统时间数量级的时候,很可能影响电路的性能了。某一刻,该来的信号没有来,默认的话就会采集错误信号了。

        为了让这些硬件本身带来的延时时间更理想化,我们就要对这些决定时间延时的因素优化来减少时间延时。对于寄存器本身的反应时间这个因素我们开发者是无能为力的,我们要做的优化就是布线了。是走直线还是走其他,不仅仅决定于自身这条路径,还和整个系统布线有关,好比水桶原理,系统性能决定于最差路径延时

        时序约束做的就是这些事情,但是时序约束并不是指具体去连接每一条线,这个工作就像前面那些流程一样都是由软件去实现的,先用软件自己默认原则布线,然后对其结果分析不满足时序要求的,我们再对具体的问题路径做一些指导约束。时序约束的添加,主要包括周期约束、输入偏移约束和输出偏移约束

6、仿真

        如果我们把FPGA开发形成电路当作一个产品的生产过程,那么在FPGA开发流程中含有的三种仿真(RTL级仿真、静态仿真和时序仿真)就好比产品线中的三道检测站。如图9,这三道工序任何一道出了问题,修改设计后都得重新走这三道卡,所以尽量在把问题发现在源头

测试平台

    所谓testbench,即测试平台,详细的说就是给待验证的设计添加激励,同时观察输出响应是否符合设计要求测试平台在做功能仿真、静态仿真和时序仿真的时候都需要用到。刚开始的对于一些初学者,遇到的都是一些简单的东西,测试平台相应的也很简单,用一个文件就可以很清晰的呈现测试结构。对于一些复杂的项目,测试就没有那么简单了,由此还专门产生一个行业——测试行业。这个时候我们要用到一个概念就是结构化测试。

        一个完整的测试平台如下图10所示,它是分结构组成的,其中对设计测试结果的判断不仅可以通过观察对比波形得到,而且可以灵活使用脚本命令将有用的输出信息打印到终端或者产生文本进行观察,也可以写一段代码让它们自动比较输出结果。

        测试平台的设计是多种多样,可以使用灵活的Verilog的验证脚本,但是它也是基于硬件语言但是又服务于软件测试的语言,有时并行有时顺序,只有掌握这些关键点,才能很好服务测试。需要说明的一点是,不管大家是已经在用Verilog在写测试平台还是刚学习写测试平台,那么建议大家还是能用到System Verilog中相对Verilog新的语法还是尝试的用,System Verilog是一种趋势,它本身就是向下兼容的第三代的Verilog。

RTL级仿真——前仿真for code

        这里RTL级仿真属于第一道检测,有些场合称作功能仿真,为了突出和后面的静态仿真的区别,以免在后面介绍静态仿真的时候大家弄的很头大,我们还是这样称呼。它是对工程在寄存器转送级进行的描述时进行测试,查看其在RTL级描述的时候实现的功能的正确性。

        关于RTL级仿真,如果设计中涉及到原理图输入的话,在一些仿真工具中是不支持的,比如Modelsim,这个时候要进行功能上的验证,可以将原理图转换成HDL描述,或者直接把整个工程转换成LUT门级网表后进行后面要讲到的静态仿真完成。

        所有逻辑功能的验证都希望在RTL级做,尽可能的将问题发现在RTL级仿真过程中,减少后面发现问题带来的反复

静态仿真——后仿真for netlist

        静态仿真,有些地方给的外号叫门级仿真,确切的说应该是综合后的LUT门级网表。是在综合过程后做的仿真。有些开发平台下将静态仿真具体又分为编译仿真和映射仿真,比如ISE就是这样做的,但是个人觉得应该很少场合做这个编译仿真。静态仿真的目的就是验证当工程到了用LUT门级网表描述的时候,从功能上检查验证工程的正确性。

        不管是Altera还是Xilinx的开发平台,都直接支持静态仿真,但是由于各自厂家的仿真器专业性不强,我们还是用第三方仿真工具比较多。这时候在第三方工具下的输入必须是经过综合工具综合出来的涵盖工程所有信息的LUT门级网表文件了。一般专业一点的第三方综合工具是不具备综合功能的,至少我们在使用Modelsim的时候,并没有要求我们添加工程用到的具体的哪一款型号FPGA的信息。这也是静态仿真的外号门级仿真指的是LUT门级网表仿真的依据。

时序仿真——后仿真for netlist+时延

        ​​​​​​​时序仿真是在布局布线之后做的,在前面介绍时序约束的时候讲到,布线延时问题影响到了电路的性能的时候可以做时序约束。那么这个延时问题的获得就可以通过时序仿真获得,当然还有一种获得延时出现超载情况,这个属于下面小节介绍的静态时序分析了。

        一般情况下,电路进行完布线过程后,会生成一个延时信息文件,我们简称SDF(standrad dealy format)文件,Quartus平台下是以.sdo文件形式存在的。里面含有三种延时信息,分别为最小值、典型值、最大值,存在的形式是最小值:典型值:最大值,一般缩写min:typ:max。这里也体现了,在FPGA里的延时信息是不能够精确获得的,只能是逼近,因为本身同一器件中,不同的区域的逻辑门也很有可能和其他的区域内同种的逻辑门的延时不一样。我们这里举一个例子来说明一下这三种值的含义。

        如上图,这是一个描述一段延时线的延时信息,给的延时信息从in端点到out端点,输入发生跳变后,分别以最小值、典型值和最大值将信号跳变传递到out端点。我们这里只是一段延时线,在延时信息文件里还有一类延时信息,就是一些具有逻辑功能的cell延时,这个时候信号跳变又分为由高变低和有低变高,因为这两种跳变在这些器件里的三种延时值是不一样的,得分别探讨,具体分别以某一种情况类推。

        在做后仿真的时候,只需要在做完静态仿真后的基础上添加布线的延时信息后,再分析逻辑功能是否满足要求。后方针的平台 使用情况和前面一样,一般采用第三方仿真工具,典型的是Modlesim,具体操作过程见软件相关操作章节。

7、静态时序分析

        静态时序分析,简称STA(Static Timing Analysis),这个过程做的话一把是在是做后仿真前做的。在布局布线后,会生成时序分析报告,该报告是分析工具利用从布线的路劲上提取出寄生参数后精确计算出来的。该报告中会提示出一些关键路径,所谓关键路劲就是指延时信息比较突出的信号节点流,通过分析可以得到不满足时序要求的路径,这个过程就是STA过程。

        静态时序分析的特点就是不需要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少,不仅可以对芯片设计进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计。很多设计都可以在功能验证的成功的基础上,加上一个很好的静态时序分析,就可以替代耗时非常长的后仿真了,这是一种很有保障性的化简流程方式。

        后仿真相对静态时序分析来说还具有逻辑验证在加上延时信息的基础上分析逻辑。

8、在线调试

        在线调试也称作板级调试,它是将工程下载到FPGA芯片上后分析代码运行的情况。有人会以为,我们不是已经做了仿真了,甚至是时序仿真都通过了,还会存在问题么?在实际中,存在这么些情况我们需要用到在线调试:

  •     仿真不全面而没有发现的FPGA设计错误。很多情况下,由于太复杂,无法做到100%的代码覆盖率;
  •     在板级交互中,存在异步事件,很难做仿真,或者仿真起来时间很长,无法运行;
  •     除了本身FPGA外,还可能存在板上互连可靠性问题、电源问题和IC之间的信号干扰问题,都可能导致系统运行出错;
  •     其他潜在问题。

        在线调试的方式主要有两种,一种是利用外部测试设备,把内部信号传送到FPGA针脚上,然后用示波器或者逻辑分析仪观察信号;另一种就是利用嵌入式逻辑分析仪,在设计中插入逻辑分析仪,利用JTAG边缘数据扫描和开发工具完成数据交互。

9、配置及固化

FPGA配置过程

        在FPGA正常工作时,配置数据存储在SRAM中,这个SRAM单元也被称为配置存储器(configure RAM)。由于SRAM是易失性存储器,因此在FPGA上电之后,外部电路需要将配置数据重新载入到芯片内的配置RAM中。在芯片配置完成之后,内部的寄存器以及I/O管脚必须进行初始化(initialization),等到初始化完成以后,芯片才会按照用户设计的功能正常工作,即进入用户模式。

        FPGA上电以后首先进入配置模式(configuration),在最后一个配置数据载入到FPGA以后,进入初始化模式(initialization),在初始化完成后进入用户模式(user-mode)。在配置模式和初始化模式下,FPGA的用户I/O处于高阻态(或内部弱上拉状态),当进入用户模式下,用户I/O就按照用户设计的功能工作。

        举例——altera FPGA配置全过程

        一个器件完整的配置过程将经历复位、配置和初始化等3个过程。

配置模式

  • 这一块分成两部分,一部分是在线调试配置,另一块是固化,即将工程配置到相应存储单元中,上电后,通过存储在存储器中的内容配置FPGA。

        在线配置

  • 第一部分在线调试配置过程是通过JTAG模式完成的,如图13所示,在JTAG模式中,PC和FPGA通信的时钟为JTAG接口的TCLK,数据直接从TDI进入FPGA,完成相应功能的配置。

  • JTAG接口是一个业界标准接口,主要用于芯片测试等功能。FPGA基本上都可以支持JTAG命令来配置FPGA的方式,而且JTAG配置方式比其他任何方式优先级都高。JTAG接口有4个必需的信号TDI, TDO, TMS和TCK以及1个可选信号TRST构成,其中:
    • TDI,用于测试数据的输入;
    • TDO,用于测试数据的输出;
    • TMS,模式控制管脚,决定JTAG电路内部的TAP状态机的跳变;
    • TCK,测试时钟,其他信号线都必须与之同步;
    • TRST,可选,如果JTAG电路不用,可以讲其连到GND。​​​​​​​

        固化

  •         第二部分固化程序到存储器中的过程可以分为两种方式,主模式和从模式。       
    • 主模式下FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程;从模式下则由外部计算机或控制器控制配置过程。主、从模式从传输数据宽度上,又分别可以分为串行和并行。

    (1)、主串模式

        主串模式是最简单的固化模式,如图14所示,这个模式过程不需要为外部存储器提供一系列地址。它利用简单的脉冲信号来表明数据读取的开始,接着由FPGA提供给存储器时钟,存储器在时钟驱动下,将数据输入到FPGA Cdata_in端口。

    (2)主并模式

        主并模式其实和主串模式的一样机理,只不过是在主串的基础上,同周期数内传送的数据变成8位,或者更高,如图15。这样一来,主并行相比主串行的数度要优先了。现代有些地方已采用这种方式来配置FPGA的了。

    (3)从并模式

        从上面看到,主模式下的连接还是很简单的。但是有时候,系统可能用其他微处理器来对FPGA进行配置。这里的微处理器可以指FPGA内嵌的处理器,比如说Nios。微处理器控制着何时配置FPGA,从哪读取配置文件。如图16,这种方式的优点是处理器可以灵活随时变更FPGA配置,同时配置的速度也快。微处理器先从外部存储设备里读取一个字节的数,然后写到FPGA里。

    (4)从串模式

        理解了从并模式,从串模式就不用很多解释了,它的特点就是节约FPGA管脚I/O。

    (5)多片级联

        多片模式有两种,一种是采用菊花链的思想,多片FPGA共享一个存储器,另外一个是可以使用其他存储器配置不同的FPGA。如果所示是一个共享型的结构,显示启动了。这里分主FPGA和从FPGA,主FPGA和存储器是使用串行主模式来配置,而后面那个的配置是通过第一配置好的FPGA上微处理器进行协调的。

模式选择

        现今FPGA应该可以支持上面五种配置模式,是通过3个模式引脚来实现的,具体的映射如下表,在今后模式还是有可能增加的。

        在PS模式下,如果你用电缆线配置板上的FPGA芯片,而这个FPGA芯片已经有配置芯片在板上,那你就必须隔离缆线与配置芯片的信号。一般平时调试时不会把配置芯片焊上的,这时候用缆线下载程序。只有在调试完成以后,才把程序烧在配置芯片中, 然后将芯片焊上.或者配置芯片就是可以方便取下焊上的那种。这样出了问题还可以方便地调试.。

        对FPGA芯片的配置中,可以采用AS模式的方法,如果采用EPCS的芯片,通过一条下载线进行烧写的话,那么开始的”nCONFIG,nSTATUS”应该上拉,要是考虑多种配置模式,可以采用跳线设计。让配置方式在跳线中切换,上拉电阻的阻值可以采用10K一般在做FPGA实验板的时候,用AS+JTAG方式,这样可以用JTAG方式调试,而最后程序已经调试无误了后,再用AS模式把程序烧到配置芯片里去。

10、开发工具总结

在围绕图1把FPGA开发流程讲完后,这里对每个环节中设计的相关软件进行总结,如下表所示。毕竟充分利用各种工具的特点,进行多种EDA工具的协同设计,对FPGA的开发是非常重要的。充分利用了这些EDA工具的优点,能够提高开发效率和系统性能。

        表中列出的每种EDA工具都有自己的特点。一般由FPGA厂商提供的集成开发环境,如Altera Quartus II和Xilinx ISE,在逻辑综合和设计仿真环节都不是非常优秀,因此一般都会提供第三方EDA工具的接口,让用户更方便地利用其他EDA工具。为了提高设计效率,优化设计结果,很多厂家提供了各种专业软件,用以配合FPGA芯片厂家提供的工具进行更高效的设计。

        比较常见的使用方式是:FPGA厂商提供的集成开发环境、专业逻辑仿真软件、专业逻辑综合软件一起使用,进行多种EDA工具的协同设计。比如Quartus II+ModelSim+FPGA Compiler II,ISE+ModelSim+Synplify Pro等等。


四、如何理解Setup time 和 Hold time?

建立时间:数据在时钟上升沿到来之,必须保持稳定的时间

保持时间:数据在时钟上升沿到来之,必须保持稳定的时间

不满足建立时间和保持时间的电路,触发器在数据变化时无法采到真实的高低电平信号,并会将这种不确定性往下传播。

建立时间约束:Tsetup < Tclk - Tclkq - Tlogic + Tskew

保持时间约束:Thold < Tclkq + Tlogic - Tskew


五、名词解释之协议篇:SPI、SD、USB、LVDS、SERDES、DDR、MIPI、PCIe、MAC、SATA

SPI(Serial peripheral interface):串行外设接口

SD(Secure Digital):SD卡/TF卡

USB(Universal Serial Bus):通用串行总线

LVDS(Low - Voltage Differential Signal):低电压差分总线

SerDes(Serializer / Deserializer):串行器/解串器

DDR(Double Data Rate):双倍数据速率

PCIe(Peripheral Component Interconnect Express):高速串行扩展总线

MAC(Media Access Control):以太网数据链路层

SATA(Serial Advanced Technology Attachment):串行ATA接口


六、名词解释之存储篇:RAM、ROM、SRAM、DRAM、SSRAM、SDRAM、PROM、EPROM、E2PROM、Flash

模电/数电/单片机/计算机组成原理/电力电子常见笔试/面试题(合集)未完更新ing_Cheeky_man的博客-CSDN博客_电子电路原理


七、名词解释之设计流程篇:

DFT(Design For Test):可测性设计

APR(Auto Place & Route):自动布局布线

CTS(Clock Tree Synthesis):时钟树综合

ECO(Engineering Change Order):工程修改

DRC(Design Rule Check):设计规则检查

LVS(Layout Vs Schematic):版图与网表对比

DFM(Design For Manufacturing):可制造性设计

JDV(Job Deck VIew):在线掩模数数据检视


八、何为同步复位、异步复位?何为异步复位同步释放?

同步复位:复位与时钟有关,在时钟边沿有效;

//同步复位
always@(posedge clk) begin
    if(!rst_n)
        q <= 'b0;
    else
        q <= d;
end

异步复位:复位与时钟无关,任意时刻都可复位;

//异步复位
always@(posedge clk, negedge rst_n) begin
    if(!rst_n)
        q <= 'b0;
    else
        q <= d;
end

异步复位同步释放:复位信号有效时,输出立即为0,复位信号释放时,这时触发器应该读取数据并输出,但是为复位释放时刻离时钟边沿过近,使触发器的建立时间得不到满足,因为不能马上释放,应该等到触发器的一个clk后再释放,虽然信号延迟了一个clk才读取,但是使读取的信号准确率得到了保证,这是值得的。

input clk;//输入时钟
input rst_n;//复位信号
output s_rst;//打拍后的复位信号

reg rst_1;
always @(posedge clk, negedge rst_n) begin
    if(!rst_n) begin //异步复位,只要复位信号有效,就马上复位
        rst_1 <= 0;
        s_rst <= 0;
    end
        
    else begin//打一拍后再释放
        rst_1 <= 'b1;
        s_rst <= rst_1;
    end
end

九、何为亚稳态?如何消除亚稳态?

数字IC设计知识点及综合题详解(提前批、秋招必刷基础题)——(四)亚稳态、跨时钟域(CDC)处理方法及其编程仿真代码_Cheeky_man的博客-CSDN博客

亚稳态:触发器无法在某个规定时间内达到一个可确认的状态;

原因:触发器的 Tsetup 和 Thold 不满足,使得输出端 Q 在时钟边沿到来后比较长的一段时间内处于不确定的状态,并且Q稳定后的值是随机的,与输入D无关;

解决方法:

  • 单bit数据——多级寄存器同步
    • 电平同步器(快域采慢域)、脉冲同步器(慢域采快域)
  • 多bit数据——FIFO+双端口RAM、握手信号

十、画出CMOS 非门/与非门/或非门的结构


 十一、你所了解的信号跨时钟域传输的方式


十二、列出4bit的格雷码,画出格雷码转二进制码、二进制码转格雷码的电路图

虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性。

格雷码的构造方法为:直接排列以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反覆,即可排列出n个位元的格雷码

1、二进制码转格雷码

自然二进制码转换成二进制格雷码:最高位相同,而次高位格雷码二进制码的高位次高位相异或,而格雷码其余各位与次高位的求法相类似。      

原理: 若二进制码表示为: B[N-1]B[N-2]...B[2]B[1]B[0];

         相应地, 则二进制格雷码表示为: G[N-1]G[N-2]...G[2]G[1]G[0].

         其中最高位保留: G[N-1] = B[N-1];

         其他各位: G[i] = B[i+1] xor B[i]. (i = 0, 1, 2, ..., n-2)

    图示如下:

 2、格雷码转二进制码

二进制格雷码转换成自然二进制码,其法则是最高位相同,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。      

 


十三、双边沿检测

 


十四、三段式FSM

1、时序逻辑:current state → next_state

2、组合逻辑:state的切换

3、时序/组合:对应state的输出

//1、时序逻辑
always @(posedge clk, negedge rst_n) begin
    if(!rst_n)
        current_state <= IDLE;
    else
        current_state <= next_state;
end

//2、组合逻辑
always @(posedge clk, negedge rst_n) begin
    case(current_state)
        IDLE:
            next_state = current_state;//阻塞赋值


//3、描述输出
always @ (posedge clk or negedge rst_n) begin
    case(next_state)
        IDLE:
            next_state <= current_state;//非阻塞赋值

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

建议收藏:不能不刷的100道数字IC笔/面试题! 的相关文章

  • 【数字 IC】从底层重新认识 D 触发器、建立时间和保持时间

    目录 1 NMOS 和 PMOS 2 MOS 管搭建逻辑门 3 锁存器和触发器 3 1 交叉耦合反相器 3 2 SR 锁存器 3 3 D 锁存器 3 4 D 触发器 4 D 触发器的建立 保持时间 1 NMOS 和 PMOS MOSFET
  • (三)系统与架构级低功耗设计

    前面讲解了使用EDA工具 主要是power compiler 进行功耗分析的流程 这里我们将介绍在数字IC中进行低功耗设计的方法 同时也结合EDA工具 主要是Design Compiler 如何实现 我们的讲解的低功耗设计主要是自顶向下的设
  • chisel快速入门(三)

    前一篇见此 chisel快速入门 二 沧海一升的博客 CSDN博客简单介绍了chisel 使硬件开发者能快速上手chisel https blog csdn net qq 21842097 article details 121418806
  • ARM架构和x86架构有什么区别?

    X86结构和ARM架构是主流的两种CPU架构 X86架构的CPU是PC服务器行业的老大 ARM架构的CPU则是移动端的老大 X86架构和arm架构实际上就是CISC与RISC之间的区别 很多用户不理解他们两个之间到底有那些区别 实际就是他们
  • 【读书笔记】高级FPGA设计之面积结构设计

    目录 面积结构设计 折叠流水线 基于控制的逻辑复用 资源共享 复位对面积的影响 无复位的资源 无置位的资源 无同步复位的资源 复位 RAM 利用置位 复位触发器引脚 总结 面积结构设计 本篇讨论数字设计的三个主要物理特性的第二个 面积 并分
  • 学习笔记--Verilog HDL高级数字设计--第六章组合逻辑与时序逻辑的综合

    组合逻辑与时序逻辑的综合 综合引擎能够自动完成一组布尔函数的最简化 并将结果映射成能满足设计目标的硬件实现 转换 优化 映射 本章将介绍如何编写易于综合的Verilog模型 综合工具完成的工作 1 检测并消除冗余项 2 查找组合反馈环路 3
  • FPGA数字IC刷题58道Verilog题解代码及视频讲解【FPGA探索者】【同步/异步FIFO】【跨时钟】

    牛客 Verilog 刷题入门篇1 24 进阶篇1 34 题解代码 所有代码均能通过测试 配合视频讲解效果更佳 为避免内容冗余 本文只给出代码 部分题目给出必要说明 很多题目本身出题有些问题 着重理解题目 没必要钻牛角尖 本文作者 FPGA
  • spyglass的waiver使用问题总结-工具(八)

    spyglass使用过程中waiver warning及error过程中总会出现生效不成功的问题 总结使用步骤供参考 实践出真知 解决问题就是好方法 1 在spyglass的prj中设置默认waiver文件 2 如何waiver 3 查看已
  • DC综合脚本中文详细解释

    script for Design Compiler DC综合编译脚本 language TCL 语言说明 Usage 使用说明 1 make sure the lib in the current directory 确保设计库在正确的文
  • 【牛客网刷题】VL8-VL10 generate for语句、比较数大小、function的使用

    写在前面 本系列博客记录牛客网刷题记录 日拱一卒 功不唐捐 目录 VL8 使用generate for语句简化代码 题目描述 输入描述 输出描述 RTL 设计 testbench 设计 仿真测试 VL9 使用子模块实现三输入数的大小比较 题
  • disable path和false path的作用与区别

    disable path和false path的作用与区别C 欢迎使用Markdown编辑器 链接 disable与false的相同与不同 false path 指定某一条path 工具计算delay 但不报时序 disable path
  • CRC算法并行运算Verilog实现

    因为CRC循环冗余校验码的算法和硬件电路结构比较简单 所以CRC是一种在工程中常用的数据校验方法 尽管CRC简单 但在工程应用中还是有些问题会对工程师产生困惑 这篇文章将介绍一下CRC 希望对大家有所帮助 一 CRC算法介绍 CRC校验原理
  • 数字IC设计学习笔记_静态时序分析STA_ PrimeTime 基本概述

    数字IC设计学习笔记 PrimeTime 基本概述 1 PrimeTime 基本概述 2 运行模式 1 PrimeTime 基本概述 PrimeTime Synopsys公司提出的 针对于复杂的 全芯片的 门级静态时序分析的工具 可集成在逻
  • 【HDLBits 刷题 15】Verification Writing Testbenches

    目录 写在前面 Verification Writing Testbenches clock Tb tb1 Tb and Tb tb2 Tb tff 写在前面 以下的解题方法不一定为最佳解决方案 有更好的方法欢迎提出 共同学习 共同进步 终
  • 芯片面积估计方法

    一 概念 芯片面积的主要涵盖部分分为三部分 IO 芯片的信号及电源pad等 Standard cell 实现芯片的功能逻辑 Macro block 第三方IP PLL DAC POR Memory etc 芯片面积估计就是通过目标工艺的库信
  • 数字SOC设计之低功耗设计入门(三)——系统与架构级低功耗设计

    前面讲解了使用EDA工具 主要是power compiler 进行功耗分析的流程 这里我们将介绍在数字IC中进行低功耗设计的方法 同时也结合EDA工具 主要是Design Compiler 如何实现 我们的讲解的低功耗设计主要是自顶向下的设
  • 电力电子转战数字IC——我的IC面试(2022.10.14更新)

    目录 感谢信 HKWS10 14面试 25mins JXC10 13面试 30mins JDSK9 23面试 42mins 快速的自我介绍 介绍一下这个MCDF的项目 你这里写SV搭建的验证环境 和UVM搭建的有什么区别吗 你这里写了覆盖率
  • STA——multicycle path

    目录 0 多周期路径 1 发射时钟和捕获时钟相同 2 发射时钟和捕获时钟不同 3 examples 之前去地平线面试的时候被问到了multicycle path的一点问题 其实这个问题我应该知道 看过 Constraining Design
  • 【HDLBits 刷题 11】Circuits(7)Finite State Manchines 18-26

    目录 写在前面 Finite State Manchines Fsm serialdata Fsm serialdp Fsm hdlc Design a Mealy FSM ece241 2014 q5a ece241 2014 q5b 2
  • 逻辑综合——工艺库

    一 库文件的设置 运行DC时需要用到的库文件有 目标库 target library 链接库 link library 符号库 symbol library 算术运算库 synthetic library 1 目标库 目标库是综合后电路网表

随机推荐

  • 降温的区块链,或许是一个全新开始!

    现如今 区块链的降温正在让跟风与吹捧现出原形 人们开始从庞杂的区块链市场当中找到新的发展方向 区块链开始从简单的打概念 搞论坛 发ICO 逐步转移到了具体应用上 从这个角度来看 当下降温的区块链或许正孕育着一个全新的开始 区块链开始找到数字
  • STAR法则,被这个理由拒绝这么多次,必须搞明白!

    首先 STAR法则是一种常常被HR使用的工具 用来收集与面试者工作相关的具体信息和能力 一个概念 STAR法则 即为Situation Task Action Result的缩写 具体含义是 Situation情境 HR希望你描述一个你遇到
  • chromecast投屏_如何将手机或者ipad投屏到电脑上

    最玩游戏近老想把ipad投屏到电脑上 于是小编了解了一下现在好用的投屏APP 发现了傲软投屏 这是一款能够同时兼容iOS和安卓系统的同屏软件 支持在Windows及Mac上使用 只要您的安卓系统在5 0及以上 支持Chromecast协议
  • 蓝桥杯 算法训练:最小距离(Java)

    题目 数轴上有n个数字 求最近的两个数 即min abs x y 格式 第一行包含一个整数n 接下来一行 表示n整数 样例输入 6 7 3 4 11 9 17 样例输出 1 思路 刚开始打算使用普通的两两数组元素进行比较 但是发现到达第9个
  • 前端H5使用canvas画爱心以及笑脸

    目录 canvas简介 画爱心 效果 画笑脸 效果 结语 canvas简介 canvas是HTML5中推出的新功能 可以在页面上生成一个画布 使用js可以在画布上绘制一些图形 画爱心 画爱心我们需要用到bezierCurveTo方法 可以绘
  • 算法 - 折半查找(C#)

    递归实现 csharp view plain copy print
  • 什么是服务器信息怎么看,怎么查看服务器信息

    怎么查看服务器信息 内容精选 换一换 在您申请了云耀云服务器后 可以通过管理控制台查看和管理您的云耀云服务器 本节介绍如何查看云耀云服务器的详细配置 包括云耀云服务器名称 镜像信息 系统盘 数据盘 安全组 弹性公网IP等信息 登录管理控制台
  • 网盘服务器安装监控系统,服务器监控程序一键安装

    服务器监控程序一键安装 内容精选 换一换 依照配置并导入样例工程中导入和修改样例后 即可在开发环境中 右击 JDBCExample java 选择 Run JDBCExample main 运行对应的应用程序工程 使用Windows访问MR
  • 互联网公司常见性能测试(压测)面试题

    一 性能测试流程 1 首先制定性能测试计划 确定各项指标的目标 期望 2 申请压力机 3 制定性能测试方案 4 执行脚本 如用jmeter命令执行jmx文件 监控数据 zabbix CAT 5 分析数据 并出性能测试报告 二 性能测试关键指
  • Pycharm和Anaconda的关系

    Pycharm和Anaconda的关系 学习记录 知识点输出有风险 相信需谨慎 1 python 所存在的问题两个 第一个 自身缺少numpy matplotlib scipy scikit learn 等一系列包 需要安装pip来导入这些
  • STM32F103RC通过DHT11获取温湿度

    文章目录 bsp dht1 c bsp dht1 h 例子下载 bsp dht1 c file bsp TimBase c author stylle version V1 0 date 2021 xx xx brief DTH11温湿度获
  • Android Studio的NDK的配置

    有时会遇到NDK的配置错误 NDK配置如下 最好不要选择最新版本 我看网上攻略大多是使用21 0 6113669这个版本
  • git 撤回 (git版本回退处理)

    项目中 我们会遇到 提交的项目代码有问题 需要执行撤回命令 但是发现撤回之后还是会运行失败 下边是一个好方法 亲测比 git reset hard 版本号 有效 下面我们详细解说一下 一 已提交 没有push 回滚 当我们本地已经 执行了g
  • 【记关于github应用认证重定向到localhost的疑问】

    要做一个关于github 的OAuth第三方登录 在配置重定向url的时候填写的是本地的测试端口localhos 8080 然后登录认证后可以重定向到本地接口 关于这个重定向我就不理解为啥它可以知道我的IP地址 然后搜索发现这个重定向是告诉
  • JAVA jdk1.8安装图文解说

    对于 jdk 的安装 网上有很多种图文解说 但是老鸟发现它们大都不严谨 非常不适合小白 本节课 老鸟就给大家做个小白教程 无论你多么菜 你一定可以安装上 否则你加我微信 我给你打五毛钱 立帖为证 jdk 有很多版本 我们应该安装哪个呢 如果
  • Python单链表

    用Python写了一个单链表 具有和Python的列表list相似的一些函数 Single link list class Node def init self item self elem item self next None clas
  • php的socket通信以及出现的错误,php的Socket通信以及出现的错误

    php的Socket通信以及出现的错误 flag 1 do conn socket socket accept sock msg Send Message Hello World if socket write conn socket ms
  • grep正则表达式后面的单引号和双引号的区别?

    单引号 可以说是所见即所得 即将单引号内的内容原样输出 或者描述为单引号里面看到的是什么就会输出什么 单引号 是全引用 被单引号括起的内容不管是常量还是变量者不会发生替换 双引号 把双引号内的内容输出出来 如果内容中有命令 变量等 会先把变
  • 【华为机试在线训练】Day 6

    题目描述 定义一个二维数组N M 其中2 lt N lt 10 2 lt M lt 10 如5 5数组下所示 int maze 5 5 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 它表
  • 建议收藏:不能不刷的100道数字IC笔/面试题!

    一 IC设计流程及相应EDA开发工具 前端设计 逻辑设计 1 规格制定 根据客户需求 具体的功能和性能要求 制定芯片规格Spec 2 详细设计 设计方案 具体实现架构 模块划分 3 HDL编码 将实际的硬件电路功能通过HDL语言描述出来 形