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

Subversion Repositories mips_16

[/] [mips_16/] [trunk/] [rtl/] [register_file.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 Doyya
/***************************************************
2
 * Module: register_file
3
 * Project: mips_16
4
 * Author: fzy
5
 * Description:
6
 *      a 8-entry 16-bit register file,
7
 *      with 1 synchronized write port and 2 asynchonized read port
8
  *
9
 *      NOTE: for Register 0, read data from it will always be 0,
10
 *              and write operatioins will also be discarded.
11
 *
12
 * Revise history:
13
 *
14
 ***************************************************/
15
`timescale 1ns/1ps
16
`include "mips_16_defs.v"
17
 
18
module register_file
19
(
20
        input                           clk,
21
        input                           rst,
22
 
23
        // write port
24
        input                           reg_write_en,
25
        input           [2:0]    reg_write_dest,
26
        input           [15:0]   reg_write_data,
27
 
28
        //read port 1
29
        input           [2:0]    reg_read_addr_1,
30
        output          [15:0]   reg_read_data_1,
31
        //read port 2
32
        input           [2:0]    reg_read_addr_2,
33
        output          [15:0]   reg_read_data_2
34
);
35
        reg     [15:0]   reg_array [7:0];
36
 
37
        // write port
38
        //reg [2:0] i;
39
        always @ (posedge clk or posedge rst) begin
40
                if(rst) begin
41
                        // for(i=0; i<8; i=i+1)
42
                                // reg_array[i] <= 15'b0;
43
                        reg_array[0] <= 15'b0;
44
                        reg_array[1] <= 15'b0;
45
                        reg_array[2] <= 15'b0;
46
                        reg_array[3] <= 15'b0;
47
                        reg_array[4] <= 15'b0;
48
                        reg_array[5] <= 15'b0;
49
                        reg_array[6] <= 15'b0;
50
                        reg_array[7] <= 15'b0;
51
                end
52
                else begin
53
                        if(reg_write_en) begin
54
                                reg_array[reg_write_dest] <= reg_write_data;
55
                        end
56
                end
57
 
58
        end
59
 
60
        //read port 1
61
        // always @ (*) begin
62
                // if( reg_read_addr_1 == 0) begin
63
                        // reg_read_data_1 = 15'b0;
64
                // end
65
                // else begin
66
                        // reg_read_data_1 = reg_array[reg_read_addr_1];
67
                // end
68
        // end
69
        assign reg_read_data_1 = ( reg_read_addr_1 == 0)? 15'b0 : reg_array[reg_read_addr_1];
70
 
71
        //read port 2
72
        // always @ (*) begin
73
                // if( reg_read_addr_2 == 0) begin
74
                        // reg_read_data_2 = 15'b0;
75
                // end
76
                // else begin
77
                        // reg_read_data_2 = reg_array[reg_read_addr_2];
78
                // end
79
        // end
80
        assign reg_read_data_2 = ( reg_read_addr_2 == 0)? 15'b0 : reg_array[reg_read_addr_2];
81
 
82
endmodule

powered by: WebSVN 2.1.0

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