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

Subversion Repositories mips_16

[/] [mips_16/] [trunk/] [bench/] [MEM_stage/] [data_mem_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:   13:50:26 02/09/2012
6
// Design Name:   data_mem
7
// Module Name:   F:/Projects/My_MIPS/mips_16/bench/MEM_stage/data_mem_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: data_mem
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
module data_mem_tb_0_v;
25
 
26
        // Inputs
27
        reg clk;
28
        reg [15:0] mem_access_addr;
29
        reg [15:0] mem_write_data;
30
        reg mem_write_en;
31
 
32
        // Outputs
33
        wire [15:0] mem_read_data;
34
 
35
        parameter CLK_PERIOD = 10;
36
        always #(CLK_PERIOD /2)
37
                clk =~clk;
38
        reg [15:0] rand;
39
        integer i;
40
 
41
        // Instantiate the Unit Under Test (UUT)
42
        data_mem uut (
43
                .clk(clk),
44
                .mem_access_addr(mem_access_addr),
45
                .mem_write_data(mem_write_data),
46
                .mem_write_en(mem_write_en),
47
                .mem_read_data(mem_read_data)
48
        );
49
 
50
        initial begin
51
                // Initialize Inputs
52
                clk = 0;
53
                mem_access_addr = 0;
54
                mem_write_data = 0;
55
                mem_write_en = 0;
56
 
57
                // Wait 100 ns for global reset to finish
58
                #100;
59
 
60
                // Add stimulus here
61
                #(CLK_PERIOD/2)
62
                #1
63
 
64
 
65
                write_mem;
66
                read_mem;
67
                //read_write_mem;
68
                $stop;
69
        end
70
 
71
        reg [`DATA_MEM_ADDR_WIDTH-1 : 0] addr_temp [7:0];
72
        reg [15 : 0] data_temp [7:0];
73
        task write_mem;
74
                begin
75
                        $display("write_memory. random_addr, random data:");
76
 
77
                        i=0;
78
                        while(i<8) begin
79
                                addr_temp[i] = {$random} % (2**`DATA_MEM_ADDR_WIDTH);
80
                                data_temp[i] = $random % 32768;
81
                        i = i+1;
82
                        end
83
                        $display("------------------------------");
84
                        $display("wrote address:");
85
                        i=0;
86
                        while(i<8) begin
87
                                $write("%d\t", addr_temp[i]);
88
                                i = i+1;
89
                        end
90
 
91
                        $display("\n------------------------------");
92
                        $display("wrote data:");
93
                        i=0;
94
                        while(i<8) begin
95
                                mem_write_en = 1;
96
                                mem_access_addr = addr_temp[i];
97
                                mem_write_data = data_temp[i];
98
                                #(CLK_PERIOD*1)
99
                                $write("%d\t", uut.ram[mem_access_addr]);
100
                                mem_write_en = 0;
101
                                i = i+1;
102
                        end
103
                        $display("\n------------------------------");
104
                end
105
        endtask
106
 
107
        integer err_num = 0;
108
        task read_mem;
109
                begin
110
                        $display("read data from addresses above and check");
111
                        i=0;
112
                        while(i<8) begin
113
                                mem_access_addr = addr_temp[i];
114
                                #(CLK_PERIOD*0.5)
115
                                if( mem_read_data != data_temp[i]) begin
116
                                        $display("error @ %d, expect %d, read %d",
117
                                                        mem_access_addr, data_temp[i], mem_read_data);
118
                                        err_num = err_num +1;
119
                                end
120
                                #(CLK_PERIOD*0.5)
121
                                i = i+1;
122
                        end
123
                        $display("check over, %d errors", err_num);
124
                        $display("\n------------------------------");
125
                end
126
        endtask
127
endmodule
128
 

powered by: WebSVN 2.1.0

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