简介:针对忆阻器在巴甫洛夫联想记忆电路应用中功能不完善、生物特性欠缺等问题,这份docx文档系统阐述了一种全功能联想记忆电路的设计、实现与分析过程。资源面向神经形态计算、忆阻器件与电路设计领域的研究者及高年级学生,完整覆盖水热合成法制备Ag/TiOx nanobelt/Ti忆阻器、器件性能测试、数学模型与SPICE电路模型构建,以及包含两类学习过程和三类遗忘过程的电路设计,并对比已有工作,突出时序关系与抑制效应等生物真实性改进。包体为单个docx文件,共1份,压缩包大小2.33MB,结构清晰,图文结合,便于按章节阅读和参考。目前已有159人学习,适合作为相关课题研究、课程设计或毕设参考。 做忆阻器和神经形态电路的人,几乎都会碰一次“巴甫洛夫”。我接过这个题目时,导师只给了一句话:做一个能自己学会、能自己忘掉、又能重新学会的电路。后来才知道,这个目标用专业一点的说法,就是“基于忆阻的全功能巴甫洛夫联想记忆电路”。这类电路在神经网络硬件里属于入门级但极其重要的里程碑,因为它把条件反射、学习、遗忘、再学习这些生物行为,真正压进了一个两端的忆阻器件里。这篇文章我把整个设计、计算和仿真过程完整记录下来,适合正在做忆阻器应用、神经形态硬件,或者想用电路复现认知行为模型的同学参考。
先给个结论:整个系统不需要复杂的FPGA推理,也不需要ADC和大量数字逻辑,核心就是一个忆阻器加一个运放求和电路,就能把巴甫洛夫实验的“学习—联想—消退—再学习”全流程跑通。关键是搞清楚行为定义、器件选型、脉冲时序和阈值设计,这四件事比堆电路重要得多。
1. 巴甫洛夫实验到底在测什么:电路行为定义
1.1 从生理实验到电路行为
巴甫洛夫经典实验里有几个角色:食物是非条件刺激(US),天然会引起唾液分泌这种非条件反应(UR);铃声是条件刺激(CS),刚开始单独出现狗是不分泌唾液的。当铃声和食物反复配对出现之后,单独给铃声,狗也会分泌唾液,这时候条件反应(CR)就建立了。如果再持续一段时间只给铃声、不给食物,这个条件反应会慢慢消退。最有意思的是,隔一段时间重新配对,狗会学得比第一次快很多,这叫快速再学习。
放到电路里翻译一下:
- 非条件刺激US:一个固定幅值的电压脉冲,比如食物信号;
- 条件刺激CS:另一个电压脉冲,比如铃声信号;
- 非条件反应UR:US输入后必须输出响应;
- 条件反应CR:训练后CS输入能输出响应;
- 消退:CS反复单独出现后,不再输出响应;
- 再学习:CS和US再次配对后,CS恢复触发能力,而且恢复速度更快。
在设计电路前,我建议先把这张行为表列出来,后面所有参数选择都是为了满足这张表。
| 行为阶段 | 输入刺激 | 系统输出 | 忆阻器件状态 |
|---|---|---|---|
| 初始状态 | CS单独 | 无响应 | 高阻态 |
| 初始状态 | US单独 | 有响应 | 无关 |
| 配对学习 | US + CS | 允许响应 | 高阻→低阻 |
| 条件建立后 | CS单独 | 有响应 | 低阻态 |
| 消退阶段 | CS反复单独 | 响应减弱→消失 | 低阻→高阻 |
| 再学习 | US + CS | 恢复响应 | 快速回到低阻 |
有了这张表,就不会把“全功能”理解成单纯做加法。全功能的关键在于:系统要具备可逆的突触权重变化,并能把这种变化映射到输出响应上。
1.2 为什么选忆阻器,不选传统CMOS方案
如果用传统数字方案做巴甫洛夫实验,也可以做,本质就是一个有限状态机加若干寄存器:用一个标志位表示“有没有学会”,CS来的时候就查标志位决定输出。但这样做没有物理层面的学习过程,更谈不上突触可塑性。
忆阻器的核心优势在于电导可连续调节且非易失。它的电阻状态正好对应突触权重,电导增加就是突触增强,电导降低就是突触抑制。而且忆阻器是两端器件,可以直接放进信号通路里参与模拟运算,不需要单独的存储单元和运算单元,这在面积和功耗上都比CMOS方案有优势。我做这个项目时主要考虑的是器件的模拟特性、写入阈值、动态范围和循环耐久性,模型基于VTEAM电压阈值模型已经很成熟。
2. 从信号流到状态机:总体架构设计
2.1 顶层模块划分
整个电路我分成五个模块:输入脉冲产生器、忆阻突触权重网络、固定非条件刺激通路、求和放大与阈值比较器、数字控制状态机。
输入脉冲产生器负责把外部的学习指令变成标准脉冲。每个刺激都用一组参数定义:脉冲幅值、脉宽、极性、间隔时间。这里有个容易忽略的点:同一个CS信号,在测试阶段和训练阶段的幅值是不一样的。测试时只用0.5V读取电压,低于器件写入阈值,不会改变忆阻状态;训练时用1.5V写入电压,高于阈值,才会修改权重。如果只有一个电压源通吃,就会“一测就写、一写就乱”,这是新手最容易犯的错。
忆阻突触权重网络是核心。我用一个忆阻器M_CS串联一个1kΩ保护电阻,放在CS信号和运放求和节点之间。保护电阻Rlim的作用是限流,防止写入瞬间电流过大烧毁器件,这是从第一次实测烧坏三颗样品之后学到的教训。US通路不需要忆阻器,直接用一个固定电阻R_US接入求和节点,因为食物信号必须天生就能触发响应,不需要学习。
2.2 状态机设计
控制状态机我用Verilog写了一个简单的五状态机,逻辑不复杂:
- IDLE:上电复位,给忆阻器一个完整的擦除脉冲,确保回到高阻态;
- TEST:分别发送CS读取脉冲和US读取脉冲,记录比较器输出;
- TRAIN:同时发送CS写入脉冲(1.5V)和US读取脉冲,重复N次;
- CHECK:再次只发CS读取脉冲,检查是否已经建立条件响应;
- EXTINCTION:只发CS读取脉冲,并在每个读取脉冲后加一个弱擦除脉冲,模拟反复单独出现CS导致的消退;
- RETRAIN:回到TRAIN阶段,重新配对学习。
实际工作顺序是IDLE→TEST→TRAIN→CHECK→EXTINCTION→CHECK→RETRAIN→CHECK。每次CHECK后如果满足结束条件,系统就停在当前状态,方便观察波形。
这里有一个生理逻辑要对齐:消退阶段不能靠“加一个强复位直接把器件打回高阻”,那样只是做一个RESET操作,不是消退。消退应该是弱化——每个CS脉冲让忆阻器的电导退一点,重复多次才完全消失。所以我用的是弱擦除脉冲,幅值刚过复位阈值,脉宽很短,让阻值逐次回升。这个细节决定了系统是“全功能心理模型”还是“简单存储电路”。
3. 核心电路落地:参数计算与脉冲时序设计
3.1 求和放大与阈值比较:一个运放解决
信号的求和不能靠简单并联电阻拉节点电压,因为输入源阻抗和输出负载都会影响判断。我采用的是反相求和放大器结构,把所有刺激通路接到运放反相输入端,反馈电阻Rf决定增益。
输出电压公式:
Vout = -Rf × ( V_CS / R_CS_total + V_US / R_US )
其中R_CS_total = Rlim + M_CS,即限流电阻加忆阻当前阻值。运放反相输入端是虚拟地,所以每个输入支路互不干扰,这是这个结构最大的好处。
比较器采用迟滞比较器结构:输出响应阈值设为0.8V,回差下限0.3V。也就是说,当|Vout|超过0.8V时判定为有响应;当|Vout|回落到0.3V以下时判定为无响应。迟滞可以避免输出在阈值附近来回抖动。
我用的是±3.3V供电的轨到轨运放,型号选的是工业常用的低偏置电流运放,具体型号不做硬性要求,但必须注意不要选增益带宽太低的,否则200ns的窄脉冲会被放大成圆头波形,比较器判断会延迟。
3.2 关键参数计算
器件模型我用的是电压阈值忆阻器,关键参数如下:
| 参数 | 数值 | 设计说明 |
|---|---|---|
| 写入阈值 Vset | 0.9V | 超过后电导增加 |
| 擦除阈值 Vreset | -0.8V | 低于后电导降低 |
| 初始高阻 Roff | 1MΩ | 未学习状态 |
| 学习后低阻 Ron | 10kΩ | 完全学习状态 |
| 测试读取电压 V_read | 0.5V | 低于双方向阈值 |
| 训练写入电压 V_write | 1.5V | 高于Vset |
| 单独消退电压 V_reset_pulse | -0.9V | 弱擦除,逐次退化 |
| 限流电阻 Rlim | 1kΩ | 防止写电流过大 |
| 反馈电阻 Rf | 20kΩ | 设定增益基准 |
| 非条件通路电阻 R_US | 10kΩ | 保证US刺激足以触发响应 |
计算一下各个状态下的输出,就能确认设计是否成立。
学习前,M_CS = 1MΩ,CS读取0.5V:
Vout_CS = -20k × 0.5V / (1k + 1000k) ≈ -10mV
远小于0.8V,不会触发响应。US读取0.5V:
Vout_US = -20k × 0.5V / 10k = -1.0V
绝对值大于0.8V,稳定触发响应。也就是说,非条件反射天生存在,条件反射尚未建立。
学习后,M_CS = 10kΩ,CS读取0.5V:
Vout_CS = -20k × 0.5V / (1k + 10k) ≈ -0.91V
超过0.8V阈值,条件响应成功建立。注意如果没有Rlim,输出刚好是-1.0V,加了1kΩ保护电阻后输出降到-0.91V,但仍在阈值之上,所以这个保护电阻并不会破坏逻辑。
这里还引出一个关于中间态的理解:如果训练只进行了一半,M_CS停在100kΩ,那么CS读取输出只有约-0.1V,不触发响应。这说明“学会”不是一个连续渐变的过程,而是有一个输出阈值在起决定性作用。你可以通过控制忆阻器的电导态做多级学习,但系统对外表现依然是离散的。
3.3 脉冲时序和写电压的防误写设计
写入和读取要严格区分。我在每个阶段都定义了脉冲序列,以训练阶段为例:
- 第1~2μs:CS写入脉冲,幅值1.5V,脉宽1μs;
- 第3~4μs:US读取脉冲,幅值0.5V,脉宽1μs;
- 两个脉冲有1μs间隔,避免在求和节点上叠加出不希望出现的中间电平。
为什么CS写入和US读取之间要有间隔?因为训练阶段我们希望“配对出现”,但不需要它们在模拟域叠加出一个2V的电压。如果CS 1.5V和US 0.5V同时在求和节点上出现,运放会进入深度饱和,恢复时间会影响下一个脉冲,并且虚地电位也会不稳。加一个间隔之后,两个信号在时间上“配对”,但在电路层面分时处理,效果更好。
测试阶段只发一个0.5V的CS读取脉冲,脉宽我压到200ns。短脉宽有两个意义:一是减少热量积累,降低阻变器件发生不希望的状态切换概率;二是更接近生物脉冲的工作方式,为后续扩展到脉冲时序依赖可塑性做准备。
3.4 多通道扩展与交叉阵列
单通道验证通过后,自然就想到扩展成多路。只需要把多个CS支路一起接入求和节点,每个CS支路都有自己的忆阻器和限流电阻,US通路可以共享。
扩展时最需要注意的是交叉阵列漏电流问题。想象一个4×4的忆阻交叉阵列,选通某个器件做训练时,其他未选中的器件会形成寄生路径,把写入电压分走,造成误写。此时必须给每个忆阻器串联一个选通晶体管,也就是1T1R结构。在实际测试中,2×2的小阵列不加晶体管问题不大,但超过4×4之后漏电流就会严重影响状态精度。
4. 仿真验证与常见问题排查实录
4.1 仿真环境与结果
我用的是Cadence Virtuoso + Verilog-A忆阻器模型,对比过LTSpice做行为验证,两个工具都可行。Verilog-A模型里最核心的就是状态变量更新方程,我简化为:
if V > Vset: x 增加,阻值下降
if V < Vreset: x 减小,阻值上升
else: x 保持不变
I = V × conductance(x)
仿真跑完一个完整流程,波形上看到的行为是:
- IDLE阶段,US脉冲触发输出高电平,CS脉冲输出低电平;
- TRAIN阶段重复5次后,CHECK里CS脉冲开始触发输出高电平;
- EXTINCTION阶段,第一个CS脉冲仍然触发,第二个开始逐渐变弱,到第七个左右输出消失;
- RETRAIN阶段只配对2次,CS就重新恢复触发,验证了快速再学习。
这组波形就是整个设计的验收标准。如果做版图实现,这一套核心结构面积非常小,不算I/O和测试焊盘,核心电路不到0.02mm²,静态功耗主要来自阈值比较器。
4.2 常见问题与排查方法
我实际踩过的坑不少,整理成表:
| 现象 | 根因 | 处理方法 |
|---|---|---|
| CS读取脉冲自身导致阻值变化 | 读取电压高于器件写入阈值 | 把读取电压压到0.3~0.5V,脉宽压到200ns |
| 训练后CS仍然不触发 | 写入脉冲宽度不够或限流电阻过大 | 检查M_CS是否真的进入低阻,必要时增加训练脉冲个数 |
| 消退时触发电压跳变不稳定 | 弱擦除脉冲太强,一次就RESET回高阻 | 降低复位电压或缩短脉宽 |
| 输出响应判断闪烁抖动 | 比较器没有迟滞 | 增加迟滞区间,或改用窗口比较器 |
| 运放输出饱和后恢复慢 | CS与US脉冲在时间上重叠 | 让两个脉冲错开1μs间隔 |
| 扩展阵列后状态串扰 | 未选通路形成漏电流路径 | 改用1T1R结构,每个忆阻器加选通管 |
最值得说的是训练脉冲数量。最开始我用固定1.5V、1μs的训练脉冲,打算写一次就从高阻到低阻。但实际器件有逐步响应特性,一次写入往往只让器件降低一到两个数量级,无法保证从1MΩ直接到10kΩ。后来我改成可配置的脉冲计数:TRAIN阶段重复5次,RETRAIN阶段重复2次。这样既提高了鲁棒性,也真实模拟了“多次训练强化记忆”的生物学含义。
再提醒一点关于保护电阻的取舍:Rlim加得越大,器件越安全,但低阻态时的输出电压会被拉低,可能掉到阈值以下。我实验后最终选1kΩ,这串进去会让低阻态时增益损失约9%,高阻态时损失约0.1%,在阈值逻辑上完全可接受。如果你用Ron更低的器件,比如1kΩ,那Rlim也必须相应减小,否则就白白浪费了忆阻器的动态范围。
最后分享一个我做这类电路的经验:控制状态机和模拟电路要分开调试。先用理想电阻代替忆阻器,手动切换阻值,验证运算放大器和阈值比较器的逻辑正常,然后再换上真实忆阻模型,最后再接入状态机做自动化跑测。不要一上来就全系统联合仿真,否则波形一乱你根本分不清是状态机问题还是模拟通路问题。这类电路看起来小,实际上里面既有器件物理、又有模拟设计、还有数字逻辑,分模块排查是最快的路径。
本文还有配套的精品资源,点击获取