🌍首页
📁归档
⏳时光机
🚩友链
📫留言
📧订阅
🌟推荐
📕考研课程
🏜️ 免费壁纸
❤ 捐助本站
💰资助名单
🎵音乐实验
Search
1
【NPN/PNP三极管】放大电路饱和失真和截止失真的区别
20,124 阅读
2
论文写作中如何把word/wps里面所有数字和字母替换为新罗马字体
10,686 阅读
3
【高数】形心计算公式讲解大全
9,063 阅读
4
Vivado-FPGA Verilog烧写固化教程
8,028 阅读
5
【概论】一阶矩、二阶矩原点矩,中心矩区别与概念
7,836 阅读
🪶微语&随笔
励志美文
我的随笔
工作办公
📡电子&通信
嵌入式&系统
通信&信息处理
编程&脚本笔记
⌨️IC&系统
FPGA&ASIC
VLSI&IC验证
EDA&虚拟机
💻电子&计算机
IP&SOC设计
机器学习
软硬件算法
登录
/
注册
VLSI&IC验证(共21篇)
找到
21
篇与
VLSI&IC验证
相关的结果
Python与Verilog实现卡尔曼滤波器 — 机器人位置估计
摘要:本文介绍了卡尔曼滤波在机器人位置估计中的应用,分别用Python和Verilog实现了卡尔曼滤波器,并对比了两种实现方式的优缺点。目录 一、引言:为什么机器人需要卡尔曼滤波? 二、卡尔曼滤波的五大核心公式 三、以机器人为例卡尔曼公式实现和说明设计运动 传感器的观测值 卡尔曼滤波 四、Verilog实现:定点运算与硬件加速4.1 系统架构 4.2 核心代码解析(1)Kalman_1:状态预测(公式1) (2)Kalman_2_3:协方差预测与增益计算(公式2、3) (3)Kalman_4_5:状态与协方差更新(公式4、5) (4)Kalman_ctrl:数据源控制 4.3 10级流水线时序 五、Python vs Verilog:对比分析 六、总结 工程参考代码清单Python仿真代码 Verilog完整工程文件 一、引言:为什么机器人需要卡尔曼滤波? 想象你开发了一个可以在树林里自主导航的机器人。为了知道它的实时位置,你在机器人上安装了GPS传感器,但GPS的精度大约为10米——在布满沟壑和悬崖的树林里,10米的误差足以让机器人坠入深渊。 此时,你还可以获取一些额外的运动信息:里程计可以记录机器人的行走距离,惯性测量单元(IMU)可以感知姿态变化。但这些传感器同样存在噪声和漂移。GPS告诉了你"大概在哪",里程计告诉了你"走了多远",但两者都不完美。 卡尔曼滤波(Kalman Filter) 的核心思想正是:综合利用所有可用的信息,根据其本身的噪声特性分配权重,得到一个比任何单一估计都更准确的结果。 本文将从原理出发,分别用 Python(浮点运算,算法验证) 和 Verilog(定点运算,硬件加速) 实现一维卡尔曼滤波器,用于机器人位置估计。 二、卡尔曼滤波的五大核心公式 卡尔曼滤波是一种最优线性递归估计算法,由预测(Prediction)和更新(Update)两个阶段组成,共五个核心公式: 对于线性离散系统,卡尔曼滤波通过以下五个公式递归运行: 阶段公式含义预测$\hat{X}_k^- = A\hat{X}_{k-1} + BU_{k-1}$先验状态估计:用上一时刻的最优估计预测当前状态预测$P_k^- = AP_{k-1}A^T + Q$先验误差协方差:预测的不确定性会累积更新$K_k = \frac{P_k^-H^T}{HP_k^-H^T + R}$卡尔曼增益:决定"更信预测还是更信测量"更新$\hat{X}_k = \hat{X}_k^- + K_k(Z_k - H\hat{X}_k^-)$后验状态估计:用测量残差修正预测更新$P_k = (I - K_kH)P_k^-$后验误差协方差:更新后的不确定性其中: $A$ 为状态转移矩阵,$B$ 为控制矩阵,$H$ 为观测矩阵 $Q$ 为过程噪声协方差,$R$ 为测量噪声协方差 $K_k$ 是卡尔曼增益,它是整个算法的"灵魂":$P_k^-$ 越大(预测越不靠谱),$K_k$ 越大,越重视测量反馈。 三、以机器人为例卡尔曼公式实现和说明 下面我们用一个例子来说明上述卡尔曼滤波公式的内在逻辑。 假如我们有一台轮式机器人 Robo 如图所示,它只能够进行一维直线运动。 pmqvRRH.png图片 我们用状态向量 $\vec{x}$ 来表示机器人的当前状态: $\vec{x}=\left[ \begin{array}{c}{p} \\ {v}\end{array}\right] \\$ 其中 $p$ 和 $v$ 分别为相对于绝对坐标系 $O_1$ 的位移。 那么我们要做的是,已知某时刻的最佳状态估计 $\hat{\mathbf{x}}_{k}$ ,预测下一时刻的最佳估计 $\hat{\mathbf{x}}_{k+1}$ 。 设计运动 我们为 Robo 设计一个匀加速直线运动。设初始状态向量为 $\vec{x_0}=\left[ \begin{array}{c}{0} &{1}\end{array}\right]^T $ ,并有一个加速指令性,使其以 $a = 0.1$ 的加速度做匀加速直线运动。那么根据匀加速直线运动的位移计算公式,任意时刻 $k$ 的位移 $p$ 与速度 $v$ 都可以由位移、速度、加速度递推得到: $\begin{aligned} p_{k} &=p_{k-1}+v_{k-1} \times \Delta k+a\times \frac{\Delta k^{2}}{2} \\ v_{k} &=v_{k-1}+a \times \Delta k \end{aligned} \tag{3} $ 将其转化为矩阵形式: $\left[ \begin{array}{c}{p_{k}} \\ {v_{k}}\end{array}\right]=\left[ \begin{array}{cc}{1} & {\Delta k} \\ {0} & {1}\end{array}\right] \left[ \begin{array}{c}{p_{k-1}} \\ {v_{k-1}}\end{array}\right]+\left[ \begin{array}{c}{\frac{\Delta k^{2}}{2}} \\ {\Delta k}\end{array}\right] a \tag{4}$ $x_{t}=F_{t} x_{t-1}+B_{t} a \\$ 我们取时间间隔 $\Delta k = 1$ ,由上式编程计算得到机器人的真实状态向量轨迹: import numpy as np import math import matplotlib.pyplot as plt if __name__=="__main__": ## 1.设计一个匀加速直线运动,以观测此运动 X_real = np.mat(np.zeros((2, 100))) # 空矩阵,用于存放真实状态向量 X_real[:, 0] = np.mat([[0.0], # 初始状态向量 [1.0]]) a_real = 0.1# 真实加速度 F = np.mat([[1.0, 1.0], # 状态转移矩阵 [0.0, 1.0]]) Q = np.mat([[0.0001, 0.0], # 状态转移协方差矩阵,我们假设外部干扰很小 [0.0, 0.0001]]) B = np.mat([[0.5], # 控制矩阵 [1.0]]) for i in range(99): X_real[:, i + 1] = F * X_real[:, i] + B * a_real # 计算真实状态向量 X_real = np.array(X_real) fig = plt.figure(1) plt.grid() plt.title('real displacement') plt.xlabel('k (s)') plt.ylabel('x (m)') plt.plot(X_real[0, :]) plt.show() fig = plt.figure(2) plt.grid() plt.title('real velocity') plt.xlabel('k (s)') plt.ylabel('v (m/s)') plt.plot(X_real[1, :]) plt.show() X_real = np.mat(X_real)pasted_1786518907327_xixy8e.png图片 位移真实值 pasted_1786518920293_nxitzh.png图片 速度真实值 传感器的观测值 我们有一台传感器 $O_2$ 放置于机器人的前方,它可以测得机器人位移 $s$ 和速度 $w$ 。当然,传感器自身本身有一定的噪声 $\xi$ ,其协方差为 $R$ 。由于传感器的信息是相对于自身坐标系 $O_2$ 的,而我们的状态向量 $\vec{x}$ 是相对于绝对坐标系 $O_1$ 的,二者的方向刚好相反,我们使用观测矩阵 $\mathbf{H}$ 来转换二者的关系。因此,相对于真实状态向量,传感器的观测向量可以表示如下: $\left[ \begin{array}{c}{s} \\ {w}\end{array}\right]=\left[ \begin{array}{cc}{-1} & 0\\ {0} & {-1}\end{array}\right] \left[ \begin{array}{c}{p} \\ {v}\end{array}\right]+\left[ \begin{array}{c}{\xi_p} \\ {\xi_v}\end{array}\right] \tag{5}$ $z_{t}=H x_{t}+\xi \\$ 我们设传感器噪声的协方差 $R$ 为单位阵(噪声方差为1)。根据上式编写程序,得到的传感器的观测值如下: ## 2.建立传感器观测值 z_t = np.mat(np.zeros((2, 100))) # 空矩阵,用于存放传感器观测值 H = np.mat(np.zeros((2, 2))) H[0, 0], H[1, 1] = -1.0, -1.0 noise = np.mat(np.random.randn(2,100)) # 加入位移方差为1,速度方差为1的传感器噪声 R = np.mat([[1.0, 0.0], # 观测噪声的协方差矩阵 [0.0, 1.0]]) for i in range(100): z_t[:, i] = H * X_real[:, i] + noise[:, i] z_t = np.array(z_t) fig = plt.figure(3) plt.grid() plt.title('sensor displacement') plt.xlabel('k (s)') plt.ylabel('x (m)') plt.plot(z_t[0, :]) plt.show() fig = plt.figure(4) plt.grid() plt.title('sensor velocity') plt.xlabel('k (s)') plt.ylabel('v (m/s)') plt.plot(z_t[1, :]) plt.show() z_t = np.mat(z_t)pasted_1786518974937_94intu.png图片 传感器观测到的位移,与真实值相反且有噪声 pasted_1786519009388_5uhe6m.png图片 传感器观测到的速度,与真实值相反且有噪声 卡尔曼滤波 前两步的操作主要是为了获取数据,现在我们利用预测和更新公式对以上数据进行卡尔曼滤波: ## 3.执行线性卡尔曼滤波 Q = np.mat([[1.0, 0.0], # 状态转移协方差矩阵,我们假设外部干扰很小, [0.0, 1.0]])# 转移矩阵可信度很高 # 建立一系列空序列用于储存结果 X_update = np.mat(np.zeros((2, 100))) P_update = np.zeros((100, 2, 2)) X_predict = np.mat(np.zeros((2, 100))) P_predict = np.zeros((100, 2, 2)) P_update[0, :, :] = np.mat([[1.0, 0.0], # 状态向量协方差矩阵初值 [0.0, 1.0]]) P_predict[0, :, :] = np.mat([[1.0, 0.0], # 状态向量协方差矩阵初值 [0.0, 1.0]]) for i in range(99): # 预测 X_predict[:, i + 1] = F * X_update[:, i] + B * a_real P_p = F * np.mat(P_update[i, :, :]) * F.T + Q P_predict[i + 1, :, :] = P_p # 更新 K = P_p * H.T * np.linalg.inv(H * P_p * H.T + R) # 卡尔曼增益 P_u = P_p - K * H * P_p P_update[i + 1, :, :] = P_u X_update[:, i + 1] = X_predict[:, i + 1] + K * (z_t[:, i + 1] - H * X_predict[:, i + 1]) X_update = np.array(X_update) X_real = np.array(X_real) fig = plt.figure(5) plt.grid() plt.title('Kalman predict displacement') plt.xlabel('k (s)') plt.ylabel('x (m)') plt.plot(X_real[0, :], label='real', color='b') plt.plot(X_update[0, :], label='predict', color='r') plt.legend() plt.show() fig = plt.figure(6) plt.grid() plt.title('Kalman predict velocity') plt.xlabel('k (s)') plt.ylabel('v (m/s)') plt.plot(X_real[1, :], label='real', color='b') plt.plot(X_update[1, :], label='predict', color='r') plt.legend() plt.show() X_update = np.mat(X_update) X_real = np.mat(X_real)pasted_1786519044132_v2numq.png图片 位移卡尔曼滤波结果 pasted_1786519056398_qpvdv1.png图片 速度卡尔曼滤波结果 可以看出,卡尔曼滤波将存在误差的传感器信号和状态向量很好的融合,较好地预测出了真实地机器人运动状态。 四、Verilog实现:定点运算与硬件加速 当我们需要将卡尔曼滤波部署到FPGA或ASIC上时,Python的浮点运算就不再适用。硬件实现需要考虑:定点数表示、流水线设计、时序约束和资源复用。附件中的Verilog代码展示了一个轻量级、10级流水线的卡尔曼滤波器实现。 4.1 系统架构 pasted_1786519272107_29m7o0.png图片 整个系统分为5个模块: 模块功能对应公式Kalman顶层模块,实例化子模块并连接信号—Kalman_1预测状态 X^-公式1Kalman_2_3预测协方差 P^- 并计算增益 Kg公式2、3Kalman_4_5更新状态 X 和协方差 P公式4、5Kalman_ctrl数据控制器,从DPRAM读取测量值—以及3个共享运算器:add(加减法)、mux(乘法)、div(除法)。 4.2 核心代码解析 (1)Kalman_1:状态预测(公式1) module Kalman_1( input clk_50M, input Rst_n, input [15:0] X_last, // t-1时刻的后验估计 input [15:0] B_X_last, // 控制输入(预留,当前为0) output reg [15:0] X_ // t时刻的先验估计 ); // 流水线计数 0~9 always@(posedge clk_50M or negedge Rst_n) begin if(!Rst_n) X_ <= 16'd0; else begin case (Count) 4'd1: begin X_ <= X_last; // X^- = X_last(简化模型) end // ... 其他时钟周期可用于更复杂的预测 endcase end end endmodule设计要点:当前实现为简化模型,直接令 X^- = X_last。B_X_last 预留了控制输入接口,可扩展为带速度项的运动模型。 (2)Kalman_2_3:协方差预测与增益计算(公式2、3) module Kalman_2_3( input clk_50M, input Rst_n, input [15:0] P_last, output reg [15:0] P_, output reg [15:0] Kg ); reg [15:0] Q_error = 0; // 系统过程协方差 reg [15:0] R_error = 3; // 测量噪声协方差 always@(posedge clk_50M or negedge Rst_n) begin case (Count) 4'd1: begin ADD_sub <= 1'd1; // 加法 ADD_dataa <= P_last * 'd100; // P_last 放大100倍 ADD_datab <= Q_error; // + Q end 4'd2: begin P_ <= ADD_result; // P^-(仍放大100倍) ADD_dataa <= ADD_result / 'd10; // 缩小10倍 ADD_datab <= R_error * 'd10; // R 放大10倍 end 4'd3: begin DIV_dataa <= P_; // 被除数 = P^-(×100) DIV_datab <= ADD_result; // 除数 = P^-/10 + R×10 end 4'd4: begin Kg <= DIV_result; // Kg = P^- / (P^- + R) P_ <= P_ / 'd100; // P^- 恢复原始量级 end endcase end endmodule定点数与缩放处理: 这是硬件实现中最关键的部分。由于16位定点数无法直接表示小数,代码采用了缩放因子(Scaling Factor)策略: P_last * 100:将协方差放大100倍,避免小数被截断 R_error * 10:测量噪声放大10倍 最终 Kg 的计算结果也需要在后续模块中相应缩放 // 在Kalman_4_5中处理缩放还原 MULT_datab <= ADD_result / 'd10; // 乘法结果缩小10倍 ADD_datab <= Kg / 10; // Kg缩小10倍用于1-Kg计算(3)Kalman_4_5:状态与协方差更新(公式4、5) module Kalman_4_5( input clk_50M, input Rst_n, input [15:0] in_data, // 测量值 Z input [15:0] X_, // 先验估计 input [15:0] P_, // 先验协方差 input [15:0] Kg, // 卡尔曼增益 output reg [15:0] X, // 后验估计 output reg [15:0] P // 后验协方差 ); always@(posedge clk_50M or negedge Rst_n) begin case (Count) 4'd2: begin // 计算 |Z - X^-|,通过比较大小确定减法顺序 if(in_data > X_) begin ADD_dataa <= in_data; ADD_datab <= X_; end else begin ADD_dataa <= X_; ADD_datab <= in_data; end end 4'd5: begin MULT_dataa <= Kg; MULT_datab <= ADD_result; // Kg * |Z - X^-| end 4'd6: begin // 根据in_data和X_的大小关系,决定加或减 if(in_data > X_) ADD_sub <= 1'd1; // 加法:X = X^- + Kg*(Z-X^-) else ADD_sub <= 1'd0; // 减法:X = X^- - Kg*(X^- - Z) ADD_dataa <= X_; ADD_datab <= MULT_result / 'd10; end 4'd7: begin X <= ADD_result; // 输出更新后的状态 ADD_dataa <= 16'd1; ADD_datab <= Kg / 10; // 1 - Kg/10 end 4'd8: begin MULT_dataa <= P_; MULT_datab <= ADD_result; // P = P^- * (1 - Kg) end 4'd9: begin P <= MULT_result; // 输出更新后的协方差 end endcase end endmodule有符号数处理技巧:由于Verilog中 [15:0] 默认是无符号数,代码巧妙地通过先取绝对值做减法,再根据大小关系决定加减,避免了有符号数运算的复杂性。 (4)Kalman_ctrl:数据源控制 该模块模拟了传感器数据源。实际应用中,这里可以替换为ADC接口、串口接收或传感器总线(如I2C/SPI)。 4.3 10级流水线时序 pasted_1786519515333_7gcyvi.png图片 每个滤波周期 = 10个时钟周期 @ 50MHz = 200ns,即每秒可处理500万次滤波迭代,这是硬件加速相比软件的巨大优势。 五、Python vs Verilog:对比分析 对比维度Python实现Verilog实现数据表示IEEE 754 双精度浮点(64位)16位定点整数 + 缩放因子运算精度高(~15位有效数字)有限(受限于位宽和缩放策略)执行速度受限于CPU,~μs级50MHz时钟,200ns/次迭代资源消耗内存(MB级)LUT/FF/DSP(硬件资源)开发难度低,代码简洁高,需处理时序、缩放、位宽适用场景算法验证、仿真、离线分析实时嵌入式、FPGA加速、ASIC可移植性跨平台依赖具体FPGA/ASIC工艺关键差异——定点数缩放: Python中可以直接写 Kg = P_pred / (P_pred + R),而Verilog中必须手动管理数值范围: # Python:自然优雅 Kg = P_pred / (P_pred + R) # 0.09... X = X_pred + Kg * (z - X_pred)// Verilog:需要精心设计的缩放 // P_last * 100 -> ADD -> /100 -> DIV -> Kg // Kg / 10 -> MULT -> /10 -> ADD -> X这种"不优雅"是硬件实现的代价,但也是达到实时性能的必要手段。 六、总结 卡尔曼滤波是机器人状态估计的基石算法。本文从机器人位置估计这一经典场景出发: 原理层面:梳理了卡尔曼滤波的五大核心公式,阐明了预测与更新的闭环逻辑。 Python层面:利用浮点运算实现了算法原型,验证了滤波器对噪声的抑制效果和增益收敛特性。 Verilog层面:设计了10级流水线的定点数实现,通过缩放因子策略在16位位宽下完成了滤波运算,达到了200ns/次迭代的实时性能。 两种实现方式各有其用:Python用于"想清楚",在算法层面验证正确性;Verilog用于"跑得快",在硬件层面实现实时处理。在实际工程中,通常先用Python/MATLAB进行算法仿真和参数整定,再将验证通过的算法移植到Verilog/VHDL进行硬件部署——这正是从算法到芯片的完整开发流程。 工程参考代码清单 Python仿真代码 见上文第三节完整代码。 Verilog完整工程文件
FPGA&ASIC
通信&信息处理
VLSI&IC验证
软硬件算法
# ASIC/FPGA
# 信号处理
# Verilog
# 软件算法
刘航宇
8月12日
1
56
2
数字IC设计项目高性能FFT芯片设计(前后端全流程)
摘要:本项目基于SMIC 0.18 μm工艺,设计并实现了16点基-4 FFT算法芯片,工作频率135 MHz,面积4.6953 mm²,单次FFT能耗5.25×10⁻⁶ mJ。项目涵盖RTL建模、功能仿真、逻辑综合与物理实现,并提供了源码与项目文件。目录 一、设计规范简介1.1 功能描述 1.2 性能指标能耗计算 单位面积功耗时间操作次数 二、电路性能分析与结构设计2.1 性能估算面积开销 运算性能 吞吐率 带宽 工作频率 2.2 硬件结构图 2.3 流水线时序设计 2.4 时序过程 三、RTL 模型与仿真验证3.1 验证方法 3.2 验证平台搭建 3.3 仿真验证结果3.3.1 功能点验证 3.3.2 第一组数据验证对比 3.3.3 测试向量 3.3.4 仿真性能统计 四、逻辑综合策略与结果4.1 逻辑综合流程参数设置 4.2 逻辑综合结果时序结果 面积结果 功耗结果 资源使用 设计违例 五、物理实现与结果分析5.1 ICC 设计步骤5.1.1 数据设定 (Data Setup) 5.1.2 布局规划 (Floorplanning) 5.1.3 布局 (Placement) 5.1.4 时钟树综合 (CTS) 5.1.5 布线 (Routing) 5.2 ICC 设计结果5.2.1 芯片概貌 5.2.2 时序结果 5.2.3 面积结果 5.2.4 功耗结果 5.2.5 芯片压降 5.2.6 拥塞分析 5.2.7 资源使用 5.2.8 设计违例 六、设计总结6.1 遇到的主要问题 6.2 相应的解决思路 6.3 关键优化点乘法器优化(频率提升核心) 七、参考资料 八、项目工程下载(源码、文档和参考文献) 一、设计规范简介 1.1 功能描述 本次课程设计的核心目标是实现一个 高能效的快速傅里叶变换(FFT)电路,具体规格如下: 算法:16 点基-4 FFT 算法 输入数据:实部与虚部均为 17 bit(1 bit 符号位 + 8 bit 整数位 + 8 bit 小数位) 旋转因子:实部与虚部均为 8 bit(1 bit 符号位 + 7 bit 数据位) 数据格式:定点数表示,如图 1 所示 图 1 16 点基-4 FFT 蝶形运算原理图 pasted_1785032408236_t4qsdl.png图片 图 2 数据表示方式(17 bit 输入 / 8 bit 旋转因子) 运算数据的实部虚部均为17 bit 而旋转因子的实部与虚部为8 bit pm2xSTf.png图片1.2 性能指标 评价指标具体数值完成一次 16 点 FFT 运算的能耗5.25118208 × 10⁻⁶ mJ单位面积功耗时间 FFT 操作次数4.1987688 × 10⁴ 次/(mm²·mW·s)工作频率135.135135 MHz面积开销4.695300 mm²能耗计算 单次 FFT 能耗 = 每秒能耗 / 每秒 FFT 运算次数 = 44.3512 mW/s / (1 / (16 × 7.4 ns)) = 5.251182 × 10⁻⁶ mJ单位面积功耗时间操作次数 单位面积功耗时间 FFT 操作次数 = 每秒 16 点 FFT 运算次数 / (面积 × 功耗 × 时间) = (1 / (16 × 7.4 ns)) / (4.535456 mm² × 44.3512 mW × 1 s) = 4.1987688 × 10⁴ 次/(mm²·mW·s)二、电路性能分析与结构设计 2.1 性能估算 面积开销 芯片共有 90 个管脚,布局尺寸计算如下: 长:76 μm × 23 + 210 μm × 2 = 2168 μm = 2.168 mm 宽:76 μm × 22 + 210 μm × 2 = 2092 μm = 2.092 mm 总面积:2.168 mm × 2.092 mm = 4.535456 mm² pasted_1785034131111_9ws1vf.png图片 运算性能 每秒可完成 FFT 运算次数 = 1 s / (16 × 7.4 ns) = 8.445946 × 10⁶ 次吞吐率 芯片采用 串行输入输出 方式,每 16 个周期完成一次信号输入,从输入第 13 个信号时开始蝶形运算,经过 8 个周期完成运算,再经过 16 个周期输出: 单次运算周期:13 + 8 + 16 = 37 个周期 单次运算吞吐率:1 / (37 × 7.4 ns) = 3.65 × 10⁶ 次/秒 由于采用了 三级流水线 架构,在连续运算足够多的情况下: 流水运算周期:16 个周期(每周期输出一个结果) 流水吞吐率:1 / (16 × 7.4 ns) = 8.45 × 10⁶ 次/秒 带宽 存储器时钟频率和数据输入速度保持恒定,峰值带宽与平均带宽相同: 带宽 = 17 bit × 2(实部+虚部) × 135.135135 MHz = 4.595 Gbps工作频率 工作频率 = 1 / 时钟周期 = 1 / 7.4 ns = 135.135135 MHz2.2 硬件结构图 图 3 电路硬件结构图 pm2x9k8.png图片 整个电路分为以下模块:模块名称文件名模块类型功能描述控制模块ctrl时序逻辑控制电路中各个模块的运行时序串转并模块s_p时序逻辑将串行输入的数据整合为并行并改变顺序复选器mux时序逻辑按照 FFT 级数选择进入运算模块的数据中转存储模块reg1时序逻辑存储并转发两级 FFT 运算间的运算数据运算模块(蝶形运算)butterfly组合逻辑进行四输入蝶形运算乘法器multi16组合逻辑计算数据与旋转因子间的乘法并转串模块p_s时序逻辑将并行输出的数据分解为串行并倒位序2.3 流水线时序设计 时钟周期1-1617-2122-2930-37input第 N 组输入数据到 REG1第 N+1 组输入数据到 REG1——calculate—两级蝶形运算两级蝶形运算—output——第 N-1 组从 REG3 输出第 N 组从 REG3 输出2.4 时序过程 pasted_1785033901140_9815cd.png图片 三、RTL 模型与仿真验证 3.1 验证方法 FFT 芯片的验证包括两部分: 输出结果验证:通过 testbench 输入数据,将仿真输出与理论正确结果对比 流水线验证:一次输入多组数据,观察电路是否能流水式执行 3.2 验证平台搭建 在 ModelSim SE-64 10.1c 中,将所有模块的 Verilog 代码通过 top 文件连接,撰写 testbench 从指定文本文件读入输入数据并进行计算。 3.3 仿真验证结果 3.3.1 功能点验证 取三组输入作为测试向量,验证输出结果正确性与流水线功能。 图 4 测试波形(流水线时序验证) pmR29yj.png图片 从波形可见,p_s 模块数据按预期工作:每周期进入 4 个数据,逐个输出,上一组数据输出完毕后下一周期立即输出下一组,流水式执行衔接良好。3.3.2 第一组数据验证对比 X[k]理论输出(实部)实际输出(实部)理论输出(虚部)实际输出(虚部)X[0]0_00010010_000000000_00010001_110010000_00010010_000000000_00010001_10111000X[1]0_00000101_011011100_00000101_010111101_11110000_101110101_11110000_11100101X[2]1_11110110_000000001_11110110_001001100_00000100_001111100_00000100_00101101X[3]0_00000010_000011010_00000010_000000110_00001010_010111000_00001010_00111100X[4]0_00001000_000000000_00000111_111011001_11110110_000000001_11110110_00101000X[5]1_11110110_001100001_11110111_010011010_00000011_100100000_00000011_10000100X[6]0_00000011_001010110_00000011_000111000_00000010_111000000_00000001_01100101X[7]0_00000000_011011010_00000000_011101000_00000010_111000000_00000010_11100001X[8]0_00000010_000000000_00000010_000010001_11111110_000000001_11111110_00001000X[9]0_00000101_111000010_00000101_110100101_11111111_111101011_11111111_11110111X[10]1_11110110_000000001_11110110_001001101_11111011_110000011_11111011_11010001X[11]0_00001001_010000100_00001001_001001110_00000100_111100110_00000100_11100010X[12]1_11111100_000000001_11111100_000111001_11111010_000000001_11111010_00011000X[13]1_11111101_011111111_11111101_100010110_00000011_101111110_00000011_10110000X[14]0_00001000_110101000_00001000_101100001_11111110_100101011_11111110_10011101X[15]1_11110100_010000101_11110100_011010101_11110101_110011111_11110101_11110001图 5 Transcript 输出 pasted_1785032904139_lcns0m.png图片 通过对比可知,实际输出与理论输出的实部与虚部均十分接近,在误差范围内可认为相等(存在数据位宽限制等不可避免的截断误差)。第二组、第三组数据经同样验证,结果一致。3.3.3 测试向量 第一组测试向量: 0000000010000000000000000000000000 0000000000000000000000000000000000 0000000010000000000000000000000000 0000000000000000000000000000000000 0000000110000000000000000000000000 0000000100000000000000010000000000 0000000010000000000000100000000000 0000000100000000000000001000000000 0000000010000000000000000000000000 0000000100000000000000010000000000 0000000010000000000000000000000000 0000000000000000000000000000000000 0000000010000000000000000000000000 0000000010000000000000000000000000 0000000010000000000000000000000000 0000000010000000000000000000000000第二组测试向量: 全 1 序列(16 个相同数据) 第三组测试向量: 仅第一个数据为 1,其余为 0 3.3.4 仿真性能统计 ✅ 成功实现 16 点 FFT 算法,输出结果与理论值一致 ✅ 每周期输入一个数据,每周期输出一个数据 ✅ 成功实现流水式运行 ✅ 多次测试输出结果稳定,未出现错误 四、逻辑综合策略与结果 4.1 逻辑综合流程 使用 Synopsys Design Compiler (DC) 进行逻辑综合,主要流程: 指定库文件 → 读入设计(转GTECH) → 定义环境 → 设计约束 → 编译策略 → 综合优化 → 存储网表pasted_1785034037920_i4ehar.png图片 参数设置 参数数值工艺SMIC 0.18 μm时钟周期7.4 ns输入输出延迟3.7 ns工作电压1.62 V运行温度125 ℃面积约束0(无约束)互连模型balanced_tree时钟延时4.3 ns不确定时钟0.5 ns过渡时钟0.2 ns端口最大过渡3 ns4.2 逻辑综合结果 时序结果 项目时间 (ns)clock clk (rise edge)7.40clock network delay (ideal)4.30clock uncertainty-0.50clk slack (MET)0.007.4 ns 时钟符合设计要求,换算工作频率约为 135 MHz。 面积结果 项目数量项目面积 (μm²)Ports70Combinational area1,483,546.41Nets140Non-combinational area153,599.85Cells71Net Interconnect area2,089,790.57References3Total Area3,726,936.83功耗结果 项目数值Global Operating Voltage1.62 VCell Internal Power756.0848 mWNet Switching Power375.6310 mWTotal Dynamic Power1.1317 WCell Leakage Power28.5281 μW资源使用 项目数量Hierarchical Cell85 个Hierarchical Port5,373 个Leaf Cell16,473 个Buf/Inv Cell2,815 个Total Number of Nets18,037 个设计违例 ✅ 电路逻辑综合结果中无设计违例 五、物理实现与结果分析 5.1 ICC 设计步骤 使用 Synopsys IC Compiler (ICC) 进行物理实现,分为四个阶段: pasted_1785034197720_i2g0so.png图片 5.1.1 数据设定 (Data Setup) 读入逻辑和时序库文件、SDC 约束文件、门级网表,以及 IO 物理库文件、TF 工艺文件、TLU+ 文件等物理数据。 5.1.2 布局规划 (Floorplanning) 定义所有管脚(输入输出、时钟、初始信号)及电源组 添加电源环,生成基本布局规划 尝试标准单元虚拟布局(create_fp_placement -timing_driven) 分析拥塞(面积利用率设置不高,拥塞问题较少) 形成电源网络,分析时序,调整电源管脚位置使电压降 < 10% 5.1.3 布局 (Placement) 遵循 NDR 规则,特殊信号线(如 clock)加宽、加大间距 执行 place_opt 进行布局 布局优化(解决建立时间违例) 拥塞分析与优化 5.1.4 时钟树综合 (CTS) 生成时钟网络,加入 buffer 解决负载和 slew time 问题 执行 clock_opt 单时钟同步设计,CTS 工作较简单 5.1.5 布线 (Routing) 全局布线 → 轨道分配 → DRC 修复 先对时钟布线(route_group -all_clock_nets) 解决 verify_lvs 报错(查阅资料后确认无实质影响) 解决虚拟机内存不足导致的闪退问题(清理空间后完成) 5.2 ICC 设计结果 5.2.1 芯片概貌 图 6 芯片概貌 pasted_1785032971553_0fu3op.png图片 顶部和底部各 22 个管脚 左边和右边各 23 个管脚 共 10 组电源管脚:4 组为管脚供电(分列四周),6 组为内核供电(上下各 1 组,左右各 2 组) 5.2.2 时序结果 阶段input (ns)output (ns)clk (ns)data_setup——0.48data_setup_zic1.430.481.19floorplan0.95-1.02-1.39placement1.010.590.19cts_only_psyn1.260.820.62cts_only_cts1.260.830.36route_initial1.350.880.65route_final1.350.850.015.2.3 面积结果 图 7 芯片面积测量 pasted_1785033659880_dlug93.png图片 | 项目 | 面积或长度 |Combinational Area1,477,888.21 μm²Non-combinational Area154,248.50 μm²Net Area0.00 μm²Net X Length620,954.62 nmNet Y Length666,869.44 nmCell Area1,632,136.71 μm²Design Area1,632,136.71 μm²Net Length1,287,824.00 nmTotal Area4,695,300.72 μm²芯片尺寸:2092.38 μm × 2244.00 μm 5.2.4 功耗结果 项目数值Global Operating Voltage1.62 VCell Internal Power33.6445 mWNet Switching Power12.7067 mWTotal Dynamic Power44.3512 mWCell Leakage Power26.0446 μW5.2.5 芯片压降 图 8 芯片压降分析 pasted_1785033682302_ytnfda.png图片 工作电压:1.62 V 最大压降:129.6 mV 压降比例:129.6 / 1620 = 8% < 10%,符合设计要求 5.2.6 拥塞分析 图 9 拥塞分析(Placement / Detail Route / Track Assignment / Global Route) pasted_1785033720429_zl0o70.png图片 由于芯片面积较大,面积利用率设置不高,拥塞问题较少,顺利解决。5.2.7 资源使用 项目数量或利用率Module Cells16,240 个Pins91,614 个IO Pad Cells90 个IO Pins70 个Nets18,151 个Average Pins Per Net3.0535 个Total Std Cell Area514,936.70 μm²Total Pad Cell Area1,612,800.00 μm²Core Size1612.38 × 1764.00 = 2,844,238.32 μm²Pad Core Size1672.38 × 1824.00 = 3,050,421.12 μm²Chip Size2092.38 × 2244.00 = 4,695,300.72 μm²Std cells utilization18.10%Cell/Core Ratio18.10%Cell/Chip Ratio45.32%Number of Cell Rows350图 10 单元密度分布 pasted_1785033741857_8nbcxl.png图片5.2.8 设计违例 ✅ 最终设计无设计违例 六、设计总结 6.1 遇到的主要问题 管脚数量过多,芯片面积过大 电路计算结果不正确 时序模块数据传输不同步,拖慢运算速度 芯片工作频率过低 芯片电压降问题 6.2 相应的解决思路 问题解决方案管脚过多、面积过大采用串并转换减少管脚;改用基-4 FFT 算法并复用蝶形运算模块减小面积计算结果不正确手动计算关键中间数据,逐一比对各模块输入输出,逐个修复 bug数据传输不同步在时序电路传输标志信号的同时,用组合逻辑电路传输数据,避免同步问题工作频率过低重写乘法器:将乘法运算改为组合逻辑状态机判断旋转因子,采用移位方法完成乘法,频率从 82 MHz 提升至 135 MHz电压降问题增加供电管脚数量并调整位置,最大压降控制在 8%(何卫锋老师指导)6.3 关键优化点 乘法器优化(频率提升核心) 优化前: assign mul = in_17bit[16:0] * in_8bit[7:0]; // 直接乘法,延迟大优化后: always @ (in_17bit or in_8bit) begin case (in_8bit) 8'b00000000: neg_mul = 25'b0; 8'b01111111: neg_mul = (in_17bit << 7); // ... 其他旋转因子用移位实现 endcase end通过 set_flatten true 和 compile –map high 策略,将工作频率从 82 MHz 大幅提升至 135 MHz。 七、参考资料 [1] FFT 算法相关教材与文献 [2] Synopsys Design Compiler 用户手册 [3] Synopsys IC Compiler 用户手册 [4] SMIC 0.18 μm 工艺设计套件文档 项目成果总结: 本项目完整实践了数字 IC 设计的前后端全流程,从 RTL 编码、功能仿真、逻辑综合到物理实现,成功将 16 点基-4 FFT 算法芯片化。通过架构优化(串并转换、流水线)、算法优化(基-4 复用)、电路优化(组合逻辑移位乘法器),在 SMIC 0.18 μm 工艺下实现了 135 MHz 工作频率、4.70 mm² 面积、5.25×10⁻⁶ mJ 单次运算能耗的优异性能指标。八、项目工程下载(源码、文档和参考文献) 包含:前端RTL源码、中端DC源码脚本、后端ICC源码脚本、项目报告、参考文件等
FPGA&ASIC
IP&SOC设计
VLSI&IC验证
# VLSI
# ASIC/FPGA
# TCL脚本
# SOC设计
刘航宇
7月26日
1
100
6
2023-04-12
浅谈如何学好IC验证
摘要:本文探讨了如何成为一名IC验证工程师,强调了从基础数字电路知识到掌握SystemVerilog、UVM等验证语言和方法的重要性,并介绍了学习UVM的资源和途径。要成为一名IC验证工程师,一定要懂一些设计,如果都不清楚自己在验什么东西,后面的工作也都无从谈起了。所以在时间足够的情况下,最好从最基础的数字电路知识开始学习,之后是 Verilog → SystemVerilog → UVM 这样一个顺序,需要具备以下一些能力: 掌握数字电路和Verilog的基础知识,了解芯片设计的流程和结构。 学习SystemVerilog和UVM等验证语言和方法学,能够搭建和使用验证环境,构建测试用例和激励场景。 熟悉Linux操作系统和常用的EDA工具,能够使用脚本语言如Perl或Python进行自动化测试。 能够阅读和理解设计规格,分析设计功能和边界条件,设计有效的覆盖率和断言。 能够对设计缺陷进行调试和修改建议,与设计工程师进行沟通和协作。 不断学习新的协议、技术和验证方法,提高验证效率和质量。 图片 学习UVM的方法有很多,但是一般来说,需要具备以下几个方面的知识: SystemVerilog的基础语法和面向对象编程的概念,如类、继承、多态等。 UVM的基本构架和组件,如test、env、agent、driver、monitor、sequencer、sequence等,以及它们之间的连接和通信机制。 UVM的高级功能和技巧,如factory、callback、register model、coverage等,以及如何使用它们来提高验证效率和可重用性。 UVM的实际应用和案例分析,如如何搭建一个完整的UVM验证环境,如何编写不同类型的测试用例,如何处理异常情况等。 为了学习UVM,可以参考以下一些资源: Verification Academy是一个提供免费在线课程和视频的网站,其中有专门针对UVM的基础和进阶课程,以及一些实例代码和演示。 https://verificationacademy.com/courses/uvm-basics UVM实战是一本中文书籍,介绍了UVM的基本概念和方法,以及一些常见的验证场景和技巧。 UVM Cookbook3是一个在线文档,提供了UVM的各种知识点和示例代码,可以作为一个参考手册。 https://www.cnblogs.com/dpc525/p/5047032.html
我的随笔
VLSI&IC验证
刘航宇
3年前
0
864
4
2023-02-27
VLSI设计基础11-运算模块之加法器
摘要:本文介绍了VLSI设计中运算模块中的加法器,包括一位全加器、逐位加法器、互补静态CMOS结构FA、传输门型加法器、旁路进位加法器、线性进位选择加法器、平方根进位加法器以及超前进位加法器等,并探讨了优化加法器性能、面积和功耗的方法。参考书:数字集成电路-电路、系统与设计,本文栏目对其重点进行精简化 目录 1. 总论 2. 加法器1. 一位全加器(FA) 2. 【结构】设计全加器FA 3. 传输门型加法器——传统型 4. 传输门型加法器——曼切斯特FA 4. 【重要】超前进位加法器 1. 总论 在时序电路中,时序电路=组合电路+存储电路 在(9)~(11)中,已经详细介绍了存储电路(寄存器) 在本文中,将介绍组合电路中比较重要的数据通路上的电路,可以认为是在时序电路中提到的 ,即用于逻辑运算和算数运算。 在数集中,常用的数据通路组合电路有 加法器 乘法器 移位器 我们的目的,是追求以下几个方面的优化 性能 面积 功耗 如何优化: 逻辑层次优化:利用状态机、真值表等,优化布尔方程得到一个速度更快、面积更小的电路 电路层次优化:改变管子的尺寸;改变电路的拓扑连接(互补CMOS、动态CMOS等) 2. 加法器 加法器在数据通路电路中的地位类似于反相器在与或等简单逻辑电路的位置 数据通路的电路的基础是加法器 乘法器也是加法器扩展而来的 加法器是限制数据通路运算速度的元件。 1. 一位全加器(FA) 传统表达方式 定义:根据输入的二值数据、进位信号,计算得到结果和进位。 图片 图片 【注】: 异或,常见结构有: 图片 同或,结构如下(即“异或门结构2”的“非”): 图片 P、G、D函数表达 真值表如下: 图片 图片 逐位(行波)加法器 所谓逐位(行波)加法器,指的是将N个一位全加器(FN)串联在一起构成加法器。如下图 图片 图片 2. 【结构】设计全加器FA 互补静态CMOS结构FA 图片 图片 镜像加法器 该加法器是根据互补静态CMOS结构FA改进得到的,镜像加法器的下拉网络和互补CMOS结构FA完全相同。 电路图如图所示, 图片 图片 3. 传输门型加法器——传统型 图片 图片 4. 传输门型加法器——曼切斯特FA 静态电路 图片 图片 动态电路 图片 动态电路简单 动态电路单向工作,传输门使用NMOS管实现 该电路不需要D 曼切斯特进位链加法器 图片 图片 【逻辑】设计全加器FA 旁路进位加法器 图片 图片 延时 图片 $t_{\text {adder }}=t_{\text {setup }}+M t_{\text {carry }}+\left(\frac{N}{M}-1\right) t_{\text {bypass }}+(M-1) t_{\text {carry }}+t_{\text {sum }}$ 线性进位选择加法器 图片 图片 图片 图片 平方根进位加法器 图片 图片 图片 4. 【重要】超前进位加法器 原理 图片 图片 图片 图片 块运算 图片 图片 图片 点操作 步骤如下: 图片 图片 图片 Kogge-Stone 16位超前进位加法器 图片 图片 Brent-Kung 16位超前进位加法器 图片 图片
VLSI&IC验证
# VLSI
刘航宇
3年前
0
1,800
5
VLSI设计基础10-时序逻辑电路设计(二)
摘要:本文介绍了VLSI设计中的时序逻辑电路设计,包括时序分析的目的、分类(静态和动态时序分析)、时钟沿、时序约束参数(建立时间、保持时间、传播延时、污染时间),以及信号路径、时钟参数、时间偏差与抖动等概念。参考书:数字集成电路-电路、系统与设计,本文栏目对其重点进行精简化 目录 1. 时序基础概念 2. 时序分析的分类4. 时序约束参数(重点) 5. 各种信号路径、时序路径 6. 时钟参数两大条件(重点) 2. 时间偏差与抖动(重点)1. 时钟偏差(Clock Skew) 2. 时钟抖动(Clock Jitter) 1. 时序基础概念 时序分析的目的 对数字系统进行时序检查,判断电路是否可以正常工作(常面临建立时间和保持时间等问题),判断电路的性能等。 常常分析电压、温度、工艺(工艺角)等参数进行分析。 2. 时序分析的分类 静态时序分析(STA) 主要研究对象:建立时间、保持时间、传播延时 常用于分析同步时序电路(源时钟和目的时钟相同) 时序分析模型: 同步时钟/异步时钟 D触发器分割组合逻辑 图片 一般不需要进行太复杂的仿真,仅需要计算就可以进行分析,运行速度快。 不依赖于激励,根据穷尽信号路径上的器件就可以进行计算 常用方法是使用查找表——①输入跳变时间②输出负载(电容)→①传播延时②输出跳变(下一级的输入跳变)。 动态时序分析(DTA) 指门级仿真 主要用于异步逻辑、多周期路径 在FPGA中,将RTL代码综合利用综合工具综合成门级网络进行仿真,其中各种门级器件的逻辑是厂家提供的。 【时钟】沿 发送沿:发送数据的源时钟活动沿 捕获沿:接收数据的目的时钟的活动沿 源时钟:用于发送数据的时钟 目的时钟:用于接受数据的时钟 小贴士:在同步电路中,源时钟和目的时钟是同一个 4. 时序约束参数(重点) 即:建立时间tsu、保持时间thold、传播延时tc-q,同时我们引入污染时间tcd 建立时间: 对于捕获沿到来之前,数据需要保持稳定的时间 间接约束了组合逻辑的最大延时 保持时间: 对于捕获沿到来之后,数据需要保持稳定的时间 间接约束了组合逻辑的最小延时 传播时间(延时): 即 最大延时 时间 捕获沿50%(数据输入沿50%【注意:数据输入沿其实就是捕获沿!!!】)到数据稳定输出(输出数据50%)的时间 根据器件不同,可以分为组合逻辑传播延时tlogic和寄存器传播延时tc-q,详细见后文。 污染时间: 可以理解为 最短延时 时间——理想状态下 从输入“扰动”到输出“扰动”的时间,下文进行解释。 根据器件不同,可以分为组合逻辑污染延时tlogic,cd和寄存器污染延时tc-q,cd,详细见后文 所谓理想状态,指的是数据没有跳变时间,即数据跳变是瞬间完成的,数据跳变的90%、50%、10%是在同一个时间。 根据以上理想状态的定义,可认为一有扰动,数据就跳变完成。 计算污染时间和传播时间 图片 现对图中四个时间进行解释: 图片 图片 5. 各种信号路径、时序路径 信号的路径主要分为三个 图片 时钟路径 源时钟路径&目的时钟路径 图片 数据路径 图片 数据起点: 对于时序逻辑电路,为某时序单元的时钟引脚 对于组合逻辑电路,为某逻辑单元的数据输入端口 数据终点: 对于组合逻辑电路、时序逻辑电路都一样,均为某单元的数据输出端口 异步路径(如异步复位) 根据路径可将分析类型分为 同步分析:时钟路径+数据路径 异步分析:时钟路径+异步路径 6. 时钟参数两大条件(重点) 周期条件 图片 保持时间条件 图片 图片 2. 时间偏差与抖动(重点) 理想时钟: 从时钟沿到各个单元的时钟端口的延时相等(即路径均匀); 同一个时刻,各个单元的时钟端的时钟相位相等。 实际时钟: 时钟偏差:各个时钟端口的时钟的周期没有改变,但是相位可能略有差别。 时钟抖动:时钟的周期存在一些差别,或长或短。 1. 时钟偏差(Clock Skew) 定义与成因 指同一个时钟域之间,时钟信号到达各个寄存器的最大时间差 产生原因: 时钟源到达各个端点的路径长度不同 各个端口的负载不同 时钟网络中插入的缓存器不等 计算【全局偏差、局部偏差】 图片 全局时钟偏差 图片 局部时钟偏差 图片 时钟偏差分类(正负) 正偏差 正偏差,即时钟延迟方向与数据流方向一致,如图所示。 图片 负偏差 正偏差,即时钟延迟方向与数据流方向相反,如图所示。 图片 利用时间偏差修补建立时间 图片 【周期T】时钟偏差对于周期的影响 前文提到,负偏差使得实际逻辑计算的时间减小,为了填补裕量,只能增加时间周期,而提高时间周期会使得电路的性能下降。 图片 2. 时钟抖动(Clock Jitter) 定义与计算 定义:芯片某一给定点上,时钟周期宽度发生变化,或缩短或变宽 计算: 图片 图片 【周期T】时钟抖动对于周期的影响 因为时钟抖动是难以预料的,在确定时钟周期的时候,我们应该考虑最坏的情况,即$T-2 t_{\text {jitter }}>t_{c-q}+t_{\text {logic }}+t_{s u}$ 即上图所示的③-④。因为这意味着周期T需要增加tjitter,性能降低 总结 图片 图片
VLSI&IC验证
# VLSI
刘航宇
3年前
0
1,538
1
2023-02-24
VLSI设计基础9-时序逻辑电路设计(一)
摘要:本文介绍了时序逻辑电路设计的基础知识,包括时序电路概念、静态/动态存储器、时序参数和约束条件,以及锁存器和寄存器的类型和工作原理,最后讨论了流水线和多周期路径的设计要点。参考书:数字集成电路-电路、系统与设计,本文栏目对其重点进行精简化 目录 1. 时序电路的相关概念1. 时序电路 2. 静态/动态存储器 3. 时序参数(重点) 4. 时序约束条件(重点) 5. 锁存器和寄存器 静态锁存器/寄存器1. 静态锁存器1. 电路图与分析 2. 时序参数分析 2. 静态寄存器——边沿触发寄存器 3. 动态锁存器/寄存器 4. 流水线和多周期路径(重点) 1. 时序电路的相关概念 1. 时序电路 框架: 时序电路=组合电路+存储电路 结果:取决于当前的输入和过去的状态。 2. 静态/动态存储器 静态存储器: 上电就保持存储状态 通过正反馈,有意将输入和输出连接 如果长时间不用可以用门控时钟关闭(起到降低功耗的作用) 图片 动态存储器: 简单而言,即传输门+反相器,如下图。 利用寄生电容存储高低电平 只能存储较短的时间(ms级别)(电容小等原因使得存储时间短) 需要周期性刷新来补偿泄露电荷(参见(9)动态门) 结构简单,有较高性能(管子少,RC小)和较低功耗(不存在静态功耗) 图片 3. 时序参数(重点) 图片 为何这么说? 因为只有当满足了建立时间,此时时钟CLK才可以翻转,即此时的数据才是输入端输入的数据 所以输入端数据的50%即为时钟的50% 图片 图片 小贴士: 建立时间tsu和保持时间thold都是针对时钟的有效沿而言的。 即,输入数据50%的时间对时钟有效沿50%的时间;对于传播延时 ,输入信号50%(即时钟信号)时间对输出信号50%时间 4. 时序约束条件(重点) 图片 1.时钟周期T 图片 2.保持时间thold 图片 5. 锁存器和寄存器 图片 静态锁存器/寄存器 1. 静态锁存器 1. 电路图与分析 以正锁存器为例,电路图如下, 图片 电路结构:以传输门为主体的二选一选择器;CLK=1,Q=D;而CLK=0,通过正反馈,输出端和输入端连接。 2. 时序参数分析 1.5中提到,分析正锁存器时,需要注意的时钟边沿是时钟的下降沿。 这是因为,在CLK=1时,Q=D,属于透明传输,即输出随输入随时变化。其信号传播路径:D-①-②-③-Q 当CLK=1->0时,锁存器将要对输入数据进行所存。因此需要考虑建立时间tsu。 如果要让数据可以正确锁存下来,需要④⑤之间的节点的电平等于③⑤之间节点的电平,即 $$ D_{(4)(5)}=D_{(3)(5)} $$2. 静态寄存器——边沿触发寄存器 边沿触发寄存器,又称主-从寄存器,由主、从两个锁存器组成 电路图与分析 图片 图片 图片 主-从寄存器,由主锁存器——负锁存器、从锁存器——正锁存器组成。 图片 时序参数分析 图片 图片 图片 寄存器复位——同步/异步 同步复位(RST=0时复位) 图片 异步复位(clr=0时复位) 图片 3. 动态锁存器/寄存器 动态锁存器 电路图: 图片 使用电容电荷表示一个逻辑信号。 但是值的保存时间有限(ms)(漏电时间),需要周期性进行刷新。 动态寄存器 电路图 图片 工作原理: 图片 时间参数分析: 图片 存在的问题 图片 图片 优化——提高噪声容限 图片 3.C2MOS寄存器 图片 图片 4. 流水线和多周期路径(重点) 流水线 电路的工作速度取决于时序电路间的组合逻辑 可以通过将复杂、延迟大的组合逻辑(如计算lg(AB))通过寄存器进行分割,提高做工效率。 需要注意时序设计。每增加一个寄存器,结果就落后一拍! 图片 多周期路径 主要是写RTL代码时需要注意。 如果一个组合逻辑计算需要多个时间周期完成,可以通过一个cnt进行移位(移位运算量小)。当满足某个条件时,寄存器en=1,输出结果。 如:某运算需要经过四个周期完成,可以声明cnt=4'b0001,每个时钟进行左移,当cnt[3]==1'b1时,en=1,输出结果。
VLSI&IC验证
# VLSI
刘航宇
3年前
0
914
2
VLSI设计基础8-动态COMS
摘要:本文介绍了动态CMOS逻辑电路,包括其工作原理、特点、优缺点以及信号完整性问题。动态CMOS利用电容存储信号,具有速度快、面积小、无短路功耗等优点,但存在电荷泄露和电荷分享问题。此外,还介绍了多米诺逻辑和组合多米诺逻辑,以提高电路性能。参考书:数字集成电路-电路、系统与设计,本文栏目对其重点进行精简化 目录 1. 综述 2. 存在的问题——信号完整性问题 3. 多米诺逻辑 4. 组合多米诺逻辑 静态CMOS:稳态时,通过低阻路径连接VDD或GND 互补CMOS:上下网络互补,上拉到VDD,下拉到GND。管子数为2N 传输管逻辑:上拉网络用其他代替,有比逻辑,存在VTH。管子数为N+1 动态CMOS:依靠高阻抗上的电容存储临时的信号。管子数为N+2 图片 1. 综述 结构如下, 图片 工作方式:工作分为两个阶段 预充电:CLK=0,Mp导通,对CL充电 求值:CLK=1,MN导通,OUT和GND之间存在低阻通路。 特点: 全电压摆幅 无比逻辑(同互补CMOS,异传输管逻辑) 噪声容限低。因为out在预充电阶段已经充电到VDD,即VDS已经满足>VOV,于是只要VIN>VTH,管子就会导通。 需要预充电和求值的时钟。 较快的开关速度。原因如下, 相对互补CMOS,缺少了上拉网络的一个门,相对负载是互补CMOS,负载是动态门的CL比较小 动态门没有短路电流(同一个时刻,只能一个导通),由下拉网络提供的所有电流都用于CL电容的放电 如果IN=0,则不存在输出延时(预充电完输出即为1);如果IN=1,则需要CL放电 晶体管重复利用,减小面积(多输出多米诺) 优点: 提高速度 减小面积(多输出多米诺;N+2个管子) 没有短路功耗 没有毛刺(因为一次只能翻转一次,CL放电完只能等效下一次预充电才能回到1) 2. 存在的问题——信号完整性问题 电荷泄露 来源:与CL相连的管子存在反偏二极管和亚阈值漏电。 图片 解决办法:使用泄露晶体管 反馈形式的伪NMOS型上拉器件。 该晶体管为了减小功耗和尺寸,一般选用尺寸较小(电阻值大)的管子。 图片 电荷分享 来源:下拉网络中存在的节点电容CA。当A=0-》1、B=0,则原本存储在电容CL上的电荷在CL和CA之间重新分配,造成输出电压有所下降 图片 ※需要满足A=0-》1、B=0才能进行电荷分享,否则当B=1的时候,求值过程中(CLK=1),CL存储的电荷将全部被释放掉,不存在点电荷分享现象 图片 3. 多米诺逻辑 多米诺逻辑即为前文所述的串联动态门,目的就是保证预充电时,输入均为0;求值时,输入只做0→1的翻转 $$ \text { 多米诺逻辑 }=n \text { 型动态门 }+\text { 反相器 } $$图片 初始状态均为0,求值的时候根据前一级输出确定下一级输入,从而求下一级输出。 特点: 求值层层传播,如多米诺骨牌 求值阶段的时间取决于逻辑深度(因为求值时候的特性,见上) 只能实现非反向逻辑 无比逻辑 节点需要在预充电充完电,求值的过程中,输入需要特别稳定。 速度非常快(因为当上一级的输入都是0时,下一级相当于无延迟传播) 输入电容小(和互补CMOS比,只有一个管子) 4. 组合多米诺逻辑 组合多米诺逻辑,并不需要在每个动态门之后加反相器,而是借助一个复合互补CMOS门将多个动态门组合起来。 图片 eg: 图片 图片
VLSI&IC验证
# VLSI
刘航宇
3年前
0
1,128
3
2023-02-23
VLSI设计基础7-传输管与传输门逻辑
摘要:本文介绍了VLSI设计中的传输管与传输门逻辑,包括有比逻辑与无比逻辑的区别、传输管逻辑的特点、互补传输管逻辑(CPL)的优点与缺点,以及传输门逻辑的基本概念。参考书:数字集成电路-电路、系统与设计,本文栏目对其重点进行精简化 目录 传输管逻辑1. 有比逻辑 2. 传输管逻辑 3. 互补传输管逻辑(CPL) 3. 传输门逻辑 传输管逻辑 1. 有比逻辑 传输管逻辑是有比逻辑;互补CMOS是无比逻辑。 简单而言, 无比逻辑:输出的高低电平和尺寸无关。比如互补CMOS可以直接把输出电压拉到VDD或者GND 有比逻辑:输出的高低电平和尺寸有关。基本没办法直接拉到最大逻辑摆幅。 上拉网络由一个负载代替,如下三种常见的负载(电阻负载、有源负载、伪NMOS负载) 图片 图片 图片 输出端的电压摆幅和门的功能取决于NMOS和PMOS的尺寸比 对于伪NMOS管负载 优点:逻辑门减小,面积减小,只需要n+1个管子,而互补CMOS需要2n个管子 缺点: 有比逻辑,达不到最大逻辑摆幅。 可能没办法完全关断MOS管,静态功耗增加。 应用:面积要求严格,性能要求不高的场景。 2. 传输管逻辑 区别 传输管逻辑和互补CMOS有以下差别: 图片 串联 综合以上的区别,原因主要出在于输入端可以从D、G,而输出从S,从而使输出和输入之间存在VTH的压降 为了减小VTH带来的影响,传输管串联采用D-S-D-S的方式,而不采用D-S-G-S的方式 前者只有一个VTH压降,而后者有两个 如下: 图片 3. 互补传输管逻辑(CPL) 优点: 互补输入输出 每个输出节点都有一个低阻路径连接到VDD或者GND 模块化 缺点: 存在VTH,充电充不到VDD,只能充到VDD-VTH 解决方法:电平恢复、多种阈值晶体管、传输门逻辑 确定输出: 图片 图片 3. 传输门逻辑 图片
VLSI&IC验证
# VLSI
刘航宇
3年前
1
4,495
12
VLSI设计基础6-努力概念与优化
摘要:本文介绍了VLSI设计中的努力概念与优化,包括不同材料工艺、逻辑级优化、电路拓扑、扇出、门的复杂性等,重点阐述了努力(p、g、b、f、h)的定义和计算方法,并探讨了如何通过调整电路尺寸来优化电路性能。参考书:数字集成电路-电路、系统与设计,本文栏目对其重点进行精简化 目录 1. 总论 2. 【重点】努力2. lg(逻辑努力)和G(路径逻辑努力)--【重点】 3. b(分支努力)和B(路径分支努力) 3.【重点】【优化】 确定电路尺寸 1. 总论 不同材料工艺 CMOS、双极性、BiCMOS、GaAs、超导等材料 逻辑级优化 逻辑深度:流水线【一级变n级】 电路拓扑:逻辑电路寄存器放几个、怎么放、要不要放;重定时(主要EDA工具完成) 扇出 门的复杂性 电路优化 逻辑类型、晶体管尺寸、不同频率下的电路模型 物理优化 版图策略 布局布线 2. 【重点】努力 根据INV延时的通式, $t_p=t_{p 0} \cdot\left(1+\frac{f}{\gamma}\right)$ 推广到所有的逻辑电路中,即有 $t_p=t_{p 0} \cdot\left(p+\frac{g \cdot f}{\gamma}\right)=t_{p 0} \cdot\left(p+\frac{h}{\gamma}\right)$ 图片 p(本征延时比) 如果忽略内部节点电容,p的计算: $p=\frac{\text { 复合门的输出端本征电容 }}{I N V \text { 输出端的本征电容 }}$ 因,$C_{i n t}=a \cdot W$,于是电容值可以用W来代替。 注意,是和输出端相连的管子才参与计算 图片 图片 图片 2. lg(逻辑努力)和G(路径逻辑努力)--【重点】 定义:一个门在最坏情况下,与反相器提供相同的输出电流(即电阻相等或驱动能力相等)时,所表现的输入电容比反相器大多少倍。 小贴士: 反相器有最小的逻辑努力 随着门的复杂度增加,逻辑努力相应增加 只和门的拓扑有关,与尺寸无关 逻辑努力g的计算: 图片 图片 3. b(分支努力)和B(路径分支努力) 图片 公式:$b=\frac{C_{o n-p a t h}+C_{o f f-p a t h}}{C_{o n-p a t h}}$ 注意: 分支努力是针对与一个路径节点而言的 如果只有一条路径,没有分叉,则b=1;如果该节点两个分支的栅电容大小相等,则b=2; 图片 对于路径分支努力B $B=\prod_1^n b_i$ 对于一条路径,该路径的分支努力等于路径上所有节点的分支努力连乘。 f(电气努力)和F (路径电气努力) 图片 f又称为等效扇出,表示第j+1级管子(j+1级输入电容)相对于第j级管子(j级输入电容)的尺寸(电容值)。 $$ f=\frac{C_{e x t}}{C_g} $$图片 图片 对于一条路径,该路径的电气努力等于路径上所有门的电气努力连乘然后除以路径分支努力。 h(门努力)和 g(路径门努力) $$ h=g \cdot f $$图片 3.【重点】【优化】 确定电路尺寸 为了追求更好的性能,即最低的延时,我们希望可以调整尺寸,让组合逻辑的延时最小。 图片 推导如下: ※本征延时和路径中逻辑门的类型有关,和尺寸无关。具体推导看(3)4.3 图片 eg: 求出路径上各级门的尺寸系数S 图片 如上图电路图,可以将电路分成以下4级 图片 步骤一:确定G、B、F 图片 图片 步骤二:确定级数N 由图可知,N=4 步骤三:计算门努力h $$ h=\sqrt[N]{H}=\sqrt[4]{55.56}=2.73 $$步骤四:计算尺寸系数Si 图片 最优级数N=lnF 图片
VLSI&IC验证
# VLSI
刘航宇
3年前
1
3,320
16
2023-02-23
VLSI设计基础5-CMOS组合逻辑门电路
摘要:本文介绍了CMOS组合逻辑门电路,包括其分类、静态互补CMOS设计、晶体管尺寸确定、Elmore延时模型及其应用,以及降低多扇入电路延时的方法。参考书:数字集成电路-电路、系统与设计,本文栏目对其重点进行精简化 目录 1. CMOS电路的分类 2. 静态互补CMOS设计 2. 【重点】如何确定晶体管尺寸 3. Elmore延时模型 4. 【Elmore延时】计算复合门延时——【多扇入】 5. 降低【多扇入】的电路的延时 6. 延时和【扇出】 7. 总结 1. CMOS电路的分类 静态互补CMOS电路 即常见的CMOS电路——开关模型=理想开关+有限电阻 门输出通过一个低阻连接到VCC和GND,输出为该电路实现的布尔值(0或者1) 特点如下: 高噪声容限(见(4)噪声门限)。 高输入阻抗,低输出阻抗 静态功耗可忽略(见(4)功耗) 动态CMOS集成电路 信号暂时存储在高阻抗电路节点上面的电容上——RC大 特点如下: 门电路简单、速度快 设计和制作工艺复杂 对噪声敏感 图片 2. 静态互补CMOS设计 何为互补CMOS 互补CMOS由上拉网络(PUN)和下拉网络(PDN)组成,每个输入都分配到上拉和下拉网络 如下图,以与非门为例: 图片 图片 规则 以NMOS管作为分析对象, 串与,并或 即,NMOS管串联,实现与非功能;NMOS管并联,实现或非功能。 其关系如下图: 图片 为何是非?因为互补CMOS本身脱身于反相器,故自带非逻辑。 PMOS与之对偶 图片 【静态CMOS】分析逻辑门电路 CMOS管构成的电路分析,使用开关模型——理想开关+有限电阻+电容 以两输入与非门为例,如下图 图片 注意:有节点的地方,一般都有电容。如上图两输入与非门所示,两个串联的NMOS管之间存在节点,于是存在一个电容Cint;上拉和下拉网络之间存在节点,这个节点正好是输出结果的节点,为CL 图片 2. 【重点】如何确定晶体管尺寸 图片 图片 图片 图片 图片 图片 3. Elmore延时模型 【用途】:用于大概估算具有众多电容、电阻电路的延时,适用于【RC树】 最基本的公式:$t_p=0.69 R C=0.69 \tau$ 图片 图片 图片 $\tau=R_1 C_1+R_1 C_2+\left(R_1+R_3\right) C_3+\left(R_1+R_3\right) C_4+\left(R_1+R_3+R_i\right) C_i$ 于是 图片 4. 【Elmore延时】计算复合门延时——【多扇入】 图片 图片 分析【多扇入】: 晶体管串联导致电阻增大,传播延时随着扇入数的增大而增大 一个门的无负载本征延时最坏情况下,延时约为扇入数的二次函数 实际应用中,一般扇入数不超过4 5. 降低【多扇入】的电路的延时 调整管子尺寸 ——逐级加大晶体管尺寸,即在Elmore分析中出现最多次的管子的电阻应该减小(W增大) 图片 尺寸:M1>M2>M3....>MN 重新安排输入 ——关键路径上的晶体管应该靠近输出端。 关键信号:一个门的输出信号中,在所有输入中最后到达稳定的信号。 关键路径:决定一个结构最终速度的逻辑路径称为关键路径。 原理:越靠近输出端,信号需要经过的管子少,RC延时短。 图片 1.重构逻辑结构 ——多扇入逻辑电路拆解成若干个较低扇入的逻辑电路。 前面Elmore延时模型已经知道,延时和扇入数接近平方关系增长。 于是降低扇入数,可以降低电路的整体延时。 加入buffer隔开大扇入和大扇出 图片 图片 6. 延时和【扇出】 图片 7. 总结 关于逻辑门的延时,给出如下的公式进行描述 $t_p=a_1 F_I+a_2 F_I^2+a_3 F_O$ FI表示总的等效扇入,Fo表示总的等效扇出。 可见,延时与扇入成平方关系,同扇出成线性关系
VLSI&IC验证
# VLSI
刘航宇
3年前
0
3,778
6
VLSI设计基础4-反相器
摘要:本文介绍了VLSI设计中反相器的基础知识,包括其数集模型、特性、静态和动态特性、功耗计算及设计方法。重点讨论了反相器的传播延时、功耗组成和优化设计。参考书:数字集成电路-电路、系统与设计,本文栏目对其重点进行精简化 目录 1. INV综述 2. INV的静态特性 3. 【重点】INV的动态特性——tp4. 【※重要】计算延时tp——计算、优化 5. 根据【延时】设计电路 3. 反相链的设计 6. 功耗 7. 利用【功耗】设计电路 1. INV综述 INV的数集模型 图片 由组成的图可以知道,INV是由两个CMOS管串联组成的。而CMOS的数集模型是理想开关+有限导通电阻or无限关断电阻,故INV的数集模型如下 图片 即两个电阻开关并联。 图中的CL表示晶体管的漏极电容、连线电容、扇出门的输入电容 INV的特性综述 图片 VTC(电压传输特性) 所有的工作点不是输出高电平就是输出低电平,如下图: 图片 静态CMOS反向中PMOS和NMOS的负载曲线,原点表示直流工作点 2. INV的静态特性 开关阈值(VM) 图片 图片 噪声门限 图片 图片 3. 【重点】INV的动态特性——tp 设计角度 最小的传播延时 这是厂家最希望的 满足性能的同时,做到面积最小 面积最小,意味着成本最低。这里的面积取决于W,也就是选择合适的 根据扇出设计反相器链的级数 对于时钟树、复位树等需要多扇出的、且要求tp小的,如何设计一个合理的高扇出的反相器链 输入信号的上升下降时间对传播延时的影响 计算计算CL CL =晶体管的漏极电容+连线电容+扇出门的输入电容. 图片 等效电阻Req $R_{e q}=\frac{1}{V_{D D} / 2} \int_{V_{D D} / 2}^{V_{D D}} \frac{V}{I_{D S A T(1+\lambda V)}} d V \approx \frac{3}{4} \frac{V_{D D}}{I_{D S A T}}\left(1+\frac{7}{9} \lambda V_{D D}\right)$ 4. 【※重要】计算延时tp——计算、优化 图片 图片 5. 根据【延时】设计电路 图片 图片 图片 性能最好(tp-min)的反相器 图片 图片 3. 反相链的设计 反相链结构图 图片 图片 图片 例题 图片 6. 功耗 功耗组成 动态功耗:来源于电容充放电 短路电流:当输入电压在某一个区域时,使得上下两管同时导通,从而形成短路电流。 漏电流:属于静态功耗 动态功耗 工作过程——能量分配 来源于电容充放电 图片 图片 公式 图片 短路电流引起功耗 图片 图片 图片 图片 静态功耗(漏电流) 图片 图片 7. 利用【功耗】设计电路 图片 【小贴士】:延迟最低的等效扇出系数为$f=\sqrt[N]{F}$
VLSI&IC验证
# VLSI
刘航宇
3年前
0
1,426
2
2023-02-23
VLSI设计基础3-导线与互联问题
摘要:本文介绍了VLSI设计中导线与互联问题,包括互连参数、导线模型、寄生参数及其影响,并探讨了降低电容串扰、电阻寄生效应和长导线延时的方法。参考书:数字集成电路-电路、系统与设计,本文栏目对其重点进行精简化 目录 1. 互连参数 2. 导线模型分布RC模型(重点) 3. 总结 互连问题1. 电容寄生效应 2. 电阻寄生效应 3. 性能——长导线延时 1. 互连参数 导线材料 金属层 多晶硅层 n+或p+扩散层 互连参数——电容 平板电容模型 边缘电容模型 互连参数——电阻 方块电阻: 图片 扩展: 芯片中的互连,一般高层的金属层一般W较大,于是电阻更小。 即W↑→R↓→功耗P↓,RC↓ 因此高层金属层,如M4、M5,常用于时钟、电源等关键信号的 布线中间层金属用作于信号线。 互连参数——电感 当频率上GHZ的时候,才会去考虑电感的作用。 2. 导线模型 模型 理想导线:一般用于较大尺寸的工艺中 集总模型 适用情况:电阻小;开关频率中低水平 内容:将一条导线上的电容集总成一个电容 集总RC模型 适用情况:电阻较大,不可忽略;开关频率中低水平 内容:将一条导线上的电容集总成一个电容,电阻集总成一个电阻 不足:当互连线太长时,该模型当变得保守 图片 分布RC模型(重点) 适用情况:互连线长;导线电阻、电容不可忽略 根据推导可知,一条导线的延时同他的长度呈现二次方关系 和集总RC模型对比 分布RC模型得到的延时是集总RC模型的1/2 适用于长互连线 图片 图片 图片 图片 传输线模型 适用情况:高频、射频、微波;互连材料好,其导线电阻保持在一定范围内。 内容:高频情况下,需要考虑电感的作用 3. 总结 图片 互连问题 寄生参数对于电路的危害: 影响信号的完整性 降低信号的性能 增加延时 增加功耗 寄生的类型——电容、电阻、电感 1. 电容寄生效应 此处讨论电容寄生主要是串扰 串扰的定义: 由相邻的信号线之间不希望有的耦合引起的干扰 小贴士: 耦合有多种,常常是电容性的耦合 串扰引起的噪声难以捕捉 串扰的危害 串扰将使得导线的延时难以预见,故产生了下文“可预见的导线延时设计” 可预见的导线设计 估计改进 方法:不断参数提取,不断仿真,不断优化 缺点:设计过程需要多次重复,时间长 备注:最常用 能动性的版图生成 布线程序考虑相邻导线的作用 缺点:主要由EDA工具完成,在如今EDA工具的要求高 备注:有吸引力;已经有一些EDA工具具备该功能 可预测的结构 方法:密集型布线结构——同层信号线使用电源线隔离,相邻层采用垂直布线。 缺点:面积和电容增加了+5%,功耗和延时增加 优点:减小了电容串扰,延时差别也下降到不超过2% 图片 克服电容串扰的方法 尽量避免浮空节点,对串扰敏感的节点,加保持器降低阻抗、 敏感节点应当很好地与全摆幅信号隔离 在满足时序约束的范围内尽可能加大上升(下降)时间 在敏感的低摆幅布线网络中采用差分信号传输方法 不要使两条信号线之间的电容太大 在两个信号之间增加屏蔽线(即加GND或VDD),使线间电容变成接地电容来消除串扰,但增加了电容负载 使用屏蔽层GND或VDD 2. 电阻寄生效应 总论 原因:芯片尺寸的减小,使得线宽减小,导线电阻增加,导线压降增加。 常考虑:电源网络设计——导线消耗了电压,使得供给门电路的电压下降 供给门电路的电压下降的危害 噪声容限降低 延时增加 降低电迁移的方法 改变金属线属性。 如合金或者Cu代替Al导线,但是成本增加。 降低温度。 降低温度可以减小电迁移发射概率。 芯片封装上面需要考虑散热问题。 增加线宽。 增加线宽可以降低平均电流密度。 缺点;增加布线资源,成本增加 优点:增加线宽不仅可以降低平均电流密度,还可以降低金属温度,间接又抑制了电迁移。 3. 性能——长导线延时 总论 原因:根据导线模型——分布RC模型,可知$t_p \propto L^2$。为了降低电路延时,提高电路的响应速度,需要降低导线寄生电阻。 降低长导线延时的方法 采用更好的互连材料。 导线:铜、合金等;绝缘材料:低介电常数的材料 ※但是,这种方法不是解决长导线延时的根本方法。 增加互连金属层的数目 管子数目增多驱动这金属层数目增多。 局部线(底层金属层做信号传输)采用高密度,全局线(高层金属层走全局信号,如时钟线、电源线) 采用更好的互连策略——对角线法 图片 采用对角线式布线(如上图),现场可较小29%,但是对于EDA工具、掩膜制作的要求高,难度大。 目前一般采用曼哈顿式布线,即横平竖直式的布线。 中间插入中继器——中继器 长的互连线中插入中继器(如inv buffer),强行减小导线长度。但是中继器也存在延时。 优化互连结构——寄存器或锁存器 方法:导线流水线——长互连线中插入寄存器或者锁存器,将导线分成K段。 优点:可以提高数据处理能力。每段导线中可以加入中继器进行进一步优化。
VLSI&IC验证
# VLSI
刘航宇
3年前
0
2,244
3
1
2
下一页