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

Subversion Repositories linkruncca

[/] [linkruncca/] [trunk/] [src/] [equivalence_resolver.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 jaytang
module equivalence_resolver(
2
        clk,rst,datavalid, //global input
3
        A,B,C,D,p,hp,np,tp,dp,fp,fn,dd, //input from other modules
4
        h_we,t_we,n_we,d_we, //output to table (write enable)
5
        h_waddr,t_waddr,n_waddr,d_waddr, //output to table (write address)
6
        h_wdata,t_wdata,n_wdata,d_wdata, //output to table (write data)
7
        HCN,DAC,DMG,CLR,EOC,O //output to other modules
8
);
9
parameter address_bit=9;
10
parameter data_bit=38;
11
 
12
input clk,rst,datavalid,A,B,C,D,fp,fn;
13
input [address_bit-1:0]p,hp,np,tp;
14
input [data_bit-1:0]dp,dd;
15
 
16
output reg h_we,t_we,n_we,d_we;
17
output reg[address_bit-1:0]h_waddr,t_waddr,n_waddr,d_waddr;
18
output reg[address_bit-1:0]h_wdata,t_wdata,n_wdata;
19
output reg[data_bit-1:0]d_wdata;
20
output HCN,DAC,DMG,CLR,O;
21
output reg EOC;
22
 
23
reg [address_bit-1:0]cc,h;
24
reg f,HBF;
25
wire Ec,Ep;
26
 
27
assign DMG=O&~(f&hp==h);
28
assign DAC=D;
29
 
30
/////events
31
assign Ec=(C&~D);
32
assign Ep=(A&~B);
33
assign O=(B&D&(~A|~C));
34
assign CLR=Ec;
35
assign HCN=HBF&(np==p);
36
 
37
 
38
////cache cc,h,f
39
always@(posedge clk or posedge rst)
40
        if(rst)begin
41
                cc<=0;h<=0;f<=0;
42
        end
43
        else if(datavalid)
44
                if(Ec)begin
45
                        cc<=cc+1; //INC
46
                        f<=0;    //CLR
47
                end
48
                else if(O)begin
49
                        h<=h_wdata;f<=1; //ET1,ET2,ET3
50
                end
51
 
52
/////table update
53
always@*begin
54
        h_we=0;h_waddr={address_bit{1'bx}};h_wdata={address_bit{1'bx}};
55
        t_we=0;t_waddr={address_bit{1'bx}};t_wdata={address_bit{1'bx}};
56
        n_we=0;n_waddr={address_bit{1'bx}};n_wdata={address_bit{1'bx}};
57
        d_we=0;d_waddr={address_bit{1'bx}};d_wdata={data_bit{1'bx}};
58
        EOC=0;HBF=0;
59
        if(Ec)begin
60
                n_we=1;n_waddr=cc;n_wdata=cc; //CLR
61
                h_we=1;h_waddr=cc;h_wdata=cc; //CLR
62
                case(f)
63
                0:begin d_we=1;d_waddr=cc;d_wdata=dd;end //DUC
64
                1:begin d_we=1;d_waddr=h;d_wdata=dd;end //DUH
65
                endcase
66
        end
67
        else if(Ep)begin
68
                case(fp)
69
                0:begin  d_we=1;d_waddr=np;d_wdata=dp; //DBF
70
                        if(fn)EOC=1;    end       //EOC
71
                1:begin h_we=1;h_waddr=np;h_wdata=hp;HBF=1;end  //HBF
72
                endcase
73
        end
74
        else if(O)
75
                case({f,fp})
76
                2'b00:begin
77
                        h_we=1;h_waddr=np;h_wdata=cc;   //ET1
78
                        t_we=1;t_waddr=h_wdata;t_wdata=cc;
79
                end
80
                2'b01:begin
81
                        h_we=1;h_waddr=np;h_wdata=hp;   //ET3
82
                        t_we=1;t_waddr=h_wdata;t_wdata=cc;
83
                        n_we=1;n_waddr=tp;n_wdata=cc;   //EM1
84
                end
85
                2'b10:begin
86
                        h_we=1;h_waddr=np;h_wdata=h;    //ET2
87
                        t_we=1;t_waddr=h_wdata;t_wdata=cc;
88
                end
89
                2'b11:begin
90
                        h_we=1;h_waddr=np;h_wdata=hp;   //ET3
91
                        t_we=1;t_waddr=h_wdata;t_wdata=cc;
92
                        n_we=1;n_waddr=tp;n_wdata=h;    //EM2
93
                end
94
                endcase
95
end
96
 
97
 
98
endmodule
99
 

powered by: WebSVN 2.1.0

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