OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [rtl/] [src_synfull/] [dpi_interface.sv] - Blame information for rev 56

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 54 alirezamon
 
2 56 alirezamon
`include "pronoc_def.v"
3
parameter NOC_ID=0;
4
`NOC_CONF
5 54 alirezamon
import dpi_int_pkg::*;
6
 
7
module top_dpi_interface (
8
    input   logic               clk_i, rst_i  ,
9
    input   logic               init_i                          ,
10
    input   logic               startCom_i                      ,
11
    input   logic     [NE-1:0]  NE_ready_all_i                  ,
12
    input   deliver_t [NE-1:0]  pronoc_synfull_del_all_i        ,
13
    output  req_t     [NE-1:0]  synfull_pronoc_req_all_o        ,
14
    output  logic               endCom_o
15
);
16
 
17
 
18
import "DPI-C" function void c_dpi_interface (
19
    logic          startCom            ,
20
    logic          getData             ,
21
    logic          ejectReq            ,
22
    logic          queueReq            ,
23
    output  logic  endCom              ,
24
    output  logic  newReq              ,
25
    output  int    source_all[NE]      ,
26
    output  int    destination_all[NE] ,
27
    output  int    address_all[NE]     ,
28
    output  int    opcode_all[NE]      ,
29
    output  int    id_all[NE]          ,
30
    output  int    valid_all[NE]       ,
31
    input   int    rtrn_pkgid_all[NE]  ,
32
    input   int    rtrn_valid_all[NE]  ,
33
    input   int    NEready_all[NE]     ,
34
    output  int    size_all[NE]        ,
35
    input   int    enqueue_valid[NE]   ,
36
    input   int    enqueue_src[NE]     ,
37
    input   int    enqueue_dst[NE]     ,
38
    input   int    enqueue_id[NE]      ,
39
    input   int    enqueue_size[NE]
40
);
41
 
42
import "DPI-C" function void connection_init(
43
    logic           startCom     ,
44
    output logic    ready
45
);
46
 
47
int destination ;
48
int opcode      ;
49
int source      ;
50
int addr        ;
51
int pkgid       ;
52
int NEready_all[NE]             ;
53
int syn_source_all[NE]          ;
54
int syn_size_all[NE]            ;
55
int syn_opcode_all[NE]          ;
56
int syn_destination_all[NE]     ;
57
int syn_address_all[NE]         ;
58
int syn_pkgid_all[NE]           ;
59
int syn_valid_all[NE]           ;
60
int chi_req_pkgid_all[NE]       ;
61
int chi_req_valid_all[NE]       ;
62
 
63
int enqueue_valid[NE];
64
int enqueue_src[NE]  ;
65
int enqueue_dst[NE]  ;
66
int enqueue_id[NE]   ;
67
int enqueue_size[NE] ;
68
 
69
int _enqueue_valid[NE];
70
int _enqueue_src[NE]  ;
71
int _enqueue_dst[NE]  ;
72
int _enqueue_id[NE]   ;
73
int _enqueue_size[NE] ;
74
 
75
logic newData             ;
76
logic newReq              ;
77
logic ready_connection    ;
78
logic eject_req           ;
79
logic queue_req           ;
80
logic endCom              ;
81
 
82
logic [NE-1:0] valid_check ;
83
logic [NE-1:0] queue_check ;
84
 
85
// socket connection
86
always_ff @(posedge clk_i) begin
87
    connection_init(
88
        init_i,ready_connection
89
    );
90
end
91
 
92
// trace injection
93
always_ff @(posedge clk_i) begin
94
    c_dpi_interface(
95
        startCom_i&ready_connection ,
96
        clk_i                       ,
97
        eject_req                   ,
98
        queue_req                   ,
99
        endCom_o                    ,
100
        newData                     ,
101
        syn_source_all              ,
102
        syn_destination_all         ,
103
        syn_address_all             ,
104
        syn_opcode_all              ,
105
        syn_pkgid_all               ,
106
        syn_valid_all               ,
107
        chi_req_pkgid_all           ,
108
        chi_req_valid_all           ,
109
        NEready_all                 ,
110
        syn_size_all                ,
111
        enqueue_valid               ,
112
        enqueue_src                 ,
113
        enqueue_dst                 ,
114
        enqueue_id                  ,
115
        enqueue_size
116
    );
117
end
118
 
119
genvar k;
120
generate
121
for(k=0;k
122
    //to pronoc
123
    assign synfull_pronoc_req_all_o[k].dest  = syn_destination_all[k];
124
    assign synfull_pronoc_req_all_o[k].size  = syn_size_all[k];
125
    assign synfull_pronoc_req_all_o[k].src   = syn_source_all[k];
126
    assign synfull_pronoc_req_all_o[k].id    = syn_pkgid_all[k];
127
    assign synfull_pronoc_req_all_o[k].valid = syn_valid_all[k][0] & NE_ready_all_i[k] ;
128
 
129
    //from pronoc
130
    assign chi_req_pkgid_all[k]       = pronoc_synfull_del_all_i[k].id       ;
131
    assign chi_req_valid_all[k]       = pronoc_synfull_del_all_i[k].valid    ;
132
    assign NEready_all[k]             = NE_ready_all_i[k]                    ;
133
 
134
    assign valid_check[k] = pronoc_synfull_del_all_i[k].valid;
135
    assign queue_check[k] = (syn_valid_all[k][0] & !NE_ready_all_i[k]);
136
 
137
 
138
    //to enqueue
139
    assign enqueue_valid[k] = (syn_valid_all[k][0] & !NE_ready_all_i[k]) ? 1 : 0  ;
140
    assign enqueue_src[k]   = syn_source_all[k]                         ;
141
    assign enqueue_dst[k]   = syn_destination_all[k]                    ;
142
    assign enqueue_id[k]    = syn_pkgid_all[k]                          ;
143
    assign enqueue_size[k]  = syn_size_all[k]                           ;
144
 
145
     //always @* begin
146
     //    if(syn_valid_all[k][0] & !NE_ready_all_i[k]) begin
147
     //        $display ("not injected because the router injector is not ready: %d", syn_pkgid_all[k]);
148
     //    end
149
     //end
150
end
151
endgenerate
152
 
153
assign eject_req = !(valid_check=='0);
154
assign queue_req = !(queue_check=='0);
155
 
156
 
157
always_ff @ (posedge clk_i) begin
158
    if (!rst_i) begin
159
        _enqueue_valid <= '{default:'0} ;
160
        _enqueue_src   <= '{default:'0} ;
161
        _enqueue_dst   <= '{default:'0} ;
162
        _enqueue_id    <= '{default:'0} ;
163
        _enqueue_size  <= '{default:'0} ;
164
    end
165
    else begin
166
        _enqueue_valid <= enqueue_valid ;
167
        _enqueue_src   <= enqueue_src   ;
168
        _enqueue_dst   <= enqueue_dst   ;
169
        _enqueue_id    <= enqueue_id    ;
170
        _enqueue_size  <= enqueue_size  ;
171
    end
172
end
173
 
174
 
175
 
176
 
177
 
178
 
179
 
180
 
181
 
182
 
183
endmodule

powered by: WebSVN 2.1.0

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