1 |
12 |
bsa |
/*******************************************************************************************/
|
2 |
|
|
/** **/
|
3 |
|
|
/** COPYRIGHT (C) 2011, SYSTEMYDE INTERNATIONAL CORPORATION, ALL RIGHTS RESERVED **/
|
4 |
|
|
/** **/
|
5 |
|
|
/** state machine module Rev 0.0 07/01/2011 **/
|
6 |
|
|
/** **/
|
7 |
|
|
/*******************************************************************************************/
|
8 |
|
|
module machine (ld_ctrl, state_reg, wait_st, clkc, dmar_reg, intr_reg, ld_inta, ld_wait,
|
9 |
|
|
resetb, state_nxt, wait_req);
|
10 |
|
|
|
11 |
|
|
input clkc; /* main cpu clock */
|
12 |
|
|
input dmar_reg; /* latched dma request */
|
13 |
|
|
input intr_reg; /* latched interrupt request */
|
14 |
|
|
input ld_inta; /* load interrupt request */
|
15 |
|
|
input ld_wait; /* load wait request */
|
16 |
|
|
input resetb; /* internal reset */
|
17 |
|
|
input wait_req; /* wait request */
|
18 |
|
|
input [`STATE_IDX:0] state_nxt; /* next processor state */
|
19 |
|
|
output ld_ctrl; /* load control register */
|
20 |
|
|
output wait_st; /* wait state identifier */
|
21 |
|
|
output [`STATE_IDX:0] state_reg; /* current processor state */
|
22 |
|
|
|
23 |
|
|
/*****************************************************************************************/
|
24 |
|
|
/* */
|
25 |
|
|
/* signal declarations */
|
26 |
|
|
/* */
|
27 |
|
|
/*****************************************************************************************/
|
28 |
|
|
wire ld_ctrl; /* advance state */
|
29 |
|
|
|
30 |
|
|
reg wait_st; /* wait state - inhibit op */
|
31 |
|
|
reg [`STATE_IDX:0] state_reg; /* current processor state */
|
32 |
|
|
|
33 |
|
|
/*****************************************************************************************/
|
34 |
|
|
/* */
|
35 |
|
|
/* processor state machine */
|
36 |
|
|
/* */
|
37 |
|
|
/*****************************************************************************************/
|
38 |
|
|
assign ld_ctrl = !ld_wait || !wait_req;
|
39 |
|
|
|
40 |
|
|
always @ (posedge clkc or negedge resetb) begin
|
41 |
|
|
if (!resetb) wait_st <= 1'b0;
|
42 |
|
|
else wait_st <= !ld_ctrl;
|
43 |
|
|
end
|
44 |
|
|
|
45 |
|
|
always @ (posedge clkc or negedge resetb) begin
|
46 |
|
|
if (!resetb) state_reg <= `sRST;
|
47 |
|
|
else if (ld_ctrl) state_reg <= (ld_inta && dmar_reg) ? `sDMA1 :
|
48 |
|
|
(ld_inta && intr_reg) ? `sINTA : state_nxt;
|
49 |
|
|
end
|
50 |
|
|
|
51 |
|
|
endmodule
|
52 |
|
|
|
53 |
|
|
|
54 |
|
|
|
55 |
|
|
|
56 |
|
|
|