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_noc/] [ss_allocator.sv] - Blame information for rev 48

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

Line No. Rev Author Line
1 48 alirezamon
`timescale 1ns / 1ps
2
 
3
/**********************************************************************
4
**      File:  ss_allocator.v
5
**      Date:2016-06-19
6
**
7
**      Copyright (C) 2014-2019  Alireza Monemi
8
**
9
**      This file is part of ProNoC
10
**
11
**      ProNoC ( stands for Prototype Network-on-chip)  is free software:
12
**      you can redistribute it and/or modify it under the terms of the GNU
13
**      Lesser General Public License as published by the Free Software Foundation,
14
**      either version 2 of the License, or (at your option) any later version.
15
**
16
**      ProNoC is distributed in the hope that it will be useful, but WITHOUT
17
**      ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18
**      or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
19
**      Public License for more details.
20
**
21
**      You should have received a copy of the GNU Lesser General Public
22
**      License along with ProNoC. If not, see .
23
**
24
**
25
**      Description:
26
**      static straight allocator : The incoming packet targeting output port located in same direction
27
**      will be forwarded with one clock cycle latency if the following conditions met in current clock cycle:
28
**      1) If no ivc is granted in the input port
29
**      2) The ss output port is not granted for any other input port
30
**      3) Packet destination port match with ss port
31
**      4) The requested output VC is available in ss port
32
**         The ss ports for each input potrt must be different with the rest
33
**         This result in one clock cycle latency
34
***************************************/
35
 
36
 
37
module  ss_allocator
38
import pronoc_pkg::*;
39
#(
40
    parameter P = 5
41
   )
42
   (
43
                clk,
44
                reset,
45
                flit_in_wr_all,
46
        flit_in_all,
47
        any_ovc_granted_in_outport_all ,
48
        any_ivc_sw_request_granted_all ,
49
        ovc_avalable_all,
50
        assigned_ovc_not_full_all,
51
        ivc_request_all,
52
        dest_port_encoded_all,
53
        assigned_ovc_num_all,
54
        ovc_is_assigned_all,
55
 
56
        ssa_ctrl_o
57
   );
58
 
59
 
60
    localparam  PV          =   V   *   P,
61
                        VV                      =   V * V,
62
                PVV         =   PV  *   V,
63
                PVDSTPw= PV * DSTPw,
64
                PFw         =   P   *   Fw;
65
 
66
    localparam    DISABLED = P;
67
 
68
    //MESH, TORUS Topology p=5
69
    localparam    EAST    =   1,
70
                  NORTH   =   2,
71
                  WEST    =   3,
72
                  SOUTH   =   4;
73
 
74
 
75
 
76
    //LINE RING Topology p=3
77
    localparam  FORWARD =  1,
78
                BACKWARD=  2;
79
 
80
 
81
 
82
 
83
    input   [PFw-1          :   0]  flit_in_all;
84
    input   [P-1            :   0]  flit_in_wr_all;
85
    input   [P-1            :   0]  any_ovc_granted_in_outport_all;
86
    input   [P-1            :   0]  any_ivc_sw_request_granted_all;
87
    input   [PV-1           :   0]  ovc_avalable_all;
88
    input   [PV-1           :   0]  assigned_ovc_not_full_all;
89
    input   [PV-1           :   0]  ivc_request_all;
90
    input   [PVDSTPw-1      :   0]  dest_port_encoded_all;
91
    input   [PVV-1          :   0]  assigned_ovc_num_all;
92
    input   [PV-1           :   0]  ovc_is_assigned_all;
93
    input   reset,clk;
94
    output  ssa_ctrl_t   ssa_ctrl_o [P-1 : 0];
95
 
96
 
97
    wire   [PV-1      :   0] ovc_allocated_all;
98
    wire   [PV-1      :   0] ovc_released_all;
99
    wire   [PVV-1     :   0] granted_ovc_num_all;
100
    wire   [PV-1      :   0] ivc_num_getting_sw_grant_all;
101
    wire   [PV-1      :   0] ivc_num_getting_ovc_grant_all;
102
    wire   [PV-1      :   0] ivc_reset_all;
103
    wire   [PV-1      :   0] single_flit_pck_all,ovc_single_flit_pck_all;
104
    wire   [PV-1      :   0] decreased_credit_in_ss_ovc_all;
105
    reg    [P-1       :   0] ssa_flit_wr_all;
106
 
107
 
108
    wire [PV-1   :   0] any_ovc_granted_in_ss_port;
109
    wire [PV-1   :   0] ovc_avalable_in_ss_port;
110
    wire [PV-1   :   0] ovc_allocated_in_ss_port;
111
    wire [PV-1   :   0] ovc_released_in_ss_port;
112
    wire [PV-1   :   0] decreased_credit_in_ss_ovc;
113
    wire [PV-1   :   0] ivc_num_getting_sw_grantin_SS_all;
114
 
115
 
116
 
117
        genvar i;
118
    // there is no ssa for local port in 5 and 3 port routers
119
    generate
120
    for (i=0; i
121
 
122
        localparam  C_PORT  = i/V;
123
        localparam  SS_PORT = strieght_port (P,C_PORT);
124
 
125
        if (SS_PORT == DISABLED)begin : no_prefrable
126
 
127
 
128
            assign   ovc_allocated_all[i]= 1'b0;
129
            assign   ovc_released_all [i]= 1'b0;
130
            assign   granted_ovc_num_all[(i+1)*V-1   :   i*V]= {V{1'b0}};
131
            assign   ivc_num_getting_sw_grant_all [i]= 1'b0;
132
            assign   ivc_num_getting_ovc_grant_all [i]= 1'b0;
133
            assign   ivc_reset_all [i]= 1'b0;
134
            assign   decreased_credit_in_ss_ovc_all[i]=1'b0;
135
            assign   single_flit_pck_all[i]= 1'b0;
136
            assign   ovc_single_flit_pck_all [i] =1'b0;
137
            assign   ivc_num_getting_sw_grantin_SS_all[i]=1'b0;
138
 
139
           // assign   predict_flit_wr_all [i]=1'b0;
140
 
141
 
142
       end else begin : ssa
143
 
144
            assign   any_ovc_granted_in_ss_port[i]=any_ovc_granted_in_outport_all[SS_PORT];
145
            assign   ovc_avalable_in_ss_port[i]=ovc_avalable_all[(SS_PORT*V)+(i%V)];
146
            assign   ovc_allocated_all[(SS_PORT*V)+(i%V)]=ovc_allocated_in_ss_port[i];
147
            assign   ovc_released_all[(SS_PORT*V)+(i%V)]=ovc_released_in_ss_port[i];
148
            assign   decreased_credit_in_ss_ovc_all[(SS_PORT*V)+(i%V)]=decreased_credit_in_ss_ovc[i];
149
            assign   ivc_num_getting_sw_grantin_SS_all[i]=  ivc_num_getting_sw_grant_all[(SS_PORT*V)+(i%V)];
150
            assign   ovc_single_flit_pck_all [i] =  single_flit_pck_all[(SS_PORT*V)+(i%V)];
151
 
152
 
153
 
154
            ssa_per_vc #(
155
                .SS_PORT(SS_PORT),
156
                .V_GLOBAL(i),
157
                .P(P)
158
            )
159
            the_ssa_per_vc
160
            (
161
                .flit_in_wr(flit_in_wr_all[(i/V)]),
162
                .flit_in(flit_in_all[((i/V)+1)*Fw-1 :   (i/V)*Fw]),
163
                .any_ivc_sw_request_granted(any_ivc_sw_request_granted_all[(i/V)]),
164
                .any_ovc_granted_in_ss_port(any_ovc_granted_in_ss_port[i]),
165
                .ovc_avalable_in_ss_port(ovc_avalable_in_ss_port[i]),
166
                .ivc_request(ivc_request_all[i]),
167
                .assigned_ovc_not_full(assigned_ovc_not_full_all[i]),
168
                .destport_encoded(dest_port_encoded_all[(i+1)*DSTPw-1 :   i*DSTPw]),
169
                .assigned_to_ssovc(assigned_ovc_num_all[(i*V)+(i%V)]),
170
                .ovc_is_assigned(ovc_is_assigned_all[i]),
171
                .ovc_allocated(ovc_allocated_in_ss_port[i]),
172
                .ovc_released(ovc_released_in_ss_port[i]),
173
                .granted_ovc_num(granted_ovc_num_all[(i+1)*V-1 : i*V]),
174
                .ivc_num_getting_sw_grant(ivc_num_getting_sw_grant_all[i]),
175
                .ivc_num_getting_ovc_grant(ivc_num_getting_ovc_grant_all[i]),
176
                .ivc_reset(ivc_reset_all[i]),
177
                .single_flit_pck(single_flit_pck_all[i]),
178
                .decreased_credit_in_ss_ovc(decreased_credit_in_ss_ovc[i])
179
                //synthesis translate_off
180
                //synopsys  translate_off
181
                ,.clk(clk)
182
                //synopsys  translate_on
183
                //synthesis translate_on
184
 
185
            );
186
 
187
        end//ssa
188
    end// vc_loop
189
 
190
 
191
    for(i=0;i
192
`ifdef SYNC_RESET_MODE
193
        always @ (posedge clk )begin
194
`else
195
        always @ (posedge clk or posedge reset)begin
196
`endif
197
            if(reset)begin
198
                    ssa_flit_wr_all[i]<=1'b0;
199
            end else begin
200
                    ssa_flit_wr_all[i]<= |ivc_num_getting_sw_grantin_SS_all[(i+1)*V-1    :   i*V];
201
            end //reset
202
        end// always
203
 
204
 
205
 
206
            assign ssa_ctrl_o[i].ovc_is_allocated =ovc_allocated_all [(i+1)*V-1  : i*V];
207
            assign ssa_ctrl_o[i].ovc_is_released = ovc_released_all  [(i+1)*V-1  : i*V];
208
            assign ssa_ctrl_o[i].ivc_num_getting_sw_grant = ivc_num_getting_sw_grant_all[(i+1)*V-1  : i*V];
209
            assign ssa_ctrl_o[i].ivc_num_getting_ovc_grant= ivc_num_getting_ovc_grant_all[(i+1)*V-1  : i*V];
210
            assign ssa_ctrl_o[i].ivc_reset= ivc_reset_all[(i+1)*V-1  : i*V];
211
            assign ssa_ctrl_o[i].buff_space_decreased = decreased_credit_in_ss_ovc_all[(i+1)*V-1  : i*V];
212
            assign ssa_ctrl_o[i].ivc_single_flit_pck = single_flit_pck_all [(i+1)*V-1  : i*V];
213
            assign ssa_ctrl_o[i].ovc_single_flit_pck = ovc_single_flit_pck_all [(i+1)*V-1  : i*V];
214
            assign ssa_ctrl_o[i].ssa_flit_wr = ssa_flit_wr_all[i] ;
215
            assign ssa_ctrl_o[i].ivc_granted_ovc_num = granted_ovc_num_all[(i+1)*VV-1  : i*VV];
216
 
217
 
218
 
219
 
220
        end// port_lp
221
 
222
 
223
 
224
 
225
    endgenerate
226
 
227
 
228
endmodule
229
 
230
 
231
 
232
 
233
/*************
234
 *  ssa_per_vc
235
 * ***********/
236
 
237
module ssa_per_vc
238
    import pronoc_pkg::*;
239
#(
240
    parameter SS_PORT = "WEST",
241
    parameter V_GLOBAL = 1,
242
    parameter P=5
243
    )
244
    (
245
        flit_in_wr,
246
        flit_in,
247
        any_ovc_granted_in_ss_port,
248
        any_ivc_sw_request_granted,
249
        ovc_avalable_in_ss_port,
250
        ivc_request,
251
        assigned_ovc_not_full,
252
        granted_ovc_num,
253
        ivc_num_getting_sw_grant,
254
        ivc_num_getting_ovc_grant,
255
        assigned_to_ssovc,
256
        ovc_is_assigned,
257
        destport_encoded,
258
        ovc_released,
259
        ovc_allocated,
260
        decreased_credit_in_ss_ovc,
261
        single_flit_pck,
262
        ivc_reset
263
//synthesis translate_off
264
//synopsys  translate_off
265
        ,clk
266
//synopsys  translate_on
267
//synthesis translate_on
268
 
269
 
270
   );
271
 
272
 
273
    //header packet filds width
274
    localparam  SW_LOC             =V_GLOBAL/V,
275
                V_LOCAL            =V_GLOBAL%V;
276
 
277
    /* verilator lint_off WIDTH */
278
    localparam SSA_EN = ((TOPOLOGY== "MESH" || TOPOLOGY == "TORUS") && (ROUTE_TYPE == "FULL_ADAPTIVE") && (SS_PORT==2 || SS_PORT == 4) && ((1<
279
    /* verilator lint_on WIDTH */
280
 
281
 
282
 
283
    input   [Fw-1          :   0]  flit_in;
284
    input                          flit_in_wr;
285
    input                          any_ovc_granted_in_ss_port;
286
    input                          any_ivc_sw_request_granted;
287
    input                          ovc_avalable_in_ss_port;
288
    input                          ivc_request;
289
    input                          assigned_ovc_not_full;
290
    input   [DSTPw-1      :    0]  destport_encoded;//exsited packet destination port
291
    input                          assigned_to_ssovc;
292
    input                          ovc_is_assigned;
293
 
294
    output reg [V-1          :   0]  granted_ovc_num;
295
    output                        ivc_num_getting_sw_grant;
296
    output                        ivc_num_getting_ovc_grant;
297
    output                        ovc_released;
298
    output                        ovc_allocated;
299
    output                        ivc_reset;
300
    output                        decreased_credit_in_ss_ovc;
301
    output                        single_flit_pck;
302
 
303
//synthesis translate_off
304
//synopsys  translate_off
305
    input clk;
306
//synopsys  translate_on
307
//synthesis translate_on
308
 
309
 
310
 
311
 
312
/*
313
*    1) If no ivc is granted in the input port
314
*    2) The ss output port is not granted for any other input port
315
*    3) Incomming packet destionation port match with ss port
316
*    4) In non-atomic Vc reallocation check if IVC is empty
317
*    5) The requested output VC is available in ss port
318
* The predicted ports for each input potrt must be diffrent with the rest
319
*/
320
 
321
 
322
 
323
 
324
    wire    [DSTPw-1 : 0] destport_in_encoded;//incomming packet destination port
325
    wire    [V-1 : 0] vc_num_in;
326
    wire    hdr_flg;
327
    wire    tail_flg;
328
    /* verilator lint_off WIDTH */
329
    assign  single_flit_pck =
330
        (PCK_TYPE == "SINGLE_FLIT")? 1'b1 :
331
        (MIN_PCK_SIZE==1)?  hdr_flg & tail_flg : 1'b0;
332
    /* verilator lint_on WIDTH */
333
 
334
 
335
    wire   condition_1_2_valid;
336
 
337
    extract_header_flit_info #(
338
        .DATA_w(0)
339
       )
340
       extractor
341
       (
342
        .flit_in(flit_in),
343
        .flit_in_wr(flit_in_wr),
344
        .class_o(),
345
        .destport_o(destport_in_encoded),
346
        .src_e_addr_o( ),
347
        .dest_e_addr_o( ),
348
        .vc_num_o(vc_num_in),
349
        .hdr_flit_wr_o( ),
350
        .hdr_flg_o(hdr_flg),
351
        .tail_flg_o(tail_flg),
352
        .weight_o( ),
353
        .be_o( ),
354
        .data_o( )
355
   );
356
 
357
 
358
 
359
// check condition 1 & 2
360
assign condition_1_2_valid = ~(any_ovc_granted_in_ss_port  | any_ivc_sw_request_granted);
361
 
362
 
363
//check destination port is ss
364
wire ss_port_hdr_flit, ss_port_nonhdr_flit;
365
 
366
ssa_check_destport #(
367
    .TOPOLOGY(TOPOLOGY),
368
    .ROUTE_TYPE(ROUTE_TYPE),
369
    .SW_LOC(SW_LOC),
370
    .P(P),
371
    .DEBUG_EN(DEBUG_EN),
372
    .DSTPw(DSTPw),
373
    .SS_PORT(SS_PORT)
374
)
375
 check_destport
376
(
377
    .destport_encoded(destport_encoded),
378
    .destport_in_encoded(destport_in_encoded),
379
    .ss_port_hdr_flit(ss_port_hdr_flit),
380
    .ss_port_nonhdr_flit(ss_port_nonhdr_flit)
381
//synthesis translate_off
382
//synopsys  translate_off
383
    ,.clk(clk),
384
    .ivc_num_getting_sw_grant(ivc_num_getting_sw_grant),
385
    .hdr_flg(hdr_flg)
386
//synopsys  translate_on
387
//synthesis translate_on
388
 
389
);
390
 
391
 
392
// check if ss_ovc is ready
393
wire ss_ovc_ready;
394
 
395
wire assigned_ss_ovc_ready;
396
assign assigned_ss_ovc_ready= ss_port_nonhdr_flit & assigned_to_ssovc & assigned_ovc_not_full;
397
assign ss_ovc_ready = (ovc_is_assigned)?assigned_ss_ovc_ready : ovc_avalable_in_ss_port;
398
 
399
// check if ssa is permited by input port
400
 
401
wire ssa_permited_by_iport;
402
 
403
 
404
generate
405
if (SSA_EN) begin : enable
406
    assign ssa_permited_by_iport = ss_ovc_ready & (~ivc_request) & condition_1_2_valid;
407
end else begin : disabled
408
    assign ssa_permited_by_iport = 1'b0;
409
end
410
 
411
endgenerate
412
 
413
/*********************************
414
 check incomming packet conditions
415
 *****************************/
416
 wire ss_vc_wr, decrease_credit_pre,allocate_ss_ovc_pre,release_ss_ovc_pre;
417
 assign ss_vc_wr = flit_in_wr & vc_num_in[V_LOCAL];
418
 assign decrease_credit_pre= ~(hdr_flg & (~ss_port_hdr_flit));
419
 assign allocate_ss_ovc_pre= hdr_flg & ss_port_hdr_flit;
420
 assign release_ss_ovc_pre= (single_flit_pck)? decrease_credit_pre : tail_flg;
421
 
422
 
423
// generate output signals
424
assign ivc_reset =  release_ss_ovc_pre & ss_vc_wr & ssa_permited_by_iport  ;
425
assign decreased_credit_in_ss_ovc= decrease_credit_pre & ss_vc_wr & ssa_permited_by_iport;
426
assign ivc_num_getting_sw_grant= decreased_credit_in_ss_ovc;
427
assign ivc_num_getting_ovc_grant= allocate_ss_ovc_pre & ss_vc_wr & ssa_permited_by_iport;
428
assign ovc_released = ivc_reset & ~single_flit_pck;
429
assign ovc_allocated= ivc_num_getting_ovc_grant & ~single_flit_pck;
430
 
431
 
432
 always @(*)begin
433
    granted_ovc_num={V{1'b0}};
434
    granted_ovc_num[V_LOCAL]= ivc_num_getting_ovc_grant;
435
 end
436
 
437
 
438
 
439
endmodule
440
 
441
 
442
 
443
module ssa_check_destport #(
444
    parameter TOPOLOGY = "MESH",
445
    parameter ROUTE_TYPE="DETERMINISTIC",
446
    parameter SW_LOC = 0,
447
    parameter P=5,
448
    parameter DEBUG_EN = 0,
449
    parameter DSTPw = P-1,
450
    parameter SS_PORT=0
451
)(
452
    destport_encoded, //non header flit dest port
453
    destport_in_encoded, // header flit packet dest port
454
    ss_port_hdr_flit, // asserted if the header incomming flit goes to ss port
455
    ss_port_nonhdr_flit // assert if the body or tail incomming flit goes to ss port
456
//synthesis translate_off
457
//synopsys  translate_off
458
    ,clk,
459
    ivc_num_getting_sw_grant,
460
    hdr_flg
461
//synopsys  translate_on
462
//synthesis translate_on
463
);
464
 
465
//synthesis translate_off
466
//synopsys  translate_off
467
    input clk,   ivc_num_getting_sw_grant, hdr_flg;
468
//synopsys  translate_on
469
//synthesis translate_on
470
 
471
    input [DSTPw-1 : 0] destport_encoded, destport_in_encoded;
472
    output ss_port_hdr_flit, ss_port_nonhdr_flit;
473
 
474
    generate
475
    /* verilator lint_off WIDTH */
476
    if(TOPOLOGY == "FATTREE") begin : fat
477
    /* verilator lint_on WIDTH */
478
 
479
       fattree_ssa_check_destport #(
480
        .DSTPw(DSTPw),
481
        .SS_PORT(SS_PORT)
482
       )
483
       check_destport
484
       (
485
        .destport_encoded(destport_encoded),
486
        .destport_in_encoded(destport_in_encoded),
487
        .ss_port_hdr_flit(ss_port_hdr_flit),
488
        .ss_port_nonhdr_flit(ss_port_nonhdr_flit)
489
       );
490
     /* verilator lint_off WIDTH */
491
    end else if (TOPOLOGY == "MESH" || TOPOLOGY == "TORUS" || TOPOLOGY == "FMESH") begin : mesh
492
    /* verilator lint_on WIDTH */
493
 
494
        mesh_torus_ssa_check_destport #(
495
            .ROUTE_TYPE(ROUTE_TYPE),
496
            .SW_LOC(SW_LOC),
497
            .P(P),
498
            .DEBUG_EN(DEBUG_EN),
499
            .DSTPw(DSTPw),
500
            .SS_PORT(SS_PORT)
501
        )
502
        destport_check
503
        (
504
            .destport_encoded(destport_encoded),
505
            .destport_in_encoded(destport_in_encoded),
506
            .ss_port_hdr_flit(ss_port_hdr_flit),
507
            .ss_port_nonhdr_flit(ss_port_nonhdr_flit)
508
            //synthesis translate_off
509
            //synopsys  translate_off
510
            ,.clk(clk),
511
            .ivc_num_getting_sw_grant(ivc_num_getting_sw_grant),
512
            .hdr_flg(hdr_flg)
513
            //synopsys  translate_on
514
            //synthesis translate_on
515
 
516
        );
517
        end else begin : line
518
            line_ring_ssa_check_destport #(
519
               .ROUTE_TYPE(ROUTE_TYPE),
520
                .SW_LOC(SW_LOC),
521
                .P(P),
522
                .DEBUG_EN(DEBUG_EN),
523
                .DSTPw(DSTPw),
524
                .SS_PORT(SS_PORT)
525
            )
526
            destport_check
527
            (
528
                .destport_encoded(destport_encoded),
529
                .destport_in_encoded(destport_in_encoded),
530
                .ss_port_hdr_flit(ss_port_hdr_flit),
531
                .ss_port_nonhdr_flit(ss_port_nonhdr_flit)
532
            );
533
 
534
     end
535
    endgenerate
536
 
537
 
538
endmodule
539
 
540
 
541
/**************************
542
            add_ss_port
543
If no output is granted replace the output port with ss one
544
**************************/
545
 
546
 
547
module add_ss_port
548
        import pronoc_pkg::*;
549
#(
550
    parameter SW_LOC=1,
551
    parameter P=5
552
)(
553
    destport_in,
554
    destport_out
555
);
556
 
557
        localparam SS_PORT = strieght_port(P,SW_LOC);
558
        localparam DISABLED = P;
559
    localparam P_1     =   ( SELF_LOOP_EN=="NO")?  P-1 : P;
560
 
561
    input  [P_1-1  :   0] destport_in;
562
    output [P_1-1  :   0] destport_out;
563
 
564
    generate
565
    if(SS_PORT == DISABLED) begin :no_ss
566
        assign destport_out = destport_in;
567
    end else begin : ss
568
        reg [P_1-1  :   0] destport_temp;
569
        /* verilator lint_off WIDTH */
570
        if( SELF_LOOP_EN=="YES") begin : slp
571
        /* verilator lint_on WIDTH */
572
                always @(*)begin
573
                                destport_temp=destport_in;
574
                                if(destport_in=={P_1{1'b0}}) destport_temp[SS_PORT]= 1'b1;
575
                end
576
                assign destport_out = destport_temp;
577
        end else begin : nslp
578
                localparam SS_PORT_CODE = (SW_LOC>SS_PORT) ? SS_PORT : SS_PORT-1;
579
                always @(*)begin
580
                        destport_temp=destport_in;
581
                        if(destport_in=={P_1{1'b0}}) begin
582
                                destport_temp[SS_PORT_CODE]= 1'b1;
583
                        end
584
                end
585
                assign destport_out = destport_temp;
586
        end
587
    end //ss
588
    endgenerate
589
 
590
endmodule
591
 

powered by: WebSVN 2.1.0

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