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

Subversion Repositories ao486

[/] [ao486/] [trunk/] [sim/] [iverilog/] [sound/] [tb_sound.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
 
2
`timescale 1 ps / 1 ps
3
 
4
module tb_sound();
5
 
6
reg clk;
7
reg rst_n;
8
 
9
wire interrupt;
10
 
11
reg speaker_enable  = 1'b0;
12
reg speaker_out     = 1'b0;
13
 
14
reg [3:0]  io_address   = 4'd0;
15
reg        io_read      = 1'd0;
16
wire [7:0] io_readdata;
17
reg        io_write     = 1'd0;
18
reg [7:0]  io_writedata = 8'd0;
19
 
20
reg        fm_address   = 1'd0;
21
reg        fm_read      = 1'd0;
22
wire [7:0] fm_readdata;
23
reg        fm_write     = 1'd0;
24
reg [7:0]  fm_writedata = 8'd0;
25
 
26
wire        dma_soundblaster_req;
27
reg         dma_soundblaster_ack        = 1'd0;
28
reg         dma_soundblaster_terminal   = 1'd0;
29
reg  [7:0]  dma_soundblaster_readdata   = 8'd0;
30
wire [7:0]  dma_soundblaster_writedata;
31
 
32
reg [8:0]   mgmt_address    = 9'd0;
33
reg         mgmt_write      = 1'd0;
34
reg [31:0]  mgmt_writedata  = 32'd0;
35
 
36
reg clk_12;
37
 
38
wire ac_sclk;
39
reg  ac_sdat_ena = 1'b0;
40
reg  ac_sdat_val = 1'b0;
41
wire ac_sdat = ac_sdat_ena? ac_sdat_val : 1'bZ;
42
wire ac_xclk;
43
wire ac_bclk;
44
wire ac_dat;
45
wire ac_lr;
46
 
47
sound sound_inst(
48
    .clk            (clk),
49
    .rst_n          (rst_n),
50
 
51
    .interrupt      (interrupt),        //output
52
 
53
    //speaker input
54
    .speaker_enable (speaker_enable),   //input
55
    .speaker_out    (speaker_out),      //input
56
 
57
    //io slave 220h-22Fh
58
    .io_address     (io_address),       //input [3:0]
59
    .io_read        (io_read),          //input
60
    .io_readdata    (io_readdata),      //output [7:0]
61
    .io_write       (io_write),         //input
62
    .io_writedata   (io_writedata),     //input
63
 
64
    //fm music io slave 388h-389h
65
    .fm_address     (fm_address), //input
66
    .fm_read        (fm_read),    //input
67
    .fm_readdata    (fm_readdata),    //output [7:0]
68
    .fm_write       (fm_write),   //input
69
    .fm_writedata   (fm_writedata),   //input [7:0]
70
 
71
    //dma
72
    .dma_soundblaster_req       (dma_soundblaster_req),         //output
73
    .dma_soundblaster_ack       (dma_soundblaster_ack),         //input
74
    .dma_soundblaster_terminal  (dma_soundblaster_terminal),    //input
75
    .dma_soundblaster_readdata  (dma_soundblaster_readdata),    //input [7:0]
76
    .dma_soundblaster_writedata (dma_soundblaster_writedata),   //output [7:0]
77
 
78
    //mgmt slave
79
    /*
80
    0-255.[15:0]: cycles in period
81
    256.[12:0]:  cycles in 80us
82
    257.[9:0]:   cycles in 1 sample: 96000 Hz
83
    */
84
    .mgmt_address       (mgmt_address),   //input [8:0]
85
    .mgmt_write         (mgmt_write),     //input
86
    .mgmt_writedata     (mgmt_writedata), //input [31:0]
87
 
88
    //WM8731 audio codec
89
    .clk_12             (clk_12),
90
 
91
    .ac_sclk            (ac_sclk),  //output
92
    .ac_sdat            (ac_sdat),  //inout
93
    .ac_xclk            (ac_xclk),  //output
94
    .ac_bclk            (ac_bclk),  //output
95
    .ac_dat             (ac_dat),   //output
96
    .ac_lr              (ac_lr)     //output
97
);
98
 
99
initial begin
100
    clk = 1'b0;
101
    forever #5 clk = ~clk;
102
end
103
 
104
initial begin
105
    clk_12 = 1'b0;
106
    forever #13 clk_12 = ~clk_12;
107
end
108
 
109
//------------------------------------------------------------------------------
110
 
111
always @(posedge clk_12) begin
112
    if(sound_inst.sound_i2c_inst.state == 4'd5) begin
113
        ac_sdat_ena = 1'b1; //S_SEND_4
114
        ac_sdat_val = 1'b0;
115
    end
116
    else begin
117
        ac_sdat_ena = 1'b0;
118
        ac_sdat_val = 1'b0;
119
    end
120
end
121
//------------------------------------------------------------------------------
122
 
123
integer finished = 0;
124
 
125
reg [255:0] dumpfile_name;
126
initial begin
127
    if( $value$plusargs("dumpfile=%s", dumpfile_name) == 0 ) begin
128
        dumpfile_name = "default.vcd";
129
    end
130
 
131
    $dumpfile(dumpfile_name);
132
    $dumpvars(0);
133
    $dumpon();
134
 
135
    $display("START");
136
 
137
    rst_n = 1'b0;
138
    #10 rst_n = 1'b1;
139
 
140
    while(finished == 0) begin
141
        if($time > 200000) $finish_and_return(-1);
142
        #10;
143
 
144
        //$dumpflush();
145
    end
146
 
147
    #60;
148
 
149
    $dumpoff();
150
    $finish_and_return(0);
151
end
152
 
153
endmodule

powered by: WebSVN 2.1.0

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