笔试题-2023-海光-数字芯片设计【附答案及解析】

一、单选题 2分

1、两个5bit的有符号数相加和相乘的结果的位宽最小分别是( ).

A. 6bit, 11bit

B. 5bit, 11bit

C. 5bit, 10bit

D. 6bit, 10bit

答案:A

解析*:

两个5bit的带符号数相加可能产生6位结果,如两个-16相加会得到-32,因此选项A排除。两个5bit的带符号数相乘结果可能最大达到10位,如5个乘以5个最大是25,因此选项C排除。而两个5bit的数相乘会有最多10位的结果,再加上可能的符号位,最小位宽为11位,因此答案为选项A。

2、对于28nm制程芯片,合法的电压、环境温度条件下,以下哪种情况内部信号速度最快( )

A.温度高,电压高

B.温度低,电压高

C.温度低,电压低

D.温度高,电压低

答案:B

解析*:

对于28nm制程芯片,内部信号速度最快的条件是电压高、温度低,因为高压可以提高晶体管的驱动能力,从而加速信号传播,而低温可以降低电阻和电容的影响,减少信号的传输时延。因此,答案是B.温度低,电压高。

3、下列关于典型的处理器Core执行顺序描述正确的是( )

A.取指令,访存取数,指令译码,执行指令,结果写回

B.取指令,指令译码,执行指令,访存取数,结果写回

C.访存取数,取指令,指令译码,执行指令,结果写回

D.取指令,执行指令,访存取数,指令译码,结果写回

答案:A

解析*:

典型的处理器Core执行指令的顺序一般是取指令、指令译码、访存取数、执行指令和结果写回。其中取指令和指令译码属于取址过程,访存取数和结果写回属于访问存储器过程,执行指令则是位于两个过程的中间。因此,选项A是正确的。

4、能正确检测出同步下降沿(negedge edge)的电路是( )。

A. assign out = ~d0 & ~d1

B. assign out = ~d0 & d1

C. assign out = d0 & d1

D. assign out = d0 & ~d1

答案:B

解析*:

对于这个电路,在 always 语句块内部,d1 和 d0 分别存储了上一个时钟周期的 in 信号和上上一个时钟周期的 in 信号。根据同步下降沿(negedge)的定义,当 in 信号从高电平跳变到低电平时,可以认为是出现了同步下降沿(negedge),所以应该检测上上一个时钟周期的 in 信号和上一个时钟周期的 in 信号是否都为高电平。

因此,正确的选项是 B. assign out = ~d0 & d1。

5、请问按照下面代码中的随机约束,d随机为0的概率是( )

A.6.25%

B.50%

C.11.76%

D.12.5%

答案:A

解析*:

根据代码,当 s == 1 时,d 的取值被限制为 4'h0,即 d == 4'b000。因此,d 随机为 0 的概率等于 s 为 1 的概率乘以 d 为 0 的概率,即:

P(d=0) = P(s=1) x P(d=4'b000)

由于 s 是一个随机 bit,因此 P(s=1) = 0.5。而 d 是一个随机的 3 位向量,共有 2^3 种可能的取值,其中只有一种取值是 0,因此 P(d=4'b000) = 1/8。综合起来,有:

P(d=0) = 0.5 x 1/8 = 1/16

也就是说,d 随机为 0 的概率是 1/16,约为 6.25%。因此,答案是 A.6.25%。

6、在perl中执行完以下代码后,$1的值为什么( )。

A. test

B. test 123

C. testls

D. test 1

答案:A

解析*:

根据 Perl 的正则表达式语法,(\w+\s" d) 匹配一个或多个单词字符,后跟任意个空白字符和一个或多个 d 字符;(\d+) 匹配一个或多个数字。

对于给定的字符串 "This string is for test 123",正则表达式能够匹配到最后一个单词 "test" 和后面的数字 "123",因此 $1 和 $2 的值分别为 "test" 和 "123"。根据选项,只有选项A. test 表示 $1 的值为 "test",因此答案是 A. test。

7、以下关于复位的描述,正确的是( )。

1)同步复位依赖于时钟,所以它对毛刺更为敏感

2)异步复位不依赖于时钟,因此无需分析复位信号和时钟之间的timing关系

3)同步复位的设计更方便进行时序分析

4)同步复位的有效时长应至少大于一个时钟周明

5)异步复位,同步释放,是常用的复位解决方案

A.023

B.345

C.35

D.234

答案:B

解析*:

根据对复位的理解,以下描述是正确的:

同步复位依赖于时钟,因此对毛刺更为敏感;

异步复位不依赖于时钟,所以不需要分析复位信号和时钟之间的 timing 关系;

同步复位的设计更方便进行时序分析;

同步复位的有效时长应至少大于一个时钟周期;

异步复位和同步释放是常用的复位解决方案。

因此,正确的选项是 B. 345。

8、已知 fCLKA=100MHz,fCLKB=48MH,现需要在30ns内,从CLKA的时钟域发出两个持续时间为1 ycle的非连续脉冲(即前10ns发送个脉冲,20~30ns发送一个脉冲),送入CLKB的时钟域,关于这条数据通路上的跨时钟域处理,请问如何能保证功能正确目delay最小).( )

A.不带握手的脉冲同步器

B.带握手的脉冲同步器

C.2 DFF synchronizer

D.异步FIFO

答案:A

解析*:

在时钟域之间进行信号传输时,需要考虑时钟时序的问题,以避免出现元件捕获到不合法的数据的情况。根据题目描述,需要将两个持续时间为 1 个时钟周期的脉冲信号从 CLKA 的时钟域发送到 CLKB 的时钟域,且要求满足 30ns 内完成。

首先,对于不带握手的脉冲同步器和异步 FIFO,都不适用于本题目,因为这两种方式在处理跨时钟域信号传输时都需要使用握手信号来保证时序正确。而根据题目描述,脉冲信号是非连续的,因此无法使用握手信号来进行同步。

对于 2 DFF synchronizer,虽然同步器可以在时钟域之间进行数据传输,并且不需要使用握手信号,但是根据题目描述,需要在 30ns 内完成信号传输,因此传输延时是非常关键的问题。而使用 2 DFF synchronizer 的方案,需要将原始信号通过两个 D 触发器进行同步,因此会增加传输延迟,无法满足时序要求。

因此,最合适的方案是带握手的脉冲同步器。这种同步器可以有效地同步非连续的信号,并且使用握手信号可以保证时序正确,避免了数据捕获不合法的问题。在时钟速度不同的情况下,建议使用多级同步器来延长握手信号的有效时间,以保证传输的可靠性。通过适当的设计,带握手的脉冲同步器可以在满足时序要求的前提下,实现最小化的传输延迟。

9、下图为组合逻辑Y=f (x1,x2,x3,x4)的真值表,请根据真值表选择Y的逻辑表达式( )

A.(~x2)x3 + x1x3x4

B.(~x2)x3 + x1(~x3)x4

C.(~x2)x3 + x3x4

D.x2x3 + x1(~x3)x4

答案:B

解析*:

  • 采用卡诺图化简的方法,直接得到结果。

10、有一个FIFO设计,输入时钟100Mhz, 输出时钟80Mhz,输入数据模式是固定的,其中1000个时钟中有800个时钟传输连续数据,另外200个空闲,请问为了避免FIFO下溢/上溢, 最小深度是多少( )。

A.80

B.320

C.160

D.200

答案:C

解析*:

根据题中给出的信息,有一个FIFO设计,输入时钟100Mhz,输出时钟80Mhz,1000个时钟中有800个时钟传输连续数据,另外200个空闲。为了避免FIFO下溢/上溢,最小深度是多少?

由于输入时钟100MHz,输出时钟80MHz,因此每个时钟可以处理2/5个数据。若要保证剩余的200个时钟都能传输完毕,则需要至少(200×2/5)+1=160个时钟。因此,最小深度是160个时钟。故选C。

11、当功能覆盖率达到100%,可以说明( )。

A.功能覆盖率对应的DUT响应是正确的

B.意味着验证的完整性

C.DUT的功能点已经100%覆盖

D.某些令人关注的情况已经得到测试覆盖

答案:D

解析*:

当功能覆盖率达到100%时,可以说明被覆盖的测试数据集合中的所有情况都已经得到覆盖,即每个可能的情况都至少被测试了一次。这个覆盖率指标并不能保证被覆盖的测试数据集合对应的设计单元(DUT)响应是正确的,因为测试也可能存在误报或漏报的情况,测试环境中的噪声和干扰等原因也可能导致测试结果出现不正确的情况。因此,选项 A 的描述是错误的。

功能覆盖率并不直接对应于 DUT 的功能点,因此选项 C 的描述也是错误的。功能覆盖率可以帮助评估测试覆盖的完整性,但并不是唯一的评估指标,不能单纯地将功能覆盖率作为评估 DUT 测试完整性的唯一标准,因此选项 B 也是错误的。

综上所述,选项 D 描述最符合实际情况,即当功能覆盖率达到100%时,可以说明对测试集中的某些令人关注的情况已经得到了测试覆盖。但需要注意的是,即使测试达到了100%的功能覆盖率,也并不能完全保证测试的完备性和正确性,需要根据实际情况分析和评估测试的结果。

12、下面程序输出的结果是( )

A.

B.

C.

D.

E.

答案:

解析*:

13、下面System verilog程序的输出结果是( )。

A.A.ID=2, B.ID= 2, AA.ID= 2, BB.ID= 3

B.A.ID=2,B.ID= 2,AA.ID= 3,BB.ID= 3

C.A.ID=3,B.ID= 3,AAID= 2, BB.ID= 2

D.A.ID=2, B.ID= 2, AA.ID= 2, BB.ID= 2

答案:A

解析*:

在 SystemVerilog 中,类的实例化和赋值操作都是对象引用传递方式,即操作的是对象的引用而不是对象本身。因此,在此题目中,A 和 B 都是对象 A 的引用。

首先,执行 A.ID = 2,将对象 A 的 ID 值设置为 2。接着,执行 class B = A,将对象 B 的引用指向对象 A。

然后,执行 $display 语句,输出 A.ID 和 B.ID 的值。由于 A 和 B 都是对象 A 的引用,因此 A.ID 和 B.ID 都是 2。

接着,执行 B.ID = 3,将对象 B 的 ID 值设置为 3。这个操作只改变了对象 B 的 ID 值,而不会影响对象 A 的 ID 值。

最后,执行 $display 语句,输出 A.ID 和 B.ID 的值。由于 A 和 B 都是对象 A 的引用,因此 A.ID 和 B.A.ID 的值都是 2。而 B.ID 已经被设置为 3,因此 $display 语句中的第二个 %od 输出的是 3。

因此,程序的输出结果应该是:

A.ID = 2, B.ID = 2

AA.ID = 2, BB.ID = 3

因此,正确的答案是 A.。

14、设有如下时序图,那么以下哪个断言(assertion)会fail ?( )

A. assert property (@(posedge clk) $fell(mux_o)->#[0:1] ~sel)

B. assert property (@(posedge clk) inO == ~in1)

C. assert property (@(posedge clk) in0 ##1 in1)

D. assert property (@(posedge clk) $rose(sel)->#[0:3] mux_o)

答案:

解析*:

15、下列说法错误的是( )

A.两个向量进行比较操作或者加减操作或赋值操作时,两个向量的位宽要相等,避免隐式扩展

B.if/else语句配对使用,case语句加defaul项; 组合逻辑中在所有条件下都要对信号赋值,如果要保持不变则用a=a的方式赋值

C.for语句中的循环变量可以定义为integer型外,所有变量和信号都只能位wire型或者reg型,不能定为整数、实数型、无符号型realtime型和time型

D.条件语句,如果无关优先级,尽量采用case,避免多级else if影响时序

答案:C

解析*:

选项 C 中的描述是错误的。在 SystemVerilog 中,变量的类型包括 wire、reg、integer、real、realtime、time、bit 等。其中 integer 类型表示有符号整数型变量,可以在 for 循环中作为循环计数器使用。因此,选项 C 错误。

选项 A 中的描述是正确的。在对两个向量进行比较操作或者加减操作或赋值操作时,两个向量的位宽需要相等,避免发生隐式扩展。

选项 B 中的描述大部分是正确的。if/else 语句需要配对使用,case 语句中要包含 default 项,组合逻辑中所有条件下都要对信号赋值,如果要保持不变则用 a = a 的方式赋值。但是,对于复杂的组合逻辑,为了可读性和维护性,推荐使用 always_comb 块,它会自动进行敏感列表的管理,不需要手动管理。

选项 D 中的描述是正确的。在条件语句中,如果无关优先级,尽量采用 case,避免使用多级 else if 语句损害时序性能。

因此,选项 C 是错误的描述,是本题的答案。

、多选题 5分

1、下面的UVM phase中哪些phase是消耗仿真时间的( )

A. build phase

B. config phase

C. report phase

D. main phase

E. check phase

F. reset phase

答案: A D E

解析*:

在 UVM 中,各个 phase 的作用和功能不同,它们会按照特定的顺序调用,组成一个完整的仿真过程。在这些 phase 中,有一些 phase 会消耗仿真时间,有一些 phase 则不会。

消耗仿真时间的 phase 主要是那些需要执行复杂逻辑、实例化大量对象或进行波形分析等操作的 phase,常见的消耗仿真时间的 phase 包括 build phase、main phase、check phase。

而其他 phase,比如说 config phase、reset phase、report phase 等,则不会消耗太多时间,主要是执行一些必要的配置、清除、测试报告等工作。

因此,本题的答案应该是 A、D、E,即 build phase、main phase 和 check phase 是消耗仿真时间的。

2、关于latch与Flip-Flop特性描述正确的是( )。

A.Flip Flop只会在时钟触发沿采样当前输入,产生输出

B.latch输出可能产生毛刺

C.都属于时序逻辑

D.latch无时钟输入

答案:A B C

解析*:

A. Flip Flop 只会在时钟触发沿采样当前输入,产生输出,描述正确。

B. Latch 的输出可能产生毛刺,描述正确。Latch 是一种基于电平触发的存储元件,如果输入信号在电平转换时的抖动或干扰等原因,可能会导致输出信号出现毛刺或不稳定的情况。

C. Latch 和 Flip Flop 均属于时序逻辑。但是,两者的实现方式不同,Latch 是一种基于电平触发的存储元件,输出信号随输入信号的变化而实时更新,而 Flip Flop 是一种基于时钟触发的存储元件,只有在时钟沿才会采样输入信号,产生输出信号。因此,Latch 和 Flip Flop 在输入处理和时序分析上也存在较大的差别。

D. 描述错误,Latch 通常需要一个或多个时钟信号以及使能信号等控制信号,属于时序逻辑。

3、下面技术有助于提高CPU前端指令处理性能的有( )。

A.分支预测

B.数据Cache

C.指令Cache

D.微码Cache

答案: A B C

解析*:

A、B 和 C 都是有助于提高 CPU 前端指令处理性能的技术。

A. 分支预测可以通过预测程序中分支指令的执行结果,提前预取下一条指令,从而减少流水线的停顿和等待,提高 CPU 的执行效率。

B. 数据 Cache 可以将经常使用的数据缓存到高速缓存中,提高数据访问效率,减少 CPU 的等待时间。

C. 指令 Cache 可以将经常使用的指令缓存到高速缓存中,提高指令的访问效率,减少 CPU 的等待时间。

D. 微码 Cache 概念并不常见,实际上微码(Microcode)使用较少,和Cache的概念不太一致,因此不是提高 CPU 前端指令处理性能的技术。

因此,本题正确答案是 A、B、C。

4、芯片tape out回来后,发现有一个逻辑问题需要做metal ECO,ECO的过程中需要用到一个2输入与门,但待修改电路附近的sparecell只有: DFF,2输入mux,inverter, oR, Tieo,Tie1.那么你可以选取( )来实现2输入与门。

A.OR+TieO+Tie1

B.OR+inverter

C.一个两输入mux + Tie0

D.DFF+TieO+Tie1

答案:A B C

解析*:

本题需要先了解一下每个 SPARE CELL 的功能:

DFF:D 触发器,可以存储一个数据信息。

2-input MUX:2 输入多路选择器,可以根据选择信号选择不同的输入信号。

Inverter:反相器,可以将输入信号取反输出。

OR:或门,可以实现逻辑或操作。

Tie0 和 Tie1:连接到 GND 和 VDD 电源,分别强制信号为 0 或 1。

根据这些 SPARE CELL 的功能,考虑如何实现一个 2 输入与门。

A. OR+TieO+Tie1:这个组合可以实现一个 2 输入与门,但实现比较麻烦,需要通过两个 OR 门和两个 Tie0/Tie1 信号实现,不太适合快速 ECO。

B. OR+Inverter:这个组合可以实现一个 2 输入与门的补码,也就是一个 2 输入 NOR 门。虽然可以使用 De Morgan 定理将 NOR 翻译为 AND,但实现和时序都会复杂一些。

C. 2-input MUX + Tie0:这个组合可以实现一个 2 输入与门。将一个输入连接到 Tie1,另一个输入连接到 MUX 的输入端,将 MUX 的选择信号连接到 Tie0,这样当选择信号为 0 时,MUX 的输出就是 Tie1,即逻辑值为 1,否则输出为 0。

D. DFF+TieO+Tie1:这个组合无法实现 2 输入与门,DFF 只能存储一个数据信息,而 Tie0/Tie1 只能输出逻辑值 0 或 1。

因此,本题的答案是 C。同时也可以将 A 和 B 作为有效选择,然后选择 ABC 或 BC 作为答案。

5、请选出AHB协议描述正确的选项( )。

A.AHB支持SINGLE,INCR,WRAP4,INCR4,WRAP8,INCR8,WRAP16,INCR16等传输类型

BAHB的burst传输不能被提前结束

C.MAD支持SIZE 8bits,16bits,32bits,64bits,128bits,256bits,512bits,1024bits

D.读写时序图

答案:

解析*:

6、跨时钟处理中,以下哪些结构可能存在风险( )

A.

B.

C.

D.

答案:

解析*:

7、下列哪些语句能产生希望的时钟信号( )

A. initial clk = 0; always @(clk) begin #5 clk = ~clk; end

B. initial clk = 0; always @(clk) begin clk = #5 ~clk; end

C. initial clk = 0; always @(clk) begin #5 ck <= ~clk; end

D. initial begin clk<=0, forever clk <= #5 ~clk; end

E. initial begin clk<=0; forever #5 clk = ~clk; end

答案:A B

解析*:

正确答案是 A 和 B。

A. initial clk = 0; always @(clk) begin #5 clk = ~clk; end:此语句使用 always 块和非阻塞赋值语句“&lt;=”来产生时钟信号。其中,使用“@(clk)”声明了 always 块的敏感信号,表示只有在 clk 发生变化时才执行 always 块内的代码。在 always 块内,使用非阻塞赋值语句“&lt;=”将反转后的 clk 值赋给 clk 变量。因此,这条语句可以用来生成希望的时钟信号。

B.initial clk = 0; always @(clk) begin clk = #5 ~clk; end:这条语句类似于 A,也使用了 always 块和敏感信号“@(clk)”。但在 always 块内,使用了“#5”来延迟 5 个时间单位,然后再将反转后的 clk 值赋给 clk 变量。因此,这条语句也可以用来生成希望的时钟信号。

C. initial clk = 0; always @(clk) begin #5 ck &lt;= ~clk; end:此语句使用了“&lt;=”来进行赋值操作,使用了 ck 变量来存储时钟信号。因此,这条语句不适合用来生成时钟信号。

D. initial begin clk&lt;=0, forever clk &lt;= #5 ~clk; end:此语句使用了“&lt;=”来进行赋值操作,但是又使用了逗号运算符来同时赋值。因此,这条语句不适合用来生成时钟信号。

E. initial begin clk&lt;=0; forever #5 clk = ~clk; end:虽然这条语句使用了 forever 循环和延迟语句“#5”,但是使用了阻塞赋值语句“=”,而且也没有使用敏感信号,在 Verilog 中不适合用来生成时钟信号。

因此,本题的正确答案是 A 和 B。

8、在system verilog中,function跟task的区别是什么?( )

A.Task可以包含延时,function不能

B.只有task有返回值,function没有返回值

C.只有Task能调用Task,function不能调用task

D.只有function能调用 function, task不能调用function

答案:A B D

解析*:

在SystemVerilog中,Function和Task的区别在于:

  1. Function可以包含延时,Task不能。
  2. Function和Task都可以有返回值,区别在于返回值类型不同。
  3. Function可以调用Function和Task,Task可以调用Function但不能调用Task。

因此,正确答案是A、B、D。

9、下面哪些代码输出的结果是 1 2 3( )

A.

B.

C.

D.

答案:

解析*:

10、CPU Core设计中的寄存器重命名技术有助于消除下面哪类数据相关( )。

A. Read After Read

B. Write After Read

C. Write After Write

D. Read After Write

答案:D

解析*:

CPU Core 中的寄存器重命名技术有助于消除 D. Read After Write 这类数据相关。

当一个指令要使用上一条指令的结果时,就会出现 Read After Write 的数据相关。在这种情况下,如果上一条指令的结果还没有写入目标寄存器,那么下一条指令就无法正常运行,需要等待上一条指令的结果写入目标寄存器后才能执行,造成了性能瓶颈。

寄存器重命名技术通过在指令执行过程中将实际使用的寄存器名称与程序中定义的寄存器名称解耦,实现了多个指令在不同的寄存器上执行的效果,从而避免了 Read After Write 的数据相关。具体来说,当一条指令读取一个寄存器时,重命名技术可以将这个寄存器映射为一个新的未使用过的名称,使得下一条指令可以使用相同的寄存器名而不会发生数据相关,提高了指令执行的效率。

因此,本题的答案是 D。

三、填空题 4分

1、将二进制数10010101转换成格雷码结果是 ( ),格雷码表示的10010101转成二进制的结果是 ( )

答案及解析*:

将二进制数 10010101 转换成格雷码:首位不变,从第二位开始,每一位与前一位异或(即和前一位求差),得到的新数即为其对应的格雷码。

10010101 -&gt; 11000100

将格雷码 10010101 转换成二进制:首位不变,从第二位开始,每一位与前一位异或(即和前一位求和),得到的新数即为其对应的二进制数。

10010101 -&gt; 11011100

因此,10010101 转换成格雷码的结果是 11000100,转换成二进制的结果是 11011100。

2、如下图所示,在不考虑clock lateny的情况下,若D1的数据正确采样后从CK端到达Q端的延时为To,D1输出端到D2输入端的组合逻捐延时和布线延时为TDelay,D2发器的建立时间为Tsu,发器的保持时间为Th,cka的时钟周期为Tck,uncertaintv为Tunc,那么,这条timing path的:

setup time应满足( )

hold time应满足( )

答案及解析*:

3、设系统的L2Cache为一个8MB大小的Cache,采用16路组相连,Cacheline大小为64B,若一个数据的地址为0Xb98740,则该数据在cache中存储的tag内容为 ( )。

答案及解析*:

首先需要确定该数据在 Cache 中的哪个组(group)。由于 Cache 是 16 路组相连的,因此可以使用下面的公式将该地址映射到相应的组:

group = (address / line_size) % num_groups

其中,address 是数据的地址(0xb98740),line_size 是 Cache line 的大小(64 B),num_groups 是 Cache 中组的数量(计算方法见下文)。带入数据得到:

group = (0xb98740 / 64) % num_groups = 7171 % num_groups

接下来需要确定该数据在 Cache 中的哪个 Cache line。同样由于 Cache 是 16 路组相连且 Cache line 大小为 64 B,因此可以使用下面的公式将该地址映射到相应的 Cache line:

line = (address / line_size) % lines_per_group

其中,address 是数据的地址,line_size 是 Cache line 的大小,lines_per_group 是每个组中 Cache line 的数量,计算方法为:

lines_per_group = (cache_size / line_size) / num_groups

带入数据得到:

lines_per_group = (8 MB / 64 B) / 16 = 2048

line = (0xb98740 / 64) % 2048 = 84

最后需要确定在该组中的哪一个路(way)。由于 Cache 是 16 路组相连的,因此一个组中的 Cache line 分别对应了 16 个路。因此,该数据在 Cache 中存储的 Tag 内容可以用下面的公式确定:

tag = address / (line_size * num_groups * ways)

其中,address 是数据的地址,line_size 是 Cache line 的大小,num_groups 是组的数量,ways 是每组中的路数。带入数据得到:

tag = 0xb98740 / (64 B * 16 * num_groups) = 1498 / num_groups

由于组的数量是 7172(每组 16 路),因此:

tag = 1498 / 7172 = 0.208773

因此,该数据在 Cache 中存储的 Tag 内容为 0.208773。

  1. 下列哪些代码行的写法不利于综合(注意不是代码错误) ( )。

答案及解析*:

4、一个线性反馈移位寄存器(斐波那契LFSR)的特征多项式为F(x)=x3+x2+1,初始状态为全1s输出的m-序列为( )

答案及解析*:

一个线性反馈移位寄存器(LFSR)是一种内部仅包含移位寄存器和异或门的电路,可以产生伪随机数序列。斐波那契LFSR是一种特殊的LFSR,其反馈电路采用斐波那契数列的系数,可以产生长周期的序列。该LFSR的特征多项式为 F(x) = x^3 + x^2 + 1。

该LFSR的初始状态为全 1,那么按照 LFSR 的工作原理,输出的位序列可以通过不断地将输出寄存器向左移动一位,同时将最右边的位替换为反馈电路的值(即前三位的异或和)来递推计算。

按照这个方法,可以得到前 7 个输出:

可以看到,该序列共有 8 个值,对应于 LFSR 的状态数目。这里的输出序列称为 m-序列(maximum length sequence),因为它的长度达到了 2^3-1=7(即反馈电路的位数减去1)。

因此,这个 LFSR 输出的 m-序列为 1111010。

整理不易,如果觉得对你有帮助的话,可以收藏下来慢慢刷!

回顾往期精彩笔试真题:

数字IC前端笔试常见大题整理(简答+手撕)

笔试题-2023-禾赛-FPGA(附答案及解析)

笔试题-2023-复睿微-数字芯片设计【附解析】

笔试题-2023-锐捷-FPGA(附答案及解析)

笔试题-2023-星宸-数字IC设计(附答案及解析)

笔试题2023-燧原-数字IC设计(附答案及解析)收藏不易,如果觉得对你有帮助的话,可以收藏下来慢慢刷!

#笔试##数字IC##春招你拿到offer了吗##海光#
全部评论
第五题中constraint c {s -> d == 4'h0;},限制了s为真时,d=0,那应该存在两种情况。第一种s为真,d一定为0,这里概率是0.5。第二种s为假,d正好一开始随机到0,这里概率是1/16。两种情况概率相加是0.5625。但是答案里没有这个,所以想请教一下是我哪里没理解对吗?
2 回复 分享
发布于 2023-06-10 17:36 广东
海光的笔试题还是挺有挑战性的!
1 回复 分享
发布于 2023-05-24 20:21 天津
一堆错的
1 回复 分享
发布于 2023-08-17 19:11 浙江
不知是哪位老哥笔的,全是错的,心疼😂
1 回复 分享
发布于 2023-09-06 15:31 北京
全是错的,真***,,
点赞 回复 分享
发布于 2023-08-26 04:05 四川
13题A和B都是同一个指针,应该是完全一样的吧?
点赞 回复 分享
发布于 01-24 10:30 美国
多选第三题,chatGPT说:D. 微码Cache(Microcode Cache):微码缓存存储了复杂指令的微码序列,从而加速这些指令的执行。这可以减少将高级指令翻译成微操作(uOps)所需的时间。对于依赖于微码的CPU设计,微码缓存可以提高前端的性能
点赞 回复 分享
发布于 01-24 10:43 美国
多选第8题完全错了呀
点赞 回复 分享
发布于 01-24 11:02 美国
能把题全做错也是一种能力,没绷住
点赞 回复 分享
发布于 08-08 11:56 浙江
天才,tag能是小数
点赞 回复 分享
发布于 09-14 14:54 上海

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
评论
18
155
分享
牛客网
牛客企业服务