数字前端 / 数字IC设计 笔试真题与解析

适用方向:数字IC设计 / 数字前端 / FPGA开发(27届校招)|题目来源:华为/海思、联发科、大疆、乐鑫、海康、兆易、中兴、紫光展锐、寒武纪、泰凌微、芯动、芯海、瑞芯微、恒玄、平头哥、全志、星宸等网上公开笔试题与解析帖

共 132 道题 9 大章节
使用说明:本页为单文件离线网页,无需联网、无需任何依赖,浏览器直接打开即可。 选择题(含判断题)点击选项即可即时判分并展开解析;简答题点「查看答案」展开。左侧导航可任意切换章节。

一、Verilog 语法与手撕代码

1.1 阻塞赋值 = 与非阻塞赋值 <=(必考)

Q1简答/推断必考

in、q1、q2、q3 初值分别为 0、1、2、3。左侧用阻塞赋值、右侧用非阻塞赋值,各经过 1 个时钟周期后,问左右两侧 q3 的值分别变成多少?

always @(posedge clk) begin q1 = in; q2 = q1; q3 = q2; end   // 阻塞
always @(posedge clk) begin q1 <= in; q2 <= q1; q3 <= q2; end // 非阻塞

考点:阻塞/非阻塞执行语义

答案
左 q3=0;右 q3=2(即 (0, 2))
解析
阻塞赋值顺序执行、即时更新,q1=0 立刻生效,q2=q1=0,q3=q2=0;非阻塞赋值在 always 块结束时统一用旧值更新,q3 取的是旧 q2=2,与本次 in 无关。
Q2单选必考

下列关于阻塞赋值(=)和非阻塞赋值(<=)说法正确的是?

A时序逻辑中必须使用阻塞赋值
B组合逻辑中推荐使用非阻塞赋值
C非阻塞赋值并行执行、阻塞赋值顺序执行
D两者仿真与综合行为完全一致
答案
C
解析
规范约定——组合逻辑用 =(顺序执行)、时序逻辑用 <=(并行执行)。A/B 相反,D 明显错误(两者行为差异极大)。
Q3简答代码判断

以下两段 always 块有什么问题?

always @(posedge clk or posedge reset) if (reset) X1=0; else X1=X2;
always @(posedge clk or posedge reset) if (reset) X2=1; else X2=X1;

考点:竞争冒险 / 阻塞赋值混用后果

答案
存在 race condition
解析
仿真器不保证两个 always 块的执行顺序,X1=X2 与 X2=X1 交叉引用导致结果不确定(不同仿真器结果可能不同)。应改用非阻塞赋值。
Q4填空

initial begin #1; A<=5; B=A; ... end 后两次 $display 打印 A、B 各是什么?

答案
第一次打印 A=0,B=0;第二次 A=5,B=5
解析
非阻塞赋值要等本仿真时刻其他语句执行完才更新;B=A 用的是 A 的旧值(0)。
Q5填空乐鑫

a=0; a<=1; $display("%0b",a); 输出

答案
0
解析
非阻塞赋值在本时刻不立即生效,display 读到的是旧值 0。
Q6填空乐鑫

a=4'b10x1; b=4'b10x1;a==ba===b 各为?

答案
a==b 为 x,a===b 为 1
解析
== 遇 x/z 得 x(不确定);=== 精确比较,x/z 也参与逐位比较。

1.2 Latch 的产生与避免(高频)

Q7多选

以下哪些代码会被综合为 Latch?

Aalways @(*) if (en) q = data;(if 缺 else)
Bif (en) q1=data1; else q2=data2;(每个分支下赋值不完整)
Ccase 分支不全且无 default
Dalways@(rst) if(!rst) outdata=0; else outdata=rd;(敏感列表漏 rd)
答案
ABCD
解析
组合逻辑中 if 缺 else、case 无 default、分支下赋值不全、敏感列表不全都会推断出 Latch(组合逻辑需要保持输出)。注意:时序逻辑(always@(posedge clk))中 if-else 不完整不会产生 Latch,因为触发器本身有存储功能。
Q8简答

Latch 的避免方法

答案
① if 必须配 else、case 必须配 default;② 组合逻辑 always 开头先赋默认值;③ 每个分支下所有变量都要赋值;④ always@(*) 写全敏感列表;⑤ 避免自赋值/组合环路。

1.3 状态机(一段式/二段式/三段式,必背)

Q9简答原为选择题

三种状态机写法描述(选择)。

原题为选择题,但各选项未在来源中记录,按答案口径呈现。
答案
选「三段式寄存器输出,不产生毛刺,有利于时序约束」
解析
一段式状态转移与输出混写、不易维护;二段式组合逻辑输出易产生毛刺/竞争;三段式第三段为同步时序寄存器输出,输出无毛刺、利于时序收敛。
Q10手撕

用三段式 FSM 检测序列 1101(串行输入),输出 data_valid。

答案 / 代码结构
三段——① 同步时序状态切换 cur<=next;② 组合逻辑求 next_state(考虑序列叠加,如 S2 收到 0 进 S3、收到 1 保持 S2);③ 同步时序寄存器输出,next_state==S4 时 data_valid=1,检测到后下一拍输出一拍高电平。
Q11简答原为选择题

状态机编码方式(选择)。

原题为选择题,但各选项未在来源中记录。
答案
状态少(4~24 个)用独热码(One-Hot,比较 1bit、省组合逻辑,适合 FPGA);状态多用格雷码(省触发器);二进制码位宽小但组合逻辑多。
Q12简答

Moore 型 vs Mealy 型

答案
Moore 输出只取决于当前状态;Mealy 输出还与输入有关。实现相同功能 Mealy 一般比 Moore 省一个状态、输出超前一个时钟周期。
Q13手撕联发科

序列检测 10010(含重叠)

答案
画状态转移框图 + 三段式代码,注意重叠情况(如 10010010 中有两处 10010),状态机需支持部分匹配回退。
Q14手撕兆易创新

输入 a 为 1MHz 无限序列,用 Verilog 检查并计数 "1110110" 出现次数。

考点:序列检测状态机 + 计数器(注意重叠与首尾复用)。

答案
序列检测状态机 + 计数器,注意重叠与首尾复用。
Q15手撕平头哥 · 终面

每 clk 输入 1bit data_in,序列左移组成 data_temp,data_temp 可被 3 整除时 data_out=1。

答案
不能用移位寄存器(数据可能无限),只能用状态机:1 个初始态 + 3 个余数态(余0/1/2),根据「当前余数×2+输入 bit」跳转并判断输出。

1.4 边沿检测(必考手撕)

Q16手撕

检测慢变 1bit 信号 a 的上升沿/下降沿,输出单脉冲。

答案
// 打一拍后比较
assign rise = ~a_d1 & a;   // 上升沿
assign down = a_d1 & ~a;   // 下降沿
assign both = a ^ a_d1;    // 双边沿
解析
不能把被测信号放 always 敏感列表当时钟(不可综合)。异步信号建议先三级寄存器降亚稳态,再取 pulse_r2 & ~pulse_r3 判边沿。
Q17简答原为选择题

边沿检测原理(选择)。

原题为选择题,但各选项未在来源中记录。
答案
通用上下边沿检测用异或找变化;只写 a & ~b 只能检测特定边沿,不能通用。

1.5 格雷码与二进制互转

Q18计算

十进制 46 转格雷码

答案
46=101110(B),gray = bin ^ (bin>>1) = 101110 ^ 010111 = 111001
Q19计算思远半导体 2023

4 位格雷码计数器当前值 0111,经 50 个脉冲后值?

答案
0111(Gray)=0101(B)=5,+50→55 mod 16=7=0111(B)→转格雷 1110
解析
格雷码计数器实际是二进制计数+转码。
Q20多选

格雷码特性

A反射特性
B是二进制码
C减少干扰
D相邻码组仅 1 位不同
答案
ACD
解析
A 反射特性 ✅、B 是二进制码 ❌、C 减少干扰 ✅、D 相邻码组仅 1 位不同 ✅。
Q21填空乐鑫

格雷码转二进制 Bin[0] 表达式

答案
Bin[0] = ^Gray[N-1:0](所有位异或)
Q22手撕

格雷码 ↔ 二进制转换 Verilog

答案
assign gray = bin ^ (bin>>1);            // 二进制→格雷
// 格雷→二进制:b[n]=g[n]; b[i]=g[i]^b[i+1](或 b = 左移异或迭代)
注意
该生成法只适用 2^N 深度。
Q23简答新华三

clk0 域 4bit 计数器步进为 2(0→2→4→6 循环)传至 clk1 域,为什么有问题?

答案
格雷码只保证相邻状态 1 位变化;步进 2 时多位同时变化,失去格雷码跨时钟域安全优势。

1.6 分频器(笔试高频)

Q24手撕牛客 VL37

偶数分频

答案
计数器计数到 N/2-1 时输出翻转,可参数化 parameter N
Q25手撕牛客 VL40/VL42 · 高频

奇数分频 50% 占空比

答案
两个计数器——一个在 clk 上升沿计数、一个在下降沿计数(0~N-1),两路翻转信号做「或」(或「与」)得到 50% 占空比。不要求占空比时单计数器在 count==0/1 翻转即可(3分频)。
Q26手撕牛客 VL41

小数分频 8.7

答案
双模前置法:87 个输入周期内产生 10 个输出周期。M.N 分频 = a 次 M 分频 + b 次 M+1 分频,通分 M+b/(a+b)。8.7=87/10 → 前 24 周期 8 分频 + 后 63 周期 9 分频。输出必须寄存器打拍,禁止组合逻辑产生时钟;M/M+1 尽量均匀交替以减小抖动。
Q27手撕

任意切换 1~8 分频(占空比 50%)

答案
输入 div[3:0] 指定系数;偶分频计数翻转;奇分频「计数→下降沿采样→相与/相或」。1 分频直通,2 分频取反。
Q28手撕恒玄科技

2.5 分频手撕

答案
用上升沿触发与下降沿触发的寄存器输出相与(或)实现非整数分频(思路同奇数分频的「上升沿+下降沿」结合)。

1.7 其他手撕 / 语法题

Q29简答

initial 能否综合

答案
initial 不可综合(仿真专用);综合后寄存器初值不确定,必须用复位信号赋初值,不能靠 initial。
Q30简答高频

task 与 function 区别

答案
function 有返回值、至少一个输入、不能含 #/@/wait 等耗时语句、不能调用 task;task 无返回值(靠 output/inout/ref 带出)、可含耗时语句、可调用 task 和 function;两者都可综合(内部须为组合逻辑);未标明方向的参数默认 input(陷阱)。
Q31计算

产生序列 11010111,至少需几级触发器?

答案
3 级(序列长度 8=2³)
解析
扩展:移位寄存器型序列 1101010 需 6 级(状态不重复)。
Q32计算

8 位减法计数器 268 个脉冲后状态

答案
11110100
解析
满 2⁸=256 回到 00000000,剩 12 次;减 1 得 11111111,再减 11 得 11110100。
Q33简答

扭环形/环形/LFSR 分别多少种有效状态?

答案
扭环(Johnson)2n=16;环形 n=8;LFSR 最长序列 2ⁿ−1=255
Q34手撕海康威视

统计多 bit 数中有多少个 1,单周期输出,组合逻辑延时尽量小。

答案
for 循环累加 / 树状加法器 / 移位相加;关键是位宽可变时的组合逻辑实现。
Q35手撕瑞芯微

两级流水线 32 位加法器

答案
把 32bit 加法拆成两级(低位/高位),中间打一拍,把 32bit 进位链关键路径切成两半,提升时钟频率。
Q36计算大疆

12.918 无损定点化

答案
整数 12 需 4bit;小数 0.918 用 8bit 量化误差 0.008/2^8≈0.00003125 < 精度一半,最小 12bit(4+8)。

二、数字电路基础

Q37单选牛客

哪种手段无法消除竞争冒险?

A加滤波电容
B增加冗余项
C增加选通信号
D降低时钟频率
答案
d(降低时钟频率)
解析
降频只是降低被采到的概率,毛刺仍会传递;滤波电容、冗余项、选通信号才是根除手段。
Q38判断

组合逻辑输出只是当前输入的函数,无记忆功能。

正确
错误
答案
正确
Q39判断

a=4'b1001,abs(a)=4'b0110?

正确
错误
答案
错误。4'b1001 有符号 = −7,abs = 7 = 4'b0111;且 1000(−8)无对应正数。
Q40计算联发科

逻辑化简 Y = B + (~A)(~C) + (~B)(~C)

答案
Y = B + C′(卡诺图合并)
Q41计算小米

化简 Y = A(~B) + B + (~A)B

答案
Y = A + B
Q42简答华为

位拼接与符号扩展

要点
位拼接 {a,b}=4'b1001;有符号扩展补符号位(次高位为符号位扩展)。

三、时序分析 STA

3.1 建立/保持时间定义、公式与时序余量(核心壁垒)

Q43计算迈瑞

Tsu=3.2ns、Th=0.5ns、Tco=0.3ns(max/min)、Tlogic=1ns(max)/0.2ns(min)、Tline=0.4ns、T=5ns(时钟),时钟偏斜 Tpd=0.5ns。求 setup/hold 余量。

答案
Setup Slack = T+Tpd−Tsu−(Tco+Tlogic+Tline) = 5+0.5−3.2−1.7 = 0.6ns
Hold Slack = (Tco_min+Tlogic_min+Tline)−Th−Tpd = 0ns
解析
核心口诀——建立看最大延迟、保持看最小延迟
Q44简答牛客

T1 触发器时钟端到 Q、T2/T4 连线延时、T3 组合逻辑、T5 时钟网络延时、Tcycle 周期、Tsetup/Thold。保证正确采样的条件?

答案
建立约束 T1+T2+T3+T4 < Tcycle − Tsetup + T5
保持约束 T1+T2+T3+T4 > Thold + T5
解析
易错点——建立/保持约束都必须计入时钟网络延时 T5。
Q45计算FPGA 笔试

T=10ns;Clk in→Reg1 时延 3ns;Clk in→Reg2 时延 2ns;Reg1 Q→Reg2 D 时延 3ns;Th=0.5ns;Tco=1ns;Tsu=0.5ns。

答案
Hold Slack = Tclk1+Tco+Tdata−Tclk2−Th = 3+1+3−2−0.5 = 4.5ns
Setup Slack = 10+2−0.5−(3+1+3) = 4.5ns
Fmax = 1/(10−4.5) ≈ 181.8MHz
Q46计算2025 电子工程师

T=10ns、t_co=0.8ns、3 级与非门每级 1.2ns、t_setup=1.5ns、t_hold=0.6ns;若时钟抖动使周期缩至 9ns,建立余量如何变化。

答案
数据路径 = 0.8+3×1.2 = 4.4ns;建立检查 4.4+1.5=5.9 ≤ 10(满足);保持 4.4 ≥ 0.6(满足)。周期 9ns 后 Setup Slack = T − Tdata − Tsu 重新计算,余量减小 1ns。
Q47简答芯海科技

Tsu/Th 定义 + 与时钟频率关系

答案
Tsu 为时钟有效沿前数据必须稳定的最短时间;Th 为有效沿后数据必须保持的最短时间。二者是触发器固有属性,只与工艺/PVT 有关,与时钟频率无关
Q48计算华为海思

Tsu=2ns、Tcq=3ns、Thd=1ns,求最高频率。

答案
Tmin = Tcq + Tsu = 5ns → 200MHz
解析
Fmax = 1/(Tco + Tcomb_max + Tsu − Tskew),本题无组合逻辑与 skew。

3.2 时序违例:成因与修复

Q49多选大疆 2020

critical path setup 不满足,不增加 pipeline 如何解决?

A用更先进工艺库
B插入寄存器
C搬移组合逻辑到前级 path
D降低时钟频率
答案
ACD
解析
B(插入寄存器)属于增加流水线,被题干排除。
Q50单选华为海思/大厂

setup 不满足,不可以采用哪种措施?

A减小信号延迟
BPipeline
C降低时钟频率
D增加时钟频率
答案
d(增加时钟频率)
解析
setup 违例本质是 Tdata+Tsu > Tclk,增加频率减小 Tclk,进一步恶化。
Q51判断海思

保持时间不满足能否靠降频解决?

能,降频即可
不能
答案
错误。
解析
Hold 约束 Th ≤ Tco+Tcomb−Tskew 与时钟周期无关;修 hold 需在数据路径插入 Buffer/延迟单元,降频只能修 setup。
Q52简答

为什么高速电路容易发生 Hold 违例 + 修复方法

答案
① Hold 约束与时钟频率无关;② 高速设计为满足 setup 被迫压缩组合逻辑(减小 Tcomb),使数据在捕获沿后变化过早 → hold 违例;③ setup 与 hold 相互制约。修复:setup 用缩短数据路径(流水线/retiming/LVT)、加捕获时钟路径延迟、降频;hold 用插 Buffer/延迟单元增大数据路径、时钟树平衡减小 skew。工程上优先保 hold(setup 还可降频,hold 不行)。
Q53计算寒武纪

T=10ns、Tsetup=0.6ns、Tco=1.2ns、组合逻辑 7.3ns、时钟偏斜 0.4ns,判断是否违例。

答案
需求 = 1.2+7.3+0.6−0.4 = 8.7ns < 10ns,余量 1.3ns,无违例;优化=流水线拆分、降 skew、用更快触发器。
Q54计算全志

时钟路径延迟差 0.8ns、Tco=1.2ns、组合逻辑 2.2ns、Tsu=0.6ns、Thold=1.1ns、T=4ns。

答案
setup 检查 0.8+4 > 1.2+2.2+0.6 → 4.8 < 5.0,建立不满足;hold 检查 4.4 > 1.1,满足。
Q55简答中兴 · 原为选择

setup/hold 违例修复(选择)。

原题为选择题,但各选项未在来源中记录。
答案
setup 违例=缩短关键路径/降主频;hold 违例=插延迟单元修复,与时钟频率无关。

3.3 时钟抖动 Jitter、偏斜 Skew、多周期、伪路径

Q56简答

jitter 与 skew 的区别

答案
Jitter 是同一时钟不同周期的周期变化(时间域不确定性),来自时钟源(晶振/PLL),与布线无关;Skew 是同一时钟沿到达不同寄存器的相位差,由时钟树布线长度/负载差异引起,可经 CTS/Buffer 改善。二者构成 clock uncertainty。
Q57简答

skew 对 setup/hold 的影响

答案
正 skew(捕获时钟晚到)对 setup 有利、对 hold 有害;skew 过大易导致 hold 违例,skew 变小易导致 setup 违例。
Q58简答华为 2022 · 原为多选

关于 False path 正确的有?(多选)

原题为多选题,但各选项未在来源中记录,仅记录正确项。
答案
D(异步电路可设为 false path)
解析
false path 一般指跨时钟域异步路径、或与正常工作无关的路径(测试逻辑/DFT)。模拟接口、同步复位、不同频率接口通常不能一律设 false path。
Q59简答泰凌微

多周期路径定义

答案
两个触发器之间的数据路径需要一个以上时钟周期才能传播通过,用 set_multicycle_path 约束。
Q60单选海思

与最高工作频率无关的因素?

A最长的组合逻辑
B触发器建立保持时间
C时钟低电平持续时间
D互连布线长度
答案
c(时钟低电平持续时间)
解析
Fmax 由关键路径延迟(组合逻辑+布线)、Tco、Tsu 决定,与时钟占空比/低电平持续时间无关。
Q61计算小米

乘法器需 10 个 cycle,multicycle setup 设为 10,hold 应为多少?

答案
9(N 个 multicycle setup 对应 N−1 个 multicycle hold)
Q62计算大疆

每个 Arbiter 输入到输出延时 3ns,最长路径经 7 个 Arbiter。

答案
7×3 = 21ns

四、跨时钟域 CDC 与亚稳态

4.1 亚稳态基础(必考)

Q63单选乐鑫 2021 · 有争议

关于跨时钟域电路说法正确的是?

A信号经两级 DFF 同步后即可跨时钟域传递
B跨时钟域电路存在亚稳态风险,最好避免使用
C跨时钟域电路中一定存在亚稳态
D采用单一时钟的电路也可能产生亚稳态
答案
B 或 D(公开答案有争议,建议按判定逻辑答)
解析
A 错——两级打拍只是降概率,且只适用单bit电平信号;C 错——亚稳态是概率问题,「一定存在」过于绝对;D 对——单时钟电路只要 setup/hold 不满足同样产生亚稳态。掌握每个选项的判定逻辑比死记答案重要
Q64单选大厂高频

关于亚稳态描述错误的是?

A多级寄存器打拍可消除亚稳态
B亚稳态理论上可无限长
C亚稳态稳定到 0/1 随机
D不满足 Tsu/Th 可能产生亚稳态
答案
A
解析
打拍只能按 MTBF 指数降低概率,无法彻底消除;B/C/D 均正确。
Q65多选

对解决亚稳态有效的方法

A用更快 DFF(缩短亚稳态窗口)
B改善时钟质量、边沿更陡
C降低时钟频率
D两级触发器同步
答案
ABCD
解析
亚稳态无法根除,只能靠这些手段把概率降到可接受水平。
Q66单选紫光展锐

降低亚稳态无效的做法是?

A提高时钟质量
B用更快触发器
C降低 data toggle rate
D提高工作时钟频率
答案
提高工作时钟频率反而有害(缩小建立/保持窗口,增加亚稳态风险)。
Q67多选

亚稳态失效性相关因素

A发射端信号翻转率
B发射端时钟频率
C接收端时钟频率
D同步寄存器级数
答案
ABCD
解析
发射端信号翻转率、发射端时钟频率、接收端时钟频率、同步寄存器级数都影响 MTBF。
Q68简答华为

写 MTBF 公式;提高工作时钟对亚稳态概率的影响。

答案
MTBF = e^(t/τ)/(f×a);提高工作时钟会增加亚稳态概率(MTBF 下降)。
解析
寒武纪扩展——多一级同步把恢复时间提高一级,MTBF 从毫秒级提升到「宇宙年龄」级别。

4.2 单 bit 跨时钟域

Q69简答

为什么用两级同步器?两级之间能放组合逻辑吗?

答案
第一级最易亚稳态,第二级给第一级更多解析/沉降时间,大幅降低亚稳态传播概率;一级概率很大,三级以上改善不大(按 MTBF 决定级数)。两级同步器之间严禁插组合逻辑;发送端必须是寄存器输出。边沿检测需打三拍:上升沿 pulse_r2 & ~pulse_r3
Q70判断华为 2019

C=A&B,A、B 在 clkx 域、C 在 clky 域。做法:在 clky 域分别对 A、B 打两拍后再做与运算,是否正确?

正确
错误
答案
错误。
解析
应先在 clkx 域完成 A&B 运算,再将结果在 clky 域打两拍。另问:异步 FIFO 读写地址编码常采用格雷码(非独热码)后打两拍。
Q71简答

单 bit 跨时钟域处理方法分类

答案
单bit慢→快用打两拍;快→慢需脉冲同步(源域脉冲转电平 → 打两拍 → 目的域边沿检测还原)或握手;多bit用异步FIFO/异步双口RAM;多bit连续变化地址用格雷码+打两拍。
Q72手撕牛客 VL49 / 大疆

A 时钟域提取单周期脉冲,在 B 时钟域(B 频率是 A 的 1/10)重建单周期脉冲。

答案 / 易错点
三步法——① 快域脉冲转电平 toggle_fast <= ~toggle_fast;② 慢域打两拍;③ 慢域边沿检测还原 dataout = sync2 ^ sync3不能用 sync1 ^ sync2 做边沿检测(第一拍信号不稳)。

4.3 多 bit 跨时钟域

Q73单选大疆 2020

多 bit 数据跨时钟域处理思路中,错误的是?

A接收方本地时钟同步两拍再用
B写入异步 FIFO
C连续变化信号转格雷码
D握手协议
答案
A(错误)
解析
多bit 各 bit 存在 skew,打两拍后可能采到源域从未存在过的非法中间组合(数据错乱)。正确:B 异步FIFO、C 格雷码(限连续变化)、D 握手。
Q74多选海思/华为

多 bit 异步总线处理方式

ADMUX
B寄存器打拍
C异步FIFO
D格雷码转换
答案
ACD(打拍只适用单bit)
Q75简答

多 bit 为什么不能直接打两拍?格雷码为什么能解决?

答案
多bit 各 bit 布线路径不同、到达目标寄存器存在 skew,采样时部分位变部分位未变,可能采到 00→11 跳变中的 01/10 这类非法中间态。单bit 打两拍后只能是旧值或新值,故安全;格雷码使相邻状态只变 1bit,把「多bit 跨域」等效为「单bit 跨域」,最坏只错 1bit。局限:只适用连续变化的计数/指针信号,普通数据仍需握手或异步FIFO。
Q76简答寒武纪

150MHz 的 A[63:0] 同步到 50MHz 可用方式

答案
DMUX、双向握手、异步FIFO(打两拍仅适用单 bit)。
Q77判断海思

异步乒乓 buffer 用独热编码、异步FIFO 用二进制编码,对吗?

正确
错误
答案
错。
解析
异步FIFO 读写指针必须用格雷码,否则二进制指针多位同时翻转、跨域采样会误判空满。
Q78判断

异步FIFO 采用格雷码是为了省功耗?

正确
错误
答案
错。
解析
格雷码是为多bit 跨域安全(相邻状态仅 1bit 变化),与功耗/速度无关。

五、复位设计

Q79简答芯动科技 · 原为选择

异步复位同步释放的主要目的。

原题为选择题,答案记录为 C(防止亚稳态传播),其余选项未记录。
答案
C(防止亚稳态传播)
解析
复位释放时若恰好靠近时钟沿会使寄存器进入亚稳态,「异步复位、同步释放」消除该风险。
Q80判断芯动科技

同步复位更利于 STA。

正确
错误
答案
正确。
解析
同步复位使系统为 100% 同步时序电路,利于仿真与 STA;缺点是复位需保持大于一个时钟周期,且多在数据路径引入组合逻辑。
Q81判断华为海思

异步复位不需要做 recovery/removal 检查。

不需要
需要
答案
错误。
解析
异步复位必须做恢复时间(recovery,类 setup)与移除时间(removal,类 hold)检查,避免复位释放时亚稳态。
Q82手撕

异步复位、同步释放原理与 Verilog 实现

答案
两级触发器同步器,第一级输入接高电平"1";复位生效是异步的(立即复位),撤销时经两级触发器同步到时钟域再释放,与时钟沿对齐、消除亚稳态。
always @(posedge clk or negedge rst_n) begin
  if (!rst_n) begin rst0 <= 1'b0; rst1 <= 1'b0; end
  else begin rst0 <= 1'b1; rst1 <= rst0; end
end
assign rst_n_sync = rst1;  // 同步复位信号

六、异步 FIFO 与深度计算

6.1 异步FIFO 结构与空满判断(笔试大题)

Q83手撕 · 必考牛客 VL45

根据双口 RAM(dual_port_RAM #(DEPTH,WIDTH))与接口 wclk/rclk/wrstn/rrstn/winc/rinc/wdata/wfull/rempty/rdata,实现参数化异步FIFO。

答案 / 关键点
  • 指针位宽比地址多 1 位 [$clog2(DEPTH):0],最高位用于区分绕圈判断满
  • 指针递增:winc && ~wfull 时写指针+1;rinc && ~rempty 时读指针+1
  • 格雷码:gray = bin ^ (bin>>1)
  • 跨域同步:本地指针格雷码先打一拍寄存,再打两拍同步到对端时钟域
  • 空(读时钟域):waddr_gray_synced == raddr_gray(完全相等)
  • 满(写时钟域):raddr_gray_synced 最高位和次高位与 waddr_gray 相反、其余位相同
  • 使能:wenc = winc & ~wfull; renc = rinc & ~rempty
Q84手撕牛客 VL46

同步FIFO(易错点)

答案
计数器法判空满;易错点——RAM 读写使能不能直接传 rinc/winc,必须 wenc = winc && ~wfullrenc = rinc && ~rempty,否则满时仍会覆盖 RAM 数据。
Q85简答

空满判断(格雷码)原理

答案
空信号在读时钟域产生(本地读格雷码与同步过来的写格雷码所有位完全相等);满信号在写时钟域产生(本地写格雷码与同步过来的读格雷码最高位+次高位相反、其余位相同,表示多绕一圈)。
解析
为什么格雷码不能只比较最高位?格雷码有镜像对称性,7→8 的格雷码 0100→1100 最高位就相反,若按「最高位不同即满」会误判。必须同时看最高位+次高位。
Q86简答

空满信号产生域 + 指针为什么比地址多 1 位

答案
空在读域、满在写域(各用同步过来的对端指针比较);指针位宽 = 地址位宽 + 1,最高位作绕圈标志,区分空与满。空满标志建议寄存一拍输出,避免组合逻辑毛刺。打两拍引入同步延迟使空满判断偏保守(虚空/虚满),只损失性能不产生致命错误,深度需留余量。

6.2 FIFO 深度计算(高频计算题)

Q87简答

异步FIFO 深度为什么要取 2 的幂次

答案
① 标准格雷码循环周期恰为 2^N,深度为 2 的幂次时指针格雷码才能形成完整闭环(首尾仅差 1bit),可直接跨域打拍同步;② 空满判断才简单可靠(比较最高/次高位+其余位)。非 2 次幂时向上凑 2 的幂次,或转回二进制比较/改用握手。
Q88计算经典背靠背 · 原为选择

写 200MHz/每100写40,读 100MHz/每10读8,最小深度?

原题为选择题,答案记录为 B(48),其余选项未记录。
答案
B(48)
解析
背靠背最坏连续突发 40+40=80 个;写 80 个耗时 80×5ns=400ns;同时间段内读出 (400/100)×8=32 个;最小深度 = 80−32 = 48(取 2 的幂则 64)。通用公式:depth = burst_len − burst_len×(X/Y)×(r_clk/w_clk)
Q89计算华为 · 单选 · 有争议

写 100MHz、读 50MHz,每 100 Cycle 最多写 50 个数据,深度设多少?

公开答案 C(100),其余选项未记录。本题口径在不同来源间有争议,建议按「留深度余量」作答。
答案
公开答案 C(100)。
解析
平均写速率=50MHz=读速率,稳态不堆积;深度覆盖突发与读侧追赶差。按「最坏 50 连续写 + 读侧 50MHz」推导得 25,口径不统一,建议按「留深度余量」作答。
Q90计算写快读慢 + 同步延迟

异步FIFO 深度16,写 100MHz、读 200MHz,突发长度 8,最小深度?

答案
10(8+2)
解析
纯带宽看写 8 个 80ns、读侧 40ns 就能读完,理论深度 8 够;但读写指针跨域同步各要两拍,同步延迟期间可能多读走数据,故一般取 burst_len + 2 ≈ 10
Q91计算乐鑫 2021

80MHz;ModuleA 每 5us 产生 1us 的 1280Mbit/s burst(共 8 次);ModuleB 需 10us 初始化,期间缓存,结束后以 640Mbit/s 均匀读。32bit 位宽,最小深度?

答案
128
解析
10us 初始化期最多 2 个 burst=2560bits;初始化结束第 1us 内 A 再写 1280、B 读走 640,净增 640;最大积压 3200bits;深度=3200/32=100,取大于 100 的最小选项 128
Q92计算 · 经典题

读写时钟相同,每 100 个时钟写入 10 个数据、每 10 个 cycle 读出 1 个,最小深度?

答案
18
解析
取连续 200 周期,背靠背极端 20 个周期连续写 20 次,期间读出 2 个,最小深度=20−2=18。核心是画波形找最大积压点,而非直接套公式。
Q93单选思特威 2023 · 存疑

写 200MHz、读 100MHz、数据包 8KB、包间隔足够大,最小深度?

A520
B830
C1030
D1550
答案
公开答案 D(1550)

七、总线协议 APB / AHB / AXI

7.1 APB

Q94简答按时序图

APB 状态机判断(按时序图)

答案
IDLE→SETUP→ACCESS 三态。SETUP 只持续 1 拍,下一拍无条件进 ACCESS 且 PENABLE 拉高;PREADY=0 则停留在 ACCESS 插入等待;PREADY=1 传输完成回 IDLE。
Q95简答

APB 一次传输为什么最少 2 个周期?

答案
SETUP 阶段置 PSELx(地址/写数据稳定),ACCESS 阶段置 PENABLE 开始传输,PREADY=1 表示完成;SETUP 永远只维持 1 个时钟周期。
Q96简答

APB2/3/4 各新增信号

答案
APB3 新增 PREADY(插入等待)和 PSLVERR(传输错误);APB4 新增 PPROT(保护)和 PSTRB(写选通)。PSLVERR 与 PREADY 同时返回,只有 1 bit。

7.2 AHB

Q97多选紫光展锐

AHB 的特性

Asplit transaction
Bburst transfer
Cnon-tristate implementation
Dout-of-order data transmission
答案
ABC
解析
AHB 支持 split、burst、非三态;不支持乱序,乱序是 AXI 通过 ID 实现的。
Q98多选紫光展锐

能实现 burst 的片内总线

AAPB
BAHB
CSPI
DAXI
答案
BD
解析
APB 每笔 2 拍不支持突发;SPI 不是片内 AMBA 总线。AHB 突发需提供全部地址,AXI 突发只需首地址
Q99简答

RETRY 与 SPLIT 的区别

答案
都表示从设备暂无法完成传输、都是两周期响应。区别:RETRY 后仲裁器仍按正常策略,master 持续重试、可能饿死别人,适合单主访问;SPLIT 后仲裁器屏蔽该 master 并把总线让给其他 master,从设备准备好后经 HSPLITx 通知仲裁恢复,适合多主共享的慢速从设备。
Q100简答

AHB 两级流水线如何工作

答案
第 n 次传输的地址在第 n-1 次传输的数据阶段就被驱动上总线,地址与数据重叠。传输分地址阶段(1 个 HCLK)和数据阶段(HREADY=1 完成)。从机拉低 HREADY 会顺带延长下一次传输的地址阶段。
Q101简答

HTRANS 等待期间能否改变?IDLE vs BUSY

答案
一般 HREADY 拉低时不应改变控制信号,但允许两类:HTRANS=IDLE(尚未开始,可改 NONSEQ)、HTRANS=BUSY(burst 内部插等待,可改合法值)。BUSY 插在同一个 burst 中间、IDLE 插在两次 burst 之间;BUSY 不能在固定长度 burst 末尾。收到 SPLIT/RETRY 响应第二拍 master 必须置 HTRANS=IDLE。
Q102简答

HRESP 有几种?非 OKAY 为什么占两拍

答案
OKAY(00)、ERROR(01)、RETRY(10)、SPLIT(11)。非 OKAY 响应需两周期(第一拍发响应、第二拍 HREADY 拉高完成),是总线流水线特性要求。AHB 一次突发不能跨越 1KB 边界

7.3 AXI4 五通道与突发

Q103单选紫光展锐

AXI4 不包括哪个接口信号?

AAWID
BARID
CWID
DRID
答案
C(WID)
解析
AXI4 删除了 WID(AXI3 有 WID 支持写交织;AXI4 取消 WID 故不支持写交织)。五通道:AW/W/B/AR/R。
Q104简答

为什么 AXI 没有独立的读响应通道

答案
读数据通道 R 本身是从机→主机单向通道,天然携带读响应功能(RRESP);而写数据 W 只是主机→从机单向,从机完成后必须通过 B 通道反馈结果。所以写事务需 AW/W/B 三通道、读事务只需 AR/R 两通道。
Q105简答

写响应 xRESP 有哪几种

答案
OKAY(00) 正常、EXOKAY(01) 独占成功、SLVERR(10) 从设备错误、DECERR(11) 地址解码错误。每个 AW 对应一个 B 响应,BID 必须与 AWID 对应。RESP=ERROR 时 READY 至少保持 1 拍。
Q106单选中兴

AXI 突发类型不包括哪种?

AFIXED
BINCR
CWRAP
DSTRIDE
答案
D(STRIDE)
解析
FIXED 所有 beat 同地址;INCR 地址递增;WRAP 递增到上边界回绕到下边界(缓存行填充)。
Q107简答

AxLEN、AxSIZE 含义与总字节数

答案
实际传输次数 = AxLEN+1;每拍字节数 = 2^AxSIZE;总字节数 = (AxLEN+1)×(2^AxSIZE)。例:AxSIZE=2、AxLEN=7 → 32 字节。AXI3 的 AxLEN 4 位(1~16 拍);AXI4 的 INCR 8 位(1~256 拍),但 WRAP 限 2/4/8/16、FIXED 限 1~16。AxLEN=0 表示长度 1。
Q108计算

AWADDR=0x34、AWLEN=0x07、AWSIZE=0x02、AWBURST=WRAP8,写出 8 拍地址序列。

答案
总字节 8×4=32,下边界=INT(0x34/32)×32=0x20,上边界=0x40。序列:0x34, 0x38, 0x3C, 0x20(回绕), 0x24, 0x28, 0x2C, 0x30
解析
WRAP 起始地址必须对齐到(突发长度×传输字节数)边界;只有越过上边界才回绕。
Q109简答

AXI 突发为什么不能跨越 4KB 边界

答案
4KB 是页大小,每个 slave 地址空间按 4K 对齐(slave 最小空间 4KB)。若一次 burst 跨 4K 可能访问到两个 slave,而 burst 只携带一个首地址,第二个 slave 收不到地址无法返回响应。判断标准是「首地址与末地址落在同一 4K 页内」,跨页时拆分成多个 transaction。

7.4 AXI 握手与乱序

Q110简答

VALID 与 READY 谁先有效?三种时序

答案
「谁先有效」是伪命题,三种都合法:① VALID 先高、READY 后高;② READY 先高、VALID 后高;③ 同时为高。传输发生在上升沿 VALID=1 且 READY=1 时刻。
Q111简答红线

VALID 能否依赖 READY?

答案
VALID 不能依赖 READY,一旦拉高必须保持稳定直到握手成功;READY 可以依赖 VALID。互相等待会循环依赖死锁。背压:READY 拉低时发送方必须保持 VALID 和 DATA 不变,直到握手成功;不能看到 READY 拉低就把 VALID 拉低(会丢包)。
Q112简答

AXI 如何实现乱序?ID 顺序规则

答案
靠 Transaction ID(ARID/AWID、RID/BID)。规则:① 不同 master 无顺序要求;② 同一 master 不同 ID 可乱序完成;③ 相同 ARID 的读数据若来自同一 slave 必须按发布顺序返回;④ 相同 AWID 的写数据必须与写地址发布顺序一致(同 ID 不允许写交织)。Master 如需保序必须等前一笔 complete。
Q113简答

Outstanding、Out-of-order、Interleaving 区别 + AXI3 vs AXI4

答案
Outstanding:master 在前一操作未完成时连续发出多个操作;Out-of-order:返回顺序与请求顺序不一致;Interleaving:不同 ID 的数据交织出现,AXI3 支持写交织,AXI4 因删 WID 不支持。AXI3 vs AXI4:burst 16→256 拍、删 WID、新增 QoS、调整 Cache 信号含义。
Q114简答

AXI 跨时钟域怎么处理

答案
单bit 慢→快用两级触发器打拍(两拍间不插组合逻辑),快→慢用反馈握手或脉冲同步;多bit 数据必须用异步FIFO或 req-ack 握手(握手信号也要同步),不能简单打两拍。AXI Interconnect 本身承担 CDC 功能。

7.5 三总线对比与设计

Q115对比表

AXI / AHB / APB 对比

特性AXIAHBAPB
通道5 个独立通道,读写并行读写共用通道单通道
位宽8~1024 位32~256 位8~32 位
结构多主/多从+仲裁多主/多从+仲裁单主(APB桥)/多从,无仲裁
突发支持(只需首地址)支持(需全部地址)不支持(每笔 2 拍)
对齐支持非对齐(WSTRB)不支持非对齐
场景SoC 主总线高速模块互连低速低功耗外设
Q116简答

AHB 为什么比 APB 快?AXI 为什么比 AHB 快?

答案
AHB 快——流水线传输+burst+位宽大;APB 传 n 笔需 2n 拍,AHB 仅 n+1 拍。AXI 快——读写并行(5 通道独立)、突发只需首地址、可连续发多个突发首地址无需等前一笔完成、支持乱序/交织。
Q117单选2025 嵌入式真题

AMBA 描述错误的是?

AAXI 支持突发和乱序
BAPB 用于高速外设连接
CAHB 适用于高带宽低延迟
DAXI4 引入 QoS
答案
B(APB 是低速外设总线)
Q118手撕 · 设计思路

AXI4-Lite 寄存器配置模块(手撕设计思路)

答案
三段式状态机 IDLE → WAIT_AW → WAIT_W → WRITE_RESP → WAIT_AR → READ_RESP。要点:AW/W 独立并行握手,写响应必须等 W 和 AW 都握手成功才返回;AW/AR 同时到来需仲裁(多数写优先);别漏 WSTRB 字节使能;AXI4-Lite 不支持乱序;地址需 4 字节对齐;未定义地址返回 DECERR/SLVERR。
Q119简答

AXI 写事务 AW/W/B 依赖关系

答案
AW 与 W 相互独立、可乱序到达(Slave 需数据缓冲处理任意顺序);B 响应依赖 AW 和 W 都完成,不能提前返回 BVALID;BID 必须与 AWID 对应;同 AWID 的写数据必须按地址发布顺序写入。Master 红线:AWVALID/WVALID 发起前不能等 AWREADY/WREADY,从机 BVALID 不能等 BREADY——避免循环依赖死锁。

八、大厂综合真题(含智力题)

Q120计算华为海思

src dist {0:=30, [1:3]:=90},求 src=0 的概率。

答案
P(src=0) = 30/(30+90×3) = 0.1
Q121大题 · 15 分联发科 2021

根据电路图 ①补全时序图 ②说明功能 ③DFF1/DFF3 的作用及去掉的风险 ④DFF2/DFF4 为何负沿采样。

答案
①功能=两异步时钟无毛刺切换;②DFF1/DFF3 上升沿寄存选择信号,去掉会产生亚稳态;③负沿采样保证控制信号不在两时钟高电平期间跳变,避免输出时钟被截断产生毛刺;正沿采样会在高电平期间跳变产生毛刺。核心:先取消旧时钟、等一拍再选新时钟
Q122简答大疆 2024

无毛刺时钟切换方案对比

答案
① 双边沿触发器切换(简单、无额外逻辑门,但用两个触发器面积大);② 时钟锁存器切换(面积小,但切换瞬间可能有额外延迟)。
Q123手撕

assign outclk = (clk1 & sel) | (~sel & clk0); 有什么问题?如何改写?

答案
sel 与时钟异步,sel 跳变时若当前时钟为高电平会产生毛刺。改写:两级 DFF(负沿)+反馈逻辑。
Q124计算海康威视

某功能占运行时间 50%,功能加速为几倍可使系统性能提高 1.5 倍?

答案
按 Amdahl:S = 1/((1−0.5)+0.5/n) = 1.5 → n = 3
Q125计算海康威视

8 个 8bit 输出的 MUX 逻辑消耗多少 bit 的 8 选 1 逻辑?

答案
8×8 = 64(按输出位宽×路数估算)
Q126手撕乐鑫

次小值与出现次数

答案
维护 min、sec_min 及两个计数器,分 5 种情况(<min、=min、<sec_min、=sec_min、>sec_min);min 更新时 sec_min 计数器要继承 min 计数器的值
Q127计算兆易创新

50MHz 时钟,按键宽度低于设定值(cnt_cfg:00=5ms~11=20ms)判定为抖动。

答案
计数器位宽需覆盖 20ms(50MHz 下约 1M 计数,需 20bit)。
Q128计算大疆

16K×8 存储器引脚数

答案
地址 14 根 + 数据 8 根 = 22 根
Q129找规律瑞芯微

Look-and-say:2 → 12 → 1112 → 3112 → 132112 → ?

答案
11132112(下一项描述上一项数字)
Q130智力题联发科

5L/6L 水壶取 3L

答案
装满 5L 倒入 6L;再装满 5L 倒入 6L(6L 满时 5L 剩 4L);倒空 6L,把 5L 中的 4L 倒入 6L;装满 5L 倒入 6L(6L 需 2L),5L 剩 3L
Q131题组星宸科技

星宸科技题组

要点
Verilog 非阻塞赋值判断、建立时间定义、CMOS 两输入与非门 4 晶体管、Maxpooling Verilog 实现(20 分)。
Q132计算乐鑫

偶校验 / 大小端 / SRAM 容量

答案
1110101 偶校验监督码元=1;0x12345678 little-endian 存储=0x78563412;12 地址线+32 数据线=2^12×4B=16KB,2^20B 需 64 块。

九、手撕代码高频题清单

以下为华为海思等大厂手撕环节常考清单,建议全部练会:

  1. 三段式状态机(序列检测 1101 / 10010 / 101 / 1110110,注意重叠)
  2. 序列整除 3 检测(余数状态机)
  3. 脉冲同步器(快→慢域脉冲展宽)
  4. 边沿检测(上升/下降/双边沿)
  5. 异步 FIFO / 同步 FIFO(含空满判断、格雷码)
  6. 跨时钟域同步电路(两级打拍、握手)
  7. 二分频、任意整数分频、奇数分频 50%、小数分频(8.7 / 2.5)
  8. 格雷码 ↔ 二进制互转、格雷码计数器
  9. 译码器 / 加法器(含两级流水线加法器)/ 比较器
  10. CRC 校验、奇偶校验
  11. 串并转换、位宽转换(8to16 / 12to24)
  12. 消除毛刺、避免 Latch 电路改写
  13. 无毛刺时钟切换(负沿采样 + 反馈)
  14. 仲裁器(固定优先级 / RR 轮询)
  15. 按键消抖、门控时钟、脉冲展宽
  16. 数据「数 1」统计(组合逻辑树)
  17. LFSR、取绝对值、Maxpooling 实现
  18. AXI4-Lite Slave 状态机