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

Subversion Repositories ao486

[/] [ao486/] [trunk/] [sim/] [iverilog/] [ao486_run/] [tb_ao486_run.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
`timescale 1ps/1ps
2
 
3
`include "defines.v"
4
 
5
module tb_ao486_run();
6
 
7
reg             clk;
8
reg             rst_n;
9
 
10
//interrupt
11
reg     [7:0]   interrupt_vector;
12
reg             interrupt_do;
13
wire            interrupt_ack;
14
 
15
//data
16
wire    [31:0]  avm_address;
17
wire    [31:0]  avm_writedata;
18
wire    [3:0]   avm_byteenable;
19
wire    [2:0]   avm_burstcount;
20
wire            avm_write;
21
wire            avm_read;
22
 
23
reg             avm_waitrequest;
24
reg             avm_readdatavalid;
25
reg     [31:0]  avm_readdata;
26
 
27
//io
28
wire    [15:0]  avalon_io_address;
29
wire    [31:0]  avalon_io_writedata;
30
wire    [3:0]   avalon_io_byteenable;
31
wire            avalon_io_read;
32
wire            avalon_io_write;
33
 
34
reg             avalon_io_waitrequest;
35
reg             avalon_io_readdatavalid;
36
reg     [31:0]  avalon_io_readdata;
37
 
38
ao486 ao486_inst(
39
    .clk                (clk),
40
    .rst_n              (rst_n),
41
    .rst_internal_n     (rst_n),
42
 
43
    //-------------------------------------------------------------------------- interrupt
44
    .interrupt_vector   (interrupt_vector),   //input [7:0]
45
    .interrupt_do       (interrupt_do),       //input
46
    .interrupt_done     (interrupt_done),     //output
47
 
48
    //-------------------------------------------------------------------------- Altera Avalon memory bus
49
    .avm_address        (avm_address),        //output [31:0]
50
    .avm_writedata      (avm_writedata),      //output [31:0]
51
    .avm_byteenable     (avm_byteenable),     //output [3:0]
52
    .avm_burstcount     (avm_burstcount),     //output [2:0]
53
    .avm_write          (avm_write),          //output
54
    .avm_read           (avm_read),           //output
55
 
56
    .avm_waitrequest    (avm_waitrequest),    //input
57
    .avm_readdatavalid  (avm_readdatavalid),  //input
58
    .avm_readdata       (avm_readdata),       //input [31:0]
59
 
60
    //-------------------------------------------------------------------------- Altera Avalon io bus
61
    .avalon_io_address          (avalon_io_address),        //output [15:0]
62
    .avalon_io_writedata        (avalon_io_writedata),      //output [31:0]
63
    .avalon_io_byteenable       (avalon_io_byteenable),     //output [3:0]
64
    .avalon_io_read             (avalon_io_read),           //output
65
    .avalon_io_write            (avalon_io_write),          //output
66
 
67
    .avalon_io_waitrequest      (avalon_io_waitrequest),    //input
68
    .avalon_io_readdatavalid    (avalon_io_readdatavalid),  //input
69
    .avalon_io_readdata         (avalon_io_readdata)        //input [31:0]
70
);
71
 
72
parameter STDIN  = 32'h8000_0000;
73
parameter STDOUT = 32'h8000_0001;
74
 
75
integer finished = 0;
76
 
77
initial begin
78
    clk = 1'b0;
79
    forever #5 clk = ~clk;
80
end
81
 
82
reg [255:0] dumpfile_name;
83
initial begin
84
    if( $value$plusargs("dumpfile=%s", dumpfile_name) == 0 ) begin
85
        dumpfile_name = "default.vcd";
86
    end
87
 
88
    $dumpfile(dumpfile_name);
89
    $dumpvars(0);
90
    $dumpon();
91
 
92
    $display("START");
93
 
94
    //--------------------------------------------------------------------------
95
 
96
    rst_n = 1'b0;
97
    #10 rst_n = 1'b1;
98
 
99
    while(finished == 0) begin
100
        if($time > 16000) $finish_and_return(-1);
101
        #10;
102
 
103
        $dumpflush();
104
    end
105
 
106
    #60;
107
 
108
    $dumpoff();
109
    $finish_and_return(0);
110
end
111
 
112
//------------------------------------------------------------------------------ avalon memory and io
113
 
114
initial begin
115
    avm_waitrequest   <= `FALSE;
116
    avm_readdatavalid <= `FALSE;
117
 
118
    avalon_io_waitrequest   <= `FALSE;
119
    avalon_io_readdatavalid <= `FALSE;
120
 
121
    avm_readdata       <= 32'd0;
122
    avalon_io_readdata <= 32'd0;
123
end
124
 
125
reg [2:0]  write_burst_count = 3'd0;
126
reg [31:0] write_burst_address;
127
always @(posedge clk) begin
128
    if(avm_write && avm_burstcount > 3'd1 && write_burst_count == 3'd0) begin
129
        write_burst_count   <= avm_burstcount - 3'd1;
130
        write_burst_address <= avm_address + 3'd4;
131
    end
132
    else if(write_burst_count > 3'd0) begin
133
        write_burst_count   <= write_burst_count - 3'd1;
134
        write_burst_address <= write_burst_address + 3'd4;
135
    end
136
end
137
 
138
integer write_i;
139
reg [31:0] write_val;
140
always @(posedge clk) begin
141
    if(avm_write) begin
142
        $fwrite(STDOUT, "start_write:  %x\n",   $time);
143
        $fwrite(STDOUT, "address:      %08x\n", (write_burst_count > 3'd0)? write_burst_address : avm_address);
144
        $fwrite(STDOUT, "data:         %08x\n", avm_writedata);
145
        $fwrite(STDOUT, "byteena:      %01x\n", avm_byteenable);
146
        $fwrite(STDOUT, "can_ignore:   %x\n",   finished);
147
 
148
        $fwrite(STDOUT, "\n");
149
        $fflush(STDOUT);
150
    end
151
end
152
 
153
integer io_write_i;
154
reg [31:0] io_write_val;
155
always @(posedge clk) begin
156
    if(avalon_io_write) begin
157
        $fwrite(STDOUT, "start_io_write: %x\n",   $time);
158
        $fwrite(STDOUT, "address:        %04x\n", avalon_io_address);
159
        $fwrite(STDOUT, "data:           %08x\n", avalon_io_writedata);
160
        $fwrite(STDOUT, "byteena:        %01x\n", avalon_io_byteenable);
161
        $fwrite(STDOUT, "can_ignore:     %x\n",   finished);
162
 
163
        $fwrite(STDOUT, "\n");
164
        $fflush(STDOUT);
165
    end
166
end
167
 
168
reg [2:0]  read_burst_count = 3'd0;
169
reg [31:0] read_burst_address;
170
always @(posedge clk) begin
171
    if(avm_read && avm_burstcount > 3'd1 && read_burst_count == 3'd0) begin
172
        read_burst_count   <= avm_burstcount - 3'd1;
173
        read_burst_address <= avm_address + 3'd4;
174
    end
175
    else if(read_burst_count > 3'd0) begin
176
        read_burst_count   <= read_burst_count - 3'd1;
177
        read_burst_address <= read_burst_address + 3'd4;
178
    end
179
end
180
 
181
integer fscanf_avm_ret;
182
always @(posedge clk) begin
183
    if((avm_read || read_burst_count > 3'd0) && ao486_inst.memory_inst.avalon_mem_inst.state == 2'd3) begin
184
 
185
        $fwrite(STDOUT, "start_read_code: %x\n",   $time);
186
        $fwrite(STDOUT, "address:         %08x\n", (read_burst_count > 3'd0)? read_burst_address : avm_address);
187
        $fwrite(STDOUT, "byteena:         %01x\n", avm_byteenable);
188
 
189
        $fwrite(STDOUT, "\n");
190
        $fflush(STDOUT);
191
 
192
        fscanf_avm_ret= $fscanf(STDIN, "%x", avm_readdata);
193
 
194
        avm_readdatavalid <= `TRUE;
195
    end
196
    else if(avm_read || read_burst_count > 3'd0) begin
197
 
198
        if(ao486_inst.memory_inst.read_do && ao486_inst.memory_inst.memory_read_inst.reset_waiting == `FALSE) begin
199
            $fwrite(STDOUT, "start_read: %x\n",   $time);
200
            $fwrite(STDOUT, "address:    %08x\n", (read_burst_count > 3'd0)? read_burst_address : avm_address);
201
            $fwrite(STDOUT, "byteena:    %01x\n", avm_byteenable);
202
            $fwrite(STDOUT, "can_ignore: %01x\n", finished);
203
 
204
            $fwrite(STDOUT, "\n");
205
            $fflush(STDOUT);
206
 
207
            fscanf_avm_ret= $fscanf(STDIN, "%x", avm_readdata);
208
        end
209
 
210
        avm_readdatavalid <= `TRUE;
211
    end
212
    else begin
213
        avm_readdatavalid <= `FALSE;
214
    end
215
end
216
 
217
reg avalon_io_read_delayed;
218
always @(posedge clk) begin avalon_io_read_delayed <= avalon_io_read; end
219
 
220
integer fscanf_io_ret;
221
always @(posedge clk) begin
222
    if(avalon_io_read_delayed) begin
223
 
224
        $fwrite(STDOUT, "start_io_read: %x\n",   $time);
225
        $fwrite(STDOUT, "address:       %04x\n", avalon_io_address);
226
        $fwrite(STDOUT, "byteena:       %01x\n", avalon_io_byteenable);
227
        $fwrite(STDOUT, "can_ignore:    %x\n",   finished);
228
 
229
        $fwrite(STDOUT, "\n");
230
        $fflush(STDOUT);
231
 
232
        fscanf_io_ret= $fscanf(STDIN, "%x", avalon_io_readdata);
233
 
234
        avalon_io_readdatavalid <= `TRUE;
235
    end
236
    else begin
237
        avalon_io_readdatavalid <= `FALSE;
238
    end
239
end
240
 
241
endmodule

powered by: WebSVN 2.1.0

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