笔试题-2023-思远半导体-数字IC设计【附答案及解析】

一、填空题 10分

1、一个四位十六个状态的格霉码计数器,当前值为0111,经过50个时钟脉冲作用之后的值为( )

答案:1110

解析*:

一个四位十六个状态的格雷码计数器,当前值为0111,经过50个时钟脉冲作用后的计数值可以通过模拟计算方法或者手工推导方式来得到。

模拟计算方法是通过格雷码的计数规律及数电时序实现的。按照格雷码的计数规律,当前值与下一个数值(十进制)之间的差值等于1。因此,当前值为0111,下一个值为1011,再下一个值为1001,以此类推,每加1个时钟脉冲,格雷码计数器的值就会加1。经过50个时钟脉冲作用后,当前值为1110

2、请问Z的值是9’b( )(二进制表示)

wire [7:θ] X = 2;

wire signed [7:θ] Y = 36;

wire [8:θ] Z = (X<<1)-(Y>>2);

答案:011001100

解析*:

根据给出的 Verilog 代码:

可以得知,wire 类型的变量 X 的值为 2,是一个 8 位宽的无符号二进制数;wire signed 类型的变量 Y 的值为 36,是一个 8 位宽的有符号二进制数。

在这个代码块中,计算了一个 wire 类型的变量 Z,其计算公式为:

其中,<< 表示逻辑左移位运算,将 X 的二进制值向左偏移一位,等价于将 X 乘以 2;>> 表示算数右移位运算,将 Y 的二进制值向右偏移两位,等价于将 Y 除以 4。最后的计算结果是一个 9 位宽的无符号二进制数。

根据此计算过程,我们可以按照以下步骤进行计算:

  1. 将 X 的二进制值 10 向左偏移一位,得到二进制值 100。
  2. 将 Y 的二进制值 100100 右移两位,得到有符号二进制值 1000。
  3. 用第一步的结果减去第二步的结果,得到二进制值 1100。
  4. 由于 Z 是一个 9 位宽的无符号二进制数,因此最高位应为 0。在这里,我们可以将计算结果向左偏移一位,并在最低位填充一个 0,以得到符合要求的 9 位无符号二进制数,即:011001100。

二、不定项选择题 10分

1、对解决亚稳志问题有效果的方法是( )

A.改善时钟质量,用边沿变化快速的时钟信号

B.提高钟频率

C.引入同步机制,如加两级触发器

D.工艺从180mm升级到28m

E.用反应更快速的DFF

F.这些方法都无效

答案:C

解析*:

C. 引入同步机制,如加两级触发器

解决亚稳态问题需要引入同步机制,如通过加入两级触发器等方式,确保时序逻辑的稳定性和可靠性。这是因为在数字电路中,某个时刻一个信号的状态可能会因为信号传输延迟或者噪声等原因迟迟不能到达目的地,从而导致逻辑电路的输出变成了不稳定的噪声信号,这种现象称为亚稳态。

改善时钟质量和提高时钟频率并不能直接解决亚稳态问题,反而可能会加剧问题。因为时钟的边沿变化快速和时钟频率的提高可能会导致信号传输时间更短,从而增加信号传输中发生亚稳态的可能性。同样的,使用反应更快速的DFF仍然无法解决由于信号传输延迟等因素导致的亚稳态问题。

工艺的升级也不能直接解决亚稳态问题,但是通过工艺升级可以改善器件的质量,从而降低系统中信号传输产生亚稳态的可能性。

因此,仅有 C 选项中的方法是有效解决亚稳态问题的方法。

2、请分析以下代码,说法正确的有:( )

A.Y1的位宽不足

B.Y2的位宽不足

C.Y1和Y2实现了一样的功能

D.Y1面积较大

E.A的位宽不足

F.Y2面积较大

G.都不对

答案:C

解析*:

C. Y1和Y2实现了一样的功能

根据代码,Y1 = A * B + A * C;Y2 = A * (B + C)。它们的实际功能是相同的,即对 A、B 和 C 进行乘法和加法运算,得到一个 16 位的结果。其中,Y1 的计算方法是先对 A 和 B 相乘,然后对 A 和 C 相乘,最后将它们相加。Y2 的计算方法是先将 B 和 C 相加,然后再将 A 与它们相乘。虽然它们的计算顺序有所不同,但是它们所得到的结果是一样的。

因此,说法 C 正确。

3、请分析star的行为(star与din的逻辑关系),说法正确的是:( )

assign start = (din & ~din d1);

always @(posedge clk or negedge rst n)

id(~rst_n)

din d1 <= θ;

else

din d1 <= din;

A.start恒为0

B.start是一个高电平有效的脉冲c start是一个低电平有效的脉冲

D.start表示din的上升沿

E.start表示din的下降沿

F.din d1比din延迟一周期

G.start的变化和din无关

H.都不对

A.start恒为0

B.start是一个高电平有效的脉冲c start是一个低电平有效的脉冲

D.start表示din的上升沿

E.start表示din的下降沿

F.din d1比din延迟一周期

G.start的变化和din无关

H.都不对

答案:D

解析*:根据 verilog 代码,Star 的行为是检测 Din 的上升沿并产生一个短脉冲(1 个时钟周期)。所以正确的答案是 D. Start 表示 Din 的上升沿。而其他选项都是错误的。

其他选项的错误在于对 Star 的行为描述不准确。

B. “start 是一个高电平有效的脉冲” 这个描述不准确。Star 产生的是一个短脉冲,持续一个时钟周期。如果 Din 只在一个时钟周期内上升,那么这个脉冲持续一整个时钟周期,也就是在一整个时钟周期内是高电平有效的,但是这并不等价于 “start 是一个高电平有效的脉冲”。所以 B 选项不正确。

C. “start 是一个低电平有效的脉冲” 这个描述也不准确。Start 产生的是一个短脉冲,持续一个时钟周期,因此 Start 的电平有效性和持续时间都只有一个时钟周期。也就是说,在这个时钟周期内,Start 或许低电平,或许高电平,具体取决于 Din 的电平状态。因此 C 选项不正确。

E. “start 表示 Din 的下降沿” 这个描述也不准确。Start 表示的是 Din 的上升沿,不是下降沿。

F. “din d1 比 din 延迟一周期” 这个描述是有歧义的。在 verilog 代码中,din d1 是一个寄存器,通过 always 语句进行更新。在一个 posedge clk 的时钟边沿,将当前的 Din 的值保存到寄存器 din d1 中,由此延迟了一整个时钟周期。但是如果我们只关注 combinational logic,din d1 和 Din 之间确实是没有延迟的,din d1 更新时使用的依然是当时刻的 Din 的值。

G. “start 的变化和 din 无关” 这个描述也是不准确的。Start 的产生和 Din 的上升沿的检测是紧密相关的,即只有在检测到 Din 上升沿时,才会产生一个短脉冲。因此 Start 的变化和 Din 是相关的。

三、单选题 10分

1、将16进制数0xE3D1转成4进制,结果是( )

A.1010010111

B.33200101

C.2030123301

D.1D3E

E.2022121201

F.21213213

G.161721

H.32033101

I.都不对

J.43122311

答案:H

解析*:

将16进制数0xE3D1转成4进制需要先将其转换成二进制,然后再以4个为一组进行分割转换。

首先,将16进制数0xE3D1转换成二进制数,得到:

然后,将二进制数以4个一组进行分割,得到:

再将每组二进制数转换为4进制数,32033101:

因此,选项H 32033101 是正确的答案。

2、将999个"1"异或,结果为( )

A.999

B.-1

C.1000

D.1998

E.1

F.666

G.2

H.都不对

I.0

答案:I

解析*:

将 999 个 "1" 进行异或运算,根据异或运算的定义,相同的数异或结果为 0,不同的数异或结果为 1。因此,999 个 "1" 异或的结果等于这些 "1" 中有奇数个的位上是 1,有偶数个的位上是 0。

在 999 这个数的二进制表示中,有 10 个二进制位是 1。这 10 个二进制位上分别有多少个 "1",决定了它们的异或结果。当这些位上的 "1" 个数为偶数时,异或结果为 0;当这些位上的 "1" 个数为奇数时,异或结果为 1。因为这些位上的 "1" 个数可以是 0、1、2、3、4、5、6、7、8 或 9,因此这些位的异或结果只能是 0 或 1。

而对于每一个二进制位,它的 "1" 个数都是偶数个或奇数个,没有其他的可能性。因为 999 除以 2 的商是 499,即这些位上的 "1" 个数五五分布,因此这些位上的异或结果将是 0。因此,999 个 "1" 异或的结果是 0。

因此,选项 I 0 是正确的答案。

四、问题题 10分

1、AB/C均为1bit信号,请画出电路图并分析电路行为:y=(C&A]I ~C&B)

答案及解析*:

以下是 AB/C 信号的逻辑电路图:

根据逻辑表达式 y = (C & A) | (~C & B) 可以画出电路图。其中,A、B 和 C 分别通过与门和非门输入到 或门,得到 y。

具体而言,C 和 A 经过一个与门,输出 C & A;B 经过一个非门,输出 ~B。对 ~B 和 C 分别进行与操作,得到 ~C & B;再将 C & A 和 ~C & B 分别输入到 或门中,得到 y。

分析电路行为:

  • 当 C=0 时,与门的输出为 0,非门的输出为 1,因此 ~C & B 的值为 1,且 (C & A) 的值为 0,所以最终的输出 y 为 1。
  • 当 C=1 时,与门的输出取决于 A 的值,如果 A=0,则与门的输出为 0,y 的值为 1;如果 A=1,则与门的输出为 1,y 的值取决于 B 的值,如果 B=0,则 y 的值为 0;如果 B=1,则 y 的值为 1。

因此,当 C=0 或 (C=1 且 A=0) 时,y 的值为 1;当 C=1 且 A=1 且 B=1 时,y 的值为 1;在其他情况下,y 的值为 0。

2、请使用时钟clk=1MHz生成个40us的高电平信号Y。

答案及解析*:

要生成一个 40us 的高电平信号 Y,可以使用 Verilog 实现一个基于时钟的计数器,当计数器的值等于 40us 时,输出一个高电平信号 Y。在计数器的周期性计数过程中,可以根据时钟波形确定计数器何时开始计数,何时停止计数。

以下是一个实现上述功能的 Verilog 代码:

该 Verilog 模块有一个时钟输入 clk 和一个信号输出 Y,其中 Y 是一个单周期的高电平信号,其周期为 40us。

在其它模块中,在需要使用 40us 高电平信号时,可以根据需要直接调用 gen_pulse 模块即可。

注意,在实际应用中,时钟的频率和所需的高电平信号周期需要根据具体的场景进行选择和调整。

3、din为1bit的数据输入信号,使用verilog设计一个电路,当检测到 1101 0101 时让 sync ok=1.

答案及解析*:

以下是一个实现需求的 Verilog 代码:

该 Verilog 模块有一个时钟输入 clk,一个 1bit 数据输入 din,以及一个同步信号输出 sync_ok。

该模块使用一个 8 位移位寄存器来缓存数据,并且在每个时钟上升沿的时候根据当前数据情况更新移位寄存器中的值。同时,该模块提供了一个以全 1 同步码为目标的同步判断算法,判断移位寄存器中的值是否等于同步码,如果相等则输出同步信号 sync_ok 为高电平,表示检测到同步时刻;否则输出同步信号为低电平。

可以根据实际的场景进行调整和完善。

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

回顾往期精彩笔试真题:

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

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

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

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

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

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

#笔试##数字IC##芯片##春招你拿到offer了吗##你为什么选择硬件行业#
全部评论
第2题跑仿真结果是 9'b1_1111_1011
1 回复 分享
发布于 2023-09-22 09:52 江苏
第一题就不对,0111是格雷码计数器的值不能直接加50要把,0111转成二进制5再加50事实上是55,计数器50个上升沿后对应数值为7,格雷码为0100
3 回复 分享
发布于 2023-06-16 16:01 上海
二、3D 三1.H 2E 四2、使用时钟clk=1MHz生成个40us的高电平信号Y,1MHz是1us,40us的计数值不应该是40吗,请教大佬
1 回复 分享
发布于 2023-06-08 17:25 陕西
m
点赞 回复 分享
发布于 2023-07-15 09:14 四川
第二道答题不定项选择中的第二小题,A和B都是8位,相乘的话应该需要16的位宽,两个16位的相加不应该最后的位宽需要17位吗?
点赞 回复 分享
发布于 2023-06-10 14:53 广东
这是神马神仙帖子,收藏学习了
点赞 回复 分享
发布于 2023-05-26 10:39 江苏
好久没看这么详细的解题了
点赞 回复 分享
发布于 2023-05-26 10:24 湖北

相关推荐

评论
2
36
分享

创作者周榜

更多
牛客网
牛客企业服务