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

Subversion Repositories mips789

[/] [mips789/] [trunk/] [core/] [forward.v] - Blame information for rev 64

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 64 mcupro
/******************************************************************
2
 *                                                                *
3
 *    Author: Liwei                                               *
4
 *                                                                *
5
 *    This file is part of the "mips789" project.                 *
6
 *    Downloaded from:                                            *
7
 *    http://www.opencores.org/pdownloads.cgi/list/mips789        *
8
 *                                                                *
9
 *    If you encountered any problem, please contact me via       *
10
 *    Email:mcupro@opencores.org  or mcupro@163.com               *
11
 *                                                                *
12
 ******************************************************************/
13
 
14
`include "mips789_defs.v"
15
 
16
 
17
module fw_latch5(input clk,input[4:0]d,output reg  [4:0]q);
18
    always @ (posedge clk) q<=d;
19
endmodule
20
 
21
module fw_latch1(input clk,input d,output reg q);
22
    always @ (posedge clk) q<=d;
23
endmodule
24
 
25
module forward_node (
26
        input [4:0]rn,
27
        input [4:0]alu_wr_rn,
28
        input alu_we,
29
        input [4:0]mem_wr_rn,
30
        input mem_we,
31
        output  wire[2:0]mux_fw
32
    );
33
    assign mux_fw = ((alu_we)&&(alu_wr_rn==rn)&&(alu_wr_rn!=0))?`FW_ALU:
34
           ((mem_we)&&(mem_wr_rn==rn)&&(mem_wr_rn!=0))?`FW_MEM:
35
           `FW_NOP;
36
endmodule
37
 
38
module fwd_mux(
39
        input [31:0]din,
40
        output reg [31:0]dout,
41
        input [31:0]fw_alu       ,
42
        input [2:0]fw_ctl,
43
        input [31:0]fw_dmem
44
    );
45
    always@(*)
46
    case (fw_ctl)
47
        `FW_ALU :dout=fw_alu;
48
        `FW_MEM :dout=fw_dmem;
49
         default
50
         dout=din;
51
    endcase
52
endmodule
53
 
54
module forward  (    input alu_we,
55
    input clk,
56
    input mem_We,
57
    input [4:0] fw_alu_rn,
58
    input [4:0] fw_mem_rn,
59
    input [4:0] rns_i,
60
    input [4:0] rnt_i,
61
    output [2:0] alu_rs_fw,
62
    output [2:0] alu_rt_fw,
63
    output [2:0] cmp_rs_fw,
64
    output [2:0] cmp_rt_fw,
65
    output [2:0] dmem_fw
66
 
67
) ;
68
 
69
 
70
    wire [2:0] BUS1345;
71
    wire [4:0] BUS82;
72
    wire [4:0] BUS937;
73
 
74
    forward_node fw_alu_rs
75
                 (
76
                     .alu_we(alu_we),
77
                     .alu_wr_rn(fw_alu_rn),
78
                     .mem_we(mem_We),
79
                     .mem_wr_rn(fw_mem_rn),
80
                     .mux_fw(alu_rs_fw),
81
                     .rn(BUS82)
82
                 );
83
 
84
 
85
 
86
    forward_node fw_alu_rt
87
                 (
88
                     .alu_we(alu_we),
89
                     .alu_wr_rn(fw_alu_rn),
90
                     .mem_we(mem_We),
91
                     .mem_wr_rn(fw_mem_rn),
92
                     .mux_fw(BUS1345),
93
                     .rn(BUS937)
94
                 );
95
 
96
 
97
 
98
    forward_node fw_cmp_rs
99
                 (
100
                     .alu_we(alu_we),
101
                     .alu_wr_rn(fw_alu_rn),
102
                     .mem_we(mem_We),
103
                     .mem_wr_rn(fw_mem_rn),
104
                     .mux_fw(cmp_rs_fw),
105
                     .rn(rns_i)
106
                 );
107
 
108
 
109
 
110
    forward_node fw_cmp_rt
111
                 (
112
                     .alu_we(alu_we),
113
                     .alu_wr_rn(fw_alu_rn),
114
                     .mem_we(mem_We),
115
                     .mem_wr_rn(fw_mem_rn),
116
                     .mux_fw(cmp_rt_fw),
117
                     .rn(rnt_i)
118
                 );
119
 
120
 
121
 
122
    fw_latch5 fw_reg_rns
123
              (
124
                  .clk(clk),
125
                  .d(rns_i),
126
                  .q(BUS82)
127
              );
128
 
129
 
130
 
131
    fw_latch5 fw_reg_rnt
132
              (
133
                  .clk(clk),
134
                  .d(rnt_i),
135
                  .q(BUS937)
136
              );
137
 
138
 
139
    assign alu_rt_fw[2:0] = BUS1345[2:0];
140
    assign dmem_fw[2:0] = BUS1345[2:0];
141
 
142
endmodule
143
 
144
 

powered by: WebSVN 2.1.0

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