Chapter 5 Current Mirrors and Biasing Techniques
Chapter 5 Current Mirrors and Biasing Techniques
这一章介绍电流镜
5.1 Basic Current Mirrors
MOS工作在饱和区, 表现为一个电流源.
考虑电源变化, PVT波动, 我们会首先产生一路精准电流源, 再复制这路电流.
如何复制呢? 电流转电压再转电流就行了, 如下图所示

考虑到器件的mismatch, 并不能精准的复制电流. 尤其是LOD效应(gate到有源区距离影响Vth)和WPE效应(gate到well影响Vth)
Threshold Voltage Mismatch

即Vgs越大, Vdsat越大, 电流受Vth mismatch的影响越小
To attain high speed and to reduce the effects of threshold voltage mismatch, a large gate overdrive voltage should be used (remembering for a long-channel process that Vovn = VDS,sat = VGS - VTHN).
5.2 Cascode Current Mirrors

请注意Chanel Length Modulation, 也就是Vds会导致Ids电流变化
解决办法是就加入casecode, 挡住上面电压变化, 让mirroor管的VDS相同

但是这会带来headroom挑战, 因为Vy=Vgs, P点电压=Vgs+Vdsat=2Vdsat+Vth.
当VX减小时M3和M2谁先进入线性区? 答案是M3先进入线性区, VB迅速下降, 因为线性区的M3需要更大的Vgs才能维持Ix. 当VB<VA-Vth2时, 即Vx<VA-Vth2+Vds3时, M2进入线性区, 电流Ix开始迅速下降.

为了解决输出电压headroom问题
可以采用下面结构. Vout,min=2*Vds.

注意保证M1和M0要处于饱和区. 因此Vb-Vth0<Vx (确保M0饱和), Vgs1(Vx)-Vth1<VA=Vb-Vgs0 (确保M1饱和), 因此
VGS0 + (VGS1 − VTH1) ≤ Vb ≤ VGS1 + VTH0
第二个问题是如何产生Vb电压
可以采用下面两种方式

a)中 Vb=Vgs5+Vgs6-I*R
b) Vb=Vgs6/7 (串联降低W/L, 增大Vgs)
下图展示了一种high output impedance的电流镜, 如下图所示. M3通过检测VX, 控制VN, 提高了输出阻抗.
但是VX如果太大, M3吃掉所有的电流, 另外X的电压需要大于Vth3.

5.3 Active Current Mirrors
current mirror很大作用是放在运放中, 配合OTA使用. 例如下图最经典的5管运放.

采用半边电路分析, 半边电流分析, 小信号增益为
V o u t V o u t = g m 2 ( r o 1 ∥ r o 2 ) \frac{V_{out}}{V_{out}}=g_{m2}(r_{o1}\parallel r_{o2}) VoutVout=gm2(ro1∥ro2)
输出电压Vout的DC工作点, 考虑到对称性和沟道调制效应, Vout=VDD-Vsg3
5.3.3 Common-Mode Properties

共模增益:
A C M = Δ V o u t Δ V i n , C M A_{CM}=\frac{\Delta V_{out}}{\Delta V_{in,CM}} ACM=ΔVin,CMΔVout
为degenerated common source结构, 因此Acm增益为

因此CMRR为, 为 (gm*ro)^2

Effect of Mismatches
前面提到, 由于管子mismatch带来的CMRR影响更大.
5.3.4 Other Properties of Five-Transistor OTA
5管OTA的两大缺点: 1:即使匹配很好, CMRR较差, 因为CM影响输出. 2: supply rejection较差
supply rejection: 考虑VDD上有step跳变, 因为M1处于饱和区, 类似电流镜, 那么VF上也跳变相同step. 考虑对称性, Vout也跳变相同的step.

提高supply rejection的解决办法, 采用全差分结构, 如下图所示. VDD跳变step, 如果XY下面的impedance为M1/M2和电流镜的阻抗很大, 那么XY也跳变step (类似电阻分压原理). 但是由于全差分结构, Vout输出不变.

5.4 Biasing Techniques
5.4.1 CS Biasing
我们需要bias CS结构的VIN和小信号(a). 因此考虑在VIN和CS gate之间加电容. 再加上Rb, 形成high-pass filter (b).
为了确定VX的DC工作点, 加入电流镜和diode MOS结构©. 用MOS替代R, (d). 为了确保MR能开启, 在gate上加diode结构(E)

可得

CS Stage with Current-Source Load
CS Stage with Current-Source Load类似, M1和M2都需要bias (b), 设计Ib1=Ib2. 但是M1和M2相互打架, 因此M2 采用diode-connected结构©, 在高频时CG short M2 gate, Av=-gm1*(ro1||ro2||RG). 在©中Vout=VDD-Vsg2. 因此采用(d), Vout = VN + IG x RG. VN可以足够低保证M2在饱和区, Vout电压值得到提升.

Complementary CS Stage
对于互补型CS Stage的偏置. M1和M2相互打架, 因此加入大电阻RF, RF上没有电流, Vin=Vout, M1和M2 自己形成diode-connected结构了(b). 再加上电流I1来精准确定偏置电流©, 和加入ac coupling电容(d). Cin和C1的取值有讲究, 确保Av=(gm1+gm2)*(ro1||ro2)

5.4.2 CG Biasing
对于common gate偏置, 可考虑下图

VX到Vout增益为

5.4.3 Source Follower Biasing

下图就是Source Follower Biasing的典型应用, 通过加电容, 确保VX点的DC工作点可以比较低

5.4.4 Differential Pair Biasing

相关文章:
Chapter 5 Current Mirrors and Biasing Techniques
Chapter 5 Current Mirrors and Biasing Techniques 这一章介绍电流镜 5.1 Basic Current Mirrors MOS工作在饱和区, 表现为一个电流源. 考虑电源变化, PVT波动, 我们会首先产生一路精准电流源, 再复制这路电流. 如何复制呢? 电流转电压再转电流就行了, 如下图所示 考虑到…...
Avalonia Image控件上通过鼠标拖动画出矩形框
注册鼠标事件:首先,你需要注册 Image 控件上的鼠标事件,包括 PointerPressed、PointerMoved 和 PointerReleased。你可以在 XAML 文件或代码中注册这些事件。 <Image PointerPressed"Image_PointerPressed" PointerMoved"…...
Wireshark Lua插件入门
摘要 开发中经常通过抓包分析协议,对于常见的协议如 DNS wireshark 支持自动解析,便于人类的理解,对于一些私有协议,wireshark 提供了插件的方式自定义解析逻辑。 1 动手 废话少说,直接上手。 第一步当然是装上wiresh…...
XXE漏洞简介
目录 漏洞原理 漏洞危害 前置知识 XML简介 DTD简介 DTD的两种声明方式 实体 实体分类 内置实体(Built-inentities) 字符实体(Characterentities) 通用实体(Generalentities) 参数实体(Parameterentities) XXE漏洞…...
小白跟做江科大32单片机之蜂鸣器
1.复制之前编写的工程库项目,详细工程库创建过程如下链接: 小白跟做江科大32单片机之LED闪烁-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139295351?spm1001.2014.3001.55022.按照江科大老师给的图片进行连接蜂鸣器 接线时要用公…...
IsoBench:多模态基础模型性能的基准测试与优化
随着多模态基础模型的快速发展,如何准确评估这些模型在不同输入模态下的性能成为了一个重要课题。本文提出了IsoBench,一个基准数据集,旨在通过提供多种同构(isomorphic)表示形式的问题,来测试和评估多模态…...
MyEclipse使用教程
MyEclipse使用教程如下,按照以下步骤,您可以逐步熟悉并掌握MyEclipse的基本使用: 一、MyEclipse安装与准备 软件准备: 在使用MyEclipse之前,您需要确保已经安装了JDK(Java Development Kit)。J…...
TiDB学习9:Ti Cloud简介
目录 1. 为什么选择TiDB 2. 多租户 3. TiDB架构 4. 什么是TiDB Cloud 5. TiDB Cloud Provider Region 6. TiDB Cloud 入门 6.1 在浏览器中打开TiDB Cloud 6.2 创建您的账户 6.3 Developer Tier 与Dedicated Tier 6.3.1 Developer Tier 6.3.2 Dedicated Tier 6.3.2.…...
JavaScript 创建新节点的方法
在 JavaScript 中,可以使用 document.createElement() 方法来创建新的节点。该方法接受一个字符串参数,表示要创建的节点类型,如 "div"、"p" 等。 创建一个新节点的基本步骤如下: 使用 document.createElem…...
在phpstorm2024版里如何使用Jetbrains ai assistant 插件 ?
ai assistant激活成功后,如图 ai assistant渠道:https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上,Google 为 Android Studio 推出了 Studio Bot 功能,使用了谷歌编码基础模型 Codey,Codey 是…...
进程间通信(27000字超详解)
🌎进程间通信 文章目录: 进程间通信 进程间通信简介 进程间通信目的 初识进程间通信 进程间通信的分类 匿名管道通信 认识管道 匿名管道 匿名管道测试 管道的四种…...
一、大模型推理
https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://github.com/hiyouga/LLaMA-Factory/blob/main/examples/README_zh.md 安装 v7.1 https://github.com/hiyouga/LLaMA-Factory/releases/tag/v0.7.1 git clone --depth 1 https://github.com/hiyoug…...
.NET IoC 容器(三)Autofac
目录 .NET IoC 容器(三)AutofacAutofacNuget 安装实现DI定义接口定义实现类依赖注入 注入方式构造函数注入 | 属性注入 | 方法注入注入实现 接口注册重复注册指定参数注册 生命周期默认生命周期单例生命周期每个周期范围一个生命周期 依赖配置Nuget配置文…...
Day44 动态规划part04
背包问题 01背包问题:每件物品只能用一次完全背包问题:每件物品可以使用无数次 01背包问题 暴力解法:每一件物品其实只有两个状态,取或者不取,所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是 o…...
html期末复习速览
一.基础标签 1.段落标签<p></p> 特点:分段分割 2.标题标签<h1></h1>……<h6></h6> 特点:文字加粗,单独占一行 3.换行标签<br /> 特点:单标签,强制换行 二.文本格式化…...
CTFHUB-信息泄露-目录遍历和PHPINFO
目录 目录遍历 PHPINFO 目录遍历 很简单,挨着把每个目录都点开看一下 发现2目录下有个 flag.txt 文件,点开发现了本关的flag PHPINFO 这关也很简单,进来之后是一个phpinfo页面,按 CTRL F键打开查询,输入flag&#…...
面向Java程序员的Go工程开发入门流程
对于一个像我这样没有go背景的java程序员来说,使用go开发一个可用的程序的速度是肉眼可见的缓慢。 其难点不在于go语言本身,而是搭建整个工程链路的过程,即所谓的“配环境”。 本文主要讲述如何配出一个适合go开发的环境,以免有同…...
vue3开发高德地图
在vue3的index.html 使用动态注入地址名和key <html lang"en"><head><meta charset"UTF-8" /><link rel"icon" type"image/svgxml" href"/vite.svg" /><meta name"viewport" conten…...
通过DLL方式链接glfw3.dll
主要是CMakeLists.txt文件变化 cmake_minimum_required(VERSION 3.10) project(glfwTest) set(CMAKE_CXX_STANDARD 11) aux_source_directory(. SRC_SOURCES) set(GLFW_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) set(GLFW_LIBRARY_DIR ${CMAKE_SOURCE_DIR}/lib/glfw) add_ex…...
Python自然语言处理(NLP)库之NLTK使用详解
概要 自然语言处理(NLP)是人工智能和计算机科学中的一个重要领域,涉及对人类语言的计算机理解和处理。Python的自然语言工具包(NLTK,Natural Language Toolkit)是一个功能强大的NLP库,提供了丰富的工具和数据集,帮助开发者进行各种NLP任务,如分词、词性标注、命名实体…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
