美文网首页
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现

基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现

作者: 简简单单做算法 | 来源:发表于2025-04-16 00:03 被阅读0次

1.算法运行效果图预览

(完整程序运行后无水印)

2.算法运行软件版本

vivado2019.2

3.部分核心程序

(完整版代码包含详细中文注释和操作步骤视频)

//Vtn * exp(-dt/tao)

reg signed[15:0]d1_Vtn;

always @(posedge i_clk or posedge i_rst)

begin

    if(i_rst)

    begin

    d1_Vtn <= 16'd0;

    end

else begin

    d1_Vtn <= i_Vtn;

    end

end

wire signed[31 : 0] P;

mult_gen_0 Vexp (

 //.CLK(i_clk),    // input wireCLK

 .A(d1_Vtn),        // input wire[15 : 0] A

 .B(o_exp),        // input wire[15 : 0] B

 //.SCLR(i_rst),  // input wireSCLR

 .P(P)        // output wire [31 :0] P

);

assign o_dat1=P[27:12];

//sum sitn*Wij

reg signed[31:0]sw1j;

reg signed[31:0]sw2j;

reg signed[31:0]sw3j;

always @(posedge i_clk or posedge i_rst)

begin

    if(i_rst)

    begin

    sw1j <= 32'd0;

    sw2j <= 32'd0;

    sw3j <= 32'd0;

    end

else begin

    sw1j <= $signed(i_stn1)*$signed(i_W1j);

    sw2j <= $signed(i_stn2)*$signed(i_W2j);

    sw3j <= $signed(i_stn3)*$signed(i_W3j);

    end

end

reg signed[15:0]d1_dat;

always @(posedge i_clk or posedge i_rst)

begin

    if(i_rst)

    begin

    d1_dat <= 16'd0;

    end

else begin

    d1_dat <= sw1j+sw2j+sw3j;

    end

end

assign o_dat2=  d1_dat;  

assign o_Vtn1=  o_dat1 + o_dat2;   

endmodule

4.算法理论概述

       LIF(Leaky Integrate - and - Fire)神经元是一种常见的脉冲神经元模型。它模拟了生物神经元的基本特性,主要包括对输入信号的积分和脉冲发放机制。从概念上理解,LIF 神经元就像一个带有漏电特性的容器,输入信号不断往这个容器中 “注水”(积分),当水位(膜电位)达到一定高度(阈值)时,就会产生一个脉冲,然后水位(膜电位)又会被重置。

        与简单的线性神经元模型相比,LIF 神经元具有脉冲发放的非线性特性。线性神经元模型的输出通常是输入的线性组合,而 LIF 神经元的输出是脉冲序列,其发放与否取决于膜电位是否达到阈值。与更复杂的生物神经元模型(如 Hodgkin - Huxley 模型)相比,LIF 神经元是一种简化模型。Hodgkin - Huxley 模型考虑了多种离子通道的动态变化,而 LIF 神经元只关注膜电位的积分和脉冲发放,在计算复杂度上较低,更适合于大规模神经网络的模拟和应用。

相关文章

网友评论

      本文标题:基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现

      本文链接:https://www.haomeiwen.com/subject/uzysbjtx.html