芯片设计是高度专业化、流程化的领域,不同细分岗位(前端 / 验证 / 后端 / 模拟 IC/DFT)的技能要求差异显著,但 “基础理论 + 工具实操 + 流程把控” 是所有岗位的通用门槛。本文从 “岗位分类→通用核心技能→专项技能 + 案例→工程实战→入职适配” 层层拆解,覆盖校招 / 社招核心考点,适配数字 IC、模拟 IC 等主流芯片设计方向。
一、先对齐:芯片设计核心岗位类型与技能映射
芯片设计流程分为 “前端(逻辑设计 / 验证)→后端(物理设计)→流片→测试”,不同岗位的核心职责和技能权重差异显著,先明确目标岗位的核心诉求:
| 岗位类型 | 核心职责 | 技能权重(基础:工具:专项:工程化) | 企业高频考察形式 |
|---|---|---|---|
| 数字前端设计(RTL 工程师) | 架构拆解、RTL 编码、逻辑综合、时序 / 功耗优化 | 40%:30%:20%:10% | RTL 编码题、时序分析、架构设计思路 |
| 数字验证工程师 | 验证环境搭建、用例编写、覆盖率分析、Bug 定位 | 30%:40%:20%:10% | SystemVerilog/UVM 编程、验证方案设计 |
| 数字后端设计(物理设计) | 布局布线(Place&Route)、时序分析(STA)、物理验证(DRC/LVS)、功耗优化 | 20%:40%:30%:10% | 时序约束编写、后端工具实操、DRC 问题修复 |
| 模拟 IC 设计工程师 | 运放 / ADC/DAC/PLL 等模块设计、电路仿真、工艺适配、版图协同 | 50%:30%:15%:5% | 电路推导、仿真波形分析、工艺参数解读 |
| DFT 工程师(可测性设计) | 扫描链插入、ATPG 测试向量生成、DFT 验证、可测性分析 | 30%:30%:30%:10% | DFT 方法论、扫描链设计、ATPG 工具实操 |
核心原则:无论哪种岗位,“数字 / 模拟电路基础 + EDA 工具实操 + 芯片设计全流程认知” 是通用门槛,专项技能是差异化竞争力。
二、通用核心技能:所有芯片设计岗位的 “通行证”
2.1 数字电路基础(数字 IC 所有岗位必掌握)
| 核心知识点 | 高频考点 | 业务场景映射 |
|---|---|---|
| 组合逻辑 / 时序逻辑 | 门电路、译码器 / 编码器 / 多路选择器、触发器(D/FF/RS)、寄存器 / 锁存器 | 所有数字模块的基础构成 |
| 状态机设计 | Moore/Mealy 型状态机、状态编码(二进制 / 格雷码 / 独热码)、状态跳转逻辑 | 协议控制器(UART/I2C/SPI)、CPU 控制单元 |
| 时钟与时序 | 建立时间(Setup Time)/ 保持时间(Hold Time)、时钟抖动 / 偏斜(Skew)、时序路径分析 | 时序收敛、跨时钟域处理 |
| 跨时钟域(CDC) | 同步器(两级 / 三级寄存器)、异步 FIFO、握手协议、亚稳态处理 | 多时钟域模块(如 CPU 与外设交互) |
| 低功耗设计基础 | 时钟门控(Clock Gating)、电源门控(Power Gating)、多电压域设计 | 移动端 / 物联网芯片功耗优化 |
2.2 硬件描述语言(HDL):编码 / 验证的核心工具
| 语言 / 语法 | 核心要求(数字 IC) | 高频考察形式 |
|---|---|---|
| Verilog(前端 / DFT) | ① 时序逻辑建模(always @(posedge clk));② 模块例化、接口定义;③ 组合逻辑避免 latch;④ 参数化设计(`define/parameter) | 编写 UART/I2C/SPI 等外设 RTL 代码 |
| SystemVerilog(验证) | ① 面向对象(class/object);② 接口(interface);③ 断言(SVA);④ 随机化(randomize) | 编写验证用例、断言检查、随机激励生成 |
| VHDL(小众) | 仅部分企业(如军工 / 欧洲企业)使用,核心要求与 Verilog 对齐 | 简单模块编码 |
2.3 EDA 工具基础:芯片设计的 “生产工具”
所有芯片设计岗位都需掌握至少一套主流 EDA 工具链(Synopsys/Cadence/Mentor),核心工具清单:
| 工具类别 | 主流工具 | 核心用途 |
|---|---|---|
| 前端设计 / 仿真 | Synopsys VCS、Cadence Xcelium、Mentor ModelSim | RTL 仿真、调试、波形分析 |
| 逻辑综合 | Synopsys Design Compiler(DC) | 将 RTL 转化为门级网表,时序 / 面积优化 |
| 验证平台 | Synopsys VCS+Verdi、Cadence Xcelium、UVM 库 | 验证环境搭建、覆盖率收集 |
| 后端设计 | Synopsys IC Compiler(ICC)/Innovus、Cadence Encounter | 布局布线(Place&Route)、时序收敛 |
| 时序分析 | Synopsys PrimeTime(PT) | STA(静态时序分析)、时序约束验证 |
| 物理验证 | Synopsys ICV、Cadence Dracula/Calibre | DRC(设计规则检查)、LVS(版图 vs 原理图) |
| 模拟 IC 设计 | Cadence Virtuoso、Spectre、HSPICE | 电路设计、仿真、版图绘制 |
2.4 芯片设计全流程认知:从 Spec 到流片
所有岗位都需理解芯片设计完整流程,避免 “只关注单点技能,忽略整体协同”:
需求分析 → 架构设计 → 前端RTL编码 → 验证(功能/时序/形式化) → 逻辑综合 → 后端布局布线 → 物理验证 → DFT → GDSII输出 → 流片 → 封装测试 → 量产核心考点:各阶段的交付物(如 RTL 代码、网表、GDSII)、各阶段的核心目标(如验证阶段追求 100% 覆盖率,后端阶段追求时序收敛)。
三、各岗位专项核心技能 + 实战案例
3.1 数字前端设计(RTL 工程师):编码与架构落地
3.1.1 核心专项技能
| 技能点 | 核心要求 | 企业高频考点 |
|---|---|---|
| RTL 编码规范 | 模块化设计、可综合风格(避免不可综合语句)、注释规范、参数化设计 | 代码评审、编码题(如 FIFO / 计数器) |
| 逻辑综合 | 约束编写(时钟 / 输入延迟 / 输出延迟)、面积 / 时序 / 功耗权衡、库文件(.db)使用 | DC 实操、综合报告分析 |
| 架构拆解 | 将高层需求拆解为模块(如 CPU 拆分为 ALU / 寄存器堆 / 控制器)、接口定义 | 架构设计题、模块划分思路 |
| 时序优化 | 路径优化(重定时 / 流水线)、缓冲器插入、时钟门控设计 | STA 报告分析、时序违例修复 |
3.1.2 实战案例:简易 UART 控制器 RTL 设计(企业入门高频题)
场景背景
设计一款异步 UART 控制器(仅支持发送功能),参数:波特率 9600、数据位 8 位、停止位 1 位、无校验位,基于 Verilog 实现,满足可综合要求。
核心要求
- 支持并行数据输入(8 位),串行输出;
- 波特率可参数化配置;
- 满足时序要求(建立 / 保持时间)。
实战步骤(附核心 Verilog 代码)
步骤 1:需求拆解与模块划分
UART 发送器核心模块:
- 波特率发生器:产生 9600 波特率的时钟(系统时钟假设为 50MHz);
- 数据移位寄存器:将并行数据转为串行;
- 状态机:控制发送时序(起始位→数据位→停止位)。
步骤 2:RTL 编码(可综合风格)
// UART发送器模块(可综合,参数化设计) module uart_tx #( parameter SYS_CLK_FREQ = 50_000_000, // 系统时钟频率 parameter BAUD_RATE = 9600, // 波特率 parameter DATA_BITS = 8, // 数据位 parameter STOP_BITS = 1 // 停止位 )( input clk, // 系统时钟 input rst_n, // 低电平复位 input [DATA_BITS-1:0] tx_data, // 待发送并行数据 input tx_en, // 发送使能 output reg tx_done, // 发送完成标志 output reg tx // UART串行输出 ); // 步骤1:计算波特率分频系数 localparam BAUD_DIV = SYS_CLK_FREQ / BAUD_RATE; localparam BAUD_CNT_WIDTH = $clog2(BAUD_DIV); // 步骤2:状态机定义(Mealy型) typedef enum {IDLE, START, DATA, STOP} tx_state_t; tx_state_t curr_state, next_state; // 步骤3:内部寄存器定义 reg [BAUD_CNT_WIDTH-1:0] baud_cnt; // 波特率计数器 reg [DATA_BITS-1:0] data_reg; // 数据移位寄存器 reg [2:0] data_cnt; // 数据位计数器 reg baud_tick; // 波特率时钟脉冲 // 子模块1:波特率发生器(产生波特率时钟) always @(posedge clk or negedge rst_n) begin if(!rst_n) begin baud_cnt <= '0; baud_tick <= 1'b0; end else begin if(curr_state != IDLE) begin // 仅在发送时计数 if(baud_cnt == BAUD_DIV - 1) begin baud_cnt <= '0; baud_tick <= 1'b1; end else begin baud_cnt <= baud_cnt + 1'b1; baud_tick <= 1'b0; end end else begin baud_cnt <= '0; baud_tick <= 1'b0; end end end // 子模块2:状态机时序逻辑 always @(posedge clk or negedge rst_n) begin if(!rst_n) begin curr_state <= IDLE; end else begin curr_state <= next_state; end end // 子模块3:状态机组合逻辑 always @(*) begin next_state = curr_state; case(curr_state) IDLE: begin if(tx_en) begin // 发送使能,进入起始位 next_state = START; end end START: begin if(baud_tick) begin // 起始位发送完成,进入数据位 next_state = DATA; end end DATA: begin if(baud_tick && (data_cnt == DATA_BITS - 1)) begin // 数据位发送完成 next_state = STOP; end end STOP: begin if(baud_tick && (data_cnt == STOP_BITS - 1)) begin // 停止位发送完成 next_state = IDLE; end end default: next_state = IDLE; endcase end // 子模块4:数据发送与计数器控制 always @(posedge clk or negedge rst_n) begin if(!rst_n) begin tx <= 1'b1; // UART空闲时为高电平 tx_done <= 1'b0; data_reg <= '0; data_cnt <= '0; end else begin tx_done <= 1'b0; case(curr_state) IDLE: begin tx <= 1'b1; // 空闲高电平 data_reg <= tx_data; // 预加载待发送数据 data_cnt <= '0; end START: begin if(baud_tick) begin tx <= 1'b0; // 起始位低电平 end end DATA: begin if(baud_tick) begin tx <= data_reg[0]; // 发送最低位(LSB先行) data_reg <= {1'b0, data_reg[DATA_BITS-1:1]}; // 右移 data_cnt <= data_cnt + 1'b1; end end STOP: begin if(baud_tick) begin tx <= 1'b1; // 停止位高电平 data_cnt <= data_cnt + 1'b1; tx_done <= 1'b1; // 发送完成 end end endcase end end endmodule步骤 3:逻辑综合(DC 实操)
# DC综合脚本(核心步骤) # 1. 读取RTL代码 read_verilog uart_tx.v # 2. 设置目标工艺库(如40nm工艺) set target_library "gscl45nm.db" set link_library "* $target_library" # 3. 设置设计约束 create_clock -name clk -period 20 [get_ports clk] # 50MHz时钟,周期20ns set_input_delay 2 -clock clk [get_ports {tx_data tx_en rst_n}] set_output_delay 2 -clock clk [get_ports {tx tx_done}] # 4. 逻辑综合 compile -area_effort medium -timing_effort medium # 5. 保存网表与报告 write -format verilog -hierarchy -output uart_tx_netlist.v report_area -file uart_tx_area.rpt report_timing -file uart_tx_timing.rpt步骤 4:关键分析(企业面试必讲)
- 可综合性:代码中仅使用
always @(posedge clk)/enum(可综合)、无initial/$display等不可综合语句; - 时序优化:通过波特率计数器分频,避免高频时钟直接驱动输出,减少时序压力;
- 参数化设计:支持不同系统时钟 / 波特率配置,适配不同工艺;
- 低功耗设计:IDLE 状态下波特率计数器停止计数,降低动态功耗。
3.2 数字验证工程师:验证环境搭建与覆盖率闭环
3.2.1 核心专项技能
| 技能点 | 核心要求 | 企业高频考点 |
|---|---|---|
| UVM 验证方法论 | UVM 组件(driver/monitor/agent/scoreboard/env)、工厂机制、配置机制 | 搭建 UVM 验证环境、编写 testcase |
| 断言(SVA) | 时序断言(\(rose/\)fell)、属性断言、覆盖断言 | 编写断言检查协议合规性 |
| 覆盖率分析 | 功能覆盖率(covergroup)、代码覆盖率(line/branch/toggle)、覆盖率闭环 | 分析覆盖率报告、补充验证用例 |
| 形式化验证 | 基于 SVA 的形式化验证、等价性检查(EC) | 关键模块形式化验证 |
3.2.2 实战案例:UVM 验证 UART 发送器(企业核心考点)
核心要求
- 搭建 UVM 验证环境,覆盖 UART 发送器所有功能场景;
- 收集功能覆盖率,确保 100% 覆盖;
- 通过 scoreboard 比对预期输出与实际输出。
核心代码(UVM 验证环境)
步骤 1:定义接口(Interface)
interface uart_tx_if(input clk, input rst_n); // 信号定义 logic [7:0] tx_data; logic tx_en; logic tx_done; logic tx; // 时钟块(用于driver/monitor采样) clocking cb @(posedge clk); output tx_data, tx_en; input tx_done, tx; endclocking // SVA断言:检查起始位(tx_en有效后,tx需拉低) property start_bit_check; @(posedge clk) disable iff(!rst_n) tx_en |-> ##[BAUD_DIV-1:BAUD_DIV+1] (tx == 1'b0); endproperty assert property(start_bit_check) else $error("Start bit error!"); cover property(start_bit_check); // 覆盖断言 endinterface步骤 2:UVM Driver(产生激励)
class uart_tx_driver extends uvm_driver #(uart_tx_seq_item); `uvm_component_utils(uart_tx_driver) virtual uart_tx_if vif; function new(string name, uvm_component parent); super.new(name, parent); endfunction virtual function void build_phase(uvm_phase phase); super.build_phase(phase); if(!uvm_config_db#(virtual uart_tx_if)::get(this, "", "vif", vif)) begin `uvm_fatal("DRV", "Failed to get interface!") end endfunction virtual task run_phase(uvm_phase phase); vif.tx_en <= 1'b0; vif.tx_data <= '0; @(posedge vif.rst_n); // 等待复位释放 forever begin seq_item_port.get_next_item(req); // 获取序列项 // 驱动激励 vif.cb.tx_data <= req.tx_data; vif.cb.tx_en <= 1'b1; @(vif.cb); vif.cb.tx_en <= 1'b0; // 等待发送完成 wait(vif.tx_done); seq_item_port.item_done(); end endtask endclass步骤 3:UVM Scoreboard(比对数据)
class uart_tx_scoreboard extends uvm_scoreboard; `uvm_component_utils(uart_tx_scoreboard) uvm_tlm_analysis_fifo #(uart_tx_seq_item) exp_fifo; // 预期数据FIFO uvm_analysis_imp #(uart_tx_seq_item, uart_tx_scoreboard) act_imp; // 实际数据端口 function new(string name, uvm_component parent); super.new(name, parent); exp_fifo = new("exp_fifo", this); act_imp = new("act_imp", this); endfunction // 接收实际数据 virtual function void write(uart_tx_seq_item act_item); uart_tx_seq_item exp_item; if(!exp_fifo.try_get(exp_item)) begin `uvm_error("SB", "No expected data!") return; end // 比对数据 if(act_item.tx_data != exp_item.tx_data) begin `uvm_error("SB", $sformatf("Data mismatch: exp=0x%02x, act=0x%02x", exp_item.tx_data, act_item.tx_data)) end else begin `uvm_info("SB", $sformatf("Data match: 0x%02x", act_item.tx_data), UVM_MEDIUM) end endfunction endclass步骤 4:功能覆盖率收集
// 定义覆盖组(覆盖所有数据位/波特率场景) covergroup uart_tx_cg; option.per_instance = 1; // 覆盖数据位(0~255) tx_data_cp: coverpoint tx_data { bins low = {[0:63]}; bins mid = {[64:191]}; bins high = {[192:255]}; } // 覆盖发送使能时序 tx_en_cp: coverpoint tx_en { bins en = {1'b1}; bins dis = {1'b0}; } // 交叉覆盖 tx_data_en_cross: cross tx_data_cp, tx_en_cp; endgroup步骤 5:验证闭环(企业核心要求)
- 运行验证用例,收集覆盖率报告;
- 若覆盖率未达 100%,分析未覆盖场景(如边界数据、异常使能);
- 补充对应的 testcase(如随机数据、连续发送、复位中断发送);
- 重复运行,直至覆盖率 100%,且无断言失败 / 数据比对错误。
3.3 数字后端设计(物理设计):布局布线与时序收敛
3.3.1 核心专项技能
| 技能点 | 核心要求 | 企业高频考察形式 |
|---|---|---|
| 布局布线(PnR) | 地板规划(Floorplan)、单元布局、时钟树综合(CTS)、布线 | Innovus/ICC 实操、时序收敛 |
| 静态时序分析(STA) | 时序约束(SDC)编写、时序路径分析、建立 / 保持时间违例修复 | PT 实操、STA 报告分析 |
| 物理验证 | DRC(设计规则检查)、LVS(版图 vs 原理图)、ERC(电气规则检查) | Calibre 实操、DRC/LVS 错误修复 |
| 功耗优化 | 功耗分析(PrimePower)、电压岛设计、金属填充、漏电流优化 | 功耗报告分析、低功耗物理实现 |
3.3.2 实战案例:UART 发送器后端布局布线
核心步骤
步骤 1:地板规划(Floorplan)
# Innovus脚本:地板规划 # 1. 读取网表与约束 read_db uart_tx_netlist.db read_sdc uart_tx.sdc # 2. 设置芯片尺寸与IO位置 create_floorplan -die_area {0 0 200 200} -core_area {20 20 180 180} place_ios -random # 随机放置IO(实际项目需按封装规划) # 3. 电源规划 create_power_plan -nets {VDD VSS} -stripes -horizontal -spacing 20 -width 10步骤 2:单元布局与时钟树综合(CTS)
tcl
# 1. 全局布局 place_opt -area_recovery -timing_driven # 2. 时钟树综合(CTS) clock_opt -cts -no_clock_gating_check # 3. 详细布局 place_opt -post_cts -hold_fix步骤 3:布线(Routing)
# 1. 全局布线 route_opt -global # 2. 详细布线 route_opt -detail # 3. 时序优化 route_opt -timing -hold_fix步骤 4:物理验证
tcl
# 导出GDSII write_gds -output uart_tx.gds # 运行Calibre DRC/LVS run_calibre_drc -rules calibre_drc.rul -output uart_tx_drc.rpt run_calibre_lvs -rules calibre_lvs.rul -netlist uart_tx_netlist.v -output uart_tx_lvs.rpt步骤 5:时序收敛(企业核心难点)
- 建立时间违例:通过插入缓冲器(Buffer)、调整单元位置、放松非关键路径约束修复;
- 保持时间违例:通过插入延迟单元(Delay Cell)、调整时钟树偏移修复;
- 案例:若 UART 输出 tx 的建立时间违例(slack=-0.5ns),可将 tx 驱动单元移近 IO 引脚,减少走线延迟,使 slack≥0。
3.4 模拟 IC 设计工程师:电路设计与仿真
3.4.1 核心专项技能
| 技能点 | 核心要求 | 企业高频考点 |
|---|---|---|
| 模拟电路设计 | 运放、比较器、基准源、ADC/DAC、PLL 设计,小信号分析、直流 / 交流特性 | 运放设计、仿真波形分析 |
| 工艺适配 | 理解工艺库(.lib/.tf)、MOS 管特性、工艺角(TT/SS/FF)分析 | 工艺角仿真、鲁棒性设计 |
| 仿真工具 | HSPICE/Spectre 仿真、直流 / 交流 / 瞬态 / 噪声仿真 | 编写仿真脚本、分析仿真结果 |
| 版图设计 | 匹配设计、对称布局、寄生参数提取、LVS 验证 | 绘制运放版图、修复 LVS 错误 |
3.4.2 实战案例:两级运算放大器设计
核心要求
设计一款两级 CMOS 运算放大器,参数:增益≥60dB,带宽≥1MHz,输出摆幅≥±1V(电源 ±1.8V)。
核心步骤
步骤 1:电路拓扑设计
采用 “差分输入级 + 共源放大输出级” 拓扑,包含偏置电路(镜像电流源)、补偿电容(米勒补偿)。
步骤 2:HSPICE 仿真脚本
* 两级运放仿真脚本 .lib "cmos040.lib" TT # 加载40nm工艺库,TT工艺角 * 电源定义 VDD VDD 0 1.8V VSS 0 VSS 1.8V * 输入信号 Vin+ IN+ 0 DC 0 AC 1 Vin- IN- 0 DC 0 AC 0 * 运放电路(省略具体MOS管连接) * 直流仿真(DC) .dc Vin+ -1.8 1.8 0.1 * 交流仿真(AC) .ac dec 10 100Hz 100MHz * 瞬态仿真(TRAN) .tran 1ns 10us * 保存波形 .probe V(OUT) V(IN+) V(IN-) .end步骤 3:仿真结果分析
- 直流特性:输出摆幅≥±1V,输入失调电压≤10mV;
- 交流特性:增益≈65dB(满足≥60dB),带宽≈1.2MHz(满足≥1MHz);
- 工艺角仿真:SS(慢工艺)/FF(快工艺)/TT(典型工艺)下,增益≥58dB,带宽≥0.9MHz,鲁棒性达标。
四、工程化落地核心技能:企业最看重的 “交付能力”
4.1 脚本自动化(提升效率)
芯片设计流程繁琐,需掌握 Tcl/Perl/Python 脚本自动化:
- Tcl:EDA 工具(DC/Innovus/PT)脚本编写,自动化综合 / 布局布线 / 时序分析;
- Python:数据处理(仿真结果分析、覆盖率报告解析)、批量生成测试用例;
- 案例:编写 Python 脚本自动分析 STA 报告,提取时序违例路径并生成优化建议。
4.2 版本管理与协作
- 工具:Git/SVN 管理 RTL 代码、验证环境、脚本;
- 规范:代码评审流程、版本命名规范(如 v1.0_20240501)、交付物清单;
- 案例:通过 Git 分支管理不同版本的 RTL 代码(开发分支 / 测试分支 / 发布分支)。
4.3 问题定位与调试
- 前端调试:通过 Verdi 查看波形、设置断点、分析 RTL 逻辑错误;
- 后端调试:通过 PrimeTime 分析时序违例、Calibre 分析 DRC/LVS 错误;
- 模拟调试:通过 Spectre 仿真波形分析偏置点、增益、带宽异常。
五、入职适配建议
5.1 校招(应届生)
核心准备
- 基础夯实:数字电路(阎石《数字电子技术基础》)、Verilog 编程(至少完成 3 个小项目:计数器 / FIFO/UART);
- 工具入门:熟悉 VCS/DC/Innovus 基本操作,掌握 Tcl 脚本基础;
- 项目闭环:完成 1 个完整小项目(如 UART 控制器:RTL 编码→仿真→综合→简单后端),整理项目报告(需求→设计→实现→验证→结果);
- 高频考点:
- 笔试:Verilog 编码、时序分析、组合 / 时序逻辑设计;
- 面试:项目细节(如 “如何解决时序违例”)、电路原理(如 “建立 / 保持时间的定义”)。
避坑点
- 不要只背理论,必须动手实操(如用 ModelSim 仿真 Verilog 代码);
- 不要忽略编码规范(如模块化、注释、参数化);
- 不要只关注前端,了解后端 / 验证的基本流程。
5.2 社招(有工作经验)
核心准备
- 项目落地能力:梳理过往项目的 “问题 - 方案 - 效果 - 价值”(如 “通过时钟树优化,使芯片时序收敛,流片良率提升 10%”);
- 专项深度:聚焦 1-2 个专项(如前端时序优化、验证覆盖率闭环、后端物理验证),形成自己的方法论;
- 跨环节协同:理解前端 / 验证 / 后端的协同要点(如前端编码如何适配后端布局、验证如何对接测试);
- 高频考点:
- 面试:项目难点(如 “流片后发现的 Bug 如何定位修复”)、工艺适配(如 “40nm 转 28nm 需做哪些优化”);
- 实操:现场编写 Verilog/UVM 代码、分析 STA 报告。
避坑点
- 不要只讲 “做了什么”,要讲 “解决了什么问题,带来了什么价值”;
- 不要忽略工程化细节(如脚本自动化、版本管理);
- 不要局限于单一环节,需理解芯片设计全流程。
六、总结
芯片设计岗位的核心竞争力是 “理论 + 工具 + 流程 + 问题解决”:
- 通用门槛:数字电路 / 模拟电路基础、HDL 编码、EDA 工具基础;
- 专项能力:前端(编码 / 综合)、验证(UVM / 覆盖率)、后端(PnR/STA)、模拟(电路设计 / 仿真);
- 工程化能力:自动化脚本、问题定位、跨环节协同;
- 长期发展:工艺适配、低功耗 / 高性能设计、复杂芯片架构拆解。
建议通过 “1 个基础项目(如 UART)+ 1 个专项项目(如运放设计 / UVM 验证)” 构建技能闭环,同时熟悉企业主流 EDA 工具链,即可满足绝大多数芯片设计岗位的入职要求。