实现二输入逻辑与,逻辑或。没有用到乘法器,只用加法器和状态机,仿真没有问题,板子上运行还没有测试,仅供参考吧!
module perception(clk,en_start,en_train,data_in,rst_n,y_o,w_0);
input en_start;//神经元开始工作input en_train;//是训练还是测试1训练,0测试
input clk;
input rst_n;//复位
input [3:0]data_in;
output y_o;//输出
output [12:0]w_0;
//reg [2:0]count_input; //0 代表输入为0 0 1, 用case语句
//1 代表输入为0 1 1, 实现net=w0*x1+w1*x2+w2*x3
//2 代表输入为1 0 1, x1、x2为输入,x3为偏置
//3 代表输入为1 1 1, w为参数
reg [2:0]ch_jud;
//reg d_n;//参考值
reg signed [12:0]net; //神经元输入的和
reg o_n;//神经元的输出
reg signed [10:0]w00;//计算参数
reg signed [10:0]w01;
reg signed [10:0]w02;
reg signed [10:0]w10;//更新参数
reg signed [10:0]w11;
reg signed [10:0]w12;
//计数,控制计算状态
reg [4:0]state;
localparam IDLE=5'b00001,
NET_SUM=5'b00010,
JUDGE=5'b00100,
CHANGE=5'b01000,
UPDATE=5'b10000;
reg [10:0]ARF;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
state=IDLE;
w00=11'b00010011000;