aboutsummaryrefslogtreecommitdiffstats
path: root/2-c.v
blob: 33a9d00dd86247b4802afbba3f9c78cc9b714b51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// для ненаписанного теста
// `include "2-a.v"
// `include "2-b.v"

module linear_classifier(features, weights, r_value, r_class);
	parameter WIDTH=8, FEATURES=2, C_WIDTH=1;
	input [FEATURES*WIDTH-1:0]features;
	input [(1<<C_WIDTH)*FEATURES*WIDTH-1:0]weights;
	output [WIDTH-1:0]r_value;
	output [C_WIDTH-1:0]r_class;
	
	wire [(1<<C_WIDTH)*FEATURES*WIDTH-1:0]prod;
	wire [(1<<C_WIDTH)*WIDTH-1:0]sum;
	
	generate
		genvar i;
		for (i = 0; i < (1<<C_WIDTH)*FEATURES; i  =i+1)
			assign prod[(i+1)*WIDTH-1:i*WIDTH] = weights[(i+1)*WIDTH-1:i*WIDTH] 
				* features[(i%FEATURES+1)*WIDTH-1:(i%FEATURES)*WIDTH];
		for (i = 0; i < (1<<C_WIDTH); i = i+1)
			tree_adder#(WIDTH, FEATURES) adder(
				prod[WIDTH*FEATURES*(i+1)-1:WIDTH*FEATURES*i], 
				sum[WIDTH*(i+1)-1:WIDTH*i]
			);
	endgenerate
	max_argmax#(WIDTH, C_WIDTH) max(sum, r_value, r_class);
endmodule

// Я хотел его написать, но решил отправить, и сработало с первой попытки ))
/*
module test;
endmodule;
*/