本书从RTL设计师视角出发,系统梳理ASIC/VLSI行业标准工作流程中的关键知识与面试要点,通过分享行业经验与独特视角,帮助读者理解企业所需技能,提升面试竞争力,斩获心仪职位。
全书分为三大部分:第一部分围绕架构与微架构展开,涵盖CPU流水线、CPU乱序调度、虚拟内存和TLB、缓存一致性、FIFO、CDC、LRU算法、重排序、仲裁器、数字分频器、算术逻辑设计、序列产生器等;第二部分聚焦验证、实现、综合与功耗,详细讲解设计验证、形式验证、CDC检查、RDC检查、ECO流程等;第三部分涉及物理设计和芯片调试,包括STA、SDC、时序ECO等;同时在末尾分享行为类问题及实用面试建议等。
更多科学出版社服务,请扫码获取。
2009年4月获得西北工业大学信号与信息处理专业硕士学位西安微电子技术研究所(中国航天科技集团公司第九研究院771所)微电子学与固体电子学、计算机科学与技术曾发表《一种面向多核DSP芯片的低功耗验证方法》、《一种RS(24,20)码编译码器设计》、《超声调制声频定向传播性能研究》、《基于层次化事件队列的赋值操作应用》等多篇文章,拥有《一种用于低功耗设计的可重用仿真验证方法》、《一种用于低功耗设计的可重用仿真验证方法》等多项专利
目录
第一部分 架构与微架构
第1章 架构与原型 2
1.1 CPU流水线 2
【问题1】MIPS五级流水线是什么样的? 2
【问题2】流水线冒险及解决方案——基于MIPS五级流水线的案例分析 4
【问题3】能否任意增加CPU流水线的深度? 6
【问题4】如何实现基于硬件的分支预测? 7
1.2 CPU乱序调度 9
【问题5】Tomasulo算法如何工作? 9
【问题6】Tomasulo算法中如何处理内存引起的数据依赖? 11
【问题7】如何通过内存处理数据依赖? 12
【问题8】如何在Tomasulo算法中实现基于硬件的推测以最小化控制冒险? 16
1.3 虚拟内存和TLB 19
【问题9】使用虚拟内存有哪些好处? 19
【问题10】虚拟地址如何转换? 19
【问题11】为什么需要TLB? 20
【问题12】如何处理TLB 缺失? 21
【问题13】如何处理缺页异常? 21
1.4 精确中断的实现 21
【问题14】什么是精确中断?什么是非精确中断? 21
【问题15】如何实现精确中断? 22
1.5 缓存 25
【问题16】为什么需要缓存? 25
【问题17】什么是缓存冲突? 27
【问题18】缓存中的读/写/替换策略是什么? 27
【问题19】如何衡量缓存性能? 29
【问题20】为什么缓存增大后性能没有提升? 30
【问题21】用虚拟地址访问缓存会有什么问题? 30
【问题22】根据索引位和标签(tag)位,缓存有哪些类型? 31
1.6 缓存一致性 33
【问题23】什么是NUMA/UMA架构? 33
【问题24】什么是缓存一致性? 34
【问题25】如何实现缓存一致性? 34
【问题26】你能展示基于侦听的MSI 协议状态转换吗? 35
【问题27】什么是MESI/MEOSI/MEOFSI协议? 37
【问题28】如何为MESI协议实现主目录? 38
1.7 通用片上总线协议 39
【问题29】能描述一下APB协议的工作原理吗? 39
【问题30】能描述一下AHB协议的工作原理吗? 42
【问题31】能描述一下AXI协议的工作原理吗? 44
【问题32】为什么AXI和AHB 协议提供回环突发传输? 45
【问题33】AXI协议中通道之间有哪些依赖关系? 46
【问题34】如何强制AXI写通道和读通道间的顺序? 46
【问题35】AXI协议中的独占访问是什么? 47
第2章 微架构设计 48
2.1 Verilog语法与原语 48
【问题36】阻塞赋值与非阻塞赋值有什么区别? 48
【问题37】如何检测和解决与X相关的RTL 问题? 48
【问题38】casex、casez和case-inside有什么区别? 49
【问题39】使用SystemVerilog的signed数据类型时需要注意什么? 50
【问题40】“===”和“==”有什么区别? 51
【问题41】什么是delta 仿真时间? 51
【问题42】什么是通用逻辑门? 52
2.2 握手协议 54
【问题43】什么是valid-ready协议? 54
【问题44】什么是valid-ready切片? 54
【问题45】如何将4 相req-ack协议转换为valid-ready协议? 57
【问题46】如何将valid-ready协议转换为4相req-ack协议? 57
2.3 FIFO 58
【问题47】如何设计基于触发器的非2 次幂深度的同步FIFO? 58
【问题48】如何设计一个支持2 次写入1 次读取的基于触发器的同步FIFO 58
【问题49】如何基于双端口SRAM设计同步FIFO? 59
【问题50】如何设计基于触发器的异步FIFO? 62
【问题51】如何设计一个非2 次幂偶数深度的异步FIFO 62
【问题52】设计一个基于SRAM 的异步FIFO 62
2.4 跨时钟域(CDC) 63
【问题53】什么是亚稳态? 63
【问题54】什么是MTBF?为什么同步器能处理CDC 问题? 63
【问题55】传输脉冲信号时有哪些常见的CDC 注意事项? 64
【问题56】传输多比特信号时有哪些常见的CDC 注意事项? 64
2.5 LRU算法 65
【问题57】如何实现真正的LRU 算法? 65
【问题58】如何实现伪LRU? 66
2.6 重排序 67
【问题59】支持有序读响应功能的内存控制器设计(Ⅰ) 67
【问题60】支持有序读响应功能的内存控制器设计(Ⅱ) 69
2.7 查找表 69
【问题61】使用一维LUT(查找表)实现y = f(x) 函数 69
【问题62】使用二维查找表实现z = f(x, y) 函数 71
2.8 仲裁器 72
【问题63】设计一个固定优先级仲裁器 72
【问题64】设计一个轮询仲裁器 72
【问题65】设计一个基于优先级的仲裁器 73
2.9 数字分频器 74
【问题66】实现任意整数N 的分频器(无占空比要求) 74
【问题67】实现2N 分频器(50% 占空比) 74
【问题68】实现2N 分频器(50% 占空比) 74
【问题69】实现(2N+1) 分频器(50% 占空比) 75
2.10 算术逻辑设计 76
【问题70】设计一个简单的ALU 并绘制其逻辑框图 76
【问题71】如何实现w = 3/2x+1/4y+z? 77
【问题72】如何实现BCD 码的乘以5 运算? 77
【问题73】如何实现整数除法器? 78
【问题74】用两个16 位加法器构建一个2 周期延迟的32 位加法器 79
【问题75】用两个16 位加法器构建一个2 周期延迟的32 位累加器 79
2.11 序列产生器和检测器80
【问题76】序列产生器 80
【问题77】设计一个电路用于检测一个输入是否为另一个输入的延迟版本 80
【问题78】设计一个检测序列1(01)*1 的电路 81
【问题79】3 位回文序列检测器 82
【问题80】判断一个无限序列是否是5 的倍数 82
【问题81】设计一个可编程序列检测器 84
2.12 查找 85
【问题82】在字节数组中从LSB 开始查找第一个1 的索引位置 85
【问题83】在一个16 位数组中从最低有效位(LSB)开始查找第一个1 的索引位置 85
【问题84】在深度为8、宽度为1 位的FIFO 中查找最近一次写入的1 的索引位置 86
【问题85】在排序数组中找到最接近给定数字的索引(Ⅰ) 87
【问题86】在排序数组中找到最接近给定数字的索引(Ⅱ) 88
第二部分 验证、实现、综合与功耗以及前端设计检查表
第3章 验证 90
3.1 设计验证 90
【问题87】什么是约束随机回归测试?为什么约束检查很重要? 90
【问题88】如何验证轮询仲裁器的公平性? 90
【问题89】为自动售货机设计编写测试计划 91
【问题90】什么是代码覆盖率? 92
【问题91】什么是功能覆盖率?如何写功能覆盖率? 92
3.2 形式验证 94
【问题92】什么是形式验证(FV)?它与动态验证(DV)有何不同? 94
【问题93】FV 的优缺点是什么? 95
【问题94】什么是即时断言?什么是并发断言? 95
【问题95】什么是交叠蕴含?什么是非交叠蕴含? 96
【问题96】什么是形式化属性验证(FPV)? 97
【问题97】如果FPV 无法实现完全验证怎么办? 98
【问题98】什么是形式化等价性验证(FEV)? 99
第4章 实现、综合与功耗 101
4.1 代码规范检查 101
【问题99】在代码检查中,最关键的错误有哪些? 101
4.2 CDC检查 101
【问题100】如何在CDC检查中定义CDC/SGDC约束? 101
4.3 复位域交叉(RDC)检查 103
【问题101】同步复位与异步复位的区别何在? 103
【问题102】RDC检查功能具体有什么作用呢? 104
【问题103】常见的RDC技术/方案有哪些? 105
4.4 综 合 106
【问题104】什么是线负载模型下的综合?什么是合理性综合? 106
【问题105】什么是拓扑综合/生成式综合? 106
【问题106】运行综合之前的基本设置有哪些?如何执行set_app_var以及创建Milkyway设计库? 107
【问题107】什么是DC的综合流程?能否编写一个简单的DC综合脚本? 108
【问题108】进行综合分析前需检查哪些内容? 112
【问题109】DC 综合优化的常用技术有哪些? 112
4.5 逻辑等价性检查(LEC) 114
【问题110】什么是LEC?我们为什么要进行LEC? 114
【问题111】LEC 的流程是怎样的?又是如何开展关键点映射的? 115
4.6 ECO流程 117
【问题112】什么是 ECO?为什么需要ECO? 117
【问题113】功能ECO的流程是什么? 117
4.7 功 耗 119
【问题114】什么是静态功耗、动态功耗以及短路损耗功耗? 119
【问题115】如何降低静态功耗、动态功耗以及短路损耗功耗? 120
【问题116】在功耗敏感型设计中,为何需要隔离单元? 121
【问题117】隔离单元有多少种类型? 122
【问题118】时钟门控单元的结构是怎样的? 122
【问题119】SRAM 有哪些功耗状态? 125
第5章 前端设计检查清单 128
第三部分 物理设计和芯片调试
第6章 物理设计 134
6.1 静态时序分析(STA) 134
【问题120】STA与亚稳态有何关系? 134
【问题121】STA是做什么的?“同步”意味着什么? 134
【问题122】什么是建立时间和保持时间? 135
【问题123】什么是建立时间约束和保持时间约束? 135
【问题124】采用半周期路径的益处何在? 137
【问题125】时钟设计裕量的来源有哪些? 138
【问题126】STA如何检查复位移除时间与恢复时间、时钟门控单元及
数据到数据的时序? 139
【问题127】STA是如何验证异步FIFO 功能的? 141
【问题128】STA如何对基于锁存器的设计进行检查? 141
【问题129】在STA中,多周期路径(MCP)是如何工作的? 144
6.2 Synopsys 设计约束(SDC) 145
【问题130】什么是设计对象/库对象?如何访问和操作这些对象? 145
【问题131】在CTS后的运行阶段,如何设置单时钟设计约束条件? 147
【问题132】在CTS后的运行阶段,如何为单时钟设计设置I/O 约束? 148
【问题133】如何对多同步时钟设计约束条件进行设置? 150
【问题134】在CTS后的运行阶段,如何设置生成时钟的设计约束? 152
【问题135】如何设置互斥同步时钟设计约束? 153
【问题136】异步时钟设计约束该如何设置? 154
【问题137】如何对SDC 进行验证? 155
6.3 STA工具/PrimeTime156
【问题138】什么是PrimeTime流程?能编写一个简单的PrimeTimeSTA脚本吗? 156
【问题139】运行PrimeTime之前需要检查什么? 158
【问题140】何为基于图的分析(GBA)以及基于路径的分析(PBA)? 159
【问题141】什么是OCV/AOCV/POCV? 160
【问题142】如何运用OCV 方法计算时序裕量? 161
【问题143】在PrimeTime时序报告中,CRPR是什么? 163
6.4 时序ECO164
【问题144】时序ECO的流程是什么? 164
【问题145】如何解决建立时间和保持时间违例问题? 165
【问题146】时序ECO工具是什么? 166
第7章 芯片调试 168
【问题147】常用的可调试性设计(DFD)技术有哪些? 168
【问题148】如何实现校验和? 173
【问题149】如何实现CRC? 173
【问题150】如何识别32 位寄存器中哪一位存在固定故障? 174
参考文献 177
附 录 行为类问题及实用面试建议 179
【问题151】在简历中使用哪些动词可使自身脱颖而出? 179
【问题152】面试礼仪和最佳面试技巧 183
【问题153】在面试尾声,当被问及“你有什么问题想问我吗”该如何作答? 185
【问题154】“感谢信”中应包含哪些内容? 186
【问题155】为何要对求职申请进行跟进,以及应如何跟进? 187