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

Subversion Repositories xulalx25soc

[/] [xulalx25soc/] [trunk/] [bench/] [cpp/] [busmaster_tb.cpp] - Blame information for rev 106

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 75 dgisselq
////////////////////////////////////////////////////////////////////////////////
2 4 dgisselq
//
3
// Filename:    busmaster_tb.cpp
4
//
5
// Project:     FPGA library development (XuLA2 development board)
6
//
7
// Purpose:     This is piped version of the testbench for the busmaster
8
//              verilog code.  The busmaster code is designed to be a complete
9 75 dgisselq
//      code set implementing all of the functionality of the XESS XuLA2
10
//      development board.  If done well, the programs talking to this one
11
//      should be able to talk to the board and apply the same tests to the
12
//      board itself.
13 4 dgisselq
//
14 75 dgisselq
// Creator:     Dan Gisselquist, Ph.D.
15
//              Gisselquist Technology, LLC
16 4 dgisselq
//
17 75 dgisselq
////////////////////////////////////////////////////////////////////////////////
18 4 dgisselq
//
19 75 dgisselq
// Copyright (C) 2015-2016, Gisselquist Technology, LLC
20 4 dgisselq
//
21 75 dgisselq
// This program is free software (firmware): you can redistribute it and/or
22
// modify it under the terms of  the GNU General Public License as published
23
// by the Free Software Foundation, either version 3 of the License, or (at
24
// your option) any later version.
25
//
26
// This program is distributed in the hope that it will be useful, but WITHOUT
27
// ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or
28
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
29
// for more details.
30
//
31
// You should have received a copy of the GNU General Public License along
32
// with this program.  (It's in the $(ROOT)/doc directory, run make with no
33
// target there if the PDF file isn't present.)  If not, see
34
// <http://www.gnu.org/licenses/> for a copy.
35
//
36
// License:     GPL, v3, as defined and found on www.gnu.org,
37
//              http://www.gnu.org/licenses/gpl.html
38
//
39
//
40
////////////////////////////////////////////////////////////////////////////////
41
//
42
//
43 4 dgisselq
#include <signal.h>
44
#include <time.h>
45
 
46
#include "verilated.h"
47
#include "Vbusmaster.h"
48
 
49
#include "testb.h"
50
// #include "twoc.h"
51
#include "pipecmdr.h"
52
#include "qspiflashsim.h"
53
#include "sdramsim.h"
54 75 dgisselq
#include "sdspisim.h"
55 4 dgisselq
 
56
#include "port.h"
57
 
58
// Add a reset line, since Vbusmaster doesn't have one
59
class   Vbusmasterr : public Vbusmaster {
60
public:
61
        int     i_rst;
62
        virtual ~Vbusmasterr() {}
63
};
64
 
65
// No particular "parameters" need definition or redefinition here.
66
class   BUSMASTER_TB : public PIPECMDR<Vbusmasterr> {
67
public:
68
        unsigned long   m_tx_busy_count;
69
        QSPIFLASHSIM    m_flash;
70 75 dgisselq
        SDSPISIM        m_sdcard;
71 4 dgisselq
        SDRAMSIM        m_sdram;
72
        unsigned        m_last_led;
73
        time_t          m_start_time;
74 75 dgisselq
        bool            m_last_writeout;
75 4 dgisselq
 
76
        BUSMASTER_TB(void) : PIPECMDR(FPGAPORT) {
77
                m_start_time = time(NULL);
78
        }
79
 
80
        void    reset(void) {
81
                m_core->i_clk = 1;
82
                m_core->eval();
83
        }
84
 
85 75 dgisselq
        void    setsdcard(const char *fn) {
86
                m_sdcard.load(fn);
87 96 dgisselq
 
88
                printf("LOADING SDCARD FROM: \'%s\'\n", fn);
89 75 dgisselq
        }
90
 
91 4 dgisselq
        void    tick(void) {
92 75 dgisselq
                int     flash_miso, sdcard_miso;
93
 
94 4 dgisselq
                if ((m_tickcount & ((1<<28)-1))==0) {
95
                        double  ticks_per_second = m_tickcount;
96 47 dgisselq
                        time_t  seconds_passed = time(NULL)-m_start_time;
97
                        if (seconds_passed != 0) {
98 4 dgisselq
                        ticks_per_second /= (double)(time(NULL) - m_start_time);
99
                        printf(" ********   %.6f TICKS PER SECOND\n",
100
                                ticks_per_second);
101 47 dgisselq
                        }
102 4 dgisselq
                }
103
 
104
                // Set up the bus before any clock tick
105
                m_core->i_clk = 1;
106 75 dgisselq
                flash_miso = (m_flash(m_core->o_sf_cs_n,
107
                                        m_core->o_spi_sck,
108
                                        m_core->o_spi_mosi)&0x02)?1:0;
109
                sdcard_miso = m_sdcard(m_core->o_sd_cs_n, m_core->o_spi_sck,
110
                                        m_core->o_spi_mosi);
111
 
112
                if ((m_core->o_sf_cs_n)&&(m_core->o_sd_cs_n))
113
                        m_core->i_spi_miso = 1;
114
                else if ((!m_core->o_sf_cs_n)&&(m_core->o_sd_cs_n))
115
                        m_core->i_spi_miso = flash_miso;
116
                else if ((m_core->o_sf_cs_n)&&(!m_core->o_sd_cs_n))
117
                        m_core->i_spi_miso = sdcard_miso;
118
                else
119
                        assert((m_core->o_sf_cs_n)||(m_core->o_sd_cs_n));
120
 
121 4 dgisselq
                m_core->i_ram_data = m_sdram(1,
122
                                m_core->o_ram_cke, m_core->o_ram_cs_n,
123
                                m_core->o_ram_ras_n, m_core->o_ram_cas_n,
124
                                m_core->o_ram_we_n, m_core->o_ram_bs,
125
                                m_core->o_ram_addr, m_core->o_ram_drive_data,
126
                                m_core->o_ram_data);
127
                PIPECMDR::tick();
128
 
129
                bool    writeout = false;
130
                /*
131 37 dgisselq
                if (m_core->v__DOT__sdram__DOT__r_pending)
132 4 dgisselq
                        writeout = true;
133 37 dgisselq
                else if (m_core->v__DOT__sdram__DOT__bank_active[0])
134 4 dgisselq
                        writeout = true;
135 37 dgisselq
                else if (m_core->v__DOT__sdram__DOT__bank_active[1])
136 4 dgisselq
                        writeout = true;
137 37 dgisselq
                else if (m_core->v__DOT__sdram__DOT__bank_active[2])
138 4 dgisselq
                        writeout = true;
139 37 dgisselq
                else if (m_core->v__DOT__sdram__DOT__bank_active[3])
140 4 dgisselq
                        writeout = true;
141
                */
142 75 dgisselq
 
143 106 dgisselq
                if ((m_core->v__DOT__wbu_cyc)&&(!m_core->v__DOT__wbu_we))
144
                        writeout = true;
145 75 dgisselq
                /*
146
                if ((m_core->v__DOT__wbu_cyc)&&(!m_core->v__DOT__wbu_we))
147
                        writeout = true;
148
                if (m_core->v__DOT__genbus__DOT__exec_stb)
149
                        writeout = true;
150
                */
151
 
152 106 dgisselq
#define v__DOT__wb_addr         v__DOT__dwb_addr
153
#define v__DOT__dwb_stall       v__DOT__wb_stall
154
#define v__DOT__dwb_ack         v__DOT__wb_ack
155
#define v__DOT__wb_cyc          v__DOT__dwb_cyc
156
#define v__DOT__wb_stb          v__DOT__dwb_stb
157
#define v__DOT__wb_we           v__DOT__dwb_we
158
#define v__DOT__dwb_idata       v__DOT__wb_idata
159
#define v__DOT__wb_data         v__DOT__dwb_odata
160
 
161 75 dgisselq
                if (!m_core->v__DOT__zippy__DOT__cmd_halt)
162
                        writeout = true;
163
 
164
                if (!m_core->o_sd_cs_n)
165
                        writeout = true;
166
                else if (!m_core->v__DOT__sdcard_cs_n)
167
                        writeout = true;
168
                else if ((((m_core->v__DOT__wb_addr ^ 0x0120)&(~0x03))==0)
169
                        &&(m_core->v__DOT__wb_cyc))
170
                        writeout = true;
171
 
172 96 dgisselq
                /*
173 75 dgisselq
                writeout = (writeout)||(m_core->i_rx_stb)
174
                                ||((m_core->o_tx_stb)&&(!m_core->i_tx_busy));
175
                writeout = (writeout)||(m_core->v__DOT____Vcellinp__genbus____pinNumber9);
176
                writeout = (writeout)||(m_core->v__DOT__wb_stb);
177
                writeout = (writeout)||(m_core->v__DOT__wb_err);
178 96 dgisselq
                */
179 75 dgisselq
 
180
                if ((writeout)||(m_last_writeout)) {
181 4 dgisselq
                        printf("%08lx:", m_tickcount);
182
 
183 75 dgisselq
                        /*
184
                        printf("%d/%02x %d/%02x%s ",
185
                                m_core->i_rx_stb, m_core->i_rx_data,
186
                                m_core->o_tx_stb, m_core->o_tx_data,
187
                                m_core->i_tx_busy?"/BSY":"    ");
188
                        */
189
 
190
                        printf("(%d,%d->%d),(%c:%d,%d->%d)|%c[%08x/%08x]@%08x %c%c%c",
191 4 dgisselq
                                m_core->v__DOT__wbu_cyc,
192
                                m_core->v__DOT__dwb_cyc, // was zip_cyc
193
                                m_core->v__DOT__wb_cyc,
194
                                //
195 75 dgisselq
                                m_core->v__DOT__wbu_zip_arbiter__DOT__r_a_owner?'Z':'j',
196 4 dgisselq
                                m_core->v__DOT__wbu_stb,
197
                                // 0, // m_core->v__DOT__dwb_stb, // was zip_stb
198
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__mem_stb_gbl,
199
                                m_core->v__DOT__wb_stb,
200
                                //
201
                                (m_core->v__DOT__wb_we)?'W':'R',
202
                                m_core->v__DOT__wb_data,
203
                                        m_core->v__DOT__dwb_idata,
204
                                m_core->v__DOT__wb_addr,
205 75 dgisselq
                                (m_core->v__DOT__dwb_ack)?'A':
206
                                        (m_core->v__DOT____Vcellinp__genbus____pinNumber9)?'a':' ',
207
                                (m_core->v__DOT__dwb_stall)?'S':
208
                                        (m_core->v__DOT____Vcellinp__genbus____pinNumber10)?'s':' ',
209 4 dgisselq
                                (m_core->v__DOT__wb_err)?'E':'.');
210
 
211 106 dgisselq
                        printf(" RUNWB %d:%09lx %d@0x%08x %3x %3x %d %d/%d/%d %d:%09lx",
212
                                m_core->v__DOT__genbus__DOT__fifo_in_stb,
213
                                m_core->v__DOT__genbus__DOT__fifo_in_word,
214 75 dgisselq
                                m_core->v__DOT__genbus__DOT__runwb__DOT__wb_state,
215
                                m_core->v__DOT__wbu_addr,
216
                                m_core->v__DOT__genbus__DOT__runwb__DOT__r_len,
217
                                m_core->v__DOT__genbus__DOT__runwb__DOT__r_acks_needed,
218
                                m_core->v__DOT__genbus__DOT__runwb__DOT__w_eow,
219 106 dgisselq
                                m_core->v__DOT__genbus__DOT__runwb__DOT__last_read_request,
220 75 dgisselq
                                m_core->v__DOT__genbus__DOT__runwb__DOT__last_ack,
221
                                m_core->v__DOT__genbus__DOT__runwb__DOT__zero_acks,
222
                                m_core->v__DOT__genbus__DOT__exec_stb,
223
                                m_core->v__DOT__genbus__DOT__exec_word);
224
 
225 106 dgisselq
                        printf(" WBU[%d,%3d,%3d]",
226
                                m_core->v__DOT__genbus__DOT__runwb__DOT__wb_state,
227
                                m_core->v__DOT__genbus__DOT__runwb__DOT__r_len,
228
                                m_core->v__DOT__genbus__DOT__runwb__DOT__r_acks_needed);
229
 
230 75 dgisselq
                        /*
231 4 dgisselq
                        printf("%c[%d%d%d%d,%d:%04x%c]@%06x(%d) ->%06x%c",
232
                                (m_core->v__DOT__sdram_sel)?'!':' ',
233
                                m_core->o_ram_cs_n, m_core->o_ram_ras_n,
234
                                m_core->o_ram_cas_n, m_core->o_ram_we_n,
235
                                m_core->o_ram_bs, m_core->o_ram_data,
236
                                (m_core->o_ram_drive_data)?'D':'-',
237
                                m_core->o_ram_addr,
238
                                        (m_core->o_ram_addr>>10)&1,
239
                                m_core->i_ram_data,
240
                                (m_core->o_ram_drive_data)?'-':'V');
241
 
242
                        printf(" SD[%d,%d-%3x%d]",
243
                                m_core->v__DOT__sdram__DOT__r_state,
244
                                m_sdram.pwrup(),
245
                                m_core->v__DOT__sdram__DOT__refresh_clk,
246
                                m_core->v__DOT__sdram__DOT__need_refresh);
247
 
248
                        printf(" BNK[%d:%6x,%d:%6x,%d:%6x,%d:%6x],%x%d",
249
                                m_core->v__DOT__sdram__DOT__bank_active[0],
250
                                m_core->v__DOT__sdram__DOT__bank_row[0],
251
                                m_core->v__DOT__sdram__DOT__bank_active[1],
252
                                m_core->v__DOT__sdram__DOT__bank_row[1],
253
                                m_core->v__DOT__sdram__DOT__bank_active[2],
254
                                m_core->v__DOT__sdram__DOT__bank_row[2],
255
                                m_core->v__DOT__sdram__DOT__bank_active[3],
256
                                m_core->v__DOT__sdram__DOT__bank_row[3],
257
                                m_core->v__DOT__sdram__DOT__clocks_til_idle,
258
                                m_core->v__DOT__sdram__DOT__r_barrell_ack);
259
 
260
                        printf(" %s%s%c[%08x@%06x]",
261
                                (m_core->v__DOT__sdram__DOT__bus_cyc)?"C":" ",
262
                                (m_core->v__DOT__sdram__DOT__r_pending)?"PND":"   ",
263
                                (m_core->v__DOT__sdram__DOT__r_we)?'W':'R',
264 37 dgisselq
                                (m_core->v__DOT__sdram__DOT__r_we)
265
                                ?(m_core->v__DOT__sdram__DOT__r_data)
266
                                :(m_core->v__DOT__sdram_data),
267 4 dgisselq
                                (m_core->v__DOT__sdram__DOT__r_addr));
268 75 dgisselq
                        */
269 4 dgisselq
 
270 75 dgisselq
                        /*
271 96 dgisselq
                        printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%2x %s%s %2d %2d",
272 37 dgisselq
                                // (m_core->v__DOT__zippy__DOT__dbg_ack)?"A":"-",
273
                                // (m_core->v__DOT__zippy__DOT__dbg_stall)?"S":"-",
274
                                // (m_core->v__DOT__zippy__DOT__sys_dbg_cyc)?"D":"-",
275 4 dgisselq
                                (m_core->v__DOT__zippy__DOT__cpu_lcl_cyc)?"L":"-",
276 75 dgisselq
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__r_halted)?"Z":"-",
277 4 dgisselq
                                (m_core->v__DOT__zippy__DOT__cmd_halt)?"H":"-",
278
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__pf_cyc)?"P":"-",
279 75 dgisselq
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__pf_valid)?"V":"-",
280 4 dgisselq
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__mem_cyc_gbl)?"G":"-",
281
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__mem_cyc_lcl)?"L":"-",
282 75 dgisselq
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__r_dcdvalid)?"D":"-",
283
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__dcd_ce)?"d":"-",
284 4 dgisselq
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__opvalid)?"O":"-",
285
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__op_ce)?"k":"-",
286 96 dgisselq
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__opvalid_alu)?"A":"-",
287
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__alu_ce)?"a":"-",
288 75 dgisselq
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__opvalid_mem)?"M":"-",
289
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__mem_ce)?"m":"-",
290 4 dgisselq
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__new_pc)?"N":"-",
291
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__clear_pipeline)?"C":"-",
292 75 dgisselq
                                (m_core->v__DOT__zippy__DOT__cmd_addr),
293
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__ibus_err_flag)?"IB":"  ",
294
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__ubus_err_flag)?"UB":"  ",
295
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__domem__DOT__rdaddr,
296
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__domem__DOT__wraddr);
297 4 dgisselq
 
298 75 dgisselq
                        printf(" PC0x%08x/%08x/%08x-%08x %s0x%08x",
299
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__pf_pc,
300
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__ipc,
301
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__upc,
302
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__instruction,
303
                                (m_core->v__DOT__zippy__DOT__thecpu__DOT__instruction_decoder__DOT__genblk3__DOT__r_early_branch)?"EB":"  ",
304
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__instruction_decoder__DOT__genblk3__DOT__r_branch_pc
305
                                );
306 96 dgisselq
 
307
                        printf(" %s[%02x]=%08x(%08x)",
308
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__wr_reg_ce?"WR":"--",
309
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__wr_reg_id,
310
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__wr_gpreg_vl,
311
                                m_core->v__DOT__zippy__DOT__thecpu__DOT__wr_spreg_vl);
312 75 dgisselq
                        */
313 96 dgisselq
 
314 4 dgisselq
 
315 96 dgisselq
                        /*
316
                        printf(" SDSPI[%d,%d(%d),(%d)]",
317 75 dgisselq
                                m_core->v__DOT__sdcard_controller__DOT__r_cmd_busy,
318
                                m_core->v__DOT__sdcard_controller__DOT__r_sdspi_clk,
319
                                m_core->v__DOT__sdcard_controller__DOT__r_cmd_state,
320
                                m_core->v__DOT__sdcard_controller__DOT__r_rsp_state);
321 96 dgisselq
                        printf(" LL[%d,%2x->CK=%d/%2x,%s,ST=%2d,TX=%2x,RX=%2x->%d,%2x] ",
322 75 dgisselq
                                m_core->v__DOT__sdcard_controller__DOT__ll_cmd_stb,
323
                                m_core->v__DOT__sdcard_controller__DOT__ll_cmd_dat,
324
                                m_core->v__DOT__sdcard_controller__DOT__lowlevel__DOT__r_z_counter,
325
                                // (m_core->v__DOT__sdcard_controller__DOT__lowlevel__DOT__r_clk_counter==0)?1:0,
326
                                m_core->v__DOT__sdcard_controller__DOT__lowlevel__DOT__r_clk_counter,
327
                                (m_core->v__DOT__sdcard_controller__DOT__lowlevel__DOT__r_idle)?"IDLE":"    ",
328
                                m_core->v__DOT__sdcard_controller__DOT__lowlevel__DOT__r_state,
329
                                m_core->v__DOT__sdcard_controller__DOT__lowlevel__DOT__r_byte,
330
                                m_core->v__DOT__sdcard_controller__DOT__lowlevel__DOT__r_ireg,
331
                                m_core->v__DOT__sdcard_controller__DOT__ll_out_stb,
332
                                m_core->v__DOT__sdcard_controller__DOT__ll_out_dat
333
                                );
334 96 dgisselq
                        printf(" CRC=%02x/%2d",
335 75 dgisselq
                                m_core->v__DOT__sdcard_controller__DOT__r_cmd_crc,
336
                                m_core->v__DOT__sdcard_controller__DOT__r_cmd_crc_cnt);
337
                        printf(" SPI(%d,%d,%d/%d,%d)->?",
338
                                m_core->o_sf_cs_n,
339
                                m_core->o_sd_cs_n,
340
                                m_core->o_spi_sck, m_core->v__DOT__sdcard_sck,
341
                                m_core->o_spi_mosi);
342
 
343
                        printf(" CK=%d,LN=%d",
344
                                m_core->v__DOT__sdcard_controller__DOT__r_sdspi_clk,
345
                                m_core->v__DOT__sdcard_controller__DOT__r_lgblklen);
346
 
347 96 dgisselq
 
348 75 dgisselq
                        if (m_core->v__DOT__sdcard_controller__DOT__r_use_fifo){
349
                                printf(" FIFO");
350
                                if (m_core->v__DOT__sdcard_controller__DOT__r_fifo_wr)
351 96 dgisselq
                                        printf("-WR(%04x,%d,%d,%d)",
352
                                                m_core->v__DOT__sdcard_controller__DOT__fifo_rd_crc_reg,
353
                                                m_core->v__DOT__sdcard_controller__DOT__fifo_rd_crc_stb,
354
                                                m_core->v__DOT__sdcard_controller__DOT__ll_fifo_pkt_state,
355
                                                m_core->v__DOT__sdcard_controller__DOT__r_have_data_response_token);
356 75 dgisselq
                                else
357 96 dgisselq
                                        printf("-RD(%04x,%d,%d,%d)",
358
                                                m_core->v__DOT__sdcard_controller__DOT__fifo_wr_crc_reg,
359
                                                m_core->v__DOT__sdcard_controller__DOT__fifo_wr_crc_stb,
360
                                                m_core->v__DOT__sdcard_controller__DOT__ll_fifo_wr_state,
361
                                                m_core->v__DOT__sdcard_controller__DOT__ll_fifo_wr_complete
362
                                                );
363 75 dgisselq
                        }
364
 
365
                        if (m_core->v__DOT__sdcard_controller__DOT__ll_fifo_rd)
366
                                printf(" LL-RD");
367
                        if (m_core->v__DOT__sdcard_controller__DOT__ll_fifo_wr)
368
                                printf(" LL-WR");
369
                        if (m_core->v__DOT__sdcard_controller__DOT__r_have_start_token)
370
                                printf(" START-TOK");
371 96 dgisselq
                        printf(" %3d/%02x",
372
                                m_core->v__DOT__sdcard_controller__DOT__ll_fifo_addr,
373
                                m_core->v__DOT__sdcard_controller__DOT__fifo_byte&0x0ff);
374
                        */
375 75 dgisselq
 
376 96 dgisselq
 
377 75 dgisselq
                        /*
378
                        printf(" DMAC[%d]: %08x/%08x/%08x(%03x) -- (%d,%d,%c)%c%c:@%08x-[%4d,%4d/%4d,%4d-#%4d]%08x",
379
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__dma_state,
380
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__cfg_waddr,
381
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__cfg_raddr,
382
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__cfg_len,
383
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__cfg_blocklen_sub_one,
384
                                m_core->v__DOT__zippy__DOT__dc_cyc,
385
                                // m_core->v__DOT__zippy__DOT__dc_stb,
386
                                (m_core->v__DOT__zippy__DOT__dma_controller__DOT__dma_state == 2)?1:0,
387
 
388
                                ((m_core->v__DOT__zippy__DOT__dma_controller__DOT__dma_state == 4)
389
                                ||(m_core->v__DOT__zippy__DOT__dma_controller__DOT__dma_state == 5)
390
                                ||(m_core->v__DOT__zippy__DOT__dma_controller__DOT__dma_state == 6))?'W':'R',
391
                                //(m_core->v__DOT__zippy__DOT__dc_we)?'W':'R',
392
                                (m_core->v__DOT__zippy__DOT__dc_ack)?'A':' ',
393
                                (m_core->v__DOT__zippy__DOT__dc_stall)?'S':' ',
394
                                m_core->v__DOT__zippy__DOT__dc_addr,
395
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__rdaddr,
396
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__nread,
397
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__nracks,
398
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__nwacks,
399
                                m_core->v__DOT__zippy__DOT__dma_controller__DOT__nwritten,
400
                                m_core->v__DOT__zippy__DOT__dc_data);
401
 
402
                        printf(" %08x-PIC%08x",
403
                                m_core->v__DOT__zippy__DOT__main_int_vector,
404
                                m_core->v__DOT__zippy__DOT__pic_data);
405
                        */
406
 
407
                        printf("\n"); fflush(stdout);
408
                } m_last_writeout = writeout;
409
 
410 4 dgisselq
        }
411
 
412
};
413
 
414
BUSMASTER_TB    *tb;
415
 
416
void    busmaster_kill(int v) {
417
        tb->kill();
418 75 dgisselq
        fprintf(stderr, "KILLED!!\n");
419 4 dgisselq
        exit(0);
420
}
421
 
422
int     main(int argc, char **argv) {
423
        Verilated::commandArgs(argc, argv);
424
        tb = new BUSMASTER_TB;
425
 
426
        // signal(SIGINT,  busmaster_kill);
427
 
428
        tb->reset();
429 96 dgisselq
        if (argc > 1)
430
                tb->setsdcard(argv[1]);
431
        else
432
                tb->setsdcard("/dev/zero");
433 4 dgisselq
 
434
        while(1)
435
                tb->tick();
436
 
437
        exit(0);
438
}
439
 

powered by: WebSVN 2.1.0

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