目录

001——什么是STA静态时序分析,有什么作用?

具有代表性的STA工具:

静态时序分析STA:

(1)setup time

(2)hold time

(3)STA 的时序路径

(4)recovery time

(5)removal time

002——FPGA设计的面积优化和速度优化

速度优化,提高运行速度:

面积优化,提高资源利用率以降低功耗要求:

003——FSM有限状态机、三段式状态机

004——FSM有限状态机(Moore 型、Mealy 型)

005——CDC跨时钟域处理【打两拍】【握手】【异步FIFO】【脉冲展宽】【指示信号】

CDC(Clock Domain Conversion)跨时钟域:

006——数据定点无损量化问题

007——存储器问题【SRAM】【DRAM】【SDRAM】【Flash】【EPROM】【EEPROM】

008——FPGA时序分析之关键路径(Critical Path)

1. 组合逻辑中插入寄存器(插入流水线)

2. 寄存器平衡(重定时Retiming)

3. 操作符平衡(加法树、乘法树)

4. 消除代码优先级(case代替if…else)

5. 逻辑复制

6. 关键信号后移

009——CDC跨时钟域处理及相应的时序约束【set_clock_groups】【set_max_delay】

010——流水线

011——DFT(Design for Test)可测性设计

(1)DFT简介

012——FPGA设计流程、常用综合仿真工具

功能仿真:

时序仿真:

常见工具:

013——FIFO深度计算【字节跳动】【大疆】【简便计算公式】

014——组合逻辑竞争冒险

什么是竞争和冒险?

怎么识别竞争冒险?

如何消除冒险?

015——计算机体系结构相关


001——什么是STA静态时序分析,有什么作用?

STA静态时序分析(Static Timing Analysis)

(1) 静态时序分析是一种验证数字集成电路时序是否合格的验证方法;

(2) 静态时序分析的前提是同步逻辑设计(重要!),不能分析异步电路;

(3) 静态时序分析工具计算路径延迟的总和,并比较相对于预定义时钟的延迟;

(4) 静态时序分析仅关注时序间的相对关系,而不是评估逻辑功能;

(5) 静态时序分析对所有的时序路径进行错误分析,不需要使用测试向量激活某个路径(与时序仿真的不同点),分析速度比时序仿真工具快几个数量级,克服了动态时序验证的缺陷,适合大规模的电路设计验证,在同步逻辑情况下,能够达到100%的时序路径覆盖

(6) 静态时序分析的目的是找到隐藏的时序问题,根据时序分析结果优化逻辑或者约束条件,使设计达到时序闭合(Timing Closure)

(7) 静态时序分析能够识别的时序故障建立时间(Setup)/保持时间(Hold)/恢复时间(Recovery)/移除时间(Removal)检查;最小跳变和最大跳变;时钟脉冲宽度、时钟畸变(Skew、Jitter);总线竞争;不受约束的逻辑通道;关键路径;约束冲突等;

具有代表性的STA工具:

综合工具(DC),布局布线工具(ICC2),时序分析工具(PrimeTime),Xilinx的Vivado中集成了综合、布局布线和时序分析。

代表性企业:Synopsys 。

静态时序分析STA:

(1)setup time

建立时间:时钟沿到来之前,数据必须保持稳定的最短时间,对应的是数据路径的最大延时

与寄存器的时钟有关。

(2)hold time

保持时间:时钟沿到来之后,数据必须保持稳定的最短时间,对应的是数据路径的最小延时

与寄存器的时钟有关。

------------------- 分割线 -----------------------------------

建立时间或者保持时间不满足导致数据采样出错,亚稳态现象

--------------------------------------------------------------------

(3)STA 的时序路径

STA 四种时序路径:

路径1:输入端口到寄存器的数据输入 D,

路径2:内部寄存器的时钟输入端到下一个寄存器的数据输入 D,

路径3:内部寄存器的时钟输入端到输出端口;

路径4:输入端口到输出端口。

每条时序路径包含 1 个起点和 1 个终点,

起点只能是设计的基本输入端口或内部寄存器的时钟输入端,

终点只能是内部寄存器的数据输入端或设计的基本输出端口。

对于路径3,分析根据寄存器的Tco延迟和组合路径延迟等分析setup和hold是否满足。

对于路径1和3,可以加入 input delay 和 output delay 来分析,来满足寄存器的建立/保持时间要求。

(4)recovery time

复位的恢复时间:时钟有效沿来临之前,异步复位已经撤销的最小时间(复位已经无效的最小时间,对应于数据的恢复);

即在时钟有效沿来临之前,复位就要撤销,数据就要开始恢复的正常状态的时间。

与寄存器的复位有关。

(5)removal time

复位的移除时间:时钟有效沿来临之后,异步复位需要保持有效的最小时间,类似时钟的 hold。


002——FPGA设计的面积优化和速度优化

(2021乐鑫科技,多选)以下方法哪些是进行面积优化( )。
A: 串行化
B: 资源共享
C: 流水线设计
D: 寄存器配平
E: 逻辑优化
F: 关键路径优化

答案:ABE
解析:

速度优化,提高运行速度:

(1)流水线设计(也是属于关键路径的优化,在关键路径的组合逻辑中插入寄存器);

(2)寄存器配平(重定时);

(3)关键路径优化(减少关键路径上的组合逻辑延时);

(4)消除代码优先级(if_else嵌套、case);

(5)并行化(加法树、乘法树,消除符号运算的优先级);

面积优化,提高资源利用率以降低功耗要求:

(1)串行化;

(2)资源共享;

(3)逻辑优化;


003——FSM有限状态机、三段式状态机

(单选)状态机的编码风格包括一段式、两段式和三段式,下列描述正确的是()
A、一段式寄存器输出,易产生毛刺,不利于时序约束;
B、二段式组合逻辑输出,不产生毛刺,有利于时序约束;
C、三段式寄存器输出,不产生毛刺,有利于时序约束;
D、所有描述风格都是寄存器输出,易产生毛刺,有利于时序约束。

答案:C
解析:
(1)一段式一个always块,既描述状态转移,又描述状态的输入输出,当前状态用寄存器输出;
(2)二段式两个always块,时序逻辑与组合逻辑分开,一个always块采用同步时序描述状态转移;另一个always块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出,当前状态用组合逻辑输出,可能出现竞争冒险,产生毛刺,而且不利于约束,不利于综合器和布局布线器实现高性能的设计;
(3)三段式三个always块,一个always模块采用同步时序描述状态转移;一个always采用组合逻辑判断状态转移条件,描述状态转移规律;第三个always块使用同步时序描述状态输出,寄存器输出

三段式与二段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。


004——FSM有限状态机(Moore 型、Mealy 型)

(单选)实现同一功能的 Mealy 型同步时序电路比 Moore 型同步时序电路所需要的 ______。

A.状态数目更多

B.状态数目更少

C.触发器更多

D.触发器更少

答案:B

解析:

(1)Mealy型:输出信号不仅取决于当前状态,还取决于输入

(2)Moore型:输出信号只取决于当前状态

Mealy型比Moore型输出超前一个时钟周期,Moore型比Mealy多一个状态

实现相同的功能时,Mealy型比Moore型能节省一个状态(大部分情况下能够节省一个触发器资源,其余情况下使用的资源相同,视状态数和状态编码方式决定),Mealy型比Moore型输出超前一个时钟周期。


005——CDC跨时钟域处理【打两拍】【握手】【异步FIFO】【脉冲展宽】【指示信号】

1.(大疆2020数字芯片)下列关于多bit数据跨时钟域的处理思路,错误的有()

A. 发送方给出数据,接收方用本地时钟同步两拍再使用;

B. 发送方把数据写到异步fifo,接收方从异步fifo里读出;

C. 对于连续变化的信号,发送方转为格雷码发送,接收方收到后再转为二进制;

D. 发送方给出数据,发送方给出握手请求,接收方收到后回复,发送方撤销数据。

答案:A

解析:多bit跨时钟域不能简单使用打两拍,打拍后可能数据错乱;

CDC(Clock Domain Conversion)跨时钟域:

分单bit和多bit传输,其中:

单bit(慢时钟域到快时钟域):用快时钟打两拍,直接采一拍大概率也是没问题的,两拍的主要目的是消除亚稳态

单bit(快时钟域到慢时钟域)握手、异步FIFO、异步双口RAM;快时钟域的信号脉宽较窄,慢时钟域不一定能采到,可以通过握手机制让窄脉冲展宽,慢时钟域采集到信号后再“告诉”快时钟域已经采集到信号,确保能采集到;

多bit异步FIFO、异步双口RAM、握手、格雷码

2. 关于异步处理,以下说法正确的是:

A、静态配置信号可以不做异步处理

B、异步FIFO采用格雷码的原因是为了提高电路速度

C、异步处理需要考虑发送和接收时钟之间的频率关系

D、单比特信号打两拍后可以避免亚稳态的发生

答案:AC

解析:

A. 静态不变,直接采,不会出现亚稳态,因为不会在采集时钟的边沿处发生变化;

B. 异步 FIFO 中确实采用了格雷码,但是目的是为了跨时钟传输,不是为了提高电路速度;

将多 bit 的自然二进制读写地址转成格雷码,相邻数据仅有 1 bit 的不同,可以使用“打两拍”的二级同步器进行读写地址传输;

C. 异步处理需要考虑两个时钟的频率,比如前面提到的

单bit(慢时钟域到快时钟域): 快的一定能采到慢的,用快时钟打两拍;
单bit(快时钟域到慢时钟域): 快时钟域的信号脉宽较窄,慢时钟域不一定能采到,可以通过握手机制让窄脉冲展宽,慢时钟域采集到信号后再“告诉”快时钟域已经采集到信号,确保能采集到;

D. 这里的说法有几个问题

(1)像 C 里提到的,快到慢就没办法只使用“打两拍”;

(2)慢到快的单比特信号打两拍,仅仅是降低了亚稳态发生的概率,但是没有消除亚稳态

亚稳态无法消除,只能降低发生的概率,二级同步不够的时候可以使用三级甚至四级,具体相关的参数是 MTBF 平均无故障时间(Mean Time Between Failure),可以去查阅一下相关的。

https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/4bzarA5tSjUJH4EcXDv6wA


006——数据定点无损量化问题

(大疆2020芯片开发工程师A卷)对12.918做无损定点化,需要的最小位宽是多少位?位宽选择11位时的量化误差是多少?

A. 12位,0.0118

B. 13位,0.0039

C. 12位,0.0039

D. 13位,0.0118

答案:C,12位,误差0.0039

解析:

12.918,定点量化时对整数部分和小数部分分别量化。

(1)整数部分12,最少使用4位量化,4-bit表示范围0~15;

(2)小数部分0.918,假设12.918整体使用12位量化,整数已使用4-bit,则小数部分还能使用8-bit量化,能够表示2的8次方共计256个刻度,每个刻度的间隔1/256 = 0.00390625,这个值也就是量化精度

小数0.918需要多少个刻度来表示呢? 0.918/(1/256) = 0.918*256 = 235.008,四舍五入取整,则使用235个刻度来表示,误差是0.008个刻度误差大小是0.008*(1/256) = 0.00003125

量化误差小于量化精度的一半,认为是“无损量化”。由于量化后误差0.00003125肯定是小于精度0.00390625的一半,所以这个误差小到可以认为是无损量化。

当使用11位量化时,同理:

(1)整数部分12,最少仍需要4位量化,4-bit表示范围0~15;

(2)小数0.918,只能使用剩下的7-bit量化,能够表示2的7次方共计128个刻度,每个刻度的间隔是1/128。

小数0.918需要多少个刻度来表示呢? 0.918/(1/128) = 0.918*128 = 117.504,四舍五入取整,则使用118个刻度来表示,误差是-0.496个刻度,误差大小是-0.496*(1/128) = -0.003875,保留四位小数并取正数,0.0039。


007——存储器问题【SRAM】【DRAM】【SDRAM】【Flash】【EPROM】【EEPROM】

  1. (大疆2020芯片工程师A卷,单选)1个16K x 8位的存储器,其地址线和数据线总和是

A、46

B、17

C、48

D、22

答案: D

解析:

地址线:16K = 1K*16 = 1024*16 = (2^10)*(2^4) = 2^14,即需要 14 根地址线

数据线8 位数据需要 8 根数据线

所以一共需要 22 根线。

2. (大疆2020芯片工程师A卷,多选)下面哪些是非易失性存储器()

A、Flash

B、EPROM

C、DRAM

D、SRAM

答案:AB

解析:

(1)ROM(Read-Only Memory,只读存储器)只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。ROM所存数据通常是装入整机前写入的,整机工作过程中只能读出。

可编程只读存储器(PROM);

可擦可编程序只读存储器(EPROM);

带电可擦可编程只读存储器(EEPROM,一般使用 IIC 接口读写)。

(2)RAM(Random Access Memory,随机存取存储器),而且速度很快,RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果,比如计算机的8G内存,掉电丢失;

(3)SRAM(Static Random-Access Memory,静态随机存取存储器)是 RAM 的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以保持

(4)DRAM(Dynamic Random Access Memory,动态随机存取存储器),需要周期性地更新存储数据,所以叫“动态”。

-----------------------------------------------------------

SRAM 和 DRAM 比较:

SRAM 不需要动态刷新,速度快,性能高,但是功耗大、集成度低,同时体积也比DRAM大,由此SRAM的造价更高。

-----------------------------------------------------------

(5)SDRAM(Synchronous Dynamic Random-access Memory,同步动态随机存取内存),是有同步接口(Synchronous)的DRAM,系统读写能够同步;

第一代 SDRAM 是 SDR 单数据速率,其后第二代 DDR SDRAM、第三代 DDR2 SDRAM、第四代 DDR3 SDRAM、第五代 DDR4 SDRAM均为双倍速率的存储器,一般简称 DDR。

DDR:Double Data Rate

(6)Flash 存储器,又叫闪存。结合 RAM 和 ROM 的优点,既能电可擦除,不掉电丢数据(ROM),又能快速读写数据(RAM),U盘大部分使用的是 Flash 技术,所以你知道了,不丢数据,可读可写,还挺快,但是还是不如 RAM 快。

Flash 分 2 种:Nor Flash 和 Nand Flash。

Nand Flash 成本低,串行结构,读写慢,可靠性差
Nor Flash 与上面相反

008——FPGA时序分析之关键路径(Critical Path)

关键路径通常是指同步逻辑电路中,组合逻辑时延最大的路径(这里我认为还需要加上布线的延迟),也就是说关键路径是对设计性能起决定性影响的时序路径。

对关键路径进行时序优化,可以直接提高设计性能。对同步逻辑来说,常用的时序优化方法包括Pipeline、Retiming、逻辑复制、加法/乘法树、关键信号后移、消除优先级等解决。

静态时序分析能够找出逻辑电路的关键路径。通过查看静态时序分析报告,可以确定关键路径。在Vivado工具中,可以通过report_timing_summary 等来查看,如下图所示,WNS(Worst Nagative Slack)对应最大延迟分析的所有时序路径的最差裕量(Setup),显示的Slack为时序裕量,Levels为该条路径上源逻辑驱动的级数,HighFanout为高扇出的值,源和目的,总的延时=逻辑延时+布线延时,这里,使用100MHz的时钟,对应周期10ns,逻辑延时最大0.535ns,布线延时1.950ns。

1. 组合逻辑中插入寄存器(插入流水线)

组合逻辑的延时过长,就会成为关键路径,这时可以考虑在该路径上插入额外的寄存器,这种方法也称为插入流水线,多用于高度流水的设计中,因为这种设计中额外插入寄存器增加的时钟周期延时并不会违反整个设计的规范要求,从而不会影响设计的总体功能性实现,也即额外插入的寄存器在保持吞吐量不变的情况下改善了设计的时序性能。当然,其不可避免地会带来部分面积的增加,如图所示。

在插入寄存器时,要在组合逻辑中选择合适的位置进行插入,使得插入寄存器后被分割出的几块小的组合逻辑延时基本一致,也相当于下图所示的先加入寄存器,再对寄存器进行重定时Retiming

2. 寄存器平衡(重定时Retiming)

在不增加寄存器个数的前提下,通过改变寄存器的位置来优化关键路径,可以对比和流水线插入寄存器的不同

3. 操作符平衡(加法树、乘法树)

平衡前,a和b均经过3个乘法器带来的延时,c经历2个,d经历1个,最长延时为3个乘法器延时。平衡后,树形结构,a、b、c、d均经历2个乘法器延时,最长延时为2个乘法器延时。

4. 消除代码优先级(case代替if…else)

本身确实不需要优先级的地方,可以使用case代替if…else,使得顺序执行的语句编程并行执行。如果确实有优先级,则不能这样做。这种消除代码中的优先级的策略也称为代码结构平坦化技术,主要针对那些带优先级的编码结构。

5. 逻辑复制

当某个信号的扇出fanout比较大时,会造成该信号到各个目的逻辑节点的路径变得过长,从而成为设计中的关键路径,此时可以通过对该信号进行复制来降低扇出。高扇出的危害是大大增加了布局布线的难度,这样其扇出的节点也就无法被布局得彼此靠近,所以就导致了布线长度过大的问题。

6. 关键信号后移

关键输入应该在逻辑最后一级提供,其中关键输入为芯片、Slice、或者LUT提供的时延最大的输入,比如在if…else if…链中,将关键信号放在第一级。


009——CDC跨时钟域处理及相应的时序约束【set_clock_groups】【set_max_delay】

(大疆2020数字芯片)下列关于多bit数据跨时钟域的处理思路,错误的有()

A. 发送方给出数据,接收方用本地时钟同步两拍再使用;

B. 发送方把数据写到异步fifo,接收方从异步fifo里读出;

C. 对于连续变化的信号,发送方转为格雷码发送,接收方收到后再转为二进制;

D. 发送方给出数据,发送方给出握手请求,接收方收到后回复,发送方撤销数据。

答案:A

解析:

多bit跨时钟域不能简单使用打两拍,打拍后可能数据错乱;

CDC(Clock Domain Conversion)跨时钟域分单bit和多bit传输,其中:

1. 单bit(慢时钟域到快时钟域):用快时钟打两拍,直接采一拍大概率也是没问题的,两拍的主要目的是消除亚稳态;

其中:

(1)为了更长的平均无故障时间 MTBF( Mean Time Between Failures),需要配合一个 ASYNC_REG 的约束,把用作简单同步器的多个寄存器放入同一个 SLICE,以降低走线延时的不一致和不确定性。

(* ASYNC_REG = "TRUE" *) reg rst_reg_0;
(* ASYNC_REG = "TRUE" *) reg rst_reg_1;

(2)或者:直接在约束文件里进行约束

set_property ASYNC_REG TRUE [get_cells [list rst_reg_0 rst_reg_1]]

2. 单bit(快时钟域到慢时钟域):握手(脉冲展宽)、异步FIFO、异步双口RAM;快时钟域的信号脉宽较窄,慢时钟域不一定能采到,可以通过握手机制让窄脉冲展宽,慢时钟域采集到信号后再“告诉”快时钟域已经采集到信号,确保能采集到;

3. 多bit跨时钟域:异步FIFO、异步双口RAM、握手、格雷码;

(1)使用异步FIFO的IP

实际上是用 FPGA 内部的 BRAM 来搭建,所有的控制逻辑都在 BRAM 内部,是推荐的 FIFO 实现方式。

时序约束简单,进行时序例外约束,只需要 set_clock_groups 将读写时钟约束为异步时钟组即可,简单高效。

set_property -asynchronous  -group [get_clocks write_clock] \-group [get_clocks read_clock]

(2)自己写外部控制逻辑的FIFO

格雷码做异步 FIFO 的跨时钟域处理,计数器和读写控制逻辑在 BRAM 或者 RAM 的外部,除了代码的合理设计以外,还需要进行额外的时序例外约束,不能简单使用 set_clock_groups 约束异步时钟组,还需要考虑外部的读写逻辑的约束。

Xilinx建议这里设置 set_max_delay 来约束跨时钟域路径,约束的原则是:最大路径延时等于或者略小于目的时钟的一个周期。

写逻辑从cell1到cell2的约束中,cell2的驱动时钟周期为5,如下所示,读逻辑约束进行相应约束。

set_max_delay 5 –from [get_cells cell1] –to [get_cells cell2] –datapath_only

010——流水线

(大疆2020校招,芯片开发工程师A卷)对于流水线设计的理解,下列错误的是()

A. 流水线设计会消耗较多的组合逻辑;

B. 流水线设计会导致原有通路延时增加;

C. 流水线设计的思想,是使用面积换取速度;

D. 关键路径中插入流水线,能够提高系统时钟频率;

答案:A

解析:

流水线的实现方式:

(1)插入寄存器(触发器Flip-Flop,FF)去分割延迟比较大的组合逻辑,消耗了更多的触发器,组合逻辑资源不变(理论上);

(2)由于增加了寄存器,每增加一级寄存器就会对数据寄存一个时钟周期,所以输入到输出的延时增加;

(3)对于整体来讲,数据同时处理,速度提升,最大工作频率提高,是典型的面积换速度的思想。


011——DFT(Design for Test)可测性设计

DFT(Design for Test,可测性设计,不是信号处理里的离散傅里叶变换)

(大疆2020芯片开发工程师A卷)关于DFT (design for test) 的描述错误的是()

A、DFT测试不能覆盖电路的时序问题;

B、DFT测试过程通常会消耗大量的动态功耗;

C、DFT的主要目的是发现芯片在生产过程中出现的缺陷;

D、寄存器扫描链是一种常用的DFT技术;

答案:A

解析:

(1)DFT简介

在芯片设计过程中,加入各种可测性逻辑,使芯片变得容易测试,找到存在制造缺陷的芯片,主要是为了找出在生产制作中引入的制造缺陷(短路、断路等)。

比如,在设计中加入一些MUX选择器逻辑,用于测试;

常见的可测性设计技术(Design for Test)

Scan Chain 扫描链:针对时序电路,测试寄存器(Flip-Flop)和组合逻辑

BIST(Bulit-in Self Test,内建自测试):内部生产测试向量,简化测试步骤,但增加了设计 难度,测试存储器(ROM、RAM)、一些 IP 核

Boundary Scan 边界扫描:测试封装与 IO、芯片间互联,常用的调试器 JTAG 由此而来(Joint Test Action Group,联合测试工作组),基本原理是在器件内部定义一个 TAP(Test Access Port,测试访问口),然后通过专用的 JTAG 测试工具对内部节点进行测试,多个 JTAG 口可以形成 JTAG 链;

(A)DFT的Scan Chain 扫描链:针对时序电路,测试寄存器(Flip-Flop)和组合逻辑

其中,DC Scan是慢速测试;AC Scan是全速测试 at speed test,使用高于芯片工作频率的时钟,测试 setup 和 hold 。

(B) 影响器件测试的动态功耗有两种:峰值功率和平均功率。峰值功率,也称为“瞬时功率”,反映了器件中节点开关的活动水平,从一个逻辑状态切换到另一个状态的节点数量越多,峰值功率就越大,DFT里涉及大量MUX选择开关。


012——FPGA设计流程、常用综合仿真工具

(大疆2020校招芯片开发)以下哪个工具不具备逻辑综合功能()

A、Synplify

B、Design Compiler

C、Modelsim

D、ISE

答案:C

解析:Modelsim是仿真软件,用于功能仿真(前仿真)时序仿真(后仿真),不具备逻辑综合功能。

功能仿真

顾名思义,不加时序信息,只仿真逻辑功能是否实现,也叫静态仿真

时序仿真

加入综合、布局布线后的延时信息(包括门级延时、布线延时等),看加入时序信息后功能是否还能达标;时序仿真时利用网表文件”.vo”和延时文件”.sdo”,也叫动态仿真

以 Xilinx 的 Vivado 工具为例,仿真包括:

行为级仿真(综合前的),综合后的功能仿真、综合后的时序仿真、布局布线后的功能仿真,布局布线后的时序仿真。

(2020乐鑫科技数字IC提前批)下面哪些属于动态验证范畴( ).

A: 形式验证

B: Modelsim仿真

C: 后仿

D: STA

答案:BC

解析:

A,形式验证是一种静态的验证手段,它根据电路结构静态地判断两个设计在功能上是否等价,常用来判断一个设计在修改前和修改后其功能是否保持一致。它运行时无须测试向量,但是必须有一个参照设计和一个待验证的设计;

B,Modelsim仿真中既可以功能仿真(静态),也可以时序仿真(动态),时序仿真时利用网表文件”.vo”和延时文件”.sdo”;

C,后仿,时序仿真加入布局布线的连线延时,属于动态时序分析;

D,Static Timing Analysis,静态时序分析;

前仿是针对RTL的功能验证,

后仿是针对是综合后(加入约束,延时等信息)的网表文件,在前仿的基础上加入了延时信息的功能仿真,同时验证了设计的时序以及功能都正确。

常见工具:

(1)专业的综合工具:Synplify、Synplify Pro、Synplify Premier、Design Compiler(简称DC);(以上均属于 Spynopsys 新思科技的 EDA 工具)

(2)集成工具:Xilinx 使用的 Vivado、ISE,Altera(现属于Intel)使用的 Quartus,是集成了 FPGA 设计所有流程的工具,包括了综合、布局布线等,其中底层的很多技术使用的也是Cadence、Spynopsys 等 EDA 企业的技术。

综合(Synthesis):完成 HDL 语言到硬件电路的转化,并生成综合网表

比如,将异或逻辑使用底层的 LUT 实现,将 D 触发器映射为底层的 FDRE(同步使能,同步复位的触发器 Flip-Flop) 等;

实现(Implementation):主要是布局布线(Place & Route),布局是将综合后的器件约束到 FPGA 对应位置,布线是使用布线资源连接这些器件。

传统的 FPGA 设计流程


013——FIFO深度计算【字节跳动】【大疆】【简便计算公式】

1. (字节)设计一个同步fifo,读写时钟相同,其中在写入时每100个时钟周期会写10个,具体哪个时刻写入不确定,在读出侧每10个cycle会读1个,计算最小深度?

答案:18

解析:fifo设计中最小深度的要求是不溢出(overflow),考虑极限情况,写入数据最多的时候时候就是需要存储数据最多的时候,也是FIFO深度的下限值,即最小深度。

考虑最大数据情况,考虑写数据的连续200个时钟周期,前一个100个时钟记作TimeA,后一个记作TimeB,写数据的恰好在TimeA的最后和TimeB的最前,即20个时钟周期发生连续的20次写,而对应的20个时钟周期会读出2个数据,所以这里需要的最小深度为20-2=18。

考虑整体读写,每100个时钟写10个,每100个时钟也读出10个,且读写时钟一样,所以不需要增加额外的FIFO深度来进行补充。

综合来看,最小深度为18。

(乐鑫科技2020数字IC相关题)

2. ModuleA/ModuleB用的是同个Clock, Clock频率80MHz。ModuleA和ModuleB同时启动,ModuleA产生如下周期性的burst数据给ModuleB,一共产生8次burst. burst rate : 1280Mbit/s,burst持续时间1us。burst内部速率均匀,burst周期5us,余下的4us内没有数据。

ModuleB收到启动信号后,需要花10us做初始化,所以先把module A的数据缓存在ModuleB内部的同步FIFO中,同步FIFO位宽32bits,初始化结束后,ModuleB以640 Mbit/s的均匀速度从FIFO中读取数据。在满足功能需求的前提下,为了节省电路面积,要求FIFO size越小越好,以下四个选项的FIFO深度,选项()的FIFO深度符合要求:

A: 128

B: 64

C: 96

D: 160

答案:A

解析:

考虑最大数据情况,

在ModuleB启动的10us内,ModuleA一直在传输数据,一共2us有效数据,需要存储 1280Mbit/s * 2us = 2560bit;

在第11us,ModuleA传输数据 1280Mbit/s * 1us = 1280bit,ModuleB读取 640 Mbit/s * 1us = 640 bit,需要存储 1280 - 640 = 640 bit,此时共需存储 2560 + 640 = 3200 bit。

考虑整个读写,前15us共写入 3 * 1280=3840,读取 5*640=3200,只需要存储640,目前设置存储3200,所以满足要求。

综合考虑,最大需要存3200bit,深度需要 3200 / 32 = 100,选A的128较为合适。

【知乎:FPGA探索者】对于读写同时进行的FIFO,有一个简便计算公式

FIFO_Depth >= Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate)

以第1题为例,

最大突发写长度 Burst_length = 20;

读时钟等于写时钟,rd_clk = wr_clk;

读取速率rd_rate,每10个时钟周期读取1个数据,所以rd_rate = 1/10=0.1;

所以:

FIFO_Depth >= Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate)

= 20 – 20*1*0.1

= 18

3. 以大疆的一个题目为例(选B,32):

大疆2020芯片

可以得出:

(1)写入最频繁的情况下,是连续的200个时钟内,有连续的160个时钟在写,即最大突发写长度 Burst_length = 160;

(2)读时钟等于写时钟,rd_clk = wr_clk;

(3)读取速率rd_rate,每10个时钟周期读取8个数据,所以rd_rate = 8/10=0.8;

所以:

FIFO_Depth >= Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate)

= 160 – 160*1*0.8

= 32


014——组合逻辑竞争冒险

(大疆2020芯片工程师校招)组合逻辑电路中的冒险是由于( )引起的。

A、电路有多个输出

B.、电路未达到最简

C、逻辑门类型不同

D、电路中的时延

答案:D

解析:

--------------------- 分割线 ---------------------

什么是竞争和冒险?

(1)竞争

在一个组合电路当中,当某一个变量经过两条以上的路径到达输出端的时候,由于每条路径上的延迟时间的不同,到达终点的时间就会有先有后,这一现象称作竞争。

(2)冒险

在具有竞争现象的组合电路中,当某个变量发生变化的时候,比如说从 1 跳到 0,或者说从 0 跳到 1,如果真值表所描述的逻辑关系或者功能遭受到短暂的破坏,在输出端出现一个不应有的尖脉冲毛刺,这种现象就叫冒险。

冒险是由竞争造成的,而竞争是因为电路中的时延不同,所以选D,

冒险是因为电路中的时延问题导致。

但是有竞争的时候不一定会出现冒险。

--------------------- 分割线 ---------------------

怎么识别竞争冒险?

(1)公式法

写出逻辑表达式,当某些逻辑变量取特定值 0 或 1 时,

若逻辑表达式能转换为 A·(~A),则该电路存在1型冒险(该为 0 的时候出现了为 1 的错误数据,1 型冒险);

若逻辑表达式能转换为 A+(~A),则该电路存在0型冒险(该为 1 的时候出现了为 0 的错误数据,0 型冒险)。

(2)卡诺图法

画出其卡诺图,

若输入变量在卡诺圈内改变时,则输出不会有冒险现象;

输入变量是在相邻卡诺圈的相邻处发生变化,并且是从一个卡诺圈进入另一个卡诺圈,则有可能产生逻辑冒险现象。(卡诺图相切

如下图所示,

当A=1、C=0,B由0->1时,在卡诺圈内变化,不会出现冒险;

当B=C=1,A由0>1时,在卡诺圈内变化,不会出现冒险。

当A=B=1,C从0>1时,相当于输入变量A、B、C从110变化到111,此时的变化是从一个卡诺圈变化进入另一个卡诺圈,该电路输出存在冒险现象。

--------------------- 分割线 ---------------------

如何消除冒险?

(1)增加冗余项

如下图,增加一个冗余项AB,这样状态变化时也是在卡诺圈内变化,此时逻辑表达式不是最简表达式,但是消除了冒险。

(2)增加选通信号(高电平)

输入端加入选通信号,针对 A+(~A) 的 1 型冒险,避开毛刺。

(3)引入封锁脉冲(低电平)

输入端加入封锁脉冲信号,针对 A·(~A) 的 0 型冒险,避开毛刺。

(4)增加滤波电容

冒险输出的是一个很窄的毛刺,在输出端接滤波电容将其滤除。

(5)采用可靠性编码

比如格雷码,每次只变化1位。


015——计算机体系结构相关

大疆2020芯片工程师A卷)指令系统中程序控制类指令的功能是()

A、实现主存与CPU之间的数据传送

B、实现程序执行顺序的改变

C、实现算术和逻辑运算

D、实现堆栈操作

答案:B

解析:程序控制类指令包括跳转指令,循环指令,子程序指令以及中断指令,这些指令控制程序的执行顺序。

相关题目:

2、对某个寄存器中操作数进行操作的寻址方式称为(C)寻址。

A.直接;B.间接;C.寄存器;D.寄存器间接。

3、寄存器间接寻址方式中,操作数在(B)中。

A.通用寄存器;B.主存单元;C.程序计数器;D.堆栈。

4、指令条统中采用不同寻址方式的目的主要是(B)。

A. 提供扩展操作码的可能,并降低指令译码难度;

B. 缩短指令字长,扩大大寻址空间,提高编程灵活性;

C. 实现存储程序和程序控制;

D. 可以直接访问外存。

2022届FPGA/数字IC秋招笔试面试汇总帖(题目来源:FPGA探索者)相关推荐

  1. 数字IC秋招---笔试记录

    2022年7月更新!!! 1.组合逻辑电路的冒险现象是由于()引起的? 2.芯片制造中,工艺节点28nm,12nm,7nm的含义? 3.哈佛结构和冯诺依曼结构? https://blog.csdn.n ...

  2. FPGA/IC 秋招笔试/面试题总结

    请根据目录浏览,觉得有用三连支持一下也是一种鼓励~. 原创不易,100页+,未经允许,请勿转载. 打印版,联系微信:Crazzy_M FPGA/IC 秋招笔试/面试题总结(目录展示) ☛内容展示点这里 ...

  3. 2021年数字IC秋招总结

    2021年数字IC秋招总结 欢迎各位想来 瑞晟微电子的将简历,带上以下信息: 姓名-学校-岗位 身份证号+邮箱 发到以下邮箱: 436090083@qq.com 我会在瑞晟微电子开始招聘的第一时间进行 ...

  4. 老学姐2021年数字IC秋招复盘

    本着学习交流的目的,写了下面的内容,希望大家都能拿到心仪的offer. 1. 秋招变春招? 从我个人经历来说是这样的,因为今年很多企业六七月份就开始提前批了,而我六七月还在做项目,等我开始的时候,发现 ...

  5. 数字IC设计工程师笔试面试经典100题-有答案

    转自知乎答主ictown_数字IC设计工程师笔试面试经典100题-有答案-陈恩 1:什么是同步逻辑和异步逻辑?(汉王) 同步逻辑是时钟之间有固定的因果关系.异步逻辑是各时钟之间没有固定的因果关系. 同 ...

  6. 2018年秋招笔试面试---小学渣求职历险记(深圳篇)

    前文导读:2018年秋招笔试面试----小学渣求职历险记(中南篇) 我从来没有去过深圳,每次都是从男友那里了解到关于深圳的只言片语,说深圳开放,深圳包容,深圳如何如何-.反正我内心是不以为然的,眼见为 ...

  7. 2023算法岗秋招笔试面试记录

    面经 秋招笔试面试全记录 字节-电商 字节实习一面: 二分类的损失函数是什么,怎么算? 多分类的损失函数怎么算? 如果文本分类的标签有多个,比如一个文本同时属于多个label那怎么办? 如果文本分类里 ...

  8. 春招秋招笔试面试时间(2020年)

    春招面试笔试时间 序号 公司 投简历时间 春招笔试面试时间 1 腾讯 2020.3.10 3.17一面(微信) 3.20一面(网盘) 4.7 PCG的研发部 4.12光子侧开一面 4.18光子侧开二面 ...

  9. 数字IC设计工程师笔试面试经典100题

    1:什么是同步逻辑和异步逻辑? 同步逻辑是时钟之间有固定的因果关系.异步逻辑是各时钟之间没有固定的因果关系.同步时序逻辑电路的特点:各触发器的时钟端全部连接在一起,并接在系统时钟端,只有当时钟脉冲到来 ...

最新文章

  1. delete什么头文件C语言,C++中new和delete的介绍
  2. 少儿计算机兴趣小组活动记录,2013年度儿童画兴趣小组活动记录Word编辑
  3. 《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)...
  4. 一文弄懂“分布式锁”
  5. Linux系统查看华为存储型号,linux 查看服务器存储
  6. 机械制图中外螺纹的画法_机械制图基础常识42条,条条都是经典!
  7. 软件就像大教堂:我们建造它们——然后祈祷
  8. centos6.5 安装php-5.6.31
  9. 运动目标跟踪(十三)--SRDCF/DeepSRDCF
  10. 1602 c语言驱动程序,51单片机驱动LCD1602程序设计(C语言)很详细的教程
  11. C++学习(一零九)Resource Hacker工具介绍
  12. 三极管的导通条件总结
  13. 人生的诗·370~374节
  14. 高效率的免费发布信息平台,助力企业高质量采购
  15. 低成本撬动TK亿万流量 TK带货视频有多简单?
  16. java中的域(field)是什么
  17. 数据库日常运维操作手册
  18. 【新闻早知道】10月13日 星期日
  19. Android九宫格界面实现点击每个格点击跳转界面
  20. CRF进行实体的识别

热门文章

  1. python收集论文数据造假_论文数据造假被发现的可能有多大?
  2. 如何恢复无法修复的Visual Studio 的破损文件
  3. 智慧车行小程序设计方案
  4. min-aspect-ratio和max-aspect-ratio宽高比自适应布局
  5. 电脑5个神操作,带你飞的节奏。
  6. 捷径说那些好评爆裂的功能,你用了几个?
  7. ipad分屏功能怎么开启_手机学习办公效率低?试试开启vivo“分屏多任务”功能...
  8. 微信小程序真机调试请求失败的解决
  9. android miracast源码,无线传屏技术 - android miracast的实现.pdf
  10. echart树图设置层级距离_Echarts - 树图实现四个层级