Line Coverage for Module : 
flash_mp_data_region_sel ( parameter Regions=9 ) 
Line Coverage for Module self-instances : 
 | Line No. | Total | Covered | Percent | 
| TOTAL |  | 16 | 16 | 100.00 | 
| CONT_ASSIGN | 28 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| ALWAYS | 35 | 0 | 0 |  | 
| ALWAYS | 35 | 3 | 3 | 100.00 | 
| ALWAYS | 49 | 4 | 4 | 100.00 | 
27                        // decode for software interface region
28         1/1            assign region_sel[0] = region_match[0];
           Tests:       T1 T2 T3 
29                        for (genvar i = 1; i < Regions; i++) begin: gen_region_priority
30         8/8              assign region_sel[i] = region_match[i] & ~|region_match[i-1:0];
           Tests:       T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
31                        end
32                      
33                        // check for region match
34                        always_comb begin
35         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_comps
           Tests:       T1 T2 T3 
36         1/1                region_end[i] = {1'b0, region_attrs_i[i].cfg.base} + region_attrs_i[i].cfg.size;
           Tests:       T1 T2 T3 
37                      
38                            // region matches if address within range and if the partition matches
39         1/1                region_match[i] = addr_i >= region_attrs_i[i].cfg.base &
           Tests:       T1 T2 T3 
40                                              {1'b0, addr_i} < region_end[i] &
41                                              phase_i == region_attrs_i[i].phase &
42                                              mubi4_test_true_strict(region_attrs_i[i].cfg.en) &
43                                              req_i;
44                          end
45                        end
46                      
47                        // select appropriate region configuration
48                        always_comb begin
49         1/1              sel_cfg_o = '0;
           Tests:       T1 T2 T3 
50         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_sel
           Tests:       T1 T2 T3 
51         1/1                if (region_sel[i]) begin
           Tests:       T1 T2 T3 
52         1/1                  sel_cfg_o = region_attrs_i[i].cfg;
           Tests:       T1 T2 T3 
53                            end
                        MISSING_ELSE
Line Coverage for Module : 
flash_mp_data_region_sel ( parameter Regions=1 ) 
Line Coverage for Module self-instances : 
 | Line No. | Total | Covered | Percent | 
| TOTAL |  | 8 | 8 | 100.00 | 
| CONT_ASSIGN | 28 | 1 | 1 | 100.00 | 
| ALWAYS | 35 | 0 | 0 |  | 
| ALWAYS | 35 | 3 | 3 | 100.00 | 
| ALWAYS | 49 | 4 | 4 | 100.00 | 
27                        // decode for software interface region
28         1/1            assign region_sel[0] = region_match[0];
           Tests:       T1 T2 T3 
29                        for (genvar i = 1; i < Regions; i++) begin: gen_region_priority
30                          assign region_sel[i] = region_match[i] & ~|region_match[i-1:0];
31                        end
32                      
33                        // check for region match
34                        always_comb begin
35         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_comps
           Tests:       T1 T2 T3 
36         1/1                region_end[i] = {1'b0, region_attrs_i[i].cfg.base} + region_attrs_i[i].cfg.size;
           Tests:       T1 T2 T3 
37                      
38                            // region matches if address within range and if the partition matches
39         1/1                region_match[i] = addr_i >= region_attrs_i[i].cfg.base &
           Tests:       T1 T2 T3 
40                                              {1'b0, addr_i} < region_end[i] &
41                                              phase_i == region_attrs_i[i].phase &
42                                              mubi4_test_true_strict(region_attrs_i[i].cfg.en) &
43                                              req_i;
44                          end
45                        end
46                      
47                        // select appropriate region configuration
48                        always_comb begin
49         1/1              sel_cfg_o = '0;
           Tests:       T1 T2 T3 
50         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_sel
           Tests:       T1 T2 T3 
51         1/1                if (region_sel[i]) begin
           Tests:       T1 T2 T3 
52         1/1                  sel_cfg_o = region_attrs_i[i].cfg;
           Tests:       T6 T105 T82 
53                            end
                        MISSING_ELSE
Cond Coverage for Module : 
flash_mp_data_region_sel
 | Total | Covered | Percent | 
| Conditions | 24 | 24 | 100.00 | 
| Logical | 24 | 24 | 100.00 | 
| Non-Logical | 0 | 0 |  | 
| Event | 0 | 0 |  | 
 LINE       30
 EXPRESSION (region_match[1] & ((~|region_match[0])))
             -------1-------   ----------2----------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T104 | 
| 1 | 1 | Covered | T16,T26,T45 | 
 LINE       30
 EXPRESSION (region_match[2] & ((~|region_match[(2 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T68 | 
| 1 | 1 | Covered | T12,T46,T66 | 
 LINE       30
 EXPRESSION (region_match[3] & ((~|region_match[(3 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T53 | 
| 1 | 1 | Covered | T46,T47,T78 | 
 LINE       30
 EXPRESSION (region_match[4] & ((~|region_match[(4 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T46 | 
| 1 | 1 | Covered | T67,T45,T46 | 
 LINE       30
 EXPRESSION (region_match[5] & ((~|region_match[(5 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T67,T26 | 
| 1 | 1 | Covered | T45,T78,T36 | 
 LINE       30
 EXPRESSION (region_match[6] & ((~|region_match[(6 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T45 | 
| 1 | 1 | Covered | T67,T12,T54 | 
 LINE       30
 EXPRESSION (region_match[7] & ((~|region_match[(7 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T47 | 
| 1 | 1 | Covered | T45,T66,T47 | 
 LINE       30
 EXPRESSION (region_match[8] & ((~|region_match[(8 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T1,T16,T67 | 
| 1 | 1 | Covered | T2,T3,T10 | 
Branch Coverage for Module : 
flash_mp_data_region_sel
 | Line No. | Total | Covered | Percent | 
| Branches | 
 | 
2 | 
2 | 
100.00 | 
| IF | 
51 | 
2 | 
2 | 
100.00 | 
51               if (region_sel[i]) begin
                 -1-  
52                 sel_cfg_o = region_attrs_i[i].cfg;
                   ==>
53               end
                 MISSING_ELSE
                 ==>
Branches:
| -1- | Status | Tests | 
| 1 | 
Covered | 
T1,T2,T3 | 
| 0 | 
Covered | 
T1,T2,T3 | 
 
Line Coverage for Instance : tb.dut.u_flash_mp.u_sw_sel
 | Line No. | Total | Covered | Percent | 
| TOTAL |  | 16 | 16 | 100.00 | 
| CONT_ASSIGN | 28 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| ALWAYS | 35 | 0 | 0 |  | 
| ALWAYS | 35 | 3 | 3 | 100.00 | 
| ALWAYS | 49 | 4 | 4 | 100.00 | 
27                        // decode for software interface region
28         1/1            assign region_sel[0] = region_match[0];
           Tests:       T1 T2 T3 
29                        for (genvar i = 1; i < Regions; i++) begin: gen_region_priority
30         8/8              assign region_sel[i] = region_match[i] & ~|region_match[i-1:0];
           Tests:       T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
31                        end
32                      
33                        // check for region match
34                        always_comb begin
35         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_comps
           Tests:       T1 T2 T3 
36         1/1                region_end[i] = {1'b0, region_attrs_i[i].cfg.base} + region_attrs_i[i].cfg.size;
           Tests:       T1 T2 T3 
37                      
38                            // region matches if address within range and if the partition matches
39         1/1                region_match[i] = addr_i >= region_attrs_i[i].cfg.base &
           Tests:       T1 T2 T3 
40                                              {1'b0, addr_i} < region_end[i] &
41                                              phase_i == region_attrs_i[i].phase &
42                                              mubi4_test_true_strict(region_attrs_i[i].cfg.en) &
43                                              req_i;
44                          end
45                        end
46                      
47                        // select appropriate region configuration
48                        always_comb begin
49         1/1              sel_cfg_o = '0;
           Tests:       T1 T2 T3 
50         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_sel
           Tests:       T1 T2 T3 
51         1/1                if (region_sel[i]) begin
           Tests:       T1 T2 T3 
52         1/1                  sel_cfg_o = region_attrs_i[i].cfg;
           Tests:       T2 T3 T10 
53                            end
                        MISSING_ELSE
Cond Coverage for Instance : tb.dut.u_flash_mp.u_sw_sel
 | Total | Covered | Percent | 
| Conditions | 24 | 24 | 100.00 | 
| Logical | 24 | 24 | 100.00 | 
| Non-Logical | 0 | 0 |  | 
| Event | 0 | 0 |  | 
 LINE       30
 EXPRESSION (region_match[1] & ((~|region_match[0])))
             -------1-------   ----------2----------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T104 | 
| 1 | 1 | Covered | T16,T26,T45 | 
 LINE       30
 EXPRESSION (region_match[2] & ((~|region_match[(2 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T68 | 
| 1 | 1 | Covered | T12,T66,T53 | 
 LINE       30
 EXPRESSION (region_match[3] & ((~|region_match[(3 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T53 | 
| 1 | 1 | Covered | T46,T47,T78 | 
 LINE       30
 EXPRESSION (region_match[4] & ((~|region_match[(4 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T104 | 
| 1 | 1 | Covered | T67,T78,T32 | 
 LINE       30
 EXPRESSION (region_match[5] & ((~|region_match[(5 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T67,T26 | 
| 1 | 1 | Covered | T78,T36,T39 | 
 LINE       30
 EXPRESSION (region_match[6] & ((~|region_match[(6 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T46 | 
| 1 | 1 | Covered | T67,T12,T54 | 
 LINE       30
 EXPRESSION (region_match[7] & ((~|region_match[(7 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T26,T47 | 
| 1 | 1 | Covered | T45,T66,T47 | 
 LINE       30
 EXPRESSION (region_match[8] & ((~|region_match[(8 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T67,T12 | 
| 1 | 1 | Covered | T2,T3,T10 | 
Branch Coverage for Instance : tb.dut.u_flash_mp.u_sw_sel
 | Line No. | Total | Covered | Percent | 
| Branches | 
 | 
2 | 
2 | 
100.00 | 
| IF | 
51 | 
2 | 
2 | 
100.00 | 
51               if (region_sel[i]) begin
                 -1-  
52                 sel_cfg_o = region_attrs_i[i].cfg;
                   ==>
53               end
                 MISSING_ELSE
                 ==>
Branches:
| -1- | Status | Tests | 
| 1 | 
Covered | 
T2,T3,T10 | 
| 0 | 
Covered | 
T1,T2,T3 | 
 
Line Coverage for Instance : tb.dut.u_flash_mp.u_hw_sel
 | Line No. | Total | Covered | Percent | 
| TOTAL |  | 8 | 8 | 100.00 | 
| CONT_ASSIGN | 28 | 1 | 1 | 100.00 | 
| ALWAYS | 35 | 0 | 0 |  | 
| ALWAYS | 35 | 3 | 3 | 100.00 | 
| ALWAYS | 49 | 4 | 4 | 100.00 | 
27                        // decode for software interface region
28         1/1            assign region_sel[0] = region_match[0];
           Tests:       T1 T2 T3 
29                        for (genvar i = 1; i < Regions; i++) begin: gen_region_priority
30                          assign region_sel[i] = region_match[i] & ~|region_match[i-1:0];
31                        end
32                      
33                        // check for region match
34                        always_comb begin
35         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_comps
           Tests:       T1 T2 T3 
36         1/1                region_end[i] = {1'b0, region_attrs_i[i].cfg.base} + region_attrs_i[i].cfg.size;
           Tests:       T1 T2 T3 
37                      
38                            // region matches if address within range and if the partition matches
39         1/1                region_match[i] = addr_i >= region_attrs_i[i].cfg.base &
           Tests:       T1 T2 T3 
40                                              {1'b0, addr_i} < region_end[i] &
41                                              phase_i == region_attrs_i[i].phase &
42                                              mubi4_test_true_strict(region_attrs_i[i].cfg.en) &
43                                              req_i;
44                          end
45                        end
46                      
47                        // select appropriate region configuration
48                        always_comb begin
49         1/1              sel_cfg_o = '0;
           Tests:       T1 T2 T3 
50         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_sel
           Tests:       T1 T2 T3 
51         1/1                if (region_sel[i]) begin
           Tests:       T1 T2 T3 
52         1/1                  sel_cfg_o = region_attrs_i[i].cfg;
           Tests:       T6 T105 T82 
53                            end
                        MISSING_ELSE
Branch Coverage for Instance : tb.dut.u_flash_mp.u_hw_sel
 | Line No. | Total | Covered | Percent | 
| Branches | 
 | 
2 | 
2 | 
100.00 | 
| IF | 
51 | 
2 | 
2 | 
100.00 | 
51               if (region_sel[i]) begin
                 -1-  
52                 sel_cfg_o = region_attrs_i[i].cfg;
                   ==>
53               end
                 MISSING_ELSE
                 ==>
Branches:
| -1- | Status | Tests | 
| 1 | 
Covered | 
T6,T105,T82 | 
| 0 | 
Covered | 
T1,T2,T3 | 
 
Line Coverage for Instance : tb.dut.u_eflash.u_region_sel
 | Line No. | Total | Covered | Percent | 
| TOTAL |  | 16 | 16 | 100.00 | 
| CONT_ASSIGN | 28 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 30 | 1 | 1 | 100.00 | 
| ALWAYS | 35 | 0 | 0 |  | 
| ALWAYS | 35 | 3 | 3 | 100.00 | 
| ALWAYS | 49 | 4 | 4 | 100.00 | 
27                        // decode for software interface region
28         1/1            assign region_sel[0] = region_match[0];
           Tests:       T1 T2 T10 
29                        for (genvar i = 1; i < Regions; i++) begin: gen_region_priority
30         8/8              assign region_sel[i] = region_match[i] & ~|region_match[i-1:0];
           Tests:       T1 T2 T10  | T1 T2 T10  | T1 T2 T10  | T1 T2 T10  | T1 T2 T10  | T1 T2 T10  | T1 T2 T10  | T1 T2 T3 
31                        end
32                      
33                        // check for region match
34                        always_comb begin
35         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_comps
           Tests:       T1 T2 T3 
36         1/1                region_end[i] = {1'b0, region_attrs_i[i].cfg.base} + region_attrs_i[i].cfg.size;
           Tests:       T1 T2 T3 
37                      
38                            // region matches if address within range and if the partition matches
39         1/1                region_match[i] = addr_i >= region_attrs_i[i].cfg.base &
           Tests:       T1 T2 T3 
40                                              {1'b0, addr_i} < region_end[i] &
41                                              phase_i == region_attrs_i[i].phase &
42                                              mubi4_test_true_strict(region_attrs_i[i].cfg.en) &
43                                              req_i;
44                          end
45                        end
46                      
47                        // select appropriate region configuration
48                        always_comb begin
49         1/1              sel_cfg_o = '0;
           Tests:       T1 T2 T3 
50         1/1              for (int i = 0; i < Regions; i++) begin: gen_region_sel
           Tests:       T1 T2 T3 
51         1/1                if (region_sel[i]) begin
           Tests:       T1 T2 T3 
52         1/1                  sel_cfg_o = region_attrs_i[i].cfg;
           Tests:       T1 T3 T11 
53                            end
                        MISSING_ELSE
Cond Coverage for Instance : tb.dut.u_eflash.u_region_sel
 | Total | Covered | Percent | 
| Conditions | 24 | 24 | 100.00 | 
| Logical | 24 | 24 | 100.00 | 
| Non-Logical | 0 | 0 |  | 
| Event | 0 | 0 |  | 
 LINE       30
 EXPRESSION (region_match[1] & ((~|region_match[0])))
             -------1-------   ----------2----------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T104,T222 | 
| 1 | 1 | Covered | T47,T54,T39 | 
 LINE       30
 EXPRESSION (region_match[2] & ((~|region_match[(2 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T237,T208 | 
| 1 | 1 | Covered | T46,T47,T33 | 
 LINE       30
 EXPRESSION (region_match[3] & ((~|region_match[(3 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T222,T257,T158 | 
| 1 | 1 | Covered | T33,T104,T258 | 
 LINE       30
 EXPRESSION (region_match[4] & ((~|region_match[(4 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T46,T145 | 
| 1 | 1 | Covered | T45,T46,T53 | 
 LINE       30
 EXPRESSION (region_match[5] & ((~|region_match[(5 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T222,T259 | 
| 1 | 1 | Covered | T45,T36,T35 | 
 LINE       30
 EXPRESSION (region_match[6] & ((~|region_match[(6 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T45,T34,T39 | 
| 1 | 1 | Covered | T39,T104,T260 | 
 LINE       30
 EXPRESSION (region_match[7] & ((~|region_match[(7 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T16,T53,T222 | 
| 1 | 1 | Covered | T53,T55,T100 | 
 LINE       30
 EXPRESSION (region_match[8] & ((~|region_match[(8 - 1):0])))
             -------1-------   --------------2--------------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Covered | T1,T16,T45 | 
| 1 | 1 | Covered | T3,T11,T16 | 
Branch Coverage for Instance : tb.dut.u_eflash.u_region_sel
 | Line No. | Total | Covered | Percent | 
| Branches | 
 | 
2 | 
2 | 
100.00 | 
| IF | 
51 | 
2 | 
2 | 
100.00 | 
51               if (region_sel[i]) begin
                 -1-  
52                 sel_cfg_o = region_attrs_i[i].cfg;
                   ==>
53               end
                 MISSING_ELSE
                 ==>
Branches:
| -1- | Status | Tests | 
| 1 | 
Covered | 
T1,T3,T11 | 
| 0 | 
Covered | 
T1,T2,T3 |