1+ module controlUnit (
2+ // Signal kojim vanjski svijet dojavljuje da je spremna nova ul. znacajka
3+ input wire clk,
4+ input wire rst_n,
5+ input wire dataw_rdy,
6+ output wire [3 :0 ] oe_reg;
7+ output wire [3 :0 ] we_reg;
8+ );
9+
10+ // Counter for adressing the current line buffer being written to
11+ reg [1 :0 ] current_write_buff;
12+ // Counts total number of lines loaded
13+ reg [9 :0 ] line_cnt;
14+ // Counter for the number of input features
15+ reg [2 :0 ] write_feature_cnt;
16+
17+ // Counter for multiplexing line buffer output enable ports
18+ reg [1 :0 ] current_read_buff;
19+ // Read ready signal
20+ wire datar_rdy;
21+ // Counter for number of read features
22+ reg [2 :0 ] read_feature_cnt;
23+
24+ // ============ write controller ============
25+ always @(posedge clk)
26+ begin
27+ if (! rst_n)
28+ write_feature_cnt <= 3'b0 ;
29+ else if (dataw_rdy)
30+ write_feature_cnt <= write_feature_cnt + 1 ;
31+ end
32+
33+ always @(posedge clk)
34+ begin
35+ if (! rst_n)
36+ begin
37+ current_write_buff <= 2'b0 ;
38+ line_cnt <= 10'b0 ;
39+ end
40+ else if (write_feature_cnt == 7 & dataw_rdy)
41+ begin
42+ current_write_buff <= current_write_buff + 1 ;
43+ line_cnt <= line_cnt + 1 ;
44+ end
45+ end
46+
47+ // Combo logic for write enable activation
48+ always @(* )
49+ begin
50+ we_reg = 3'b0 ;
51+ we_reg[current_write_buff] = 1 ;
52+ end
53+ // ============ end write controller ============
54+
55+ // ============ read controller =============
56+ always @(posedge clk)
57+ begin
58+ if (! rst_n)
59+ read_feature_cnt <= 3'b0 ;
60+ else if (datar_rdy)
61+ read_feature_cnt <= read_feature_cnt + 1 ;
62+ end
63+
64+ always @(posedge clk)
65+ begin
66+ if (! rst_n)
67+ current_read_buff <= 2'b0 ;
68+ else if (read_feature_cnt == 7 & datar_rdy)
69+ current_read_buff <= current_read_buff + 1 ;
70+ end
71+
72+ // Combo logic for read enable activation
73+ always @(* )
74+ begin
75+ case (current_read_buff)
76+ 0 : begin
77+ oe_reg[0 ] = datar_rdy;
78+ oe_reg[1 ] = datar_rdy;
79+ oe_reg[2 ] = datar_rdy;
80+ oe_reg[3 ] = 1'b0 ;
81+ end
82+ 1 : begin
83+ oe_reg[0 ] = 1'b0 ;
84+ oe_reg[1 ] = datar_rdy;
85+ oe_reg[2 ] = datar_rdy;
86+ oe_reg[3 ] = datar_rdy;
87+ end
88+ 2 : begin
89+ oe_reg[0 ] = datar_rdy;
90+ oe_reg[1 ] = 1'b0 ;
91+ oe_reg[2 ] = datar_rdy;
92+ oe_reg[3 ] = datar_rdy;
93+ end
94+ 3 : begin
95+ oe_reg[0 ] = datar_rdy;
96+ oe_reg[1 ] = datar_rdy;
97+ oe_reg[2 ] = 1'b0 ;
98+ oe_reg[3 ] = datar_rdy;
99+ end
100+ endcase
101+ end
102+ // ============ end read controller =============
103+
104+ endmodule
0 commit comments