ODIN SNN处理器

一、ODIN SNN处理器的框图概述

在这里插入图片描述
ODIN中共有256个神经元,256x256=64k突触;在这里插入图片描述
在这里插入图片描述

二、ODIN的6大模块(neuron_core、synapse_core、controller、scheduler、spi_slave、aer_out)及五种事件。

在这里插入图片描述
1.scheduler模块
功能描述: 在外部和内部产生的spike event之间进行仲裁。
(1)当外部发起请求,通过AER_IN输入spike event时,会触发 neuron event,此时,controller会进入PUSH状态,控制scheduler模块将传入的neuron event的地址写入到FIFO中:
在这里插入图片描述
(2)当只有内部神经元产生spike event时(外部此时无输入),scheduler模块会将这个内部产生的事件的地址(即产生的脉冲的源神经元的地址)存到FIFO中。

2.controller模块
功能描述:
根据输入的事件,判断controller应该处于哪一个状态,进而根据不同的状态去处理该事件。
最主要的状态:POP_NEUR:
如果当前没有外部AER事件发起请求,且FIFO中未空:controller会进入POP_NEUR状态(从FIFO中读取事件,并进行处理),就会分别到神经元SRAM和突触SRAM中读取信息:
从神经元SRAM中读取神经元的128-bit的状态信息NEUR_STATE;
从突触SRAM中读取32bit的权重值SYNARRAY_RDATA;然后:
(1)神经元状态更新:
FIFO中读取的事件的地址所对应的那个neuron是突触前神经元,其他所有的256个神经元作为突触后神经元,因此: 可以利用突触后神经元的状态信息 NEUR_STATE 和对应的突触权重 SYNARRAY_RDATA 对其状态进行更新,将更新好的信息存到FIFO中,同时也可以判断是否会激发脉冲;
(2)突触权重更新:
读取一行的突触权重SYNARRAY_RDATA(包含8个突触的权重,共32-bit),
更新当前突触前神经元与对应的256个突触后神经元之间的突触权重,并且重新存到FIFO中。

3、aer_out模块
(1)对scheduler的补充:
之前的scheduler可以阻止(/允许)内部产生的事件进入其中,存到FIFO中。
在这里插入图片描述
(2)AER_OUT模块中一个重要的寄存器:SPI_AER_SRC_CTRL_nNEUR
在这里插入图片描述
两个寄存器一起分析:
在这里插入图片描述
第一种情况的取值较为合理,内部产生的事件即可以直接输出,用于后续的分类;也可以进入调度器,写入FIFO,从而控制器可以读取处理这个内部的事件(对神经元状态和突触权重进行更新)。

三、ODIN的输入输出端口信号分析

(1)AER_IN
外部事件通过AER_IN输入,遵循四相位握手原则:即外部发起请求REQ,然后通过AER_IN传入事件,controller接收到并且处理完后返回ACK信号,ACK被置高后,REQ可以置0;REQ置0后,ACK也置0,此时便允许下一次外部事件发起请求。

AER_IN输入的是spike event的地址:
N_MNIST是根据MNIST中的2828像素编码得到的脉冲序列。但本文用到的ODIN初步采用的图像大小为1616。
考虑到直接对N-MNIST中,已经编码好的脉冲序列进行缩减较为困难,因此提出以下方案:
(a)将2828图片缩减到1616;
(b)然后对图片进行泊松编码,得到脉冲序列
可以获得不同时间步的脉冲序列,最终将脉冲事件按照时间步的先后排列,即得到一个输入图片的脉冲序列:
在这里插入图片描述
在这里插入图片描述
(c)对得到的脉冲序列进整理,整理为(x,y),最终通过AER_IN输入。
在这里插入图片描述
(2)AER_OUT
输出的是内部激发脉冲的源神经元的地址,输出后用于分类。 也遵循四相位握手协议,与AER_IN输入类似。

亚稳态现象的处理:
由于输入与clk的变化不同步而导致了亚稳态。所以从宏观角度来说,亚稳态的产生是由于输入的异步性。
解决方案:就是把输入同步化。经典解决方案就是在异步的输入后面接上两个同步的寄存器:
在这里插入图片描述
在这里插入图片描述

四、从输入到输出 整体分析

在这里插入图片描述

五、SPI 寄存器

1.SPI_GATE_ACTIVITY_sync——配置SRAM**
在这里插入图片描述
2.SPI_OPEN_LOOP 和 SPI_AER_SRC_CTRL_nNEUR
在这里插入图片描述
3.SPI_OUT_AER_MONITOR_EN 和 SPI_MONITOR_NEUR_ADDR 、SPI_MONITOR_SYN_ADDR
(1)SPI_OUT_AER_MONITOR_EN=0:

the output AER bus allows sending off-chip events that are generated locally by the neurons in the crossbar array.
When a neuron spikes, an output AER transaction is triggered and the 8-bit AEROUT_ADDR address field contains the 8-bit address of the spiking neuron.

(2)SPI_OUT_AER_MONITOR_EN=1:

the output AER bus allows monitoring state changes in a specific neuron and a specific synapse
与 SPI_MONITOR_NEUR_ADDR 、SPI_MONITOR_SYN_ADDR搭配使用。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠~~~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值