FPGA/IC面试常见问题汇总(二)

参考连接

咸鱼FPGA - 博客园

2022届FPGA/数字IC秋招笔试面试汇总帖(题目来源:FPGA探索者)_Cheeky_man的博客-CSDN博客_关键信号后移

1、FPGA设计的面积优化和速度优化

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

答案:ABE

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

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

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

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

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

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

(1) 串行化;

(2) 资源共享;

(3) 逻辑优化;

(4) 操作符平衡;

1、速度和面积互换原则

所谓速度,是指整个工程稳定运行所能达到的最高时钟频率,他不仅和FPGA内部各个寄存器的建立时间、保持时间以及FPGA与外部接口的各种时序要求有关,而且还和两个紧邻的寄存器间的逻辑延时、走线延时有关。

所谓面积,可通过一个工程运行所消耗的触发器、查找表数量或者等效门数量来衡量。

速度和面积是一对矛盾的统一体。速度的提高往往需要以面积的扩增为代价,而节省面积也往往会造成速度的牺牲。

2、FSM有限状态机、三段式状态机

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

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

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

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

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

A.状态数目更多

B.状态数目更少

C.触发器更多

D.触发器更少

答案:B

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

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

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

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

下面关于状态机描述错误的是(B)

A、计数器可以用状态机来描述;

B、加法器可以用状态机来描述;

C、状态机分为Mealy和Moore;

D、状态机的状态个数可以和触发器个数一样多;

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

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

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

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

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

D. 发送方给出数据,发送方给出握手请求,接收方收到后回复,发送方撤销数据。
答案:A(多bit跨时钟域不能简单使用打两拍,打拍后可能数据错乱)

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

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

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

        多bit:异步FIFO、异步双口RAM、握手、格雷码(格雷码的值只需要在原来的二进制的基础上右移一位再加上原来的二进制值即可得到);

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

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

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

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

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

答案:AC

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

        B. 异步 FIFO 中确实采用了格雷码,但是目的是为了跨时钟传输,不是为了提高电路速度;将多 bit 的自然二进制读写地址转成格雷码,相邻数据仅有 1 bit 的不同,可以使用“打两拍”的二级同步器进行读写地址传输;

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

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

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

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

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

5、数据定点无损量化问题

(大疆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。

1、浮点数:小数点位置是漂浮不定的。

  例如:浮点数运算 1.1 * 1.1 = 1.21,小数点位置发生了变化。

  IEEE 754 规定,浮点数的表示方法为:

  最高的 1 位是符号位 s,接着的 8 位是指数E,剩下的 23 位为有效数字 M。

2、定点数:小数点的位置是确定的。

  例如:定点数运算 1.1 * 1.1 = 1.2,小数点的位置没有变化。

   定点的意思是,小数点固定在 32 位中的某个位置,前面的是整数,后面的是小数。

  小数点具体固定在哪里,可以自己在程序中指定。

        FPGA 的寄存器只可以表示正整数,通过约定【最高位为符号位】则可以表达负整数了。同理,带小数点的定点数也是可以通过一些约定来表示。

  约定方法:确定小数点的位置。如下图所示,Qn表示小数点的位置,n为多少表示有多少位小数,看看同样的二进制数字“10101”会变成什么。

二进制数    小数点位置    对应定点数
 10101        Q0        10101
 10101        Q1        1010.1
 10101        Q2        101.01
 10101        Q3        10.101
 10101        Q4        1.0101
 10101        Q5        0.10101

 6、存储器问题【SRAM】【DRAM】【SDRAM】【Flash】【EPROM】【EEPROM】

(大疆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 根线。

(大疆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。

单口RAM、双口RAM、FIFO三者之间的关系

单口只有一组数据线与地址线,因此读写不能同时进行,而双口有两组数据线与地址线,读写可以同时进行。RAM有地址线,可以对存储单元寻址,FIFO没有地址线,不能对存储单元寻址,此外RAM数据读完还有,FIFO数据读完就没有了。

7、FPGA时序分析之关键路径(Critical Path)

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

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

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

8、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 对应位置,布线是使用布线资源连接这些器件。

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

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

答案:18

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

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

(乐鑫科技)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较为合适。

(大疆)

 答案:B

(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

以下关于FIFO描述正确的是(CD)
A.空信号是在写时钟域产生的,满信号是在读时钟域产生的
B.外部可以直接操作FIFO的读写地址
C.FIFO可以分为同步FIFO和异步FIFO
D.FIFO是先进先出的存储器

         A、“写满读空”。空信号是在读时钟域产生的,满信号是在写时钟域产生的;

        B、FIFO(First Input First Output,先入先出队列),外部不可以直接操作FIFO的读写地址。

例题

1.读写没有空闲周期。(fA>fB)

fA = 80MHz;fB = 50MHz;Burst Length = 120

读写之间没有空闲周期,这意味着突发中的所有项目都将在连续的时钟周期内写入和读取。

计算方法:

总数据传输:120

写一个数据需要的时间 = 1 / 80MHz = 12.5ns

写入所有数据需要的时间 = 120 * 12.5ns = 1500ns

读一个数据需要的时间 = 1 / 50MHz = 20ns

每1500ns,120个数据被写入FIFO,但读一个数据需要20ns的时间

则1500ns内读出多少个数据,1500 / 20 = 75

剩下的没有读出,就存在FIFO中,则多余的数据为120 - 75 = 45

快捷方法:FIFO的最小深度 =120 - 120*50/80 = 45

补充:读写没有空闲,若fA<=fB,则FIFO不会写满,深度为1即可。

2.读写都有空闲周期。(读写速率大小随意,可以相等)

fA = 80MHz;fB = 50MHz;Burst Length = 120

两个连续写入之间的空闲周期为 = 1(写使能占得百分比为50%)

两个连续读取之间的空闲周期为 = 3(读使能占得百分比为25%)

计算方法:

每写入一个数据等待1个周期再写入下个数据,即2周期写入1个数据。

每读出一个数据等待3个周期再读出下个数据,即4周期读出1个数据。

写一个数据需要的时间 = 2 * (1 / 80MHz) = 25ns

写一个突发需要的时间 = 120 * 25ns = 3000ns

读一个数据需要的时间 = 4 * (1 / 50MHz) = 80ns

每3000ns,120个数据被写入FIFO,但读一个数据需要80ns的时间

则3000ns内读出多少个数据,3000 / 80 = 37.5,FIFO深度=120-37.5=83。

快捷方法:FIFO深度 = 120 - 120*(50/4)/(80/2)=82.5=83。

3.考虑背靠背,读写速率相等。

读写速率相等;每100个时钟写入80个数据;每10个时钟读取8个数据;突发长度为160 (这个条件其实多余)

计算方法:

每100个时钟写入80个数据,那剩下20个时钟周期去哪了?

每10个时钟读取8个数据,那剩下2个时钟周期去哪了?

剩下的周期在哪我们不管,只考虑最差的情况,即前20个时钟周期空闲,后80个周期写完80个数据,立马又是写请求,这次是前80个时钟周期写完80个数据,后20个时钟周期空闲。即连续的写入,又称为背靠背。也就可以看成一个突发写入是80+80=160。

写一个突发需要的时间:160时钟周期

则160个时钟周期内读出多少个数据,160*8/10=128。

FIFO深度 = 160 - 128 = 32。

4.考虑背靠背,读写速率不等。

fA = 20MHz;fB = 40MHz;每1000个时钟周期写入500个数据;每4个时钟周期读出1个数据

计算方法:

考虑到“背靠背”的情况突发长度则为500 * 2 = 1000

则为每1000个时钟周期写入1000个数据

每4个周期,读取一个数据。

写一个数据需要的时间 = 1 / 20MHz = 50ns

写一个突发需要的时间 = 1000 * 50ns = 50000ns

读一个数据需要的时间 = 4 * (1 / 40MHz) = 100ns

每50000ns,120个数据被写入FIFO,但读一个数据需要100ns的时间

可以计算出,50000ns内读出多少个数据,50000 /100 = 500

剩下的没有读出,就存在FIFO中,则需要1000- 500 = 500

10、组合逻辑竞争冒险

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

A、电路有多个输出

B.、电路未达到最简

C、逻辑门类型不同

D、电路中的时延

答案:D

时序逻辑电路出现的是亚稳态,组合逻辑电路出现的是竞争冒险。

在组合逻辑中由于信号的线路时延,使得在组合逻辑门中,信号的到达会有先后顺序。当信号同时变化时必然会产生竞争,当输出产生毛刺,电路则产生了冒险。

(1)竞争

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

(2)冒险

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

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

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

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

        消除毛刺的方法:1、对信号进行采样(在合适的位置采样,将有毛刺的信号剔除)。2、使用边沿触发寄存器寄存信号,相当于将信号同步为同步信号(由于毛刺持续的时间比较短,所以一般很难满足边沿触发器的setup/hold时间)。3、用两级触发器的或运算来消除持续不到一个周期的毛刺信号。4、采用格雷码编码(只变化一个位信号)。5、增加卡诺图冗余项。

11、计算机体系结构相关

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

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

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

C、实现算术和逻辑运算

D、实现堆栈操作

答案:B

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

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

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

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

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

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

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

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

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

D. 可以直接访问外存。

12、分频器--奇数分频和偶数分频

偶数分频

    简单,只是注意时钟翻转的条件是(N/2)还是(N/2)-1,非阻塞赋值在下一个时钟才会更新值。

奇数分频

    奇数分频比偶数分频复杂一些,当不要求分频的占空比时,对输入时钟clk上升沿计数,可以设置两个计数的翻转点,一个是(N-1)/2,一个是(N-1),计数到(N-1)时输出时钟翻转且将计数器清零,假设计数器计数0~(N-1)/2区间输出低电平,则输出时钟的低电平有(N-1)/2 + 1个clk周期,高电平的计数是(N-1)/2+1 ~ (N-1),共(N-1)/2个clk周期,可见不是50%占空比。

    当要求占空比为50%时,对输入时钟clk的上升沿和下降沿分别计数,根据两个计数器得到两个错位输出的时钟,将两个时钟做“或”运算,可以弥补相差的时钟,达到50%占空比。

13、FIFO设计

异步FIFO_牛客题霸_牛客网 (nowcoder.com)    异步FIFO的Verilog实现                  

14、低功耗设计

列属于常用的低功耗设计方法是(ABCD)

A、时钟门控

B、多电压设计

C、降低电源电压

D、动态电压和频率调节

        动态功耗包括信号翻转是产生的功耗以及短路功耗,由于短路持续的时间很短,动态功耗主要指的是翻转功耗。

        降低动态功耗的方法为(在满足正常芯片功能的前提下):

        1、降低电压;2、降低翻转率;3、减小负载电容;

        静态功耗主要包括 

        1. 亚阈值漏电流。2. 栅极漏电流。3. 栅极感应漏电流。4. 反向偏置结泄漏。

        根据公式:Power = K*F*C*V^2,功率=系数*频率*负载电容值*电压平方,降低功耗的方法有:

(1)控制工作频率

  • ① 门控时钟,降低活动因子,降低时钟网络和D触发器功耗;
  • ② 可变频率时钟,设置合适频率时钟;

(2)减少电容负载

  • ① 使用更小的逻辑门;
  • ② 降低平均逻辑开关频率,减少每个时钟沿处的逻辑开关总数,减少连线网络;
  • ③ 数据隔离技术,使能才用,不使能不用;
  • ④ 格雷码编码,减小翻转次数;
  • ⑤ 尽量避免使用这些上拉电阻和下拉电阻;

(3)降低工作电压

  • ① 多电压、动态电压频率调节DVFS、不工作关闭部分电源;
  • ② 并行结构或流水线设计;
  • ③ 动态处理温度补偿;

15、FPGA设计

典型FPGA的开发流程

(1)电路设计

(2)设计输出

(3)功能仿真

(4)综合优化

(5)综合后仿真

(6)布局布线

(7)时序仿真

(8)板级调试

(9)芯片编程与调试

以下关于FPGA和ASIC描述正确的是:(ABD)
A、FPGA开发周期相对短        B、相同工艺下,ASIC能跑更快的时钟
C、FPGA更注重面积的要求。 D、ASIC批量生产时成本相对低

根据FPGA和CPLD的特点,分别适用于什么情况?(C)

A、CPLD适用于时序逻辑电路,FPGA适用于组合逻辑电路

B、CPLD适用于逻辑较大的设计,FPGA适用于逻辑规模较小的设计

C、CPLD适用于组合逻辑的设计,FPGA适用于时序逻辑的设计

D、CPLD适用于逻辑规模较小的设计,FPGA适用于逻辑规模较大的设计

 FPGA通过(查找表)实现组合逻辑,CPLD通过(乘积项)实现组合逻辑。

FPGA中,可以综合实现为RAM的资源包括(ABD

A、BLOCK RAM B、查找表 C可编程输入输出单元(IOB) D、FF触发器 

FPGA的下载方式有哪些?

1)主动串行方式(AS)

2)主动并行方式(AP)

3)被动串行方式(PS)

4)JTAG方式

在EDA工具中,能将硬件描述语言转化为硬件电路的重要工具为(B)

A、仿真器 B、综合器 C、适配器 D、下载器

你所知道的可编程逻辑器件有哪些?

PAL,PLA,GAL,CPLD,FPGA

FPGA常用的电平标准包括(ABCD)

A、LVTTL  B、LVCOMS  C、LVDS  D、ECL

以下是XILINX常用FPGA系列支持的电平标准的有哪些?(ABD)

A、TTL  B、CMOS  C、SSTL  D、LVDS

TTL电平的输入高电平即Vh是(A)

A、2.4 B、3.5 C、2  D、1.5                解析:VH=2.4v,VL=0.4V

你知道哪些常用的逻辑电平?

常用逻辑电平:TTL、CMOS、LVTTL、LVCMOS、ECL(Emitter Coupled Logic)、

PECL(Pseudo/Positive Emitter Coupled Logic)、LVDS(Low Voltage Differential Signaling)、GTL(Gunning Transceiver Logic)、BTL(Backplane Transceiver Logic)、ETL(enhanced transceiver logic)、GTLP(Gunning Transceiver Logic Plus);RS232、RS422、RS485(12V,5V,3.3V);

也有一种答案是:常用逻辑电平:12V,5V,3.3V。

下列属于FPGA编译的步骤有(BCE)

A、功能仿真  B、综合  C、布线  D、烧录  E、布局

属于verilog语法规定的I/O端口类型的是(ACD)

A、输入端口 B、差分信号端口 C、双向端口 D、输出端口

什么是逻辑综合

实现在满足设计电路的功能,速度及面积等限制条件下将行为级描述转化为指定的技术序中单元的连接。

请解释xilinx的FPGA专用术语DCM

DCM:提供一个完整的供片内和片外使用的时钟发生器。DCM使用完全数字延迟技术,允许高精度的控制时钟的相位和频率;使用完全的数字反馈系统;可以动态的补偿由于温度和电压偏移引起的时钟相位和频率的偏差。

xilinx 推荐高电平复位?

因为 xilinx 器件中,触发器的复位端都是高电平有效的, 且不可改变,如果你的复位信号低电平有效,那么就要额外增加一个反向器。

Xilinx的RAM可例化多种类型,如什么?(ABD)

A、简单双口RAM B、单口RAM C、三口RAM D、真双口RAM

用同样的仿真平台在同样的编译环境下,仿真同样的RTL代码,下面哪一个仿真耗时最长(A)

A、时序仿真 B、功能仿真 C、逻辑仿真 D、前仿真

下面是芯片中有关GPIO的叙述,不正确的是:(A)
A. GPIO一般只具有0态和1态,不具有高阻状态
B. GPIO的引脚一般是多功能复用的
C. GPIO作为输出接口时具有锁存功能
D. GPIO作为输入接口时具有缓冲功能

为什么需要IO电路?

三个作用:电平转换、加强驱动、ESD保护。

ESD电路的概念和作用?

概念:ESD,Elecro Static Discharge,即静电放电。

作用:保护CMOS电路中的栅氧化层(SiO2),以免被击穿。

FPGA内部资源包括哪些及作用

1)、输入输出单元(IOB)

可编程输入/输出单元简称 I/O 单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求。

2)、可编程逻辑块(CLB)

FPGA的基本可编程逻辑单元是由查找表和寄存器组成的,查找表完成纯组合逻辑功能。FPGA内部寄存器可配置成触发器或锁存器。Altera基本可编程单元LE配置为寄存器加一个查找表。

3)、底层内嵌功能单元DLL

内嵌功能模块主要指DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP 和CPU等软处理核(Soft Core)。

4)、丰富的布线资源可编程布线矩阵

布线资源连通FPGA内部的所有单元,连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。可划分为4类不同的类别。第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第二类是长线资源,用以完成芯片Bank间的高速信号和第二全局时钟信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。

5)、嵌入式块 RAM(BRAM)

RAM可被配置为单端口RAM、双端口RAM、内容地址存储器(CAM)以及FIFO等常用存储结构。Block RAM由一定数量固定大小的存储块构成,使用BRAM不占用额外逻辑资源,并且速度快。

6)、内嵌专用硬核

内嵌专用硬核是相对底层嵌入的软核而言的,指FPGA处理能力强大的硬核(Hard Core),等效于ASIC电路。为了提高FPGA性能,芯片生产商在芯片内部集成了一些专用的硬核。

 查找表LUT的原理

查找表(look-up-table)简称为LUT,本质上是一个RAM。目前FPGA 中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM,多于4输入逻辑可以使用多个LUT实现。

原理:当用户通过原理图或HDL语言描述了一个逻辑电路以后,CPLD/FPGA 开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM中,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。LUT可以配置成内部存储器,即分布式RAM。

16、时钟 

​​​​​​​下哪个电路会产生无毛刺的门控时钟?(a)​​​​​​​

ab选项的时序如下所示:c选项和b一样,d选项起不到门控的作用,因此选a

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== 编辑

以下哪个不属于PLL的组成部分(A)

A、Divid

B、voltage controlled

C、Phase detector

D、Loop Filter 

解析:锁相环是由另外部分组成的

Xilinx的FPGA中,下列哪种片上资源可以实现时钟的分频和倍频(B)

A、BUFIO

B、MMCM

C、ODDR

D、BUFG

解析:三部分MMCM,DMM,PLL。

下面关于PLL电路表述正确的是:(BC)

A.PLL属于模拟电路,无法用全数字电路实现

B.PLL相对于参考时钟,可以输出分频、倍频、分数频的时钟

C.PLL输入的参考时钟jitter值,在PLL输出时会变大,也可能变小

D.PLL的jitter值等于同步数字电路中clock uncertainty的设定值

解析:A,PLL可以用数字电路实现;D,clock uncertainty包括jitter+skew

某移位寄存器的时钟脉冲频率是100KHZ,欲将存放在该寄存器中的数左移8位,完成该操作需要(C)时间。

A、80ms B、12.5ms C、80usD、10us

入时钟频率 250Mhz,输入数据率8Gbps,输出的时钟频率 200Mhz,输出数据率为5Gbps,单位时间内输入数据总量为4Gb,在保证数据不丢失的前提下,最少需要多大的缓冲空间,并给出分析步骤。

单位时间内输入数据总量为4Gb,输入数据率为8Gbps,所用时间为0.5s,则输出数据总量为0.5*5=2.5Gb,缓冲空间=4Gb-2.5Gb=1.5Gb。

 1、什么是时钟抖动(jitter)

芯片的某一个给定点上时钟周期发生暂时性变化,即达到电路某一点的连续时钟边沿之间间隔的变化称为时钟抖动。

2、什么是时钟偏移(skew)

时钟信号到达数字电路各个部分所用时间的差异。由于时钟源到达不同寄存器所经历路径的驱动和负载的不同,时钟边沿的位置有所差异,因此就带来了 skew。

二者区别:Jitter是在时钟发生器内部产生的,和晶振或者PLL内部电路有关,布线对其没有影响。Skew是由不同布线长度导致的不同路径的时钟上升沿到来的延时不同。

3、FPGA中采用全局时钟网络的好处优点

(1)负载能力强,任何一个全局时钟线都可以驱动芯片内部的触发器。

(2)时延差特别小。

(3)时钟信号波形畸变小,工作可靠性好。

(4)对于一个设计项目来说,全局时钟是最简单和最可预测的时钟。

最好的时钟方案是:由专用的全局时钟输入引脚驱动单个主时钟去控制设计项目中的每一个触发器。只要可能就尽量在设计项目中采用全局时钟。CPLD/FPGA都具有专门的全局时钟引脚。它直接连到器件中的每一个寄存器。这种全局时钟提供器件中最短的时钟到输出的延时。

同步设计时:全局时钟输入一般都接在器件的时钟端,否则会使其性能受到影响,对于需要多时钟的时序电路,最好选用一个频率是他们的时钟频率公倍数的高频主时钟。

4、FPGA对时钟的使用?

FPGA有固定的时钟路由,这些路由能有效减少时钟抖动和偏差。需要对时钟进行相位移动或变频的时候,一般不允许对时钟进行逻辑操作,这样不仅会增加时钟的偏差和抖动,还会使时钟带上毛刺。一般的处理方法是采用FPGA芯片自带的时钟管理器如PLL,DLL或DCM,或者把逻辑转换成触发器的D输入。

5、门控时钟由哪些作用?

(1)降低功耗;(2)节省面积;

17、存储器 

SRAM面积大小与哪些些因素有关

  • 容量
  • 地址译码方式
  • 禁布区
  • BIST电路

 下列关于存储器的描述正确的是(BC)

A、ROM可以任意进行读写操作

B、ROM在断电后信息不丢失,接 通电源即可使用

C、RAM可以任意进行读写操作

D、RAM在断电后信息不回丢失,接通电源即可使用

(1)随机读写存储器(random access memory,随机存取存储器)

  • SRAM (Static RAM,静态随机存储器)断电数据丢失
  • DRAM. (Dynamic RAM,动态随机存取存储器) 断电数据丢失
  • SDRAM(Synchronous DRAM,同步动态随机存储器) 断电数据丢失
  • DDR (DDR SDRAM=双倍速率同步动态随机存储器)

(2)只读存储器(Read-Only Memory,只读存储器的总称)

  • PROM: 可编程只读存储器,只能写一次
  • EPROM(Erasable Programmable ROM,可重复擦除和写入)
  • EEPROM (Electrically Erasable Programmable ROM,电可擦可编程只读存储器)

(3)闪存(Flash)

        闪存(FLASH)是一种非易失性存储器,即断电数据也不会丢失. 因为闪存不像RAM(随机存取存储器)一样以字节为单位改写数据,因此不能取代RAM。

18、同步与异步

 1、 组合电路、时序电路

(1) 组合逻辑电路:数字电路满足任意时刻的输出仅仅取决于该时刻的输入;

(2) 时序逻辑电路:数字电路任意时刻的输出不仅取决于当前时刻的输入,而且还取决于数字电路原来的状态;

2、 同步电路、异步电路

(1) 同步电路:各触发器的时钟端全部连接在一起,并接在系统时钟端,只有当时钟脉冲到来时,电路的状态才能改变。所有触发器的状态的变化都与所加的时钟脉冲信号同步。同步电路的时钟之间有固定的因果关系;

(2) 异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步,由外部输入的变化直接引起。各时钟之间没有固定的因果关系;

3、 同步复位

判定:always @(posedge clk)

优点:

  • 1).有利于仿真器的仿真;
  • 2).有利于静态时序分析工具的分析;
  • 3).由于只在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的复位毛刺。

缺点:

  • 1).由于大多数的逻辑器件的目标库内的 DFF 都只有异步复位端口,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会一方面额外增加 FPGA 内部的逻辑资源,另一方面也增加了相应的组合逻辑门时延。
  • 2).复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑诸如时钟偏移、组合逻辑路径延时、复位延时等因素(所以复位信号有时需要脉冲展宽,用以保证时钟有效期间有足够的复位宽度)
  • 3).同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。

4、异步复位

判定:always @(posedge clk or negedge rst_n)

优点:

  • 1). ASIC库或FPGA器件的DFF都提供异步复位端口,无需多加的逻辑资源产生;
  • 2).设计相对简单
  • 3).复位信号不依赖于时钟,产生和响应都很方便。

缺点:

  • 1) .属于异步逻辑,复位释放接近时钟有效沿时容易使得触发器的输出进入亚稳态;
  • 2) 可能因为噪声或者毛刺造成虚假复位信号;
  • 3) 静态时序分析困难,静态时序分析一般是针对同步设计,基于时钟周期分析时序;
  • 4) 对于 DFT设计,如果复位信号不是直接来自于 I/O 引脚,在 DFT 扫描和测试时,复位信号必须被禁止,因此需要额外的同步电路。

5、异步复位同步释放

        异步复位同步释放就是在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。

6、恢复时间:Recovery time

        ·撤销复位时,恢复到非复位状态的电平必须在时钟有效沿来临之前的一段时间到来,才能保证有效的恢复到非复位状态,此段时间为Recovery time。类似于同步时钟的setup time。

        如图所示,rst_n为0表示复位,clk上升沿触发,rst_n从0到1上升沿与时钟上升沿之间的时间差必须不小于Recovery time才能保证寄存器恢复到正常状态。

7、去除时间:Removal time

        复位时,在时钟沿来临之后复位信号还需要保持的时间是去除时间,类似于同步时钟的 hold time。

        如图所示,rst_n为0表示复位,clk上升沿触发,rst_n保持为0经过clk上升沿后仍需要保持一段时间,才能保证寄存器有效复位。

8、时序检查中对异步复位电路的时序分析叫做

        恢复时间检查和去除时间检查。

9、什么是亚稳态

        触发器无法在某一个规定时间段内产生一个确定的状态。

原因:由于触发器的建立时间和保持时间不满足,当触发器进入亚稳态,使得无法预测该单元的输出,这种不稳定是会沿着信号通道的各个触发器级联传播。

消除:两级或多级寄存器同步。理论上亚稳态不能完全消除,只能降低,一般采用两级触发器同步就可以大大降低亚稳态发生的概率,再加多级触发器改善不大。

10、如何消除亚稳态?

  • (1)双D触发器打拍;
  • (2)用反应更快的D触发器;
  • (3)引入同步机制;
  • (4)改善时钟质量,用边沿变化快速的时钟信号消除;
  • (5)降低时钟频率

11、为什么两级触发器可以防止亚稳态传播

     假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。

12、如何处理跨时钟域信号?

  单bit:

  • (1)双D触发器打拍同步;
  • (2)脉冲展宽处理

  多bit:

  • (1)格雷码+双D触发器打拍;
  • (2)DMUX数据使能选通设计;
  • (3)异步握手协议
  • (4)异步FIFO或RAM

13、解释一下多bit处理方法?

(1)格雷码+双D触发器

        多bit信号转换为格雷码,再用双D触发器打拍。为什么不直接打两拍,而先转换格雷码:不同信号路径延时不同,信号打两拍之后可能出现不同状态。例如00->11,直接打拍可能变成00->10->11。而格雷码相邻状态只有1bit变换,即使路径延时不同,状态也不会出错。例如00->11格雷码是00->10,打拍可能变成00->00->10,只会出现某个状态多延时一拍而已,不会出错。注意:格雷码作同步时必须是2^N个状态。

(2)DMUX数据使能选通设计

        即单bit数据指示信号用双D触发器打两拍,稳定后再采样多bit数据信号。

(3)异步握手协议

两次请求的间隔约为:4clk_a + 3clk_b

  • ① req_clk_a发出,在b时钟域打两拍同步;
  • ② 将数据data_clk_a采样到data_clk_b,即DMUX方法,同时拉高ack_clk_b信号;
  • ③ ack_clk_b在a时钟域打两拍同步;
  • ④ req_clk_a信号拉低; 

(4)异步FIFO或RAM

14、如何发现异步电路的问题?

(1)代码检视:专家来检视;

(2)CDC异步检查:CDC工具检查,对CDC报告进行仔细分析;

(3)EDA仿真:通过大市政频率配比进行EDA仿真;

(4)FPGA验证:验证可能会随机发生一些错误,有可能是异步问题,花费时间多;

15、如何理解使用握手协议的方式处理跨时钟域传输问题

        所谓握手,即通信双方使用了专用控制信号进行状态指示。双方的握手信号分别使用脉冲检测方法进行同步,发送域先把数据放入总线,随后发送req信号给接收域;接收域在检测到req信号后锁存数据总线,然后送一个ack信号表示读取完成应答;发送域在检测到ack信号后撤销当前req信号,接收域在检测到req信号撤销后也相应撤销ack信号,此时完成一次正常握手信号。此后发送域可以继续开始下一次握手通信,如此循环。该方式能够接收到的数据稳定可靠,有效的避免了亚稳态的出现,但是控制信号握手协议检测会消耗通信双方较多的时间。

16、单bit信号慢时钟域到快时钟域同步方法?

        打两拍同步。

16、对于从快时钟域到时钟域的同步方法和上面差不多

(1)采用异步fifo,但是要注意读写端的时钟频率的差异避免一端溢出的情况。

(2)采用双口ram。

(3)采用握手信号,任何一端向另一端传输的时候都要保证请求信号和应答信号有足够长的时间让对方采到并能够完成同步处理,再根据这个信号去对数据线赋值或者从数据线上采数据。

(4)信号的展宽,如果我们知道这两个时钟之间的具体频率差别,那么用一个计数器去将高频信号做适当的展宽,使其宽度大于低频时钟的一个周期,就可以使用打两拍的方式进行跨时钟域了。

17、FPGA 设计中如何实现时序电路的延时?

异步电路的延时的一般方法是插入一个 buffer、两级非门等。

同步时序电路的延时一般是通过时序控制完成的。对于比较大和特殊定时要求的延时,一般用高速时钟产生一个计数器,根据计数器的计数控制延时;对于比较小的延时,这种做法不但可以使信号延时了一个时钟周期,而且完成了信号与时钟的初次同步。在输入信号采样和增加时序约束余量中使用。

另外 HDL 语言中的延时控制语法是行为级代码描述,用于仿真测试激励,但是在电路综合时会被忽略。

18、异步复位信号因为和时钟是异步的,因此不需要加时钟约束?

错。

19、时序检查中对异步复位电路的时序分析叫做?

恢复时间检查和去除时间检查。

20、类似于 setup 和 hold。异步信号有 remove 和 recovery time check ?

错,异步复位电路才有。

21、同步电路系统中可以有一个时钟及其三分频时钟进行驱动?

对。

22、EDA仿真不容易发现异步问题的可能的原因是 (ABE)存疑

A、EDA仿真难以模拟两个真实时钟的相位抖

B、EDA仿真无法模拟真实时钟的变化规律

C、EDA仿真不能模拟两个时钟的周期

D、EDA仿真时间不够长

E、EDA无法识别亚稳态

19、锁存器与触发器

D 触发器哪些端口毛刺对它没有影响(A

A、D 触发端

B、时钟端

C、置位端

D、清 0 端

边沿触发器D输入端对于毛刺不敏感,只需要满足 setup/hold,不需要专门加滤波器?

对。

所谓的 D 锁存器,就是能够将输入的单路数据D存入到锁存器中的电路,D锁存器的电路图如下图所示: 

D锁存器的特性表如下所示,Qn指触发前的状态,Qn+1指触发后的状态。

当CLk为0时,Qn+1=Qn,即保持之前的状态;

当CLK为1时,Qn+1=D,即状态由D来决定;

现在来看一下波形,在以后的设计中的Q实际上是Qn+1,不要搞错了!这里要多说一点,很多书介绍D锁存器时喜欢将C写成CLK,实际上大多时候这个地方不是CLK。

从 D 锁存器的波形图图中我们可以看出,D 是锁存器的输入信号,C 是锁存器的控制信号,Q 是锁存器的输出信号,当控制信号 C 为高电平时,输出信号 Q 将跟随输入信号 D 的变化而变化,大家看虚线内,Q 的波形等于 D 的波形。当控制信号 C 从高电平变为低电平时,输入信号 D 的状态将会决定锁存器将要锁存的状态。大家可以看到,C 由高变低的那两条虚线内,所对应的输入信号 D 为低电平,那么输出信号 Q 也将会锁存低电平。最后面的那两条虚线也同理,D 为高电平,Q 锁存高电平。

下面关于时序部件描述错误的为(D) 

A、触发器的setup+hold通常大于0

B、锁存器在时钟为窄脉中的驱动下可以作为触发器使用

C、逻辑路径插入触发器可以提高电路运行速度

D、触发器的setup不能为负数

于时序逻辑编码,下列描述正确的是(C)

  A、设计中所有寄存器必须带复位;

  B、设计中不能使用latch;

  C、一个功能模块通常只使用一个时钟沿;

  D、异步复位信号可以插入组合逻辑,不影响功能;

编写代码,完成带异步清 0,同步置 1(低电平有效)的 触发器

画出4分频电路

1、名词解释

锁存器(latch)是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,尽当锁存器处于使能状态时,输出才会随着数据输入发生变化。

触发器(flipflop)是边沿敏感的存储单元,数据存储的动作由某一信号的上升或者下降沿行同步的。(钟控D触发器其实就是D锁存器,边沿D触发器才是真正的D触发器)

寄存器(register)是用来暂时存放参与运算的数据和运算结果。在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。

2、锁存器和触发器的区别

锁存器同其所有的输入信号相关,是电平触发,当输入信号变化时锁存器就变化,没有时钟端,属于异步电路设计,时序分析困难且浪费大量芯片资源。

触发器受时钟控制的边沿触发,只有在时钟触发时才采样当前的输入产生输出,当然因为锁存器和触发器二者都是时序逻辑,所以输出不但同当前的输入相关,还同上一时间的输出相关。

3、触发器、锁存器、寄存器的区别?

由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储n位二进制码的寄存器。从寄存数据的角度来讲,寄存器和锁存器的功能是相同的;它们的区别在于寄存器是同步时钟控制,而锁存器是电位信号控制。

4、锁存器有哪些缺点?

锁存器在不锁存数据时,输出端的信号随输入信号变化,就像信号通过一个缓存器一样;一旦锁存信号起锁存作用,则数据被锁住,输入信号不起作用。因此锁存器也称为透明锁存器,指的是不锁存时输出对输入是透明的。此外锁存器还有以下一些缺点:

(1)对毛刺敏感,不能异步复位,所以上电后处于不确定的状态。

(2)锁存器会使静态时序分析变得非常复杂。

(3)在 FPGA 中,基本的单元时由查找表和触发器组成的,若生成锁存器反而需要更 多的资源。

5、触发器有哪些类型?

根据逻辑功能不同:RS触发器、D触发器、JK触发器、T触发器和T'触发器等。

根据触发方式不同:电平触发器、边沿触发器和主从触发器等。

根据电路结构不同:基本RS触发器,同步触发器、维持阻塞触发器、主从触发器和边沿触发器等。

20、门电路和加法器

使用最少数量的两个输入与非门设计3输入与非门

解析:Y=(ABC)’=((AB)’+C’)=(((AB)’)’C)’=((1(AB)’)’C)’,答案就出来了。

1、加法器分类

(1)半加器;

(2)全加器;

(3)进位延时加法器;

  1. 行波进位加法器(RCA)
  2. 超前进位加法器(CLA)

(4)进位保留加法器;

2、半加器和全加器结构

半加器:两个1位二进制相加,不考虑低位进位;

全加器:两个1位二进制相加,考虑低位进位; 

//--------------------------------------------------------
//--    半加器
//--------------------------------------------------------
module HALF_ADDER
(
  input wire a,
  input wire b,
  output reg s,
  output reg c
);

always@(*)begin
  c = a & b;
  s = a ^ b;
end
 
endmodule
//--------------------------------------------------------
//--    全加器
//--------------------------------------------------------
module FULL_ADDER
(
  input wire ai,
  input wire bi,
  input wire ci,
  output reg s,
  output reg co
);
wire gi;
wire pi;
wire pi_ci;
wire si;

HALF_ADDER U_HALF_ADDER_0
(
  .a    (ai     ),
  .b    (bi     ),
  .c    (gi     ),
  .s    (pi     )
);

HALF_ADDER U_HALF_ADDER_1
(
  .a    (ci     ),
  .b    (pi     ),
  .c    (pi_ci  ),
  .s    (si     )
);

always@(*)begin
  co = pi_ci | gi;
  s  = si;
end

endmodule

21、CMOS管

1、CMOS/TTL/ECL电路的比较

补充:CMOS和TTL电路的区别是什么?

  1. 结构:CMOS电路由场效应管,TTL由双极性晶体管构成。
  2. 电平范围:CMOS逻辑电平范围大(5~15V),TTL只工作在5V以下,因此CMOS噪声容限比TTL大,抗干扰能力强。
  3. 功耗与速率:CMOS的功耗比TTL小,但工作频率低于TTL。

2、TTL和CMOS逻辑之间能互联吗?

3、硬件电路如何实现线与功能?

线与:将两个门的输出信号并联实现“与”的功能。通常用OD来实现,同时在输出端口加一个上拉电阻。(OC门也可以线与)

注意:不接上拉电阻的话会造成短路烧坏电路。(例如IIC的SCL和SDA)

4、CMOS门为什么不能线与

5、画出CMOS非们电压电流传输特性?

6、单管传输门和双管传输门的区别?

7、画出非门和受控非门的CMOS电路?

8、画出与非门和受控与非门的CMOS电路

9、用PMOS和NMOS搭Y=AB+CD的电路

10、什么是NMOS、PMOS、CMOS?什么是增强型、耗尽型?什么是PNP、NPN?他们有什么差别?(仕兰微面试题目)

NMOS:这种类型的MOS管采用P型衬底,导电沟道是N型。

PMOS:这种类型的MOS管采用N型衬底,导电沟道是P型。

增强型与耗尽型的区别:

(1)原理不同:耗尽型在G端不加电压都存在导电沟道,而增强型只有在开启后,才会出现导电沟道。

(2)控制方法不一样:耗尽型UGS可以用正、零、负电压控制导通,而增强型必须使得UGS>UGS(th)才行,一般的增强型NMOS,都是正电压控制的。

11、描述CMOS电路中闩锁效应产生的过程及最后的结果?

闩锁效应是CMOS工艺所特有的寄生效应,严重会导致电路的失效,甚至烧毁芯片。 闩锁效应是由NMOS的有源区、P衬底、N阱、PMOS的有源区构成的n-p-n-p结构产生的,当其中一个三极管正偏时,就会构成正 反馈形成闩锁。避免闩锁的方法就是要减小衬底和N阱的寄生电阻,使寄生的三极管不会处于正偏状态。静电是 一种看不见的破坏力,会对电子元器件产生影响。ESD 和相关的电压瞬变都会引起闩锁效应(latch-up)是半导体器件失效的主要原因之一。如果有一个强电场施加在器件结构中的氧化物薄膜上,则该氧化物薄膜就会因介质击穿而损坏。很细的金属化迹线会由于大电流而损坏,并会由于浪涌电流造成的过热而形成开路。这就是所谓的“闩锁效应”。

在闩锁情况下,器件在电源与地之间形成短路,造成大电流、EOS(电过载)和器件损坏。

12、在CMOS数字设计中,为什么PMOS的尺寸通常高于NMOS的尺寸?

在PMOS中,载流子是空穴,其迁移率小于NMOS中的载流子,电子。这意味着PMOS比NMOS慢。在CMOS技术中,NMOS将输出下拉至地,PMOS将输出上拉至VDD,如果PMOS和NMOS的大小相同,则PMOS需要更长时间才能对输出节点充电。所有这些都是为了输出节点的上升时间和下降时间相等。

13、相同面积的CMOS与非门和或非门哪一个更快?

电子迁移率是空穴的2.5倍,运算就是用这些大大小小的MOS管驱动后一级的负载电容,翻转速度和负载大小的前一级驱动能力相关。为了上升延迟和下降延迟相同,PMOS需要做成NMOS两倍多大小。

载流子的迁移率,对PMOS而言,载流子是空穴,对NMOS而言,载流子是电子。

PMOS采用空穴导电,NMOS采用电子导电,由于PMOS的载流子的迁移率比NMOS的迁移率小,所以同样尺寸条件下,PMOS的充电时间要大于NMOS的充电时间长,在互补CMOS电路中,与非门是PMOS管并联,NMOS管串联,而或非门正好相反,所以同样尺寸条件下,与非门速度快,所以,在互补CMOS电路中,优先选择与非门。

14、为什么一个标准的倒相器中P管的宽长比要比N管的宽长比大?

和载流子有关,P管是空穴导电,N管是电子导电,电子的迁移率大于空穴,同样的电场下,N管的电流大于P管,因此要增大P管的宽长比,使之对称,这样才能使得两者上升时间下降时间相等、高低电平的噪声容限一样、充电放电的时间相等。

15、CMOS反相器电路由(B)器件组成

A、一个NPN管和一个PNP管    B、一个NMOS管和一个PMOS管

C、两个NMOS管      D、一个NMOS管和NPN管 

16、画出AB+C的CMOS电路的晶体管级电路图?

这类问题无疑例外都是一样的解法,算式化成非门、与非门、或非门形式即可画出。

(1)算式分析Y=AB+C=((AB)’C’)’;

(2)AB输入与非门;

(3)C输入反相器

(4)(2)(3)结果再输入与非门

画电路图的时候,为了节省时间,可以用简便画法,是不会扣分的,如下所示:

17、CMOS的功耗组成是什么样的?

功耗组成:动态功耗和静态功耗组成;

1、动态功耗:开关功耗和短路功耗;

开关功耗:电路在开关过程中对输出节点的负载电容充放电所消耗的功耗。

短路功耗:电源到地的直流导通电流

2、静态功耗:主要是漏电流引起的功耗

18、画出CMOS的图,画出tow-to-one muxgate.?

Y=SA+S’B 利用与非门和反相器,进行变换后Y=((SA)’*(S’A)’)’,三个与非门,一个反相器。也可以用传输门来实现数据选择器或者是异或门。

19、提高CMOS场效应管频率的方法有哪些?

(1)减小沟道长度;

(2)增大沟道表面的电阻迁移率;

(3)减小栅电容;

20、CMOS反相器的功耗主要包括哪几部分?分别于哪些因素相关?

P_dynamic 是电路翻转产生的动态功耗

P_short是P管和N管同时导通时产生的短路功耗

P_leakage 是由扩散区和衬底之间的反向偏置漏电流引起的静态功耗

(1)静态功耗:CMOS反相器在静态时,P、N管只有一个导通。由于没有Vdd到GND的直流桐庐,所以 CMOS的静态功耗应该等于零。但实际上,由于扩散区和衬底的PN结上存在反向漏电流,所以会产生静态功耗。

(2)短路功耗:CMOS电路在“0”和“1”的转换过程中,P、N管会同时导通,产生一个由Vdd到VSS窄脉冲电流,由此引起功耗

(3)动态功耗:C_L 这个CMOS反相器的输出负载电容,由NMOS和PMOS晶体管的漏扩散电容、连线电容和扇出门的输入电容组成。

21、CMOS管的含义是什么?(哈哈我同学被问到过)

互补金属氧化物半导体型场效应管

22、数电

1、逻辑函数的表示方法

常用的逻辑函数表示方法有逻辑真值表,逻辑函数式,逻辑图,波形图,卡诺图和硬件描述语言等。

2、什么是格雷码?

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码反射码。格雷码(Gray Code)又称Grey Code、葛莱码、格莱码、戈莱码、循环码、反射二进制码、最小差错码等。

3、为什么要使用格雷码?

格雷码是一种具有反射特性和循环特性的单步自补码,其循环和单步特性消除了随机取数时出现重大错误的可能,其反射和自补特性使得对其进行求反操作也非常方便。格雷码属于一种可靠性编码,它在相邻间转换时,只有一位产生变化,它大大减少了一个状态到另一个状态时逻辑的混淆,因此格雷码在通信和测量技术中得到广泛应用。

4、格雷码有哪些特点?

(1)格雷码具有反射特性;

(2)格雷码具有循环特性;

(3)格雷码是一种准权码;

(4)格雷码相邻的码组间仅有一位不同;

(5)格雷码从编码形式上杜绝了逻辑冒险的发生;

(6)卡诺图是按格雷码来画的;

(7)格雷码不是一种二进制;(易错)

5、格雷码和独热码的区别

独热编码占用较多的位,也就是消耗较多的触发器,但这些额外触发器占用的面积可与译码电路省下来的面积相抵消。

6、二进制转格雷码

Gray = (bin>>1) ^ bin;(右移一位后和自身异或)

7、下面那些是格雷码的特性?(ACD)

A、格雷码具有反射特性

B、格雷码是一种二进制

C、格雷码可以减少干扰

D、格雷码相连码组之间只有一个码元不同

8、A和B均为补码表示的二进制,其中A=10010010B,B=10001011B,请问下列选项中哪一个为A+B的运算结果:(A)
A.100011101
B.110011101
C.111100010
D.011100011

注意:已经是补码表示的了,复习一下有符号数加减法就行。

1)两符号数相加公式:

[X+Y]补 (MOD2)=[X]补+[Y]补    //MOD2即 mod 2^n,即丢弃符号位的进位(因为符号位参与运算是补码运算的特点)

2)两符号数相减公式:

[X-Y]补 (MOD2)= [X]补+[-Y]补

9、将二输入的与非门当非门使用时,另一端的接法是

与非门:(AB)’=A’+ B’,当非门使用,A正常,B接1即可,所以另一端接高电平。

10、B’+ABC+(AC)’+(AB)’,最简为(1),(A+B)(AB’)最简为(AB’)。

(1)原式=B’+ABC+A’+C’+A’+B’=A’+B’+C’+ABC=(ABC)’+ABC=1

此处用到摩根定理:(A+B+C)’=A’*B’*C’

          (A*B*C)’=A’+B’+C’

或者画卡诺图,会发现全部都填满了1,因此答案也是1。

(2)分配律:(A+B)(AB’)=AAB’+AB’B = AB’

11、设计一电路,其输入端为A,B,C,输出端为Y,要求其功能为:

当A=1时,Y=B;

当A=0时,Y=C;

设计内容包括:

(1)列出真值表;(2)写出Y的最简与或表达式(3)用最少的与非门画出逻辑图。

解:(1)真值表

        A B C Y

        0 0 0 0

        0 0 1 1

        0 1 0 0

        0 1 1 1

        1 0 0 0

        1 0 1 0

        1 1 0 1

        1 1 1 1

(2)Y的与或表达式

        根据(1)真值表,将Y=1里含有1的加起来就行,Y=A’B’C+A’BC+ABC’+ABC=AB+A’C=AB+A’C,忘了公式也可以画卡诺图,很快就得到答案了。

(3)Y=AB+A’C=((AB)’(A’C)’)’所以只需要4个与非门即可。

12、函数F(A,B,C)=AB+BC+AC的最小项表达式为(A

13、下图中为组合逻辑Y=f(A,B,C,D)的真值表,请根据此真值表在下列答案中选择Y的逻辑表达式(D)

AB=00

AB=01

AB=11

AB=10

CD=00

0

0

0

0

CD=01

1

1

1

1

CD=11

0

0

1

1

CD=10

0

0

1

1

A、C’D+AD

B、AC+D

C、AC+A’D

D、AC+C’D

本题考查的是卡诺图,有1的是有效项。

14、约束项就是逻辑函数中不允许出现的变量取值组合,用卡诺图化解时,可将约束项当做1,也可当做0。(错误

对输入变量取值的限制称为约束。当限制某些输入变量的取值不能出现时,用对应的最小项等于 0 表示,这些最小项就是约束项。(考察对书本概念的熟悉)

1、HDL语言的层次概念?

HDL语言是分层次的、类型的,最常用的层次概念有系统与标准级、功能模块级,行为级,寄存器传输级和门级。

系统级,算法级,RTL级(行为级),门级,开关级

2、FPGA的可综合和不可综合有哪些?

可综合:aupply0、supply1、buf、buff0、buff1、notif0、notif1、integer、for、function、instantitation、operators。

不可综合:defparam、$finish、initial、events、real、time、force、release、fork、join、delays、wait、#。

3、下面关于verilog描述正确的是:(ABCD)
A.如果A=1’b1,B=1’b0,F=A&~B|B&~A|B,则F=1’b1。 

B.y=a+b;属于阻塞赋值语句,执行该语句时,先计算a+b值,然后更新y值,在此过程中不能运算其他语句。
C.generate,for,function语句可以综合(for循环可综合时,循环变量必须是固定值)。
D.如果A=4’hb,则^A=1’b1。

解析:~优先级最高,&第二高,|第三高

4、下列语句中不属于并行语句的是(A)

A、过程语句 B、assign语句 C、无条件例化语句 D、when...else语句

5、块语句有两种:begin-end语句是(顺序)执行语句;fork-join是(并行)执行语句。

6、时间尺度定义为timescale 10ns/100ps,选择正确答案(C)

A、时间精度10ns B、时间单位100ps

C、时间精度100ps D、时间精度不确定

7、verilog语言中,wire型数据如果定义后没有赋值,则默认值为(A)

A、x   B、0   C、1   D、z

解析:wire初始值是x,它只是根线。Reg是可以赋初值的,不赋值为0.

8、Verilog的3种语言描述方式?

9、实现N位Johnson计数器,N=5.

10、以下哪些不属于function的特性?(B)

A、可以调用其他function;

B、消耗非0仿真时间;

C、必须至少有一个输入参数;

D、不得包含任何延迟和时序控制语句;

11、qword、dword、word、byte、bit的区别?

  • 1qword = 2dword = 4word = 8byte = 64bit;
  • 1dword = 2 word  = 4byte  = 32bit;
  • 1word   = 2byte    = 16bit
  • 1byte    = 8bit

12、task和function的区别?

(1)task可以定义自己的仿真时间单位;

    function只能与主模块共用仿真时间单位;

(2)task是过程性语句,要出现在always块或initial块中;

    function不是过程性语句,不能出现在always块或initial块中;

(3)task可以有时间控制语句,如#,@,wait;

    function不能有时间控制语句;

(4)task可以没有输入输出端口;

    function至少要有一个输入参量;

(5)task不返回值;

    function返回一个值;

(6)task可以调用function;

    function不能调用task;

猜你喜欢

转载自blog.csdn.net/qq_44933149/article/details/125805109