数字前端 / 数字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 两者仿真与综合行为完全一致
解析 规范约定——组合逻辑用 =(顺序执行)、时序逻辑用 <=(并行执行)。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;
考点: 竞争冒险 / 阻塞赋值混用后果
查看答案
解析 仿真器不保证两个 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); 输出
查看答案
解析 非阻塞赋值在本时刻不立即生效,display 读到的是旧值 0。
Q6 填空 乐鑫
a=4'b10x1; b=4'b10x1; 则 a==b、a===b 各为?
查看答案
解析 == 遇 x/z 得 x(不确定);=== 精确比较,x/z 也参与逐位比较。
1.2 Latch 的产生与避免(高频)
Q7 多选
A always @(*) if (en) q = data;(if 缺 else)
B if (en) q1=data1; else q2=data2;(每个分支下赋值不完整)
C case 分支不全且无 default
D always@(rst) if(!rst) outdata=0; else outdata=rd;(敏感列表漏 rd)
查看答案
解析 组合逻辑中 if 缺 else、case 无 default、分支下赋值不全、敏感列表不全都会推断出 Latch(组合逻辑需要保持输出)。注意 :时序逻辑(always@(posedge clk))中 if-else 不完整不会产生 Latch,因为触发器本身有存储功能。
Q8 简答
查看答案
答案 ① 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 输出只取决于当前状态;Mealy 输出还与输入有关。实现相同功能 Mealy 一般比 Moore 省一个状态、输出超前一个时钟周期。
Q13 手撕 联发科
查看答案
答案 画状态转移框图 + 三段式代码,注意重叠 情况(如 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=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 位不同
查看答案
解析 A 反射特性 ✅、B 是二进制码 ❌、C 减少干扰 ✅、D 相邻码组仅 1 位不同 ✅。
Q21 填空 乐鑫
查看答案
答案 Bin[0] = ^Gray[N-1:0](所有位异或)
Q22 手撕
查看答案
答案
assign gray = bin ^ (bin>>1); // 二进制→格雷
// 格雷→二进制:b[n]=g[n]; b[i]=g[i]^b[i+1](或 b = 左移异或迭代)
Q23 简答 新华三
clk0 域 4bit 计数器步进为 2(0→2→4→6 循环)传至 clk1 域,为什么有问题?
查看答案
答案 格雷码只保证相邻状态 1 位变化;步进 2 时多位同时变化,失去格雷码跨时钟域安全优势。
1.6 分频器(笔试高频)
Q24 手撕 牛客 VL37
查看答案
答案 计数器计数到 N/2-1 时输出翻转,可参数化 parameter N。
Q25 手撕 牛客 VL40/VL42 · 高频
查看答案
答案 两个计数器——一个在 clk 上升沿计数、一个在下降沿计数(0~N-1),两路翻转信号做「或」(或「与」)得到 50% 占空比。不要求占空比时单计数器在 count==0/1 翻转即可(3分频)。
Q26 手撕 牛客 VL41
查看答案
答案 双模前置法: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 手撕
查看答案
答案 输入 div[3:0] 指定系数;偶分频计数翻转;奇分频「计数→下降沿采样→相与/相或」。1 分频直通,2 分频取反。
Q28 手撕 恒玄科技
查看答案
答案 用上升沿触发与下降沿触发的寄存器输出相与(或)实现非整数分频(思路同奇数分频的「上升沿+下降沿」结合)。
1.7 其他手撕 / 语法题
Q29 简答
查看答案
答案 initial 不可综合(仿真专用);综合后寄存器初值不确定,必须用复位信号赋初值,不能靠 initial。
Q30 简答 高频
查看答案
答案 function 有返回值、至少一个输入、不能含 #/@/wait 等耗时语句、不能调用 task;task 无返回值(靠 output/inout/ref 带出)、可含耗时语句、可调用 task 和 function;两者都可综合(内部须为组合逻辑);未标明方向的参数默认 input(陷阱)。
Q31 计算
查看答案
解析 扩展:移位寄存器型序列 1101010 需 6 级(状态不重复)。
Q32 计算
查看答案
解析 满 2⁸=256 回到 00000000,剩 12 次;减 1 得 11111111,再减 11 得 11110100。
Q33 简答
查看答案
答案 扭环(Johnson)2n=16;环形 n=8;LFSR 最长序列 2ⁿ−1=255
Q34 手撕 海康威视
统计多 bit 数中有多少个 1,单周期输出,组合逻辑延时尽量小。
查看答案
答案 for 循环累加 / 树状加法器 / 移位相加;关键是位宽可变时的组合逻辑实现。
Q35 手撕 瑞芯微
查看答案
答案 把 32bit 加法拆成两级(低位/高位),中间打一拍,把 32bit 进位链关键路径切成两半,提升时钟频率。
Q36 计算 大疆
查看答案
答案 整数 12 需 4bit;小数 0.918 用 8bit 量化误差 0.008/2^8≈0.00003125 < 精度一半,最小 12bit(4+8)。
二、数字电路基础
Q37 单选 牛客
A 加滤波电容
B 增加冗余项
C 增加选通信号
D 降低时钟频率
解析 降频只是降低被采到的概率,毛刺仍会传递;滤波电容、冗余项、选通信号才是根除手段。
Q39 判断
a=4'b1001,abs(a)=4'b0110?
答案 错误。4'b1001 有符号 = −7,abs = 7 = 4'b0111;且 1000(−8)无对应正数。
Q40 计算 联发科
逻辑化简 Y = B + (~A)(~C) + (~B)(~C)
查看答案
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 为有效沿后数据必须保持的最短时间。二者是触发器固有属性,只与工艺/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 降低时钟频率
查看答案
Q50 单选 华为海思/大厂
A 减小信号延迟
B Pipeline
C 降低时钟频率
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 是同一时钟不同周期的周期变化(时间域不确定性),来自时钟源(晶振/PLL),与布线无关;Skew 是同一时钟沿到达不同寄存器的相位差,由时钟树布线长度/负载差异引起,可经 CTS/Buffer 改善。二者构成 clock uncertainty。
Q57 简答
查看答案
答案 正 skew(捕获时钟晚到)对 setup 有利、对 hold 有害;skew 过大易导致 hold 违例,skew 变小易导致 setup 违例。
Q58 简答 华为 2022 · 原为多选
关于 False path 正确的有?(多选)
原题为多选题,但各选项未在来源中记录,仅记录正确项。
查看答案
解析 false path 一般指跨时钟域异步路径、或与正常工作无关的路径(测试逻辑/DFT)。模拟接口、同步复位、不同频率接口通常不能一律设 false path。
Q59 简答 泰凌微
查看答案
答案 两个触发器之间的数据路径需要一个以上时钟周期才能传播通过,用 set_multicycle_path 约束。
Q60 单选 海思
A 最长的组合逻辑
B 触发器建立保持时间
C 时钟低电平持续时间
D 互连布线长度
解析 Fmax 由关键路径延迟(组合逻辑+布线)、Tco、Tsu 决定,与时钟占空比/低电平持续时间无关。
Q61 计算 小米
乘法器需 10 个 cycle,multicycle setup 设为 10,hold 应为多少?
查看答案
答案 9(N 个 multicycle setup 对应 N−1 个 multicycle hold)
Q62 计算 大疆
每个 Arbiter 输入到输出延时 3ns,最长路径经 7 个 Arbiter。
查看答案
四、跨时钟域 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 可能产生亚稳态
解析 打拍只能按 MTBF 指数降低概率,无法彻底消除;B/C/D 均正确。
Q65 多选
A 用更快 DFF(缩短亚稳态窗口)
B 改善时钟质量、边沿更陡
C 降低时钟频率
D 两级触发器同步
查看答案
解析 亚稳态无法根除,只能靠这些手段把概率降到可接受水平。
Q66 单选 紫光展锐
A 提高时钟质量
B 用更快触发器
C 降低 data toggle rate
D 提高工作时钟频率
答案 提高工作时钟频率反而有害(缩小建立/保持窗口,增加亚稳态风险)。
Q67 多选
A 发射端信号翻转率
B 发射端时钟频率
C 接收端时钟频率
D 同步寄存器级数
查看答案
解析 发射端信号翻转率、发射端时钟频率、接收端时钟频率、同步寄存器级数都影响 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用异步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
A 接收方本地时钟同步两拍再用
B 写入异步 FIFO
C 连续变化信号转格雷码
D 握手协议
解析 多bit 各 bit 存在 skew,打两拍后可能采到源域从未存在过的非法中间组合 (数据错乱)。正确:B 异步FIFO、C 格雷码(限连续变化)、D 握手。
Q74 多选 海思/华为
A DMUX
B 寄存器打拍
C 异步FIFO
D 格雷码转换
查看答案
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 判断
解析 格雷码是为多bit 跨域安全(相邻状态仅 1bit 变化),与功耗/速度无关。
五、复位设计
Q79 简答 芯动科技 · 原为选择
异步复位同步释放的主要目的。
原题为选择题,答案记录为 C(防止亚稳态传播),其余选项未记录。
查看答案
解析 复位释放时若恰好靠近时钟沿会使寄存器进入亚稳态,「异步复位、同步释放」消除该风险。
Q80 判断 芯动科技
解析 同步复位使系统为 100% 同步时序电路,利于仿真与 STA;缺点是复位需保持大于一个时钟周期,且多在数据路径引入组合逻辑。
Q81 判断 华为海思
异步复位不需要做 recovery/removal 检查。
解析 异步复位必须做恢复时间(recovery,类 setup)与移除时间(removal,类 hold)检查,避免复位释放时亚稳态。
Q82 手撕
查看答案
答案 两级触发器同步器,第一级输入接高电平"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
查看答案
答案 计数器法判空满;易错点 ——RAM 读写使能不能直接传 rinc/winc,必须 wenc = winc && ~wfull、renc = rinc && ~rempty,否则满时仍会覆盖 RAM 数据。
Q85 简答
查看答案
答案 空信号在读时钟域产生 (本地读格雷码与同步过来的写格雷码所有位完全相等 );满信号在写时钟域产生 (本地写格雷码与同步过来的读格雷码最高位+次高位相反、其余位相同 ,表示多绕一圈)。
解析 为什么格雷码不能只比较最高位?格雷码有镜像对称性,7→8 的格雷码 0100→1100 最高位就相反,若按「最高位不同即满」会误判。必须同时看最高位+次高位。
Q86 简答
查看答案
答案 空在读域、满在写域(各用同步过来的对端指针比较);指针位宽 = 地址位宽 + 1,最高位作绕圈标志,区分空与满。空满标志建议寄存一拍输出,避免组合逻辑毛刺。打两拍引入同步延迟使空满判断偏保守 (虚空/虚满),只损失性能不产生致命错误,深度需留余量。
6.2 FIFO 深度计算(高频计算题)
Q87 简答
查看答案
答案 ① 标准格雷码循环周期恰为 2^N,深度为 2 的幂次时指针格雷码才能形成完整闭环 (首尾仅差 1bit),可直接跨域打拍同步;② 空满判断才简单可靠(比较最高/次高位+其余位)。非 2 次幂时向上凑 2 的幂次,或转回二进制比较/改用握手。
Q88 计算 经典背靠背 · 原为选择
写 200MHz/每100写40,读 100MHz/每10读8,最小深度?
原题为选择题,答案记录为 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),其余选项未记录。本题口径在不同来源间有争议,建议按「留深度余量」作答。
查看答案
解析 平均写速率=50MHz=读速率,稳态不堆积;深度覆盖突发与读侧追赶差。按「最坏 50 连续写 + 读侧 50MHz」推导得 25,口径不统一,建议按「留深度余量」作答。
Q90 计算 写快读慢 + 同步延迟
异步FIFO 深度16,写 100MHz、读 200MHz,突发长度 8,最小深度?
查看答案
解析 纯带宽看写 8 个 80ns、读侧 40ns 就能读完,理论深度 8 够;但读写指针跨域同步各要两拍,同步延迟期间可能多读走数据,故一般取 burst_len + 2 ≈ 10。
Q91 计算 乐鑫 2021
80MHz;ModuleA 每 5us 产生 1us 的 1280Mbit/s burst(共 8 次);ModuleB 需 10us 初始化,期间缓存,结束后以 640Mbit/s 均匀读。32bit 位宽,最小深度?
查看答案
解析 10us 初始化期最多 2 个 burst=2560bits;初始化结束第 1us 内 A 再写 1280、B 读走 640,净增 640;最大积压 3200bits;深度=3200/32=100,取大于 100 的最小选项 128 。
Q92 计算 · 经典题
读写时钟相同,每 100 个时钟写入 10 个数据、每 10 个 cycle 读出 1 个,最小深度?
查看答案
解析 取连续 200 周期,背靠背极端 20 个周期连续写 20 次,期间读出 2 个,最小深度=20−2=18。核心是画波形找最大积压点 ,而非直接套公式。
Q93 单选 思特威 2023 · 存疑
写 200MHz、读 100MHz、数据包 8KB、包间隔足够大,最小深度?
七、总线协议 APB / AHB / AXI
7.1 APB
Q94 简答 按时序图
查看答案
答案 IDLE→SETUP→ACCESS 三态。SETUP 只持续 1 拍,下一拍无条件进 ACCESS 且 PENABLE 拉高;PREADY=0 则停留在 ACCESS 插入等待;PREADY=1 传输完成回 IDLE。
Q95 简答
查看答案
答案 SETUP 阶段置 PSELx(地址/写数据稳定),ACCESS 阶段置 PENABLE 开始传输,PREADY=1 表示完成;SETUP 永远只维持 1 个时钟周期。
Q96 简答
查看答案
答案 APB3 新增 PREADY (插入等待)和 PSLVERR (传输错误);APB4 新增 PPROT (保护)和 PSTRB (写选通)。PSLVERR 与 PREADY 同时返回,只有 1 bit。
7.2 AHB
Q97 多选 紫光展锐
A split transaction
B burst transfer
C non-tristate implementation
D out-of-order data transmission
查看答案
解析 AHB 支持 split、burst、非三态;不支持乱序 ,乱序是 AXI 通过 ID 实现的。
Q98 多选 紫光展锐
查看答案
解析 APB 每笔 2 拍不支持突发;SPI 不是片内 AMBA 总线。AHB 突发需提供全部地址,AXI 突发只需首地址 。
Q99 简答
查看答案
答案 都表示从设备暂无法完成传输、都是两周期响应。区别:RETRY 后仲裁器仍按正常策略,master 持续重试、可能饿死别人,适合单主访问;SPLIT 后仲裁器屏蔽该 master 并把总线让给其他 master,从设备准备好后经 HSPLITx 通知仲裁恢复,适合多主共享的慢速从设备。
Q100 简答
查看答案
答案 第 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 简答
查看答案
答案 OKAY(00)、ERROR(01)、RETRY(10)、SPLIT(11)。非 OKAY 响应需两周期(第一拍发响应、第二拍 HREADY 拉高完成),是总线流水线特性要求。AHB 一次突发不能跨越 1KB 边界 。
7.3 AXI4 五通道与突发
Q103 单选 紫光展锐
解析 AXI4 删除了 WID (AXI3 有 WID 支持写交织;AXI4 取消 WID 故不支持写交织)。五通道:AW/W/B/AR/R。
Q104 简答
查看答案
答案 读数据通道 R 本身是从机→主机单向通道,天然携带读响应功能(RRESP) ;而写数据 W 只是主机→从机单向,从机完成后必须通过 B 通道反馈结果。所以写事务需 AW/W/B 三通道、读事务只需 AR/R 两通道。
Q105 简答
查看答案
答案 OKAY (00) 正常、EXOKAY (01) 独占成功、SLVERR (10) 从设备错误、DECERR (11) 地址解码错误。每个 AW 对应一个 B 响应,BID 必须与 AWID 对应 。RESP=ERROR 时 READY 至少保持 1 拍。
Q106 单选 中兴
A FIXED
B INCR
C WRAP
D STRIDE
解析 FIXED 所有 beat 同地址;INCR 地址递增;WRAP 递增到上边界回绕到下边界(缓存行填充)。
Q107 简答
查看答案
答案 实际传输次数 = 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 简答
查看答案
答案 4KB 是页大小,每个 slave 地址空间按 4K 对齐(slave 最小空间 4KB) 。若一次 burst 跨 4K 可能访问到两个 slave,而 burst 只携带一个首地址,第二个 slave 收不到地址无法返回响应 。判断标准是「首地址与末地址落在同一 4K 页内」,跨页时拆分成多个 transaction。
7.4 AXI 握手与乱序
Q110 简答
查看答案
答案 「谁先有效」是伪命题,三种都合法:① VALID 先高、READY 后高;② READY 先高、VALID 后高;③ 同时为高。传输发生在上升沿 VALID=1 且 READY=1 时刻。
Q111 简答 红线
查看答案
答案 VALID 不能依赖 READY ,一旦拉高必须保持稳定直到握手成功;READY 可以依赖 VALID 。互相等待会循环依赖死锁。背压 :READY 拉低时发送方必须保持 VALID 和 DATA 不变,直到握手成功;不能看到 READY 拉低就把 VALID 拉低(会丢包)。
Q112 简答
查看答案
答案 靠 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 简答
查看答案
答案 单bit 慢→快用两级触发器打拍(两拍间不插组合逻辑),快→慢用反馈握手或脉冲同步;多bit 数据必须用异步FIFO 或 req-ack 握手(握手信号也要同步),不能简单打两拍。AXI Interconnect 本身承担 CDC 功能。
7.5 三总线对比与设计
Q115 对比表
特性 AXI AHB APB
通道 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 嵌入式真题
A AXI 支持突发和乱序
B APB 用于高速外设连接
C AHB 适用于高带宽低延迟
D AXI4 引入 QoS
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 简答
查看答案
答案 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 逻辑?
查看答案
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 计算 大疆
查看答案
答案 地址 14 根 + 数据 8 根 = 22 根
Q129 找规律 瑞芯微
Look-and-say:2 → 12 → 1112 → 3112 → 132112 → ?
查看答案
Q130 智力题 联发科
查看答案
答案 装满 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 计算 乐鑫
查看答案
答案 1110101 偶校验监督码元=1;0x12345678 little-endian 存储=0x78563412;12 地址线+32 数据线=2^12×4B=16KB,2^20B 需 64 块。
九、手撕代码高频题清单
以下为华为海思等大厂手撕环节常考清单 ,建议全部练会:
三段式状态机(序列检测 1101 / 10010 / 101 / 1110110,注意重叠)
序列整除 3 检测(余数状态机)
脉冲同步器(快→慢域脉冲展宽)
边沿检测(上升/下降/双边沿)
异步 FIFO / 同步 FIFO(含空满判断、格雷码)
跨时钟域同步电路(两级打拍、握手)
二分频、任意整数分频、奇数分频 50%、小数分频(8.7 / 2.5)
格雷码 ↔ 二进制互转、格雷码计数器
译码器 / 加法器(含两级流水线加法器)/ 比较器
CRC 校验、奇偶校验
串并转换、位宽转换(8to16 / 12to24)
消除毛刺、避免 Latch 电路改写
无毛刺时钟切换(负沿采样 + 反馈)
仲裁器(固定优先级 / RR 轮询)
按键消抖、门控时钟、脉冲展宽
数据「数 1」统计(组合逻辑树)
LFSR、取绝对值、Maxpooling 实现
AXI4-Lite Slave 状态机
数字前端 / 数字IC设计 笔试真题与解析 · 单文件离线版