OpenCores
URL https://opencores.org/ocsvn/theia_gpu/theia_gpu/trunk

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [beta_2.0/] [rtl/] [Unit_Control.v] - Blame information for rev 213

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 213 diegovalve
`include "aDefinitions.v"
2
 
3
`define CU_STATE_AFTER_RESET       0
4
`define CU_STATE_WAIT_FOR_CP       1
5
`define CU_STATE_HANDLE_CP_REQUEST 2
6
`define CU_STATE_START_MAIN_THREAD 3
7
`define CU_STATE_STOP_MAIN_THREAD  4
8
 
9
module ControlUnit
10
(
11
input wire                          Clock,
12
input wire                          Reset,
13
input wire [`CBC_BUS_WIDTH-1:0]     iCpCommand,
14
input wire [`VPID_WIDTH-1:0]        iVPID,
15
output wire                         oVpEnabled,
16
output wire                         oBusy
17
);
18
 
19
 
20
 
21
reg [4:0]                      rCurrentState, rNextState;
22
wire                           wRequestDetected;
23
reg                            rPopFifo;
24
reg                            rToggleVpEnabled;
25
wire [`CBC_BUS_WIDTH-1:0]      wCurrentRequest;
26
 
27
 
28
assign wRequestDetected = (iCpCommand[`CP_MSG_BCAST] || (iCpCommand[`CP_MSG_DST_RNG] == iVPID) ) ? 1'b1 : 1'b0;
29
 
30
//Incomming requests are stored in the FIFO
31
sync_fifo  # (`CBC_BUS_WIDTH,8 ) IN_FIFO
32
(
33
 .clk(    Clock              ),
34
 .reset(  Reset              ),
35
 .din(    iCpCommand         ),
36
 .wr_en(  wRequestDetected   ),
37
 .rd_en(  rPopFifo           ),
38
 .dout(   wCurrentRequest    ),
39
 .full(   oBusy              )
40
 
41
);
42
 
43
 
44
UPCOUNTER_POSEDGE # (1) UP1
45
(
46
.Clock(      Clock                                      ),
47
.Reset(      Reset                                      ),
48
.Initial(    1'b0                                       ),
49
.Enable(     rToggleVpEnabled                           ),
50
.Q(          oVpEnabled                                 )
51
);
52
 
53
//Next states logic and Reset sequence
54
always @(posedge Clock )
55
  begin
56
 
57
    if (Reset )
58
                rCurrentState <= `CU_STATE_AFTER_RESET;
59
    else
60
                rCurrentState <= rNextState;
61
 
62
end
63
 
64
 
65
 
66
 
67
always @ ( * )
68
begin
69
        case (rCurrentState)
70
        //--------------------------------------
71
        `CU_STATE_AFTER_RESET:
72
        begin
73
           rPopFifo         = 1'b0;
74
                rToggleVpEnabled = 1'b0;
75
 
76
                rNextState = `CU_STATE_WAIT_FOR_CP;
77
        end
78
        //--------------------------------------
79
        `CU_STATE_WAIT_FOR_CP:
80
        begin
81
                rPopFifo         = 1'b0;
82
                rToggleVpEnabled = 1'b0;
83
 
84
                if ( wRequestDetected )
85
                        rNextState = `CU_STATE_HANDLE_CP_REQUEST;
86
                else
87
                        rNextState = `CU_STATE_WAIT_FOR_CP;
88
        end
89
        //--------------------------------------
90
        `CU_STATE_HANDLE_CP_REQUEST:
91
        begin
92
                rPopFifo         = 1'b0;
93
                rToggleVpEnabled = 1'b0;
94
 
95
                case ( wCurrentRequest[`CP_MSG_OPERATION_RNG] )
96
                        `VP_COMMAND_START_MAIN_THREAD: rNextState = `CU_STATE_START_MAIN_THREAD;
97
                        `VP_COMMAND_STOP_MAIN_THREAD:  rNextState = `CU_STATE_STOP_MAIN_THREAD;
98
                default:
99
                        rNextState = `CU_STATE_WAIT_FOR_CP;
100
                endcase
101
 
102
 
103
        end
104
        //--------------------------------------
105
        `CU_STATE_START_MAIN_THREAD:
106
        begin
107
                rPopFifo         = 1'b0;
108
                rToggleVpEnabled = ~oVpEnabled;
109
 
110
 
111
                rNextState = `CU_STATE_WAIT_FOR_CP;
112
        end
113
        //--------------------------------------
114
        `CU_STATE_STOP_MAIN_THREAD:
115
        begin
116
                rPopFifo         = 1'b0;
117
                rToggleVpEnabled = oVpEnabled;
118
 
119
 
120
                rNextState = `CU_STATE_WAIT_FOR_CP;
121
        end
122
        //--------------------------------------
123
        default:
124
        begin
125
                rPopFifo         = 1'b0;
126
                rToggleVpEnabled = 1'b0;
127
 
128
                rNextState = `CU_STATE_AFTER_RESET;
129
        end
130
        //--------------------------------------
131
endcase
132
end //always
133
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.