基于忆阻器的全功能巴甫洛夫联想记忆电路设计与仿真
2026/9/6 23:35:04 网站建设 项目流程

简介:针对忆阻器在巴甫洛夫联想记忆电路应用中功能不完善、生物特性欠缺等问题,这份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 关键参数计算

器件模型我用的是电压阈值忆阻器,关键参数如下:

参数数值设计说明
写入阈值 Vset0.9V超过后电导增加
擦除阈值 Vreset-0.8V低于后电导降低
初始高阻 Roff1MΩ未学习状态
学习后低阻 Ron10kΩ完全学习状态
测试读取电压 V_read0.5V低于双方向阈值
训练写入电压 V_write1.5V高于Vset
单独消退电压 V_reset_pulse-0.9V弱擦除,逐次退化
限流电阻 Rlim1kΩ防止写电流过大
反馈电阻 Rf20kΩ设定增益基准
非条件通路电阻 R_US10kΩ保证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也必须相应减小,否则就白白浪费了忆阻器的动态范围。

最后分享一个我做这类电路的经验:控制状态机和模拟电路要分开调试。先用理想电阻代替忆阻器,手动切换阻值,验证运算放大器和阈值比较器的逻辑正常,然后再换上真实忆阻模型,最后再接入状态机做自动化跑测。不要一上来就全系统联合仿真,否则波形一乱你根本分不清是状态机问题还是模拟通路问题。这类电路看起来小,实际上里面既有器件物理、又有模拟设计、还有数字逻辑,分模块排查是最快的路径。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询