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

Subversion Repositories linkruncca

[/] [linkruncca/] [trunk/] [src/] [table_reader.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 table_reader(
2
        clk,rst,datavalid, //global input
3
        A,B,r1,r2,d,O,HCN, //input from other modules
4
        d_we,d_waddr,h_rdata,t_rdata,n_rdata,d_rdata,h_wdata,t_wdata, //input from table
5
        h_raddr,t_raddr,n_raddr,d_raddr, //output to table
6
        p,hp,np,tp,dp,fp,fn //output to others module
7
);
8
 
9
parameter address_bit=9;
10
parameter data_bit=38;
11
 
12
input clk,rst,datavalid,A,B,r1,r2,O,HCN,d_we;
13
input [address_bit-1:0]d_waddr,h_rdata,t_rdata,n_rdata,h_wdata,t_wdata;
14
input [data_bit-1:0]d,d_rdata;
15
output [address_bit-1:0]n_raddr,h_raddr,t_raddr,d_raddr;
16
output reg [address_bit-1:0]p,hp,np;
17
output [address_bit-1:0]tp;
18
output [data_bit-1:0]dp;
19
output reg fp,fn;
20
 
21
reg [address_bit-1:0]Rtp;
22
reg [data_bit-1:0]Rdp;
23
 
24
////label counter p
25
reg [address_bit-1:0]pc;
26
always@(posedge clk or posedge rst)
27
        if(rst)begin
28
                pc<=0;p<=0;
29
        end
30
        else if(datavalid)begin
31
                p<=pc;
32
                if(r1&~r2)begin
33
                        pc<=pc+1;
34
                end
35
        end
36
 
37
//////primary tables
38
assign n_raddr=pc;
39
assign h_raddr=pc;
40
 
41
//////secondary tables
42
assign t_raddr=(HCN)?h_wdata:h_rdata;
43
assign d_raddr=(HCN)?h_wdata:h_rdata;
44
 
45
//////previous row run cache
46
wire DCN;
47
assign DCN=(d_we)&(d_waddr==hp);
48
 
49
assign tp=(~A&B)?t_rdata:Rtp;
50
assign dp=(~A&B)?d_rdata:Rdp;
51
always@(posedge clk or posedge rst)
52
        if(rst)begin
53
                np<=0;hp<=0;fp<=0;fn<=0;Rtp<=0;Rdp<=0;
54
        end
55
        else if(datavalid)begin
56
                Rtp<=tp;Rdp<=dp;
57
                if(DCN)
58
                        Rdp<=d;
59
                if(~B&r1)begin
60
                        hp<=t_raddr;
61
                        fp<=~(t_raddr==p);
62
                        np<=n_rdata;
63
                        fn<=(n_rdata==p);
64
                end
65
                else if(O)begin
66
                        Rtp<=t_wdata;
67
                        fp<=1;
68
                        hp<=h_wdata;
69
                end
70
        end
71
 
72
endmodule

powered by: WebSVN 2.1.0

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