数字 IC 应该如何入门呢?

[复制链接]
cbl8410 发表于 2023-9-21 14:41:22|来自:北京 | 显示全部楼层 |阅读模式
本人集成电路小硕,方向偏传感器 不太感兴趣而且对于就业无帮助。想自学数字ic 看到身边很多人在学FPGA,verilog 想具体了解下数字ic学习流程。希望大佬给些建议
全部回复5 显示全部楼层
indianjohn 发表于 2023-9-21 14:42:08|来自:北京 | 显示全部楼层
前言

上一篇主要讲述了soc的骨架,crossbar互联网路。现在来讲soc的神经末梢,它们依附在骨架上,受和调控制,并将外部信息分享给核心以及其他成员。它是什么呢?
它就是我们所说的标准总线。soc上所有模块想要被核心控制,都需要挂载到crossbar上,以便cpu下配置,以及cpu和dma进行数据传输。我们以最简单的APB总线入手,来进一步了解标准总线的工作原理。
1、APB协议简介

APB(Advanced Peripheral Bus) 作为高级外设总线是AMBA协议之一,也是最基本的总线协议。按照ARM官方定义,APB是一种低成本的接口协议,可以实现低功耗以及精简的接口设计,降低接口设计的复杂度。
APB协议不支持流水线设计,它主要应用在低带宽设计需求的接口中,高性能带宽需求可以使用AXI总线。APB协议的实现与时钟沿对齐,以简化外设接口的设计。每次传输至少需要消耗两个时钟周期
在SOC设计中,AHB一般作为IP的配置接口,包括低速IP如I2C,UART,I2S等,也包括DDR,PCIe,Ethernet等高速IP,可以方便的实现CPU对外设IP的寄存器配置。系统中一般会实现一个AXI2APB或者AHB2APB的转换桥将APB口挂载在系统上。
APB的传输信号只与时钟上升沿有关,故其具备以下优点:

  • 易于实现高频操作;
  • 性能与时钟占空比无关;
  • 静态时序分析简单;
  • 易于与基于上升沿的寄存器访问;
  • 易于集成到基于周期的仿真器中。
1.1、APB的发展史

协议已经从APB2.0发展到现在的APB4.0。具体区别如下:

  • APB2.0 :该版本协议定义基本的接口信号(具体可见端口信号章节,删除APB3.0有的接口就行);
  • APB3.0:增加信号PREADY用以指示slave准备好数据,增加信号PSLAVERR代表传输错误;
  • APB4.0:增加信号PROT保护类型,增加信号PSTRB来支持byte级的访问;
2.0和3.0的区别是什么?
APB2.0和APB3.0的差别:APB3.0提供了一个低功耗的接口,并降低了接口的复杂性。且APB3比APB2增加了两个信号:
PREADY:来扩展APB传输,主要是增加延时;
错误信号PSLVERR:来指示传输失败。
3.0和4.0的区别是什么?

  • 增加了PROT和PRSTB两个信号。
  • PPROT一种保护信号,用于支持APB上的非安全交易和安全交易。
  • PSTRB一个写选通信号,用于在写数据总线上进行sparse data transfer(稀疏数据传输)。APB4用的比较少。
APB协议向下兼容。
目前soc上最常用的是APB2.0和APB3.0,下面我们主要介绍这两个版本。
2、APB 2.0

2.1、APB2.0信号列表

这里需要区分Master和Slave的区别,Master是主机,Slave是从机,一个总机下可以有n个从机,所有的数据传输都是master来控制的,slave来回应。这里需要用到APB 1TO多bridge,APB bif不需要仲裁,只需要对地址的decode,如果地址处于某个slave的域内,就拉高它的PSELn等控制信号,n为slave号。



APB2.0信号

2.2 、状态机

通过PSELx和PENABLE信号的变化,使APB总线处于下面3个状态:




状态机


  • IDLE: PSELx和PENABLE都为0,表明master和slave之间无通信请求,因此处在该状态。
  • SETUP:当master和某一个slave之间准备进行数据传输时,会进入该状态,这时PSELx=1,PENABLE=0。意思是master选中某一个slave告诉slave我准备要和你交换数据啦,请你准备好!这个状态会保持一个时钟周期然后进入ENABLE状态。这个状态可以直接给wdata。
  • ENABLE:这个时候PENABLE拉高,master和某一slave进行数据传输,持续一个时钟周期。这个状态开始等待rdata。
在自己写master时,就按照这个状态输出控制信号就可以了。
2.3 、写操作

下面就是写传输的时序图:



写时序


  • T1~T2:这个阶段master和某一slave无交互数据,因此处于IDLE状态。
  • T2:在该时刻,master准备将数据写入某一slave中,因此进入SETUP状态,同时把某一slave的PSEL信号拉高,PWRITE信号拉高,这表示master告诉某一slave:我即将要和你进行数据传输,是我把数据写到你里面,请你准备好!同时改变PADDR和PWDATA信号,这是为了满足下个上升沿的时序。
  • T2~T3:保持一个时钟周期。
  • T3:此时将PENABLE信号拉高,真正将wdata写到addr。
  • T3~T4:保持一个时钟周期。
  • T4:数据传输结束,再次回到初始状态。
2.4、读操作




读时序


  • T1~T2:这个阶段master和某一slave无交互,因此处于IDLE状态
  • T2:在该时刻,master准备从某一slave中读取数据,因此进入SETUP状态,同时把某一slave的PSEL信号拉高,PWRITE信号拉低,这表示master告诉某一slave:我即将要和你进行数据传输,是我要读你的数据,请你准备好!同时改变PADDR,这是为了满足下个T4采样沿的时序。
  • T2~T3:保持一个时钟周期。
  • T3:此时将PENABLE信号拉高,表示master正式把某一slave之中的数据读出来,注意,数据在ENABLE周期末尾的时钟上升沿被采样,也就是T4时刻。
  • T3~T4:保持一个时钟周期。
  • T4:数据传输结束,再次回到初始状态。
3、APB 3.0

APB 3.0协议是在APB 2.0协议的基础上新加了2个信号,PREADY和PSLVERR组成的;PREADY信号是slave设备用来表示slave是否准备好的信号,PSLVERR是表示slave接收的数据是否有误。
信号表



APB3.0信号

3.1、写操作

写操作,无等待



写无等待时序

该种情况和APB2.0没有任何区别,当PENABLE拉高后,会检查PREADY是否拉高,如果拉高表示slave当前准备好了数据传输,则在上升沿3将数据写给salve。
写操作,有等待



写有等待时序

如果PENABLE拉高后,发现PREADY没有拉高,则表示slave还没有准备好数据传输,这时所有信号保持不变直到PREADY拉高,在上升沿5将数据写入。
3.2、读操作

读操作,无等待



读无等待时序

该种情况和APB2.0没有区别,与写操作无等待类似,不再细说
读操作,有等待



读有等待时序

当PENABLE拉高后,发现PREADY信号还没有拉高,表示slave还没有准备好,这时会等待直到PREADY信号拉高,在上升沿6时刻采样数据

3.3、错误反馈

PSLVERR来指示APB传输上的错误情况。读取和写入事务都可能发生错误。当PSEL,PENABLE和PREADY均为高电平时,仅在APB传输的最后一个周期内才认为PSLVERR有效,其他时间不考虑PSLVERR。
写操作



slverr写时序

在前面的有等待的写操作的基础上,添加PSLVERR,也就是在T4时刻采样,发现PSEL,PENABLE和PREADY均为高电平的前提下,PSLVERR为高,说明这次数据传输有错误。软件决定后续行为。
读操作



读slverr时序

在前面的有等待的读操作的基础上,添加PSLVERR,也就是在T5时刻采样,发现PSEL,PENABLE和PREADY均为高电平的前提下,PSLVERR为高,说明这次数据传输有错误。软件决定后续行为。
4、APB应用场景。

APB因为其面积小,接口少,经常用在外设上,为什么呢?
因为soc上外设很多,包括spi,i2c,uart,timer,wdt等,他们对时钟要求不高,如果使用APB接口,可以省面积,降低芯片的复杂度。这也是为什么外设优先的标准接口是APB。
这里主要讲一些APB在SOC上的特殊用法。

  • 某些IP预留用户控制信号,我们需要用寄存器控制此信号,一般soc每个子系统都会有一个模块专门做这个事情,这是就可以选择APB接口用来配置这些寄存器。
  • 某些IP,例如SRIO,serdes预留用户配置接口,synosys叫做cr配置口,用于配置或者debug。这时候我们可以自己写一个APB2CR的桥。
  • 核间通讯模块。通过写寄存器产生中断输出,这时候可以使用APB接口,因为中断发生次数少,无性能要求,可以使用APB,简单。
  • APB转sram接口或者APB转fifo。某些模块对外接口是sram,需要我们使用转接桥,根据性能我们选择使用合适的AMBA总线;自研模块数据缓存时,涉及到异步处理,这时候可能用到APB转FIFO的设计。
但是他也有局限,带宽低且不支持pipeline,所以module有这些要求不要使用APB。
这次花时间也整理了目录,方便大家观看,APB真的应用很广泛,大家不管是做设计还是验证,都会经常和它打交道,多多了解没啥坏处。
leon30802002 发表于 2023-9-21 14:43:07|来自:北京 | 显示全部楼层
自学入门,现身说法。
zmy609 发表于 2023-9-21 14:44:07|来自:北京 | 显示全部楼层
这是我写过一篇文章,主要讲解数字IC设计和FPGA开发的关系,以及数字IC设计的流程和需要学习的内容。
给出结论:
数字芯片设计包括:数字前端和数字后端,具体划分:数字前端、数字验证、DFT(Design For Test)和数字后端。
数字IC设计和FPGA开发的关系:数字IC设计前端(和你具体的是数字IC前端的设计部分,也就是芯片功能代码编写部分)和可以理解为FPGA开发;同时还有一些嵌入式FPGA开发工程师,专门用FPGA实现某一场景的功能,也是一种职业。
其实很多人都会有疑问,我们做FPGA开发到底和数字芯片设计有什么关系,或者说两者有什么区别,最近我做了一些调研,因为我个人打算做数字IC前端设计,所以后端的内容可能讲的会浅一些,OK!大概分以下几方面为大家阐述:

  • FPGA和数字ASIC的区别
  • 做FPGA开发转ASIC需要补充哪些学习内容
  • 做数字IC工程师需要具备哪些技能
文章比较长,同时不能把内容讲的很全面,不过看完本文会对数字IC设计有所了解,对进一步学习会很有帮助。
一:FPGA和数字ASIC的区别

先上一张图,然后展开讲解:
层面FPGA)ASIC
时钟设计推荐同步时钟设计;全局时钟驱动异步时钟设计;全局门控时钟树驱动
布线方式布线较为局限布线很灵活
功耗较高较低
设计频率相对较低相对较高
设计周期
开发成本
产品价格
灵活性易于修改,可重复编程不可修改,不能重复编程
应用适合于不断演进的标准高速、复杂、低功耗设计

  • 时钟设计
首先同步几个概念:
同步时钟:当两个时钟间的相位是固定关系的,则可以称这两个时钟为同步时钟(synchronous clock)。一般同源,如同一个MMCM or PLL产生的两个时钟可以称为同步时钟,因此可以将主时钟和与之对应的衍生时钟约束成同一个时钟组。简单理解就是假如一个时钟1G,一个时钟是2G,2G/1G = 2(整数),为同步时钟。
异步时钟:无法判定两个时钟间相位时,则可以称这两个时钟为异步时钟(asynchronous clocks)。通常情况下设计中不同的主时钟一定是异步时钟,因此可以将这两个主时钟及其衍生时钟约束成不同的时钟组。简单理解就是假如一个时钟1G,一个时钟是1.5G,1.5G/1G != 整数,为异步时钟。
时钟树:由许多缓冲单元(buffer cell)平衡搭建的网状结构,有一个源点,一般是时钟输入端(clock input port),也有可能是design内部某一个单元输出脚(cell output pin),然后就是由一级一级的缓冲单元搭建而成,具体的多少级,根据你的设置以及所使用的单元而定,目的就是使所用终点的clock skew(一般最关心这个)、insertion delay以及transition了,满足设计要求。
门控时钟:在数据无效时,将寄存器时钟关闭的技术,能够有效降低功耗,是低功耗设计的重要方法之一。门控时钟是一个逻辑模块,在寄存器的输入数据无效时,将寄存器的输入时钟置为0,而此时寄存器值保持不变,此时没有时钟翻转,避免了动态功耗。
看完这几个概念之后,可能对FPGA和ASIC时钟设计有一定的概念了。
(1)FPGA时钟管理
在FPGA设计中采用全局时钟(同步时钟)资源驱动设计的主时钟,目的达到最低的时钟抖动和延迟。FPGA 全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O单元(IOB)和选择性块RAM(Block Select RAM)的时延和抖动都为最小,如下图所示。为了适应复杂设计的需要,Xilinx的FPGA中集成的专用时钟资源与数字延迟锁相环(DLL)的数目不断增加。


FPGA的时钟包括三种,附一张A7的FPGA时钟图:



1)全局时钟
FPGA的全局时钟是从晶振分出来的,最原始的频率。其他需要的各种频率都是在这个基础上利用PLL或者其他分频手段得到的,上面的图BUFG是全局时钟缓冲器,可用作时钟使能电路,以使能或禁用跨越多个时钟区域的时钟。
2)区域时钟
上图中的BUFR为区域缓冲器,驱动同一时钟区域中的所有时钟目的地,并可编程输入时钟频率。
3)IO时钟
IO时钟缓冲器(BUFIO)驱动I/O时钟,提供对同一I/O bank中所有时序I/O资源的访问,上图中没有标出。
这里不详细介绍FPGA时钟管理,下面的文章讲的还不错。
Xilinx 7系列FPGA架构之时钟资源(一)
(2)ASIC的是时钟设计


上图的STM32F4的时钟,搞过嵌入式的都知道,我们在配置时钟时需要对时钟的使能,不然肯定是不可以用的,在这里我们可以理解为STM32采用门控时钟驱动。
总结:
FPGA推荐采用同步时钟设计,但是有时避免不了跨时钟域操作,下面的FPGA跨时钟域的说明
FPGA基础知识19(FPGA异步时钟设计中的同步策略 异步时钟 打两拍 握手机制)其实两者最大的区别是:
(1)FPGA时钟树已经给定,我们只需要配置,而ASIC需要后端设计人员设计时钟树。
(2)FPGA未采用门控时钟设计,而ASIC一般为门控时钟驱动。
2. 布线方式
(1)FPGA的布局布线
FPGA是由许多的逻辑单元构成的,逻辑单元包括门、查找表、和触发器。它们的位值已经固定,使用FPGA厂商提供的软件工具,根据所选芯片的型号将综合输出的网表适配到具体FPGA器件上,这个过程就叫做布局布线。所谓布局(Place),指将逻辑网表中的硬件原语或者底层单元合理地适配到FPGA内部的固有硬件结构上,布局的优劣对设计的最终结果(在速度和面积两个方面)影响很大。所谓布线(Route),是指根据布局的拓扑结构,利用FPGA内部的各种连线资源,合理正确连接各个元件的过程。FPGA的结构相对复杂,为了获得更好的实现结果,特别是保证能够满足设计的时序条件,一般采用时序驱动的引擎进行布局布线,所以对于不同的设计输入,特别是不同的时序约束,获得的布局布线结果一般有较大的差异。
(2)ASIC的布局布线


上图可以看到,ASIC的布局布线较为复杂,需要按照设计规则,灵活布线。
3. 功耗
之所以FPGA功耗比ASIC高,与FPGA内部结构有关,FPGA基于占用大量硅面积的、每个单元六个晶体管的静态存储器(SRAM)的查寻表(LUT)和配置元件技术的FPGA,其功耗要比对等的ASIC大得多。查找表结构含义可以理解为使用查找表结构来实现一部分功能,会有资源的浪费。ASIC可以使用低功耗技术,像门控时钟、DVFS(SOC级别技术)等技术降低功耗。
4. 设计频率
实现同样的功能,做成ASIC的频率至少高于FPGA实现的2~3倍,这里简单说明ASIC的频率为什么会比ASIC的设计频率高:
FPGA内部是门、查找表、触发器,每个硬件单元的位值固定,为了实现我们的功能,进行搭积木的操作,这就会出现以下问题:
(1)布局方面(器件导致的延迟),FPGA无法改变每个硬件资源的位置,增加了布线的长度,ASIC相对比较灵活,可以根据需求摆放逻辑单元的位置。
(2)布线方面(走线延迟),FPGA由于逻辑单元的位置增加布线长度,还有本身的LUT结构,也会增大信号传输的时延。
详细可以参考:
为什么ASIC的频率可以达到GHz,而FPGA只能达到几百MHz?5. 设计周期
这里给出两张图



FPGA开发流程


大概可以看出,ASIC开发周期要比FPGA长很多,主要的时间差还差在ASIC设计中验证和后端。
6. 开发成本
ASIC比FPGA开发成本高主要有以下几点原因:
(1)ASIC开发周期比FPGA开发周期长,会投入更多的人力资源。
(2)ASIC流片费用很贵,Cost=Masks+N×Wafers,即:价格 = 掩膜+N×硅片,掩膜的费用较高。
7. 产品价格
上面阐述实现同样功能,FPGA相对于ASIC有大量的资源冗余,或者说FPGA结构更为复杂,导致相同的产品做成FPGA的价格要高于ASIC。
注:虽然流片成本高,Cost=Masks+N×Wafers,主要还是在Masks,如果量产上亿颗,每个硅片的价格显然会下降。
8. 灵活性
FPGA(Field Programmable Gate Array)
ASIC(Application Specific Integrated Circuit)
9. 应用
(1)因为FPGA具有灵活性,所以用到适合于不断演进的标准中,或者是用量比较小的场景。
(2)因为ASIC的性能比FPGA强,所以适用于高速、复杂、低功耗设计。
二:做FPGA开发转ASIC需要补充哪些学习内容

首先先同步几个概念:
亚稳态和跨时钟域的概念:
亚稳态与跨时钟域建立时间:时钟沿到来之前数据所要保持稳定的时间。
保持时间:时钟沿到来之后数据所要保持稳定的时间。
DVFS:DVFS 即动态电压频率调整,动态技术则是根据芯片所运行的应用程序对计算能力的不同需要,动态调节芯片的运行频率和电压(对于同一芯片,频率越高,需要的电压也越高),从而达到节能的目的。
STA:静态时序分析,对建立时间和保持时间的分析。

  • 数字IC流程讲解
在这里大概再总结以下数字IC设计,根据下图进行讲解:


(1)系统需求说明
做市场调研,确定数字IC的功能、性能指标、完成设计的基本算法。
(2)高级算法建模与仿真
这部分一般指定数字IC功能的行业人员来做,如做数字信号处理芯片、基带芯片、雷达的芯片,使用matlab对一些算法进行仿真;做数字图像处理的芯片,使用C/C++仿真图像/时频的算法仿真,这两部分一般由通信的专业或计算机专业的人来做。
(3)软硬件的划分和任务的分配
哪些部分用软件来做,哪些部分用硬件来做;软件在操作系统来跑的代码,硬件方面是硬件逻辑电路(底层的晶体管电路)实现。完成这一部分后,分成两路,一路人做软件,一路人做硬件。根据第二步的高级算法建模与仿真,软件做相应的模块,硬件做相应的模块,编写Verilog代码。
(4)软硬件接口的定义
这里可以理解为硬件实现的部分通过什么方式和CPU进行数据交互,常见的硬件接口:IDE(Integrated DriveElectronics,电子集成驱动器)、SCSI(SmallComputerSystemInterface,小型计算机系统接口)、USB、RS232/485、VGA、HDMI、PCIe等。接口选取或定义根据性能指标(吞吐量)或数据传输的类型(串行/并行)。
(5)进一步的精确分析,编写出芯片的spec(说明书)。
有了spec,就可以进行数字芯片设计了。
下面主要介绍数字IC前端、验证、DFT和后端的设计,流程下图所示(每个公司设计流程主要是在验证和STA方面有差异,越大的公司分工越细,验证和STA操作越多):


(1)RTL设计。编写VHDL、Verilog或System Verilog硬件描述语言对寄存器之间的传输进行描述。
(2)功能仿真,编写test bench,对照spec进行电路功能进行验证。
(3)逻辑综合、DFT。逻辑综合将RTL代码生成门级电路——逻辑网表(和我们做PCB设计类似,逻辑网表相当于原理图,上面通过网络标号将各个部件连接,这里会编写约束文件{FPGA开发中的xdc文件类似}进行逻辑综合);DFT:在进行电路的前端设计时,就预先规划、设计出如何在样片中进行电路的测试方案和办法,并通过逻辑综合过程完成芯片内部专用测试结构的插入,一遍在芯片形成后能按照预先制定的方案进行相应的电路功能测试的一种设计方法。也就是进行可测性设计,就是在原有的电路中插入专门测试的电路(插入电路)。
(4)形式验证。对设计过程中不同阶段的输出结果进行逻辑功能一致性的对比,根据电路的结构,判断两个设计在逻辑功能上是否对等。下面这篇文章将形式验证讲的很清楚:
你不可不知的验证方法(5)STA。通过EDA工具,提取电路中所以路径的延迟信息进行分析,计算出信号在路径上的延时,检查时序是否满足设定的时序约束要求。
(6)版图物理规划。通过对EDA工具进行输入标准单元库、标准I/O库、综合后的网表、各种约束文件等,规划好让EDA工具完成各模块的位置摆放、电源网络的设定、I/O信号出口位置、同时确定面积、封装、工艺、噪声、负载能力等参数。
(7)功耗分析。确定电源引脚的位置和电源线的宽度是否满足要求。对整个版图进功耗分析,即要进行动态功耗分析跟静态功耗分析,找出主要的功耗单元或者模块,以供优化。
(8)单元布局与优化。根据floor-plan中的布局规划,摆放网表中调用的所以标准单元,EDA工具自动对时序约束、布线面积、布线拥堵等综合考虑标准单元的摆放,从而依靠EDA工具完成电路的布局设计跟优化(Floor Plan主要目的是要确定design的形状大小,出Pin的位置已经所有macro的摆放)。
(9)时钟树综合(clock tree synthesis,CTS)。EDA工具按照约束,插入buffer,使时钟的源头(时钟根节点)到达各个需要时钟驱动的器件(各叶子节点,如触发器)的时间基本一致的过程。
(10)自动布线。完成模块、节点的相互连线。
(11)STA。这一次的STA比较重要,结果也是最准确的,作用与上述相同。
(12)DRC(设计规则检查)。检查连线间距,连线宽度等是否满足工艺要求。
(13)LVS(版图电路图一致性检查)。检查芯片的功能是否和设计预期一致,同时分析性能是否满足需求。
总结:
(1)可以看出整个芯片设计的流程战线拉得很长,每一部分在公司中都会有对应的职业,Verilog代码编写只占一小部分,对于ASIC设计过程中编写的Verilog根据前面的建模仿真和后端的需求来编写。
(2)在项目启动,做好spec后,此时验证、DFT、后端同时进行,设计方面开始根据spec编写Verilog;验证根据spec搭建UVM验证;DFT工程师也会搭建一系列测试框架;后端编写一系列的脚本文件。
(3)像STA,逻辑综合,前端和后端都需要掌握。
2. 做FPGA开发转数字ASIC补充学习内容
1)ASIC时序更为复杂(时序优化问题,STA或DFT):性能评估和性能优化的各种优化手段,以及针对建立时间和保持时间的计算和优化。
2)功耗:ASIC存在各种优化功耗手段(系统级、架构级、代码级、综合、布局布线、版图等),门控时钟,门控电压,DVFS等。
3)FPGA推荐同步时钟,ASIC异步时钟(全局异步、局部同步)设计(时钟树的设计);重点是多时钟域的亚稳态处理。
3.  建议参考文献:
(1)Bhasker J, Chadha R. Static timing analysis for nanometer designs: A practical approach[M]. Springer Science & Business Media, 2009.
STA分析的经典书籍(前端设计和后端设计都需要掌握,非常重要)
(2)这本书主要讲DC(Design compiler,synopsys公司的综合工具),synopsys公司一家独大!!


(3)数字VLSI芯片设计 使用cadence和synopsys cad工具,介绍如何使用Cadence和Synopsys公司的CAD工具来实际设计数字VLSI芯片。(Very Large Scale Integration,超大规模集成电路)


(4)数字IC设计:方法、技巧与实践,本书内容主要是数字芯片前端设计,不涉及模拟或是混合电路的芯片设计,而前端是指在进行物理设计(布局布线)之前的内容。


(5)数字集成电路物理设计(做数字IC后端的经典书籍)


参考书籍下载地址:
数字IC设计参考文献,共5.rar-电信文档类资源-CSDN下载三:做数字IC工程实需要具备你哪些技能


  • 前端设计(数字芯片设计工程师)
紫光展锐:


总结主要工作:
(1)读文档和写文档。两个文档分别叫Function spec和Design spec。所有工程师都需要写很多文档,依照文档去做设计。读文档主要包含很多各种各样的协议,比如USB协议,SD卡协议等,文档占了前端设计工程师很大的工作量。
(2)编写代码。主要用到的语言是Verilog,有时候也会用到C语言和C++。写出的代码叫RTL,有经验的工程师写出的代码风格都比较好,因为代码最终都要变成电路,他们更加了解每句话最终变成电路是什么样的,这是比较核心的技能。如果是做SOC的工程师,那么对CPU也需要了解。
(3)Debug。非常重要的一个环节,对于前端设计工程师来说,大约20%的时间用来写代码,80%的时间用来debug,且前端设计工程师的debug会贯穿整个流程。
(4)support。因为最初的源头代码是前端写的,所以前端往往需要从前跟到后,甚至到最后FPGA的上板测试,原型验证流程、点亮都需要进行支持。
2. 数字验证


(1)读文档和写文档。两个文档分别称:Verification spec、Test plan。
(2)编程搭建验证平台:通常是用Systemverilog/UVM,如果做SOC,则用到C或C++。验证工程师也需要学习很多脚本语言,如Perl、Makefile、python等。
(3)Debug。创建测试用例,跑仿真。
(4)support。同样验证工程师也需要提供一些技术支持。
数字前端设计工程师和数字验证工程师的核心能力:
(1)学习各种标准/文档的能力。
(2)编程能力。
(3)Debug能力。
3. DFT(做DFT没有明确的划分)
(1)EDA工具使用。将DFT技术,常见的如Scan,Mbist,Boundary Scan技术,实现到设计中。
(2)编程。产生测试向量并验证测试向量,编程其实相对较少,基本是在原来的模板上去修改,对编程技能要求没有那么高,能做基本编程即可。根据实际情况,有些公司DFT也分为DFT Design和DFT Verification两个岗位。
(3)协助后端工程师完成test模式的时序收敛。
(4)协助测试工程师进行机台测试,debug failure,提高芯片良率,后期的ATE测试,也是DFT工程师经常要做的工作。
4. 数字后端


(1)逻辑综合。把写的代码综合成网表,当然,逻辑综合后面还有一些小流程,包括形式验证。
(2)自动布局布线。将把网表转化为版图。
(3)静态时序分析(STA)。数字后端非常核心的一个环节,怎样做好STA,怎样修掉timing至关重要。
(4)物理验证:最终变成版图之后,还需要做一些物理验证,主要是做一些DR,CR,LBS。
(5)功耗分析:对功耗做预估,后续对芯片做酵母分析的时候需要用到这些值
综上,后端设计工程师要做的事情是非常多的,但每家公司对后端的要求都不同,有些大公司里,上面5个步骤,每个步骤都有专门的人做,小点的公司可能就要多做几个步骤,甚至全部都要做,有的小公司可能不会去做功耗分析。
后端设计工程师需要掌握的东西会比较多,但是不要求每一项都很精通。
核心技能要求:
(1)EDA工具使用:需要掌握Innovus/Encounter,ICC/ICC2,DC等等多种工具。
(2)脚本语言:TCL、Perl、Python等。
(3)分析报告。
(4)修错误。
以上是本人最近调研的总结,欢迎大家一起交流讨论,有问题请指正。
最后附上新手刷题网站:
HDLBits日常巩固和入职前刷题网站:
知乎 - 安全中心
WAITWIND 发表于 2023-9-21 14:44:43|来自:北京 | 显示全部楼层
看题主描述应该是科班毕业,相信电路,数电,Verilog已经了然于心。
如果是非科班毕业,强烈建议先从电路,数电,和Verilog学起。
IC设计基础

慕课上西工大有一门国家精品课程:
电路基础_西北工业大学_中国大学MOOC(慕课)如果觉得跟着老师学习慢,或者想自学,推荐以下参考书:

  • 《电路基础》--西安电子科技大学出版社
这本书是西电的教材,我当时学的就是这一本。
2. 可能很多人在学校的教材是高教版的电路,也有很多同学学的是这本国外的《电路基础》。
其实任何一本参考书差别都不是很大,有一本足矣。就我在数字IC相关工作经验来看,电路基础的知识在日常工作中并不一定时刻都会用到,但我依然推荐从电路基础入手,一是简单易学,二是为学习数电打一下基础,三是电路的基本sense要有。否则有问题都不知道怎么问,或者同事给你解释,你也听不懂。
Verilog建议过一遍语法,然后直接去HDLbits刷题。
<a data-draft-node="block" data-draft-type="link-card" href="http://link.zhihu.com/?target=https%3A//hdlbits.01xz.net/wiki/Main_Page" data-image="http://pic3.zhimg.com/v2-fd56f5bd4754096540e5c5aca8b8a1e6_ipico.jpg" data-image-width="270" data-image-height="270" class=" wrap external" target="_blank" rel="nofollow noreferrer">HDLBitsIC设计工具

多数情况下,IC设计都是在Linux系统下进行的,所以Linux的基本操作,shell语言要掌握。其次perl、TCL、makefile等也是技能树必备的一部分。
IC设计进阶

关于进阶知识,基本就要分方向了。比如设计精通经典电路的RTL设计、时序分析、逻辑综合、低功耗设计等。针对不同的芯片方向所需要的的知识技能也不同。CPU、GPU、SoC芯片要学习计算机体系结构,要懂AMBA总线协议等。车规芯片要学习CAN协议,LIN协议。
如果是验证的话,则要会C++、SV、UVM平台等。不同公司,或者同一家公司,不同的IP/SoC所采用的验证策略都不一样。
DFT方向则对Scan、ATPG、M/LBIST,EDT等知识有要求。
后端则对布局布线,静态时序分析,物理验证等知识有所侧重。
同样,不同的设计方向都会用到用到EDA工具,多多使用,孰能生巧。
当然,进阶知识如果不是做项目,而是仅仅从书本上学是很困难的。尤其IC设计是一个比较重经验的行业。对没有基础的人来说,门槛还是挺高的。尤其过程中会遇到非常多的问题,没人指导也很容易就放弃了。
ggm 发表于 2023-9-21 14:45:19|来自:北京 | 显示全部楼层
一个材料转验证的入行小白说下转行经历,单纯经验分享欢迎讨论
我是纯非科班,对于半导体的最大的认知是半导体物理那本书,对于模电数电还是Verilog都比较陌生,那时候在材料光电厂接触过之前的同事都转到IC才打开了新大陆,就先自学了一段时间,可是最终夭折,一个是没有时间厂里需要三班倒的,二是0基础实在不知道从哪入手;后来就选择了报班,先经历了4个月在职理论学习,之后到了实训阶段就辞职去他们公司参与项目参与流片,在这期间也不断地在看工作。
一般的学习路径就是先学习Linux、Verilog、数电模电、以及集成电路等,然后再根据你的方向具体看你的专业学习,我因为材料非科班所以转了验证,后期学习的主要就是SV和uvm还有协议算法、跨时钟域、STA、状态机啥的,非科班转行真的不是很容易,还是很有难度的,所以坚持更为重要
我总结下我转行的经验:基础知识+项目+时机
基础知识:Linux、Verilog、数电模电啥的,这个大家要根据自己选择的方向学习
项目:比赛(集创赛)、报班(跟项目,参与流片)、教研室
时机:想清楚要入行的话就今早,后面竞争大
书籍推荐:
1、《FPGA深度解析》,FIFO部分很好
2、《verilog数字系统设计教程》,夏宇闻老师的蓝皮书,这本书里包含很多考试知识点
3、《SOC设计方法和实现》,郭炜老师,低功耗设计很好;
4、《高级FPGA设计结构、实现和优化》,时序优化讲得很好,结合代码讲解时序优化的各个方法。
5、《数字电子技术基础》,阎石,很多基础笔试、画图题都源于这本书
6、《硬件架构的艺术》,亚稳态和跨时钟域部分的内容很好
7、《UVM实战》白皮书
若有不对,欢迎指正~最近有很多好友私信问我咋转的以及让推荐培训班~看到后第一时间回,谁要是想要深入了解IC岗位、领资料或者学习路线,也可以直接测试提问
IC转行交流社区+入行指导+免费领资料
等啥都明白了再决定是否转行,切记不要冲动不要盲目!!!!

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则