-
Notifications
You must be signed in to change notification settings - Fork 0
/
audio_controller.sv
127 lines (115 loc) · 2.76 KB
/
audio_controller.sv
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
module audio_controller(
input logic Clk, Reset,
output logic AUD_DACLRCK, AUD_BCLK,
output logic AUD_DACDAT, AUD_XCK, I2C_SCLK, I2C_SDAT,
// output logic SRAM_CE_N, SRAM_UB_N, SRAM_LB_N, SRAM_OE_N, SRAM_WE_N,
// output logic [19:0] SRAM_ADDR,
// inout wire [15:0] SRAM_DQ
output logic [22:0] FL_ADDR,
inout wire [7:0] FL_DQ,
output logic FL_WE_N, FL_OE_N, FL_CE_N,
output logic FL_WP_N
);
assign FL_WE_N = 1'b1;
assign FL_CE_N = 1'b0;
assign FL_OE_N = 1'b0;
assign FL_WP_N = 1'bx;
enum logic [3:0] { IDLE, INI, GET_DATA, DAC } State, Next_state;
logic INIT, INIT_FINISH, data_over, adc_full, AUD_ADCDAT;
logic [31:0] ADCDATA;
logic [7:0] LDATA, RDATA, LDATA_in, RDATA_in, data_out;
logic [22:0] addr_counter;
assign FL_ADDR = addr_counter;
assign Data = FL_DQ;
always_ff @(posedge Clk) begin
if (Reset)
State <= IDLE;
else begin
State <= Next_state;
LDATA <= LDATA_in;
RDATA <= RDATA_in;
end
end
always_comb begin
INIT = 1'b0;
Next_state = State;
LDATA_in = LDATA;
RDATA_in = RDATA;
case(State)
IDLE: Next_state = INI;
INI: begin
if(INIT_FINISH)
Next_state = GET_DATA;
end
GET_DATA: begin
if(data_over)
Next_state = DAC;
end
DAC: begin
if(~data_over)
Next_state = GET_DATA;
end
default:;
endcase
case(State)
INI: INIT = 1'b1;
DAC: begin
LDATA_in = Data;
RDATA_in = Data;
end
default:;
endcase
end
always_ff @(posedge data_over) begin
if(Reset)
addr_counter <= 23'b0;
else if(addr_counter == 23'hc2011)
addr_counter <= 23'b0;
else
addr_counter <= addr_counter + 1'b1;
end
//audioRAM ar(.data_In(4'b0),
// .write_address(19'b0),
// .read_address(addr_counter),
// .we(1'b0), .Clk(Clk), .data_Out(data_out));
audio_interface AUDIO(
.LDATA({LDATA,8'b0}),
.RDATA({RDATA,8'b0}),
.clk(Clk),
.Reset(Reset),
.INIT(INIT),
.INIT_FINISH(INIT_FINISH),
.adc_full(adc_full),
.data_over(data_over),
.AUD_MCLK(AUD_XCK),
.AUD_BCLK(AUD_BCLK),
.AUD_ADCDAT(AUD_ADCDAT),
.AUD_DACDAT(AUD_DACDAT),
.AUD_ADCLRCK(AUD_ADCLRCK),
.AUD_DACLRCK(AUD_DACLRCK),
.I2C_SDAT(I2C_SDAT),
.I2C_SCLK(I2C_SCLK),
.ADCDATA(ADCDATA)
);
//g00_audio_interface A_I (
// .LDATA(LDATA),
// .RDATA(RDATA),
// .clk(Clk),
// .rst(Reset),
// .INIT,
// .W_EN,
// .pulse(data_over),
// .AUD_MCLK,
// .AUD_BCLK,
// .AUD_DACDAT,
// .AUD_DACLRCK,
// .I2C_SDAT,
// .I2C_SCLK
// );
// assign SRAM_CE_N = 1'b0;
// assign SRAM_UB_N = 1'b0;
// assign SRAM_LB_N = 1'b0;
// assign SRAM_WE_N = 1'b1;
// assign SRAM_OE_N = 1'b0;
//
endmodule