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

Subversion Repositories fluid_core_2

[/] [fluid_core_2/] [trunk/] [xilinx14.5 project/] [MEM_Stage.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 azmathmoos
`timescale 1ns / 1ps
2
`include "Configuration.v"
3
 
4
module MEM_Stage(
5
        input Clk,
6
        input RST,
7
        input [0:`EX_MEM_reg_w] EX_MEM_reg,
8
        output [0:`MEM_WB_reg_w] MEM_WB_reg,
9
        output [0:`memory_bus_w] ex_mem_addr,
10
        inout [0:`dpw] ex_mem_data,
11
        output mem_Clk,
12
        output mem_wr,
13
        output branch, linked,
14
        output return_back,
15
        output [0:`pc_w] branch_target
16
    );
17
 
18
        wire [0:`type_msb] Type;
19
        wire [0:`wb_dst_msb] WB_Dest;
20
        wire [0:`bc_msb] Rd_BC;
21
        wire [0:`dpw] E1, E0, M0;
22
        wire C,Z,S,O;
23
 
24
        assign Type = EX_MEM_reg[0:`type_msb];
25
        assign WB_Dest = EX_MEM_reg[`type_msb+1:`type_msb+1+`wb_dst_msb];
26
        assign Rd_BC = EX_MEM_reg[`type_msb+1+`wb_dst_msb+1:`type_msb+1+`wb_dst_msb+1+`bc_msb];
27
        assign E0 = EX_MEM_reg[`type_msb+1+`wb_dst_msb+1+`bc_msb+1:`type_msb+1+`wb_dst_msb+1+`bc_msb+1+`dpw];
28
        assign E1 = EX_MEM_reg[`type_msb+1+`wb_dst_msb+1+`bc_msb+1+`dpw+1:`type_msb+1+`wb_dst_msb+1+`bc_msb+1+`dpw+1+`dpw];
29
        assign {C,Z,S,O} = E0[`dpw+1-4:`dpw];
30
 
31
        assign ex_mem_addr = E1;
32
 
33
        assign mem_wr = (Type==`type_store) ? 1: 0;
34
        assign ex_mem_data = (Type==`type_store) ? E0 : 'bZ;
35
        assign M0 = (Type==`type_load) ? ex_mem_data : E1;
36
 
37
        assign mem_Clk = ((Type==`type_load) || (Type==`type_store)) ? ~Clk : 'bZ;
38
 
39
 
40
        //--branch logic--//
41
        reg bc, ret;
42
        always@(*) begin
43
        if (Type==`type_branch) begin
44
                case (Rd_BC[1:`bc_msb])
45
                        `bLT: bc <= S^O;
46
                        `bLE: bc <= Z + (S^O);
47
                        `bNEG: bc <= S;
48
                        `bPOS: bc <= ~S;
49
                        `bEQ: bc <= Z;
50
                        `bNEQ: bc <= ~Z;
51
                        `bGE: bc <= ~(S^O);
52
                        `bGT: bc <= ~(Z+(S^O));
53
                        `bLTU: bc <= C;
54
                        `bLEU: bc <= C + Z;
55
                        `bGTU: bc <= ~(C+Z);
56
                        `bGEU: bc <= ~C;
57
                        `bOVF: bc <= O;
58
                        `bNOVF: bc <= ~O;
59
                        `bALL: bc <= 1;
60
                        `bRET: begin
61
                                        bc <= 1;
62
                                        ret <= 1;
63
                                        end
64
                endcase
65
        end else begin
66
                bc <= 0;
67
                ret <= 0;
68
        end
69
        end
70
        assign branch = (Type==`type_branch) & bc & ~ret;
71
        assign linked = Rd_BC[0];
72
        assign return_back = ret;
73
        assign branch_target = (Type==`type_branch) ? E1:'bZ;
74
 
75
        assign MEM_WB_reg = {Type,WB_Dest, Rd_BC[2:`bc_msb], M0};
76
 
77
endmodule

powered by: WebSVN 2.1.0

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