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

Subversion Repositories mips789

[/] [mips789/] [branches/] [mcupro/] [verilog/] [mips_core/] [forward.v] - Blame information for rev 53

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 mcupro
/////////////////////////////////////////////////////////////////////
2
////  Author: Liwei                                              ////
3
////                                                             ////
4
////                                                             ////
5
////  If you encountered any problem, please contact :           ////
6
////  Email: mcupro@yahoo.com.hk or mcupro@opencores.org         ////
7
////                                                             ////
8
////  Downloaded from:                                           ////
9
////     http://www.opencores.org/pdownloads.cgi/list/mips789    ////
10
/////////////////////////////////////////////////////////////////////
11
////                                                             ////
12
//// Copyright (C) 2006-2007 Liwei                               ////
13
////                         mcupro@yahoo.com.hk                 ////
14
////                                                             ////
15
////                                                             ////
16
//// This source file may be used and distributed freely without ////
17
//// restriction provided that this copyright statement is not   ////
18
//// removed from the file and any derivative work contains the  ////
19
//// original copyright notice and the associated disclaimer.    ////
20
////                                                             ////
21
//// Please let the author know if it is used                    ////
22
//// for commercial purpose.                                     ////
23
////                                                             ////
24
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
25
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
26
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
27
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
28
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
29
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
30
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
31
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
32
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
33
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
34
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
35
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
36
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
37
////                                                             ////
38
/////////////////////////////////////////////////////////////////////
39
////                                                             ////
40
////                                                             ////
41
//// Date of Creation: 2007.8.1                                  ////
42
////                                                             ////
43
//// Version: 0.0.1                                              ////
44
////                                                             ////
45
//// Description:                                                ////
46
////                                                             ////
47
////                                                             ////
48
/////////////////////////////////////////////////////////////////////
49
////                                                             ////
50
//// Change log:                                                 ////
51
////                                                             ////
52
/////////////////////////////////////////////////////////////////////
53
 
54
 
55
 
56
 
57
`define FW_ALU 3'b001
58
`define FW_MEM 3'b010
59
`define FW_NOP 3'b100
60
 
61
module fw_latch5(input clk,input[4:0]d,output reg  [4:0]q);
62
    always @ (posedge clk) q<=d;
63
endmodule
64
 
65
module fw_latch1(input clk,input d,output reg q);
66
    always @ (posedge clk) q<=d;
67
endmodule
68
 
69
module forward_node (
70
            input [4:0]rn,
71
            input [4:0]alu_wr_rn,
72
            input alu_we,
73
            input [4:0]mem_wr_rn,
74
            input mem_we,
75
            output  wire[2:0]mux_fw
76
        );
77
    assign mux_fw = ((alu_we)&&(alu_wr_rn==rn)&&(alu_wr_rn!=0))?`FW_ALU:
78
           ((mem_we)&&(mem_wr_rn==rn)&&(mem_wr_rn!=0))?`FW_MEM:
79
           `FW_NOP;
80
endmodule
81
 
82
module forward2 (alu_we,clk,mem_We,fw_alu_rn,fw_mem_rn,rns_i,rnt_i,alu_rs_fw,alu_rt_fw,cmp_rs_fw,
83
cmp_rt_fw,dmem_fw) ;
84
 
85
input alu_we;
86
wire alu_we;
87
input clk;
88
wire clk;
89
input mem_We;
90
wire mem_We;
91
input [4:0] fw_alu_rn;
92
wire [4:0] fw_alu_rn;
93
input [4:0] fw_mem_rn;
94
wire [4:0] fw_mem_rn;
95
input [4:0] rns_i;
96
wire [4:0] rns_i;
97
input [4:0] rnt_i;
98
wire [4:0] rnt_i;
99
output [2:0] alu_rs_fw;
100
wire [2:0] alu_rs_fw;
101
output [2:0] alu_rt_fw;
102
wire [2:0] alu_rt_fw;
103
output [2:0] cmp_rs_fw;
104
wire [2:0] cmp_rs_fw;
105
output [2:0] cmp_rt_fw;
106
wire [2:0] cmp_rt_fw;
107
output [2:0] dmem_fw;
108
wire [2:0] dmem_fw;
109
 
110
wire [2:0] BUS1345;
111
wire [4:0] BUS82;
112
wire [4:0] BUS937;
113
 
114
forward_node fw_alu_rs
115
(
116
        .alu_we(alu_we),
117
        .alu_wr_rn(fw_alu_rn),
118
        .mem_we(mem_We),
119
        .mem_wr_rn(fw_mem_rn),
120
        .mux_fw(alu_rs_fw),
121
        .rn(BUS82)
122
);
123
 
124
 
125
 
126
forward_node fw_alu_rt
127
(
128
        .alu_we(alu_we),
129
        .alu_wr_rn(fw_alu_rn),
130
        .mem_we(mem_We),
131
        .mem_wr_rn(fw_mem_rn),
132
        .mux_fw(BUS1345),
133
        .rn(BUS937)
134
);
135
 
136
 
137
 
138
forward_node fw_cmp_rs
139
(
140
        .alu_we(alu_we),
141
        .alu_wr_rn(fw_alu_rn),
142
        .mem_we(mem_We),
143
        .mem_wr_rn(fw_mem_rn),
144
        .mux_fw(cmp_rs_fw),
145
        .rn(rns_i)
146
);
147
 
148
 
149
 
150
forward_node fw_cmp_rt
151
(
152
        .alu_we(alu_we),
153
        .alu_wr_rn(fw_alu_rn),
154
        .mem_we(mem_We),
155
        .mem_wr_rn(fw_mem_rn),
156
        .mux_fw(cmp_rt_fw),
157
        .rn(rnt_i)
158
);
159
 
160
 
161
 
162
fw_latch5 fw_reg_rns
163
(
164
        .clk(clk),
165
        .d(rns_i),
166
        .q(BUS82)
167
);
168
 
169
 
170
 
171
fw_latch5 fw_reg_rnt
172
(
173
        .clk(clk),
174
        .d(rnt_i),
175
        .q(BUS937)
176
);
177
 
178
 
179
assign alu_rt_fw[2:0] = BUS1345[2:0];
180
assign dmem_fw[2:0] = BUS1345[2:0];
181
 
182
endmodule
183
 
184
 

powered by: WebSVN 2.1.0

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