|
|
@@ -47,6 +47,31 @@ module neuron_layer#(parameter C, K, N=32)(clk, rst, x, y, w, b, left, right);
|
|
|
|
|
|
endmodule : neuron_layer
|
|
|
|
|
|
+module neuron_layer_sync#(parameter C, K, N=32)(clk, rst, x, y, w, b);
|
|
|
+ localparam NEURONS = 2**K;
|
|
|
+ localparam CONNS = 2**C;
|
|
|
+
|
|
|
+ input wire clk, rst;
|
|
|
+ input wire [N-1:0] x [CONNS-1:0];
|
|
|
+ input wire [N-1:0] w [NEURONS-1:0][CONNS-1:0];
|
|
|
+ input wire [N-1:0] b [NEURONS-1:0];
|
|
|
+ output wire [N-1:0] y [NEURONS-1:0];
|
|
|
+
|
|
|
+ genvar i;
|
|
|
+ generate
|
|
|
+ for(i=0; i<NEURONS; i++) begin: gen_neruons
|
|
|
+ neuron_sync#(.K(C), .N(N)) n(
|
|
|
+ .clk(clk),
|
|
|
+ .rst(rst),
|
|
|
+ .x(x),
|
|
|
+ .y(y[i]),
|
|
|
+ .w(w[i]),
|
|
|
+ .b(b[i])
|
|
|
+ );
|
|
|
+ end
|
|
|
+ endgenerate
|
|
|
+endmodule : neuron_layer_sync
|
|
|
+
|
|
|
/*
|
|
|
Testbench for a 8x8x2 neuron network as shown below:
|
|
|
|
|
|
@@ -137,6 +162,55 @@ module neuron_network_tb;
|
|
|
.right(right[1])
|
|
|
);
|
|
|
|
|
|
+ /* ******************
|
|
|
+ Synchronious network
|
|
|
+ ********************/
|
|
|
+ reg [31:0] layer1_s [7:0];
|
|
|
+ reg [31:0] layer2_s [7:0];
|
|
|
+ reg [31:0] layer3_s [1:0];
|
|
|
+ reg [31:0] ys [1:0];
|
|
|
+
|
|
|
+ neuron_layer_sync#(.C(2), .K(3)) layer_s1(
|
|
|
+ .clk(clk),
|
|
|
+ .rst(rst),
|
|
|
+ .x(x),
|
|
|
+ .y(layer1_s),
|
|
|
+ .w(layer1_w),
|
|
|
+ .b(layer1_b)
|
|
|
+ );
|
|
|
+
|
|
|
+ neuron_layer_sync#(.C(3), .K(3)) layer_s2(
|
|
|
+ .clk(clk),
|
|
|
+ .rst(rst),
|
|
|
+ .x(layer1_s),
|
|
|
+ .y(layer2_s),
|
|
|
+ .w(layer2_w),
|
|
|
+ .b(layer2_b)
|
|
|
+ );
|
|
|
+
|
|
|
+ neuron_layer_sync#(.C(3), .K(1)) layer_s3(
|
|
|
+ .clk(clk),
|
|
|
+ .rst(rst),
|
|
|
+ .x(layer2_s),
|
|
|
+ .y(layer3_s),
|
|
|
+ .w(layer3_w),
|
|
|
+ .b(layer3_b)
|
|
|
+ );
|
|
|
+
|
|
|
+ hard_sigmoid_sync sigmoid_s0(
|
|
|
+ .clk(clk),
|
|
|
+ .rst(rst),
|
|
|
+ .x(layer3_s[0]),
|
|
|
+ .y(ys[0])
|
|
|
+ );
|
|
|
+
|
|
|
+ hard_sigmoid_sync sigmoid_s1(
|
|
|
+ .clk(clk),
|
|
|
+ .rst(rst),
|
|
|
+ .x(layer3_o[1]),
|
|
|
+ .y(ys[1])
|
|
|
+ );
|
|
|
+
|
|
|
initial forever #5 clk = ~clk;
|
|
|
|
|
|
initial begin
|
|
|
@@ -207,4 +281,9 @@ module neuron_network_tb;
|
|
|
endtask : read_value
|
|
|
|
|
|
|
|
|
-endmodule : neuron_network_tb
|
|
|
+endmodule : neuron_network_tb
|
|
|
+
|
|
|
+
|
|
|
+module neuron_network2_tb;
|
|
|
+
|
|
|
+endmodule : neuron_network2_tb
|