笔试题-2023-诺瓦星云-FPGA(第2套)附答案及解析
一、不定项选择题(部分题有丢失)
1、以下哪种编码方式或传输序列不适合在接收调使用DFE进行均衡处理?( )
A.64b/66b编码+扰码
B.3.125Gbps下的8b/10b编码
C.6.25Gbps下的8b/10b编码
D.PRBS31
答案:D
解析*:
D. PRBS31。PRBS31序列是一个伪随机序列,无法通过编码方式或扰码来进行处理。DFE均衡器处理的是在传输过程中产生的失真和噪声,而PRBS31序列是一种理论上完美的随机序列,没有噪声和失真。因此,DFE均衡器无法对PRBS31序列进行有效处理。而A、B、C选项提到的编码方式和传输序列中,都可以采用适当的方法进行均衡处理。
2、多时钟域设计中,如何处理跨时钟域( )
A.单bit:两级触发器同步(适用于慢到快)
B.多bit:采用异步FIFO,异步双口RAM
C.加握手信导
D.格雷码转换
答案:B
解析*:
B. 多bit:采用异步FIFO,异步双口RAM。在多时钟域设计中,可能出现时钟频率不同步的情况,导致数据在时钟域之间传输时出现问题,如数据混乱或丢失等。为了解决这个问题,可以采用异步FIFO或异步双口RAM的方式进行数据传输,保证数据的正确性和同步性。这两种方法都可以缓存数据,使其在两个时钟域之间进行传输,同时进行同步和控制,确保数据正确和可靠。A选项提到的单bit触发器同步方法适用于时钟频率慢到快的情况,但对于多bit的数据传输来说效率有限。C选项中的加握手信道可以在两个时钟域之间进行通信,但相对于异步FIFO和异步双口RAM来说,它的复杂度更高,而且需要更多的硬件资源。D选项中的格雷码转换更多用于数字信号处理和数字电路设计中,不适用于跨时钟域的数据传输。
3、FPGA动态功耗主要消耗在哪里( )
A.普通IO全部使用
B.BRAM全部使用
C.时钟管理单元全部使用
D.GT全部使用
答案:C
解析*:
C. 时钟管理单元全部使用。FPGA的动态功耗主要来自于翻转逻辑、时钟管理单元和I/O缓冲器等电路的开关和充电/放电过程。其中,时钟管理单元通常是FPGA动态功耗的主要来源,因为FPGA中的各个模块都需要时钟信号进行同步和控制,时钟信号的频率越高,时钟管理单元的功耗就越大。此外,IO强度也会对FPGA功耗产生一定影响,但相对于时钟管理单元来说,其功耗是次要的。因此,选项中A、B、D都只涉及特定部件的使用情况,并不能代表FPGA的总动态功耗,只有C选项中时钟管理单元全部使用才是最能反映FPGA动态功耗的选项。
4、以下说法正确的是( )
A.同步复位增加了时序收敛的难度;
B.同步化异步复位可以保证逻辑正确复位;
C.从使用资源的角度看,应候使用异步复位;
D.异步复位可能会导致逻辑错误;
答案:B
解析*:
B. 同步化异步复位可以保证逻辑正确复位。选项中,只有B选项的说法是正确的。异步复位和同步复位各有其优缺点。异步复位适用于简单电路和时序要求相对宽松的电路,但它也容易破坏同步和时序稳定性,造成数据错误。而同步复位适用于复杂电路和需要时序严格控制的电路,它确保所有的电路都在同一个时钟周期内停止工作,因此可以在复位后确保系统正确复位。C选项错误,从资源的角度看,应该尽可能使用同步复位,因为同步复位可以利用现有的时钟信号,不需要额外的硬件支持。A选项也是错误的,同步复位虽然增加了时序收敛的难度,但也确保了系统在复位期间的同步和稳定性。D选项也不完全正确,异步复位可能导致逻辑错误,但不是必然的,取决于具体的电路设计和实现。
5、如果wire [99: 0]b; reg[99: ] a; 于下面语法正确的是( )
A.assign b[0 +: 100] = a99: 0] ;
B.assign b[100-: 100]= al0 +: 100] :
C.assign a[99-: 100]= b[0 +: 100] ;
assign a[0 +: 100] = br99: 01 ;
答案:A
解析*:
A. assign b[0 +: 100] = a[99:0]; 选项A中使用了SystemVerilog中的part select和slice notation,取出reg类型变量a的前100个二进制位,并分别赋值给wire类型变量b的前100个二进制位,语法正确。B选项也使用了slice notation,但其中的语法不正确,应该是“assign b[100 -: 100] = a[99 -: 100] ;”,C选项中也存在语法错误,应该是“assign a[99 -: 100] = b[0 +: 100] ;”,D选项中的语法错误更为明显,应该是“assign a[99 -: 0] = b[99 -: 0] ;”。
6、一个大型的组合电路总延时为100ns,采用流水线将它分为两个较小的组合电路(最小精度为1ns),理论上电路最高的工作频率可达到0MHZ;( )
A.10
B.20
C.100
D.1000
答案:B
解析*:
B. 20。采用流水线将大型的组合电路分为两个较小的组合电路,可以提高组合电路的时钟频率,提高系统的运行速度。根据流水线的原理,每个流水段的延迟时间要小于时钟周期,否则会出现数据错误。根据题目中的数据,总延时为100ns,因此每个流水段的延迟时间为50ns,最大时钟频率为1/50ns=20MHz。因此,理论上电路最高的工作频率可达到20MHz。
7、下列属于FPGA时钟资源的是? ( )
A.D B津阿谤FG
B.O PLL
C.D DCM
D.MMCM
答案:C
解析*:
C. DCM 和 D. MMCM 都是 FPGA 的时钟资源。DCM (Digital Clock Manager) 和 MMCM (Mixed-Mode Clock Manager) 都是 FPGA 中常见的时钟资源,用于时钟频率的锁相和调整。DCM 主要用于低速时钟,对时钟频率的鉴定和调整更加粗略,而 MMCM 则适用于高速时钟,可以针对更高的精度要求进行时钟频率的锁相和调整。OPLL (Output Phase-Locked Loop) 是一种输出锁相环,用于产生 FPGA 输出的时钟信号,DDB (Digital Delay Block) 用于提供可编程的小型延迟,不是 FPGA 的时钟资源。
8、时间尺度定义为 timescale 10ns/100ps,选择正确答案( )
A.时间精度10ns
B.时间单位100ps
C.时间精度100ps
D.时间精度不确定
答案:B
解析*:
B. 时间单位为100ps。timescale 语句用于定义 Verilog 模型中时间单位的精度和粒度,它设置了仿真模拟时间的基本单位和产生时钟的基本精度。在这个例子中,时间尺度设置为 10ns/100ps,说明时间单位为 100ps,时间精度为 10ns,即模拟器在仿真时会将时间分成以100ps为单位的时间片,并且最小时间单位为 100ps。所以时间单位为100ps。
9、关于建立时间与保持时间,以下描述正确的是( )
A.触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间为建立时间
B.触发器在时钟上升沿到来之前,其数据输出端的数据必须保持不变的时间为建立时间
C.触发器在时钟上升沿到来之后,其数据输出端的数据必须保持不变的时间为保持时间
D.触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的时间为保持时间
答案:A
解析*:
A. 触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间为建立时间,这是建立时间的定义。在建立时间内,输入端的信号要能够被稳定地传播到触发器内部。如果在建立时间内输入信号持续变化,则可能会导致触发器无法正确地识别输入信号,从而导致输出信号错误。保持时间是指触发器在时钟上升沿到来之后,保持其输出稳定的时间。在保持时间内,输出信号必须保持不变,在此期间发生任何变化都会导致输出信号错误。因此,B、C、D 描述都不正确。
二、判断题
10、在并联和串联的石英晶体震荡电路中,石英晶体均充当电感的作用( )
A.正确
B.错误
答案:B
解析*:
错误。石英晶体震荡电路中的石英晶体通常充当谐振器的作用,不是电感。在电路中,电感主要用于存储电能和限制电流变化率,而石英晶体作为无源元件,本身不能存储电能,也不具有电感的特性。在石英晶体震荡电路中,其作用是通过反馈电路提供稳定的振荡频率。
11、竞争和冒险只在组合逻辑中出现( )
A.正确
B.错误
答案:B
解析*:
B. 错误。竞争和冒险不仅可以在组合逻辑中出现,也可以在时序逻辑中出现。竞争出现在具有多个输入的逻辑门中,因为输入信号的传输延迟不同而导致输出不确定的现象。而冒险则是指在时序逻辑中由于信号的传播延迟和时序关系而导致的错误的输出。在设计数字电路时,需要考虑竞争和冒险的问题,以尽可能避免这些潜在的问题。
12、PN节的单向导电性只有在外加电压时才能体现出来( )
A.正确
B.错误
答案:B
解析*:
B. 错误。PN结的单向导电性是其内在的特性,与外加电压无关。PN结中由于材料掺杂导致的正负离子浓度不同,从而形成了电子云和空穴云,在其结面处形成空间电荷区域。当 PN 结正向偏置时,电流能够流过 PN 结,因为外加电压会减小空间电荷区域的宽度,改变电子和空穴的扩散方向。而反向偏置时,空间电荷区宽度增加,禁带宽度增大,因此只有非常小的反向电流。因此,PN结的单向导电性是内在的,与外加电压无关。
13、组合逻辑中若if语句不完整会产生锁存器( )
A.正确
B.错误
答案:B
解析*:
B. 错误。在组合逻辑中,if语句并不常用。一般而言,组合逻辑的输出只与输入有关,不存在状态存储的问题。锁存器是由时序逻辑实现的状态存储器件,其可以用于存储状态、延迟信号,以及实现时序逻辑功能。组合逻辑不存在状态,不涉及时序问题,也就不会造成锁存器的问题。因此,组合逻辑中if语句不完整也不会导致锁存器的产生。
14、用三段式状态机和二段式状态机写法描述同一个电路,最终综合实现后的电路是样的( )
A.正确
B.错误
答案:A
解析*:
A. 正确。三段式状态机和二段式状态机都是时序逻辑的一种设计方法,它们都可以用于描述同一个电路,并且最终综合实现后的电路也是相同的。三段式状态机一般采用状态、输入和输出三个部分来描述一个时序逻辑,而二段式状态机则采用状态和输出两个部分来描述。两种方法的主要区别在于状态转换的方式,三段式状态机可以描述复杂的状态转换关系,而二段式状态机则更加简洁、直观。但是,无论采用哪种方法,最终实现的电路都应该是相同的,只是具体的实现细节可能会略有不同。
三、简答题
15、FPGA芯片内有哪两种存储器资源?
答案及解析*:
FPGA芯片内有两种常见的存储器资源——查找表存储器(LUTRAM)和片上存储器(Block RAM)。
1.查找表存储器(LUTRAM)是FPGA中最小的寄存器单元,其中的逻辑可以通过LUT的编程来实现。当LUT用来存储逻辑表时,其就是一种存储器。但相较于片上存储器,LUTRAM 的存储密度更低。它的寄存器单元通常被用来存储状态寄存器和配置信息等较少的数据。
2.片上存储器(Block RAM)是一种可编程的、分布式的、双端口 RAM 存储器。它集成了多个 RAM 存储单元组成一个规模较大的存储器模块,通常可以以多种模式(如单端口、双端口)访问和配置。片上存储器的容量和速度要优于 LUTRAM,因此其在实现数字信号处理(DSP)和 FPGA 中存储深度学习/神经网络时具有广泛的使用。
16、什么是亚稳态,出现了亚稳态应该如何解决?
答案及解析*:
亚稳态(metastable state)指的是系统在达到平衡状态之前,暂时停留在一个接近稳定状态的状态。在这个状态下,系统所处的能量较低,但并不是最低能量状态,稍微扰动一下,系统就会跃迁到更低能量的状态。例如,电子在原子中的瞬时跃迁就是一种亚稳态现象。
在工程和技术领域中,亚稳态问题一般是指材料或结构物的长时间失稳现象,例如金属结构的疲劳损伤、晶格缺陷、蠕变等。解决亚稳态问题需要对系统中的微观机理进行研究和分析,找出导致亚稳态现象的原因,并采取相应的措施加以解决,以避免长时间的失稳现象。常用的措施包括改进材料的制备工艺,增强材料的强度和韧性,加强结构的支撑等。(答案仅供参考)
17、有限状态机FSM分为哪两类?以及两类的区别
答案及解析*:
有限状态机(FSM)按照状态个数分为两类:Moore型有限状态机和Mealy型有限状态机。
Moore型有限状态机的输出只与当前状态有关,其输出不依赖于输入。具体来说,Moore型有限状态机是指与状态序列相关联的输出序列由两部分组成的有限状态机,即输出函数只与当前状态值有关。在Moore型有限状态机中,输出由当前状态决定,形式化为“输出Y等于当前状态Q的函数值Y = f(Q)”。Moore型有限状态机可以被看作是对输入的同步响应,即外部信号的变化对其状态机的状态产生同步响应。
Mealy型有限状态机的输出与当前状态和输入都有关。具体来说,可以看作是一类输出函数有因数Q的有限状态机,它的输出是由输入和状态的组合值来决定的,形式化为“输出Y等于输入X和当前状态Q的函数值Y = f(X, Q)”。在Mealy型有限状态机中,输出函数同时考虑了输入和状态,因此输出来自输入的异步响应,即对输入的变化立刻做出响应。
由此可见,Moore型有限状态机和Mealy型有限状态机的区别在于输出函数的不同,Moore型有限状态机只将输出与当前状态相关联,而Mealy型有限状态机将输出与当前状态和输入同时相关联。
18、时序约束的概念和基本策略?
答案及解析*:
时序约束是在数字电路设计中用来描述时序要求的约束条件。时序约束可以限制同步电路中输入和输出信号的时序关系,使其满足设计要求,并通过时序分析来保证时序要求得到满足。常见的时序约束包括时钟周期时间、时钟上升沿和下降沿时间、输出延迟、时序路径等。
基本的时序约束策略包括:
时钟约束:确定时钟的开启时间、持续时间、上升沿和下降沿的时间等,以保证时钟信号的正确性和同步性。
输入约束:确定所有输入信号的到达时间,并且保证在时钟上升沿之前,所有输入信号都能被稳定地采样到。
输出约束:确定所有输出信号的时间,包括延迟、设置时间等,以保证输出信号的正确性和稳定性。
时序路径约束:确定时序路径长度和延迟,以保证时序路径的传输时间不会超出时钟周期的限制。
约束的优化和调整:根据时序分析结果优化和调整约束,以保持时序要求得以满足的同时最大化时钟频率。
时序分析:使用时序分析工具来检查时序约束是否满足,并提供可视化和分析工具来帮助用户识别时序违规问题。
19、请简述FIFO使用格雷码的原因
答案及解析*:
FIFO(First-In-First-Out,先进先出)是一种常用于缓冲区的存储器结构。在FIFO中,当数据进入队列时,它被加入到队列末尾,并在适当的时候从队列前面删除。为了正确管理FIFO的读写操作,需要使用计数器来追踪队列中的数据数量。这个计数器将作为FIFO状态机的一部分来实现。
在FIFO实现中,计数器的位数与队列缓冲区的大小有关。当计数器比较大时,会因信号传输延迟和连接线路导致较长的启动时间,从而影响FIFO的性能。为了最小化延迟和功耗,设计人员可以采用格雷码计数器来实现FIFO状态机。
格雷码是一种特殊的二进制编码方式,在格雷码上每次只有一个比特位发生变化。与普通二进制计数器相比,使用格雷码计数器可以实现平滑的计数器过渡,从而减少了FIFO在计数器溢出时的启动时间和能量消耗。此外,格雷码计数器还可以避免计数器上的不稳定状态,从而提高了FIFO的可靠性和数据完整性。
四、编程题
20、某个系统中,存在两个时钟,分别为150M和50M,在150M时钟域下,每隔1s左右有一个脉冲(单时钟宽度,高脉冲),现在需要将此脉冲同步到50M时钟域下,同样是1个高脉冲,模块接口如下,请补全代码。
答案及解析*:
使用同步器可以将一个时钟域的信号同步到另一个时钟域中。在Verilog中,可以使用“always @(posedge clk)”的方式来实现同步器。
以下是将150M时钟域下的脉冲信号同步到50M时钟域下的代码实现:
在上述代码中,使用了一个寄存器SyncPulse50M来存储同步后的50M时钟下的脉冲信号。在150M时钟上升沿时,判断是否有脉冲信号,有则将同步后的50M脉冲信号设为高电平,否则设为低电平。最后将同步后的50M脉冲信号直接输出即可。
21、写一个64位的计数器,由于器件和时钟频率的限制,当计数器位宽大于17位时时序无法收敛。因此内部每一个计数器的位宽不能超过17位。可以采用拆分加法器的方式实现。计数器的使能信号为CntEn,高电平时开始计数,低电平时计数值保持。模块接口如下,请补全代码。
答案及解析*:
为了实现一个64位的计数器,可以将其拆分成4个16位的计数器,并将它们级联起来。每个16位计数器的计数范围是[0, 2^16-1],当它加到其最大计数值时,将会递增到更高位的计数器中。下面给出一个采用拆分加法器的实现:
module Counter ( input InClk, input InRst, input CntEn, output reg [63:0] Cnt ); reg [15:0] cnt0, cnt1, cnt2, cnt3; reg [3:0] carry; //级联时需要传递的进位信号 always @(posedge InClk) begin if (InRst) begin //复位信号清零计数器 cnt0 <= 0; cnt1 <= 0; cnt2 <= 0; cnt3 <= 0; carry <= 0; Cnt <= 0; end else if (CntEn) begin //使能信号为高电平时计数器计数 cnt0 <= cnt0 + 1'b1; if (cnt0 == 16'b0000000000000000) begin //如果当前计数器已经加到最大值,则将进位信号送到更高位的计数器中 carry <= carry + 1'b1; end cnt1 <= cnt1 + carry; if (cnt1 == 16'b0000000000000000) begin carry <= carry + 1'b1; end cnt2 <= cnt2 + carry; if (cnt2 == 16'b0000000000000000) begin carry <= carry + 1'b1; end cnt3 <= cnt3 + carry; if (cnt3 == 16'b0000000000000000) begin carry <= carry + 1'b1; end Cnt <= {cnt3, cnt2, cnt1, cnt0}; //将每个计数器的值级联起来形成一个64位的计数器 end end endmodule
整理不易,如果觉得对你有帮助的话,可以收藏下来慢慢刷!
回顾往期精彩笔试真题:
笔试题2023-燧原-数字IC设计(附答案及解析)收藏不易,如果觉得对你有帮助的话,可以收藏下来慢慢刷!
#笔试##FPGA数字IC笔试面试系列##数字IC##你为什么选择硬件行业##春招你拿到offer了吗#