-
Notifications
You must be signed in to change notification settings - Fork 0
/
speech_wrapper.v
74 lines (67 loc) · 1.67 KB
/
speech_wrapper.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
70
71
72
73
74
module speech_wrapper (
input clk,
input rst,
input phoneme_speech_busy,
input phoneme_speech_finish,
input speech_synthesize_write_H,
input speech_synthesize_read_H,
input [15:0] datain,
output reg [7:0] phoneme_sel,
output reg start_phoneme_output,
output [15:0] dataout,
output [1:0] state
);
parameter IDLE = 2'd0;
parameter START = 2'd1;
parameter FINISH = 2'd3;
parameter WAIT = 2'd2;
reg [1:0] currentState;
reg [1:0] nextState;
reg [7:0] phoneme_sel_reg;
// reg start;
// reg deactivate_start;
always@(*) begin
case(currentState)
IDLE: begin
start_phoneme_output = 1'b0;
// deactivate_start = 1'b0;
if (speech_synthesize_write_H)
nextState = START;
else
nextState = IDLE;
end
START: begin
start_phoneme_output = 1'b1;
nextState = WAIT;
// deactivate_start = 1'b1;
end
WAIT: begin
start_phoneme_output = 1'b0;
if (phoneme_speech_busy)
nextState = FINISH;
else
nextState = WAIT;
end
FINISH: begin
start_phoneme_output = 1'b0;
// deactivate_start = 1'b1;
if (~phoneme_speech_busy)
nextState = IDLE;
else
nextState = FINISH;
end
default: begin
start_phoneme_output = 1'b0;
nextState = IDLE;
end
endcase
end
assign dataout = speech_synthesize_read_H ? {15'b0, phoneme_speech_busy} : 16'bz;
always@(posedge clk) begin
currentState <= nextState;
if (speech_synthesize_write_H)
phoneme_sel_reg <= datain[7:0];
end
assign phoneme_sel = phoneme_sel_reg;
assign state = currentState;
endmodule