芯片相关工艺01——芯片反向工程



参考网址:http://www.ednchina.com/news/article/20170601IC?utm_source=EDNC%20Article%20Alert&utm_medium=Email&utm_campaign=2017-06-01

<--------------------------------------------------------------->

逆向设计非常适合模拟芯片设计,如ADCDAC、锁相环等模拟电路,因为模拟电路的设计往往靠经验。此外,对于10万门以下的数字电路也适合,对于混合信号电路来讲,可以适合模拟部分的反向设计服务。在时间方面,普通的逆向设计往往需要3-5个月,而小于10万门的数字电路逆向设计一般需要2-3个月。

数字电路的反向是非常困难的,因为一般来说大规模的数字处理单元是通过程序综合成晶体管级电路,自动出layout,模拟电路部分相对容易,因为规模也很小,模拟电路的layout都是手工设计的,管子数量有限,电路层次化之后有经验的人很容易看出其功能,另外一点需要注意的是,反向别人的芯片,工艺的选择是一个重点,因为你选择的foundry可能和人家芯片的foundry不是一家,甚至工艺都不一样,你能学来的是别人的电路结构,完全照抄别人的电路(包括管子尺寸的大小,电容的大小,电阻的宽长等等)可能造成电路根本不能正常工作。

目前在国内,芯愿景公司、台湾宜硕也提供逆向设计服务;国际上著名的逆向设计企业主要有ChipworksSemiconducto Insights(SI)公司。

拆解:把要拆解的芯片放置在装了浓硫酸的容器里,容器需要盖住,但不能严实,这样里面的气体才能漫溢出来。把容器里的浓硫酸加热到沸腾(大约 300 摄氏度),在瓶底的周围铺上苏打粉——用来预防意外飞溅出来的硫酸液和冒出来的硫酸气体。

照相:在显微图像自动采集平台上逐层对芯片样品进行显微图像采集。与测量三维实体或曲面的逆向设计不同,测量集成电路芯片纯属表面文章:放好芯片位置、对对焦、选好放大倍数,使芯片表面在镜头中和显示器上清晰可见后,按下拍照按钮便可完成一幅显微图像的采集。取决于电路的规模和放大倍数,一层电路可能需要在拍摄多幅图像后进行拼凑,多层电路需要在拼凑后对准,有显微图像自动拼凑软件用于进行拼凑和对准操作。

该显微图像自动采集平台的放大倍数为1000倍,可将0.1um线条的放大至0.1mm的宽度。这意味着它已足以对付目前采用最先进工艺制作的0.09um集成电路芯片。

提图:集成电路由多层组成,每层用光刻工艺由光掩膜加以确定。制造集成电路时用的掩膜上的几何图形就是版图,版图是集成电路对应的物理层。

现在提图工作已经可以由电脑全部完成了。主流的电路原理图分析系统已经具有多层显微图像浏览、电路单元符号设计、电路原理图自动和交互式分析提取以及电路原理图编辑等强大功能,版图分析系统则可完成多层版图轮廓自动提取、全功能版图编辑、嵌入软件代码自动识别、提取、校验以及设计规则的统计和提取。

整理:数字电路需要归并同类图形,例如与非门、或非门、触发器等,同样的图形不要分析多次。提出的电路用电路绘制软件绘出(ViewWork、Laker、Cadence等),按照易于理解的电路布置,使其他人员也能看出你提取电路的功能,提取电路的速度完全由提图人员经验水平确定。注意,软件是按照版图的位置把各组件连接起来,如果不整理电路是看不出各模块的连接及功能的,所以完全靠软件是不能完成电路功能块划分和分析。

分析:提取出的电路整理成电路图,并输入几何参数(MOS为宽长比)。通过你的分析,电路功能明确,电路连接无误。

仿真:对电路进行功能仿真验证。模拟电路一般采用Hspice、Cadence等工具,小规模数字电路采用Cadence,Hsim等工具。根据新的工艺调整电路,调整后进行验证。

验证:对输入的电路原理图进行浏览、查询、编辑、调试与仿真。分析电路原理,调节电路参数,并在一定的激励输入下观测输出波形,以验证设计的逻辑正确性。要对提取的网表作仿真验证,并与前仿结果对比,版图导出GDS文件,Tape out(将设计数据转交给制造方)。

<--------------------------------------------------------------->

收集一下别人写的芯片制造相关的资料!

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
反向传播算法(Backpropagation)是一种用于训练神经网络的常见优化算法。它通过计算损失函数相对于每个参数的梯度,并使用梯度下降来更新参数。下面我将给出反向传播算法的公式推导及示例代码。 1. 反向传播算法公式推导: 首先,定义神经网络的损失函数为L,该函数是由网络输出和真实标签之间的差异计算得出。假设神经网络有多个隐藏层,每个隐藏层的参数为W和b。 1.1 前向传播: 首先,我们通过前向传播计算每一层的输出值。假设输入为x,第l层的输出为a[l],则有: a = x z[l] = W[l] * a[l-1] + b[l] a[l] = g(z[l]) 其中,g()是激活函数。 1.2 反向传播: 接下来,我们需要计算损失函数相对于每个参数的梯度,然后使用梯度下降更新参数。假设我们有L层神经网络,则有以下公式: 输出层的梯度: dz[L] = dL / da[L] * g'(z[L]) 隐藏层的梯度: dz[l] = (W[l+1]的转置 * dz[l+1]) * g'(z[l]) 参数梯度: dW[l] = dz[l] * a[l-1的转置] db[l] = dz[l] 更新参数: W[l] = W[l] - learning_rate * dW[l] b[l] = b[l] - learning_rate * db[l] 其中,dL / da[L]是损失函数对输出层输出的导数,g'()是激活函数的导数。 2. 反向传播算法示例代码: 下面是一个使用反向传播算法进行训练的示例代码: ```python # 假设网络有三个隐藏层 hidden_layers = [10, 20, 30] output_size = 2 # 初始化参数 parameters = {} layers_dims = [input_size] + hidden_layers + [output_size] L = len(layers_dims) - 1 for l in range(1, L + 1): parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l-1]) * 0.01 parameters['b' + str(l)] = np.zeros((layers_dims[l], 1)) # 前向传播 def forward_propagation(X, parameters): caches = [] A = X for l in range(1, L): Z = np.dot(parameters['W' + str(l)], A) + parameters['b' + str(l)] A = sigmoid(Z) cache = (Z, A) caches.append(cache) Z = np.dot(parameters['W' + str(L)], A) + parameters['b' + str(L)] AL = softmax(Z) cache = (Z, AL) caches.append(cache) return AL, caches # 反向传播 def backward_propagation(AL, Y, caches): grads = {} dZ = AL - Y m = AL.shape[1] grads['dW' + str(L)] = 1/m * np.dot(dZ, caches[-1][1].T) grads['db' + str(L)] = 1/m * np.sum(dZ, axis=1, keepdims=True) for l in reversed(range(1, L)): dA_prev = np.dot(parameters['W' + str(l+1)].T, dZ) dZ = dA_prev * sigmoid_derivative(caches[l-1][0]) grads['dW' + str(l)] = 1/m * np.dot(dZ, caches[l-1][1].T) grads['db' + str(l)] = 1/m * np.sum(dZ, axis=1, keepdims=True) return grads # 参数更新 def update_parameters(parameters, grads, learning_rate): for l in range(1, L+1): parameters['W' + str(l)] -= learning_rate * grads['dW' + str(l)] parameters['b' + str(l)] -= learning_rate * grads['db' + str(l)] return parameters # 训练模型 def train_model(X, Y, learning_rate, num_iterations): for i in range(num_iterations): AL, caches = forward_propagation(X, parameters) cost = compute_cost(AL, Y) grads = backward_propagation(AL, Y, caches) parameters = update_parameters(parameters, grads, learning_rate) if i % 100 == 0: print("Cost after iteration {}: {}".format(i, cost)) return parameters # 使用示例 parameters = train_model(X_train, Y_train, learning_rate=0.01, num_iterations=1000) ``` 这是一个简单的反向传播算法示例代码,其中的sigmoid()、softmax()、sigmoid_derivative()和compute_cost()函数需要根据具体情况自行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值