-
-
Notifications
You must be signed in to change notification settings - Fork 27
/
Controller.v
69 lines (62 loc) · 2.08 KB
/
Controller.v
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//`timescale 1ns/1ns
module Controller(
input clk, //clock
input rst_n, //external asynchronous active low reset
input RWM_1_done, //status signal from the RWM_1 module
input RWM_2_done, //status signal from the RWM_2 module
input GS_done, //status signal from the Grayscaler module
input start, //external start command from user
output RWM_1_enable, //status signal to the RWM_1 module
output rw_1, //status signal to the RWM_1 module
output RWM_2_enable, //status signal to the RWM_2 module
output rw_2, //status signal to the RWM_2 module
output camera_enable, //status signal to the camera
output GS_enable //status signal to the Grayscaler module
);
parameter [2:0] IDLE = 3'b000, CAMERA_READ = 3'b001, GRAYSCALE = 3'b010, FILTER = 3'b011;
reg [2:0] CS, NS;
//Sequential logic
always @(posedge clk or negedge rst_n)
begin
if (~rst_n)
CS <= IDLE;
else CS <= NS;
end
//Combinatorial logic
always @(start, GS_done, RWM_1_done, RWM_2_done)
begin
case (CS)
IDLE:
begin
if (start == 1'b1)
NS = CAMERA_READ;
else NS = IDLE;
end
CAMERA_READ:
begin
if (RWM_1_done == 1'b1)
NS = GRAYSCALE;
else NS = CAMERA_READ;
end
GRAYSCALE:
begin
if (RWM_1_done == 1'b1)
NS = FILTER;
else NS = GRAYSCALE;
end
FILTER:
begin
if ((GS_done == 1'b1) || RWM_2_done == 1'b0)
NS = FILTER;
else NS = IDLE;
end
default: NS = IDLE;
endcase
end
assign camera_enable = (CS == CAMERA_READ) ? 1'b1 : 1'b0;
assign RWM_1_enable = ((CS == CAMERA_READ) || (CS == GRAYSCALE)) ? 1'b1 : 1'b0;
assign rw_1 = (CS == CAMERA_READ) ? 1'b1 :((CS == GRAYSCALE) ? 1'b0 : 1'bz);
assign RWM_2_enable = ((CS == GRAYSCALE) || (CS == FILTER)) ? 1'b1 : 1'b0;
assign rw_2 = (CS == GRAYSCALE) ? 1'b1 : ((CS == FILTER) ? 1'b0 : 1'bz);
assign GS_enable = (CS == GRAYSCALE) ? 1'b1 : 1'b0;
endmodule