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

Subversion Repositories mips789

[/] [mips789/] [tags/] [arelease/] [rtl/] [verilog/] [forward.v] - Blame information for rev 56

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

Line No. Rev Author Line
1 35 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 10 mcupro
 
14 35 mcupro
`include "mips789_defs.v"
15 10 mcupro
 
16 35 mcupro
 
17 10 mcupro
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
        `FW_NOP :dout=din;
50
        default dout=din;
51
    endcase
52
endmodule
53
 
54
module forward  (alu_we,clk,mem_We,fw_alu_rn,fw_mem_rn,rns_i,rnt_i,alu_rs_fw,alu_rt_fw,cmp_rs_fw,
55
                     cmp_rt_fw,dmem_fw) ;
56
 
57
    input alu_we;
58
    wire alu_we;
59
    input clk;
60
    wire clk;
61
    input mem_We;
62
    wire mem_We;
63
    input [4:0] fw_alu_rn;
64
    wire [4:0] fw_alu_rn;
65
    input [4:0] fw_mem_rn;
66
    wire [4:0] fw_mem_rn;
67
    input [4:0] rns_i;
68
    wire [4:0] rns_i;
69
    input [4:0] rnt_i;
70
    wire [4:0] rnt_i;
71
    output [2:0] alu_rs_fw;
72
    wire [2:0] alu_rs_fw;
73
    output [2:0] alu_rt_fw;
74
    wire [2:0] alu_rt_fw;
75
    output [2:0] cmp_rs_fw;
76
    wire [2:0] cmp_rs_fw;
77
    output [2:0] cmp_rt_fw;
78
    wire [2:0] cmp_rt_fw;
79
    output [2:0] dmem_fw;
80
    wire [2:0] dmem_fw;
81
 
82
    wire [2:0] BUS1345;
83
    wire [4:0] BUS82;
84
    wire [4:0] BUS937;
85
 
86
    forward_node fw_alu_rs
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(alu_rs_fw),
93
                     .rn(BUS82)
94
                 );
95
 
96
 
97
 
98
    forward_node fw_alu_rt
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(BUS1345),
105
                     .rn(BUS937)
106
                 );
107
 
108
 
109
 
110
    forward_node fw_cmp_rs
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_rs_fw),
117
                     .rn(rns_i)
118
                 );
119
 
120
 
121
 
122
    forward_node fw_cmp_rt
123
                 (
124
                     .alu_we(alu_we),
125
                     .alu_wr_rn(fw_alu_rn),
126
                     .mem_we(mem_We),
127
                     .mem_wr_rn(fw_mem_rn),
128
                     .mux_fw(cmp_rt_fw),
129
                     .rn(rnt_i)
130
                 );
131
 
132
 
133
 
134
    fw_latch5 fw_reg_rns
135
              (
136
                  .clk(clk),
137
                  .d(rns_i),
138
                  .q(BUS82)
139
              );
140
 
141
 
142
 
143
    fw_latch5 fw_reg_rnt
144
              (
145
                  .clk(clk),
146
                  .d(rnt_i),
147
                  .q(BUS937)
148
              );
149
 
150
 
151
    assign alu_rt_fw[2:0] = BUS1345[2:0];
152
    assign dmem_fw[2:0] = BUS1345[2:0];
153
 
154
endmodule
155
 
156
 

powered by: WebSVN 2.1.0

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