ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于运放乘法器的忆阻器模拟器设计:从滞回特性到图像识别

基于运放乘法器的忆阻器模拟器设计:从滞回特性到图像识别 1. 为什么我需要一台忆阻器模拟器先说说我的处境做忆阻器方向研究一年多最头疼的不是论文看不懂而是手上根本没有一颗真正可用的忆阻器芯片。忆阻器虽然在1971年就被蔡少棠从理论上预言惠普实验室也在2008年做出了实物原型但它至今没有像电阻电容那样大规模商用化。我联系过几家做忆阻器流片的机构要么排队周期太长要么最小起订量太高压根不适合个人研究者做前期验证。没有实物论文里的仿真怎么做实验结果怎么来我总不能在网上随便copy一份仿真数据交差吧。就是这个尴尬的处境把我逼上了研究忆阻器模拟器的路。所谓忆阻模拟器说人话就是用现有的分立元器件——运算放大器、模拟乘法器、电阻、电容——搭出一个电路让它的外部电气特性和真实忆阻器尽量一致。忆阻器的核心特征是在交流激励下电压-电流曲线呈现一条过原点的“8字形”斜滞回线并且滞回环的面积随激励频率升高而逐渐收缩最终趋近于一条直线表现为普通电阻。模拟器只要能复现这个特性就能在很多场景下替代真实器件完成功能验证。我这里用的是一套基于运算放大器和模拟乘法器的方案整套核心电路成本不到一百块在面包板上就能搭起来。它能模拟电压激励下的忆阻行为支持调参改变滞回特性频率响应上限能做到几十千赫兹足以支撑绝大多数实验室级别的算法验证和教学演示。如果你也在做忆阻器应用研究但拿不到实物或者只是想在教学课堂上给学生演示忆阻器的独特电学特性这篇文章就是给你写的。我会把从原理推导、仿真验证到实物搭接的全过程都过一遍最后再聊一聊用模拟器阵列做图像识别的思路——这是目前比较有应用前景、也最有意思的一个方向。2. 忆阻器基础理论与模拟器设计思路2.1 忆阻器的数学定义与三类模型要设计模拟器首先得搞清楚忆阻器到底是什么。蔡少棠当年是从逻辑完备性的角度推导出这个元件的电阻、电容、电感分别定义了电压和电流、电荷和电压、磁链和电流之间的关系但电荷和磁链之间的映射缺失了。补上这个缺失关系的元件就是忆阻器。理想忆阻器的定义式由两个方程给出$$ v(t) M(q(t)) \cdot i(t) $$$$ \frac{dq(t)}{dt} i(t) $$其中 M 是忆阻值单位是欧姆但它不是常数而是随历史电荷 q 变化的函数。这正是忆阻器“记忆”特性的来源过去的电流历史改变了当前的状态当前的状态又反过来影响此刻的阻值表现。在实际建模中业界常用三类模型。最经典的是惠普实验室提出的线性离子漂移模型把忆阻器看成半导体薄膜中掺杂区和非掺杂区的串联电阻状态变量是掺杂区宽度。这个模型数学简单适合电路仿真但忽略了离子运动的非线性。第二种是阈值型模型只有两端电压超过阈值时才发生状态改变这更接近真实器件的开关行为。第三种是电压/电流控制模型用连续函数描述状态演化比如Biolek模型和Strukov改进模型。我最初做仿真用的是惠普模型它的SPICE实现比较成熟网上有现成的子电路可以直接调用。但当我想在实物电路中验证时发现惠普模型的数学形式并不容易用分离元件直接映射——它的状态方程里有非线性函数和乘法运算这些在纯模拟电路里实现起来很麻烦。2.2 为什么用模拟电路来搭“假忆阻器”可能有人会问既然模拟器这么麻烦为什么不用数字方案比如用单片机和DAC/ADC采集电压电流数据再用软件算法模拟忆阻器的状态更新方程这不是更灵活吗确实数字方案的灵活性更高修改模型参数只需要改代码。但它的核心瓶颈在于速度。忆阻器的状态更新是连续且高速的在脉冲激励下纳秒量级的状态变化都是常见的。单片机或FPGA的采样率一旦遇到高频激励就会开始“丢帧”模拟出的滞回曲线发生畸变。更关键的是数字方案只能给出计算结果无法体现真正的电压-电流动态过程对于研究电路相互作用的场景来说它的保真度是不够的。模拟电路的方案则刚好相反。只要元件带宽足够它就能实时响应激励信号的变化天然具备并行处理和连续响应的能力。用运放和乘法器直接构造状态方程中的积分、乘法和函数映射本质上是在硬件层面“物理实现”了忆阻器的数学定义所以模拟器的瞬态响应非常接近真实器件。我的设计思路是分三步走把忆阻器的数学模型拆成“状态更新”和“电流输出”两个功能模块先用运放搭建积分电路完成状态更新再用模拟乘法器和压控电阻组合完成电流输出最后用一个激励源扫频验证整体效果。2.3 我需要模拟哪种类型的忆阻器在动手之前我明确了一下需求我做的应用场景是脉冲神经网络和图像识别中的权值更新这要求模拟器具备阈值特性——即只有当施加的电压幅度超过某个临界值时忆阻值才会显著变化低于阈值的电压只引发普通的电流通断不改变状态。这个特性和神经科学里的“激活阈值”概念很相似。神经元只有在输入累积超过阈值时才会发放脉冲忆阻器也要有类似的阈值行为才能在神经网络中扮演突触的角色实现只对有效输入进行权重更新的功能。所以我的模拟器目标建模对象是阈值型忆阻器。这个选择还有一个实际考虑阈值型模型的状态方程通常可以用一个分段函数加上一个积分环节来表示而分段函数在模拟电路里用比较器和开关电路就能实现比连续函数模型更好搭。3. 模拟器核心电路设计与实现3.1 整体架构与功能划分我设计的忆阻模拟器采用模块化架构一共分成四个功能模块激励输入接口、状态积分器、阈值判断与复位、输出转换部分。信号流是这样的激励电压进入后兵分两路一路直接送到阈值比较器判断是否超过阈值另一路经过增益调整后送到积分器作为状态更新的输入。阈值比较器的输出控制积分器是否允许积分——只有超过阈值时积分路径才导通。积分器的输出代表了忆阻器的“状态变量”可以类比为惠普模型中的掺杂区宽度这个状态变量一路反馈回阈值比较器实现状态相关的阈值变化另一路送到输出转换部分控制输出电流的大小。最终在输出端口形成与输入激励相关的电流响应完成忆阻特性。这个架构的精髓在于“门控积分”思想。真实忆阻器的状态变量更新可以看成一个受阈值门控的累积过程在阈值以下状态几乎不变在阈值以上状态按某种速率朝饱和方向演化。我在模拟器里用比较器做门控用积分器做累积正好对应了这两个物理过程。3.2 状态积分器的设计与参数计算积分器是整个模拟器的心脏。我用的是经典的运放积分电路结构反相输入端接输入电阻 R_in反馈回路接积分电容 C_f同相输入端接地。它的输出和输入满足关系$$ V_{out}(t) -\frac{1}{R_{in}C_f}\int_0^t V_{in}(\tau) d\tau $$这里的 RC 乘积决定了积分增益也就是状态更新的速率直接对应忆阻器中离子迁移的快慢。初始仿真中我选了 R_in 10kΩ、C_f 1μF这样时间常数是 10毫秒适合1~100Hz范围内的低频激励测试。但这里有一个我在仿真中反复踩的坑纯积分器存在严重的直流漂移问题。由于运放输入失调电压和偏置电流的存在即使输入信号为零积分器的输出也会缓慢漂移严重影响模拟器的稳定性和滞回曲线的重复性。我的解决方法是加入泄放电阻 R_f 并联在 C_f 两端构成有损积分器。参考经验值取 R_f 1MΩ这样直流增益被限制在 100倍R_f/R_in 100而交流积分的起始频率大约是 0.16Hz1/(2π R_f C_f)低于这个频率的缓慢漂移会被抑制高于这个频率的正常积分信号几乎不受影响。3.3 阈值门控用比较器和模拟开关实现阈值门控部分我用了一颗LM393比较器和一颗模拟开关CD4066。LM393是集电极开路输出需要外接上拉电阻这个细节在新手设计里经常被忽略导致输出始终为低电平。电路原理是这样的输入激励 Vi 经过两个精密整流二极管1N4148分别提取正半周和负半周然后和参考电压 Vth 比较。我用一个电位器把 Vth 在 0~5V 之间可调这样就实现了正负方向对称的阈值设置。比较器的输出送到CD4066模拟开关的控制端只有当输入超过阈值时开关才导通允许积分路径进入积分器。这个设计的物理对应关系很直观——真实忆阻器只有在两端电压超过某个临界值时内部离子才开始显著移动电阻状态才发生改变。低于阈值时器件行为近似普通电阻状态保持不变。用比较器加模拟开关就是在电路层面复现这个“软硬阈值的数字化近似”。需要提醒的是CD4066的导通电阻不是零一般在几十到几百欧姆这会影响积分电阻的精度。我在设计积分电阻时预留了微调电位器让实际测试时可以校准导通电阻的影响。3.4 输出特性如何把状态变量变成电流响应积分器输出的是状态变量信号它还需要被“翻译”成电流响应才能在端口上呈现出忆阻器的电气特征。这个翻译过程我用了一个模拟乘法器AD633配合一个压控电流源来实现。AD633是Analog Devices公司经典的模拟乘法器芯片它能输出两个输入信号的乘积除以10V。我把积分器的状态变量输出和激励电压信号分别接入AD633的X和Y输入端输出电压 PROD (X × Y) / 10V。这个乘积结果再经过一个压控电流源由运放和采样电阻构成转换最终在输出端口形成电流响应。为什么需要“电压乘电压”这一步回看忆阻器定义式 v M(q) × i如果反解出电流可以得到 i v / M(q)。在真实器件中忆阻值是状态变量的函数所以在电路里要想复现这个关系本质上需要实现“电压 × 状态函数”的乘法运算。AD633做的就是这个乘法。压控电流源部分我用的是经典Howland电流泵拓扑外加高精度采样电阻 R_sense。Howland电流泵的输出电流由输入电压和 R_sense 决定理论上不受负载影响。但要注意它的输出能力有限我用的是LF356运放最大输出电流约20mA。如果希望模拟更高电流的忆阻器需要并联扩流管或者改用功率运放。4. 从电路仿真到实际波形验证4.1 仿真环境的搭建与模型选择在动烙铁之前我习惯先在Multisim里把电路完整仿真一遍确认每个节点的波形符合理论预期再开始实物搭接这样可以避免很多不必要的烧元件风险。仿真文件我在Multisim 14里搭建如果没有Multisim用LTspice搭也能完成基本的功能验证。仿真中的关键器件选型如下状态积分器用TL084运放阈值比较用LM393模拟开关用CD4066乘法器用AD633的SPICE模型——ADI官网提供这个模型文件直接导入Multisim即可。激励源用正弦波发生器初始设置幅度 3V、频率 1kHz阈值参考电压设置为 0.8V。一个容易被忽视的仿真细节是AD633的SPICE模型可能需要额外的供电和偏置设置。我刚开始仿真时发现输出始终被削顶后来查资料发现是模型默认的供电电压设置和我的电路不一致。把正负电源设置为 ±12V 后问题消失。如果你也遇到类似现象先检查模型参数不要急着怀疑电路结构。4.2 V-I特性曲线验证“8字”滞回线仿真的核心验证指标是伏安特性曲线也就是把输入电压作为X轴、输出电流作为Y轴绘制图形。我使用Multisim的瞬态仿真和XY绘图功能在仿真结束后调出V-I曲线查看。在 1kHz、3V 正弦波激励、阈值 0.8V 条件下我得到的V-I曲线是一个经过原点、呈斜“8字形”的滞回环。滞回环的两个“叶片”分别对应正弦波的正半周和负半周在过零点附近有一个明显的收缩这正是忆阻器的标志性特征。为了进一步验证模拟器的“频率依赖性”我把激励频率从 100Hz 逐步调到 10kHz分别在每个频率下记录V-I曲线的旁瓣面积。结果呈现一个单调递减的趋势100Hz 时旁瓣面积较大曲线张开明显10kHz 时曲线基本收缩成一条经过原点的直线形状和普通电阻无异。这个现象和真实忆阻器的频率响应规律完全一致——频率越高器件状态越来不及更新表现越接近普通电阻。4.3 参数扫描实验阈值、幅度和频率的影响我做了三组参数扫描实验把模拟器在各种情况下的表现摸了个底。这三组实验的数据对后续应用设计非常重要所以把结论总结在这里。第一组是阈值扫描固定频率 1kHz、幅度 3V把阈值从 0.2V 逐步升到 1.5V。结果显示阈值越低滞回环越“肥”旁瓣面积越大阈值升高后滞回环变“瘦”甚至出现中间平台缺失。这个趋势背后的物理直觉是阈值越低状态随激励变化越灵敏每个周期内有效状态更新的占比越大滞回效应自然更强。第二组是幅度扫描固定频率 1kHz、阈值 0.8V激励幅度从 1.5V 升到 4V。幅度较低时只有小部分波形超过阈值积分器只在很窄的时段内工作滞回曲线接近一条直线幅度增大后超过阈值的波形范围扩大状态变化幅度也变大滞回环随之张开。幅度超过 3.5V 后滞回环的张开趋势变缓这是因为积分器的输出逐渐接近运放的输出饱和范围状态变量进入“饱和区”。第三组是频率扫描固定幅度 3V、阈值 0.8V频率从 100Hz 逐步提升到 10kHz。这组实验的结果和理论预期完全吻合频率升高时旁瓣面积单调减小模型在高频下退化为线性电阻。实际应用中如果你希望模拟器在一个目标频率下表现出明显的忆阻特性需要根据这个规律反向选择RC参数。4.4 实物搭接与调试过程记录仿真验证过后我开始搭实物电路。整套电路我在一块面包板上搭接用了大概三个工时的调试时间。元器件清单如下TL084运放两片、LM393比较器一片、CD4066模拟开关一片、AD633乘法器一片、LF356运放一片、精密电阻电容若干、10kΩ和100kΩ电位器各一个、1N4148二极管四只。实物调试遇到过三个比较棘手的问题这里详细说一下排查过程。第一个问题是LM393比较器输出异常。用万用表测量发现输出端一直为高电平无论如何调节电位器都不变化。逐个检查后发现问题出在比较器的供电端——LM393的供电电压范围是 2~36V 单电源或者 ±1~18V 双电源但我一开始按TL084的习惯给了 ±15V 供电这没问题真正的坑在于它的集电极开路输出需要一只上拉电阻接正电源。焊好 10kΩ 上拉电阻后输出恢复正常。第二个问题是波形失真。刚开始用示波器观察输出电流波形时发现正弦波在正负峰值处有明显的削顶现象。根据经验判断这是运放输出饱和——用万用表测AD633供电发现只有 ±9V 而不是预期的 ±12V原因是实验室电源面板上那路输出被我误调到了 ±9V。把电源恢复到 ±12V 后波形正常。第三个问题比较隐蔽低频时滞回线不闭合。我开始还以为是电路哪里有问题后来用示波器长余晖模式观察发现低频下的V-I曲线会缓慢“漂移”每次扫描的滞回环都不完全重合。这是因为有损积分器的泄放电阻 R_f 周期性地把状态变量部分复位导致低频段状态累积不稳定。解决方法是把 R_f 从 1MΩ 换成 10MΩ 减小泄放效应同时确保相邻两次扫描之间的间隔足够长让积分器复位到零初始状态。5. 进阶应用用忆阻模拟器阵列做图像识别5.1 忆阻交叉阵列的原理与优势搞定单颗模拟器后我的下一步是把多颗模拟器组成交叉阵列尝试做一个图像识别的原型验证。这个方向正是目前忆阻器应用研究最热门的领域之一——用忆阻器阵列实现存算一体和模拟神经网络计算。忆阻器交叉阵列的结构其实不复杂把 N 条水平字线Word Line和 M 条垂直位线Bit Line交叉每个交叉点放一个忆阻器就构成了一个 N×M 的突触权值阵列。阵列中的每个忆阻器的电导值代表神经网络中一个突触的权重。在推理阶段输入图像被编码为电压脉冲序列施加到字线上在位线侧通过基尔霍夫电流定律完成矩阵向量乘法——电流的大小就是加权累加的结果。这个方案的核心优势在于存算一体。传统的冯·诺依曼架构中数据需要在存储器和处理器之间来回搬运带来大量功耗和延迟。忆阻器阵列直接在存储数据的位置完成计算把矩阵乘法的复杂度从 O(n²) 降到了 O(1) 的时间复杂度——所有交叉点的电流累加在物理上一瞬间完成。对图像识别这类数据密集型任务来说这个优势是决定性的。5.2 模拟器阵列遇到的工程问题与对策在实际搭建模拟器阵列时我遇到了几个在单颗模拟器上完全不需要考虑的新问题这里逐一说明。第一个是串扰问题。因为没有封装成独立的交叉阵列而是用面包板把多颗模拟器按行列方式互连相邻通道之间的寄生电容和互感会导致信号串扰尤其是在高频激励下。我用 2kHz 左右的低频率激励来兼顾串扰抑制和状态更新时间。同时把电源走线和信号走线尽量分开地线采用星形接地而不是串联接地串扰电平从示波器上测得的 80mV 左右降到了 15mV 以下。第二个是电流累加后的测量精度问题。交叉阵列的输出电流是所有列上忆阻器电流的叠加如果某个忆阻器的电导误差较大会直接影响整个列的输出结果。我在每个模拟器输出端串联一个微调电位器将阵列中所有模拟器的初始电导校准到同一标称值。校准方法是给阵列施加同一个固定电压逐个调整电位器使每行的输出电流一致误差控制在 2% 以内。第三个是更新一致性问题。在训练过程中不同的模拟器需要按规则更新电导值但分立元件的温度漂移和老化效应会导致同一型号的模拟器在相同电压下表现出不同的更新速率。我给每个模拟器做了一个独立阈值微调端子在阵列训练前先把所有模拟器的阈值和更新速率校准到一致确保更新规则可以平均地作用于整组权重。5.3 简单图像识别原型的验证流程我搭建了一个简化的 8×8 模拟器阵列用来识别 8×8 的字母图像。数据集用的是经典的手写数字和字母的位图。流程是这样的先离线计算好图像分类需要的权重矩阵把权重量化为电导值然后手动把每个模拟器的电导值调到对应的量化档位这个过程在真实的忆阻器阵列中叫“写入”操作我的分立元件方案只能手动调。识别阶段把待识别图像的像素灰度值转换成对应的电压幅度按行加载到阵列的字线上。阵列位线侧的输出电流通过一个多路选择器依次采样送到微控制器的ADC转换最后在电脑端做简单的阈值判断输出识别的字母类别。实测中在无噪声的理想情况下这个8×8阵列对6个标准字母样本的识别准确率可以达到100%。当我给输入电压叠加5%的随机噪声后准确率下降到87%。这个结果说明阵列的基本工作逻辑是通的模拟器能够在功能上复现忆阻器交叉阵列的推理过程。这个原型虽然粗糙但它完整走通了一条路径从忆阻器的电路模型到实体化实现再到阵列化应用。对于没有真实忆阻器卡片的团队来说这是一个可行的前期验证平台。6. 常见问题排查与效果优化6.1 五类高频问题的诊断清单在搭建模拟器和阵列的过程中我把踩过的坑整理成了一份问题诊断清单。如果你是第一次做类似项目按这个清单排查能省下大量时间。故障现象可能原因排查方法与对策V-I曲线没有滞回激励幅度低于阈值调高激励幅度确认阈值电位器位置合适滞回环不闭合积分器泄放电阻过大或复位不足把 R_f 调小一些扫描前给积分器放电复位波形削顶失真运放输出饱和或电源电压不足检查正负电源实际电压确认激励幅度在运放输出范围内输出噪声偏大布线不合理、电源去耦不足电源引脚加 0.1μF 陶瓷电容去耦信号线远离电源线阵列串扰明显地线处理不当、测量顺序有误采用星形接地信号线屏蔽降低激励频率6.2 精度漂移问题的一个隐蔽原因与对策这里单独说一个我在阵列校准中遇到的隐蔽问题AD633乘法器的失调电压漂移。刚开始校准模拟器阵列时我每次校准完当时看都是准确的但第二天回来再测量发现同一颗模拟器的输出电流和前一天记录的值差了将近 5%。一开始我怀疑是环境温度变化导致的元件漂移后来用高精度数字万用表测量发现AD633的输出失调电压在温度波动下确实有微伏级的漂移这个漂移虽然本身很小但在经过压控电流源的放大之后最终输出电流的偏差就被放大了。解决方法是双重的。第一在AD633的求和输入端加了一个调零电位器校准时把输入短接调节电位器让输出为零——这是手册上的标准做法但我之前偷懒没做。第二在每次大规模测试前都重新执行一次温度均衡也就是让整块电路板通电预热至少15分钟再开始校准和测量尽量避免在冷启动状态下做精确测量。6.3 提高模拟精度的三个实用技巧经过多轮调试和对比我总结出三个能明显提高模拟器精度的实用技巧供大家参考。第一积分电容选择C0G或聚丙烯薄膜电容不要用X7R陶瓷电容。X7R陶瓷电容的容量值会随直流偏压发生明显变化我实测在5V偏压下的容量可能比标称值低20%这会导致积分增益漂移。C0G电容在偏压下几乎不变虽然贵一点但对精度提升非常显著。第二阈值比较环节增加正反馈电阻形成施密特触发器结构。直接用比较器输出的数字电平去控制模拟开关容易在阈值点附近出现反复开关抖动导致迟滞曲线在过零点附近出现毛刺。接入一个 100kΩ 正反馈电阻后比较器变成了施密特触发器开关状态有了约 20mV 的滞回余量输出干净稳定得多。第三激励信号源的输出阻抗要保持稳定。有些信号发生器在不同频率下输出阻抗不同导致加载到模拟器输入端的实际电压随频率变化。用缓冲器电压跟随器隔离信号源和模拟器加载电压的恒定性和平稳性会大幅提升我在加缓冲前后对比测试V-I曲线的重复性误差从 3% 降低到 0.8% 左右。7. 最终版本的效果评估与后续扩展空间最终版本的模拟器在 2kHz、3V 正弦激励下测试V-I特性曲线呈现出标准的斜“8字”滞回形态滞回环的旁瓣面积稳定重复性误差在 1% 以内。在 8×8 阵列结构中完成了字母图像识别的全流程验证无噪声条件下的识别准确率达到100%含5%噪声时为87%这个结果验证了模拟器在功能层面对真实忆阻器的替代能力。从个人体会来说这套模拟器方案最大的价值不是追求和真实纳米器件在速度、功耗等指标上完全一致——那显然做不到——而是在功能层面提供了一个可以灵活修改参数、成本可控的实验平台。对于动手做忆阻器应用研究的人、想在教学课堂上展示忆阻器特性的老师、以及想在神经网络算法验证中引入硬件在环的计算结构来说这是目前比较务实的一条路径。回顾整个项目周期从最先在Multisim里做仿真到面包板上拉线调试再到最后组成阵列做图像识别我和这套模拟器打了将近一个月交道。踩坑最多的地方集中在运放的供电、比较器的上拉电阻、积分器的漂移这些模拟电路基础问题上。这些东西看似基础但每一个都能让整个系统从“看着能用”变成“彻底不能用”。希望这篇记录能帮你少走几步弯路。
返回列表