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

Subversion Repositories mips_16

[/] [mips_16/] [trunk/] [bench/] [IF_stage/] [IF_stage_tb_0.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 Doyya
////////////////////////////////////////////////////////////////////////////////
2
// Company: 
3
// Engineer:
4
//
5
// Create Date:   01:51:48 02/06/2012
6
// Design Name:   IF_stage
7
// Module Name:   F:/Projects/My_MIPS/mips_16/sim/IF_stage/IF_stage_tb_0.v
8
// Project Name:  mips_16
9
// Target Device:  
10
// Tool versions:  
11
// Description: 
12
//
13
// Verilog Test Fixture created by ISE for module: IF_stage
14
//
15
// Dependencies:
16
// 
17
// Revision:
18
// Revision 0.01 - File Created
19
// Additional Comments:
20
// 
21
////////////////////////////////////////////////////////////////////////////////
22
`timescale 1ns/1ps
23
`include "mips_16_defs.v"
24
 
25
module IF_stage_tb_0_v;
26
 
27
        // Inputs
28
        reg clk;
29
        reg rst;
30
        reg instruction_fetch_en;
31
        reg [5:0] branch_offset_imm;
32
        reg branch_taken;
33
 
34
        // Outputs
35
        wire [`PC_WIDTH-1:0] pc;
36
        wire [15:0] instruction;
37
 
38
        parameter CLK_PERIOD = 10;
39
        integer test;
40
 
41
        // Instantiate the Unit Under Test (UUT)
42
        IF_stage uut (
43
                .clk(clk),
44
                .rst(rst),
45
                .instruction_fetch_en(instruction_fetch_en),
46
                .branch_offset_imm(branch_offset_imm),
47
                .branch_taken(branch_taken),
48
                .pc(pc),
49
                .instruction(instruction)
50
        );
51
 
52
        always #(CLK_PERIOD /2)
53
                clk =~clk;
54
 
55
        initial begin
56
                // Initialize Inputs
57
                clk = 0;
58
                rst = 0;
59
                instruction_fetch_en = 0;
60
                branch_offset_imm = 0;
61
                branch_taken = 0;
62
                test = 0;
63
 
64
                // Wait 100 ns for global reset to finish
65
                #100;
66
        display_debug_message;
67
                #(CLK_PERIOD/2)
68
                test1;
69
                test2;
70
                $stop;
71
 
72
                $finish;
73
 
74
        end
75
 
76
        task display_debug_message;
77
                begin
78
                        $display("\n***************************");
79
                        $display("IF_stage test");
80
                        $display("***************************\n");
81
                end
82
        endtask
83
 
84
        task sys_reset;
85
                begin
86
                        rst = 0;
87
                        #(CLK_PERIOD*1) rst = 1;
88
                        #(CLK_PERIOD*1) rst = 0;
89
                end
90
        endtask
91
 
92
        task test1;
93
                begin
94
                        $readmemh("../bench/IF_stage/test1.prog",uut.imem.rom);
95
                        $display("rom load successfully\n");
96
 
97
                        sys_reset;
98
                        #1
99
                        instruction_fetch_en = 1;
100
                        #(CLK_PERIOD) test = 1;
101
 
102
                        #(CLK_PERIOD*5)
103
                        sys_reset;
104
 
105
                        #(CLK_PERIOD*100) test = 0;
106
                        sys_reset;
107
 
108
                end
109
        endtask
110
 
111
        task test2;
112
                begin
113
                        $readmemh("../bench/IF_stage/test1.prog",uut.imem.rom);
114
                        $display("rom load successfully\n");
115
 
116
                        sys_reset;
117
                        instruction_fetch_en = 1;
118
                        #1
119
                        #(CLK_PERIOD) test = 2;
120
 
121
                        #(CLK_PERIOD*20)
122
                        instruction_fetch_en = 0;
123
                        branch_taken = 1;
124
                        branch_offset_imm = -30;
125
 
126
                        #(CLK_PERIOD*3)
127
                        instruction_fetch_en = 1;
128
                        #(CLK_PERIOD*1)
129
                        branch_taken = 0;
130
                        branch_offset_imm = 0;
131
 
132
                        #(CLK_PERIOD*100) test = 0;
133
                        sys_reset;
134
 
135
                end
136
        endtask
137
 
138
        always @ (test) begin
139
            case(test)
140
                        1: begin
141
                            $display("running test1\n");
142
                                 while(test == 1) begin
143
                                    @(uut.pc)
144
                                        $display("current pc : %d",uut.pc);
145
                                        if(uut.pc == 40) begin
146
                                                #1
147
                                            branch_taken = 1;
148
                                                branch_offset_imm = -30;
149
                                                #(CLK_PERIOD*1)
150
                                                branch_taken =0;
151
                                                branch_offset_imm = 0;
152
                                        end
153
                                 end
154
                        end
155
 
156
                        2: begin
157
                            $display("running test2\n");
158
                                 while(test == 2) begin
159
                                    @(uut.pc)
160
                                        $display("current pc : %d",uut.pc);
161
                                 end
162
                        end
163
 
164
                endcase
165
        end
166
 
167
endmodule
168
 

powered by: WebSVN 2.1.0

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