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

Subversion Repositories Aquarius

[/] [Aquarius/] [trunk/] [verilog/] [test.v] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 thorn_aitc
//======================================================
2
// Aquarius Project
3
//    SuperH-2 ISA Compatible RISC CPU
4
//------------------------------------------------------
5
// Module      : Test Bench
6
//------------------------------------------------------
7
// File        : test.v
8
// Library     : none
9
// Description : Test Bench for Aquarius.
10
// Simulator   : Icarus Verilog (Cygwin)
11
// Synthesizer : Xilinx XST (Windows XP)
12
// Author      : Thorn Aitch
13
//------------------------------------------------------
14
// Revision Number : 1
15
// Date of Change  : 15th April 2002
16
// Creator         : Thorn Aitch
17
// Description     : Initial Design
18
//------------------------------------------------------
19
// Revision Number : 2
20
// Date of Change  : 6th July 2002
21
// Modifier        : Thorn Aitch
22
// Description     : Make CPU layer                                
23
//------------------------------------------------------
24
// Revision Number : 3
25
// Date of Change  : 15th August 2002
26
// Modifier        : Thorn Aitch
27
// Description     : Separated from Top Layer
28
//======================================================
29
// Copyright (C) 2002-2003, Thorn Aitch
30
//
31
// Designs can be altered while keeping list of
32
// modifications "the same as in GNU" No money can
33
// be earned by selling the designs themselves, but
34
// anyone can get money by selling the implementation
35
// of the design, such as ICs based on some cores, 
36
// boards based on some schematics or Layouts, and
37
// even GUI interfaces to text mode drivers.
38
// "The same as GPL SW" Any update to the design
39
// should be documented and returned to the design. 
40
// Any derivative work based on the IP should be free
41
// under OpenIP License. Derivative work means any
42
// update, change or improvement on the design. 
43
// Any work based on the design can be either made
44
// free under OpenIP license or protected by any other
45
// license. Work based on the design means any work uses
46
// the OpenIP Licensed core as a building black without
47
// changing anything on it with any other blocks to
48
// produce larger design.  There is NO WARRANTY on the
49
// functionality or performance of the design on the
50
// real hardware implementation.
51
// On the other hand, the SuperH-2 ISA (Instruction Set
52
// Architecture) executed by Aquarius is rigidly
53
// the property of Renesas Corp. Then you have all 
54
// responsibility to judge if there are not any 
55
// infringements to Renesas's rights regarding your 
56
// Aquarius adoption into your design. 
57
// By adopting Aquarius, the user assumes all 
58
// responsibility for its use.
59
// This project may cause any damages around you, for 
60
// example, loss of properties, data, money, profits,
61
// life, or business etc. By adopting this source, 
62
// the user assumes all responsibility for its use.
63
//======================================================
64
 
65
// synopsys translate_off
66
`include "timescale.v"
67
// synopsys translate_on
68
 
69
`include "defines.v"
70
 
71
//******************************
72
// Test Bench
73
//******************************
74
module test(
75
    );
76
 
77
    reg CLK;
78
    reg RST_n;
79
 
80
//------------------
81
// Internal Signals
82
//------------------
83
 
84
    reg [31:0] COUNT;  //virtual signal for display
85
    reg [ 7:0] INDEX;  //virtual index for display
86
    reg [ 7:0] LCDDBI; //input port
87
    reg RXD, CTS;      //uart input signals
88
    reg [ 4:0] KEYXI;  //key input
89
 
90
//********
91
// Modules
92
//********
93
    top TOP(
94
        .CLK_SRC(CLK), .RST_n(RST_n),
95
           .LCDDBI(LCDDBI), .KEYXI(KEYXI),
96
           .RXD(RXD), .CTS(CTS)
97
    );
98
 
99
//----------------
100
// virtual counter
101
//----------------
102
    always @(posedge CLK) begin
103
        if (~RST_n)
104
            COUNT <= 32'h00000000;
105
        else
106
            COUNT <= COUNT + 1'b1;
107
    end
108
 
109
//-----------------
110
//  CLOCK generator
111
//-----------------
112
    initial begin
113
        CLK <= 1'b1;
114
    end
115
    always #(`HALF_CYCLE) begin
116
        CLK <= ~CLK;
117
    end
118
 
119
//-----------------
120
// simulation tasks
121
//-----------------
122
    task RESET;
123
        begin
124
            RST_n <= 1'b0;
125
        #(`CYCLE);
126
            RST_n <= 1'b1;
127
        end
128
    endtask
129
 
130
//--------------
131
// Input Pattern
132
//--------------                                                         PL
133
    initial begin
134
        RESET;
135
        LCDDBI <= 8'h00;
136
        RXD <= 1'b1;
137
            CTS <= 1'b0;
138
    #(`CYCLE*100);
139
        RXD <= 1'b0; //start bit
140
    #(`CYCLE*24);
141
        RXD <= 1'b1; //D0
142
    #(`CYCLE*24);
143
        RXD <= 1'b0; //D1
144
    #(`CYCLE*24);
145
        RXD <= 1'b1; //D2
146
    #(`CYCLE*24);
147
        RXD <= 1'b0; //D3
148
    #(`CYCLE*24);
149
        RXD <= 1'b1; //D4
150
    #(`CYCLE*24);
151
        RXD <= 1'b0; //D5
152
    #(`CYCLE*24);
153
        RXD <= 1'b1; //D6
154
    #(`CYCLE*24);
155
        RXD <= 1'b0; //D7
156
    #(`CYCLE*24);
157
        RXD <= 1'b1; //stop bit
158
    end
159
 
160
//-----------
161
// SLEEP test
162
//-----------
163
    initial begin
164
        KEYXI[4] <= 1'b1;
165
    #(`CYCLE*100);
166
        KEYXI[4] <= 1'b0;
167
    #(`CYCLE);
168
        KEYXI[4] <= 1'b1;
169
    end
170
 
171
//************************
172
// Write Simulation Result
173
//************************
174
    integer result;  //write file
175
    initial
176
        result = $fopen("test_result.txt");
177
    initial begin
178
        $fdisplay(result, "                                                                                                WB_MAC_BUSY/EX_MAC_BUSY/MAC_BUSY/MAC_STALL");
179
        $fdisplay(result, "             STB                                                              DISPATCH       REG_FWD_X&Y");
180
        $fdisplay(result, "            CYC IFWD                                                        INSTR_SEQ       NEXT_ID_STALL");
181
        $fdisplay(result, "          RESn WE                                                      INSTR_STATE         ID_STALL");
182
        $fdisplay(result, "         CLK  ACK                                                    SLOT                 IF_STALL");
183
        $fdisplay(result, "---------------------------------------------------------------------");
184
    end
185
 
186
    always begin
187
        #(`STROBE);
188
 
189
        if (COUNT[2:0] == 3'b000)
190
        $fdisplay(result, "COUNT#   CR CSAWI SEL- ADR----  DATI---- DATO---- PC------ EVR EVI A|S-INST-Q-D-IFDR-IR-- PIPE- ---- CNST-MQT SR------ GBR----- VBR----- PR------ MACH---- MACL---- XBUS---- YBUS---- ZBUS---- WBUS---- MAAD---- MADW---- MADR---- R0------ R1------ R2------ R3------ R4------ R5------ R6------ R7------ R8------ R9------ R10----- R11----- R12----- R13----- R14----- R15----- ");
191
         $fdisplay(result,
192
            "%8h %b%b %b%b%b%b%b %4b %8h %8h %8h %8h %3b %3h %b|%b %4h %h %b %4h %4h %b%b%b%b%b %b%b%b%b %4h %b%b%b %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h %8h",
193
            //  |    |          |                              |S  INSTQ  D  IFDRIR  PIPE                CNSTM Q T  SR  GBR VBR PR  MACHMACLX   Y   Z   W   AD  DW  DR  R0  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10 R11 R12 R13 R14 R15  
194
            COUNT, CLK ,RST_n,
195
            TOP.CYC,           // external bus cycle to be kept
196
            TOP.STB,           // external bus strobe
197
            TOP.ACK,           // external device acknowledge
198
            TOP.WE,            // external write/read
199
            TOP.IF_WIDTH,      // IF_WIDTH : external fetch space width
200
            TOP.SEL,           // external data valid position
201
            TOP.ADR,           // external address
202
            TOP.DATI,          // external data read bus
203
            TOP.DATO,          // external data write bus
204
            TOP.CPU.DATAPATH.PC,
205
            TOP.EVENT_REQ,
206
            TOP.EVENT_INFO,
207
            TOP.EVENT_ACK,
208
 
209
            TOP.CPU.DECODE.SLOT,
210
            TOP.CPU.DECODE.INSTR_STATE,
211
            TOP.CPU.DECODE.INSTR_SEQ,
212
            TOP.CPU.DECODE.DISPATCH,
213
            TOP.CPU.DECODE.IF_DR,
214
            TOP.CPU.DECODE.IR,
215
            TOP.CPU.DECODE.IF_STALL,
216
            TOP.CPU.DECODE.ID_STALL,
217
            TOP.CPU.DECODE.NEXT_ID_STALL,
218
            TOP.CPU.DECODE.REG_FWD_X,
219
            TOP.CPU.DECODE.REG_FWD_Y,
220
            TOP.CPU.DECODE.WB_MAC_BUSY,
221
            TOP.CPU.DECODE.EX_MAC_BUSY,
222
            TOP.CPU.DECODE.MAC_BUSY,
223
            TOP.CPU.DECODE.MAC_STALL,
224
            TOP.CPU.DECODE.CONST_IFDR,
225
            TOP.CPU.DATAPATH.SR[9], //M
226
            TOP.CPU.DATAPATH.SR[8], //Q
227
            TOP.CPU.DATAPATH.SR[0], //T
228
            {22'h000000, TOP.CPU.DATAPATH.SR},
229
            TOP.CPU.DATAPATH.GBR,
230
            TOP.CPU.DATAPATH.VBR,
231
            TOP.CPU.DATAPATH.PR,
232
            TOP.CPU.DATAPATH.MACH,
233
            TOP.CPU.DATAPATH.MACL,
234
            TOP.CPU.DATAPATH.XBUS,
235
            TOP.CPU.DATAPATH.YBUS,
236
            TOP.CPU.DATAPATH.ZBUS,
237
            TOP.CPU.DATAPATH.WBUS,
238
            TOP.CPU.DATAPATH.MA_AD,
239
            TOP.CPU.DATAPATH.MA_DW,
240
            TOP.CPU.DATAPATH.MA_DR,
241
            TOP.CPU.DATAPATH.REGISTER.REG[0],
242
            TOP.CPU.DATAPATH.REGISTER.REG[1],
243
            TOP.CPU.DATAPATH.REGISTER.REG[2],
244
            TOP.CPU.DATAPATH.REGISTER.REG[3],
245
            TOP.CPU.DATAPATH.REGISTER.REG[4],
246
            TOP.CPU.DATAPATH.REGISTER.REG[5],
247
            TOP.CPU.DATAPATH.REGISTER.REG[6],
248
            TOP.CPU.DATAPATH.REGISTER.REG[7],
249
            TOP.CPU.DATAPATH.REGISTER.REG[8],
250
            TOP.CPU.DATAPATH.REGISTER.REG[9],
251
            TOP.CPU.DATAPATH.REGISTER.REG[10],
252
            TOP.CPU.DATAPATH.REGISTER.REG[11],
253
            TOP.CPU.DATAPATH.REGISTER.REG[12],
254
            TOP.CPU.DATAPATH.REGISTER.REG[13],
255
            TOP.CPU.DATAPATH.REGISTER.REG[14],
256
            TOP.CPU.DATAPATH.REGISTER.REG[15]
257
        );
258
        #(`CYCLE-`STROBE);
259
    end
260
 
261
//--------------------------
262
// Simulation Stop Condition
263
//--------------------------
264
    always @(COUNT) begin
265
        if (COUNT == 32'h00002800)
266
            begin
267
                $fclose(result);
268
                $stop;
269
            end
270
    end
271
 
272
//======================================================
273
  endmodule
274
//======================================================

powered by: WebSVN 2.1.0

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