Line Coverage for Module :
tlul_err
| Line No. | Total | Covered | Percent |
TOTAL | | 26 | 26 | 100.00 |
CONT_ASSIGN | 26 | 1 | 1 | 100.00 |
CONT_ASSIGN | 27 | 1 | 1 | 100.00 |
CONT_ASSIGN | 28 | 1 | 1 | 100.00 |
CONT_ASSIGN | 32 | 1 | 1 | 100.00 |
CONT_ASSIGN | 36 | 1 | 1 | 100.00 |
CONT_ASSIGN | 39 | 1 | 1 | 100.00 |
CONT_ASSIGN | 42 | 1 | 1 | 100.00 |
CONT_ASSIGN | 54 | 1 | 1 | 100.00 |
ALWAYS | 57 | 17 | 17 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
25 logic op_full, op_partial, op_get;
26 1/1 assign op_full = (tl_i.a_opcode == PutFullData);
Tests: T1 T2 T3
27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData);
Tests: T1 T2 T3
28 1/1 assign op_get = (tl_i.a_opcode == Get);
Tests: T1 T2 T3
29
30 // An instruction type transaction cannot be write
31 logic instr_wr_err;
32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) &
Tests: T1 T2 T3
33 (op_full | op_partial);
34
35 logic instr_type_err;
36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type);
Tests: T1 T2 T3
37
38 // Anything that doesn't fall into the permitted category, it raises an error
39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err;
Tests: T1 T2 T3
40
41 // opcode check
42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData)
Tests: T1 T2 T3
43 | (tl_i.a_opcode == PutPartialData)
44 | (tl_i.a_opcode == Get);
45
46 // a channel configuration check
47 logic addr_sz_chk; // address and size alignment check
48 logic mask_chk; // inactive lane a_mask check
49 logic fulldata_chk; // PutFullData should have size match to mask
50
51 localparam bit [MW-1:0] MaskOne = 1;
52 logic [MW-1:0] mask;
53
54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0];
Tests: T1 T2 T3
55
56 always_comb begin
57 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
58 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData
Tests: T1 T2 T3
60
61 1/1 if (tl_i.a_valid) begin
Tests: T1 T2 T3
62 1/1 unique case (tl_i.a_size)
Tests: T1 T2 T3
63 'h0: begin // 1 Byte
64 1/1 addr_sz_chk = 1'b1;
Tests: T1 T2 T3
65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask);
Tests: T1 T2 T3
66 1/1 fulldata_chk = |(tl_i.a_mask & mask);
Tests: T1 T2 T3
67 end
68
69 'h1: begin // 2 Byte
70 1/1 addr_sz_chk = ~tl_i.a_address[0];
Tests: T1 T2 T3
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 1/1 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
Tests: T1 T2 T3
73 : ~|(tl_i.a_mask & 4'b1100);
74 1/1 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
Tests: T1 T2 T3
75 end
76
77 'h2: begin // 4 Byte
78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
Tests: T1 T2 T3
79 1/1 mask_chk = 1'b1;
Tests: T1 T2 T3
80 1/1 fulldata_chk = &tl_i.a_mask[3:0];
Tests: T1 T2 T3
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
91 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
92 1/1 fulldata_chk = 1'b0;
Tests: T1 T2 T3
93 end
94 end
95
96 1/1 assign a_config_allowed = addr_sz_chk
Tests: T1 T2 T3
Cond Coverage for Module :
tlul_err
| Total | Covered | Percent |
Conditions | 35 | 35 | 100.00 |
Logical | 35 | 35 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 26
EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 27
EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 28
EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 39
EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
--------------------1-------------------- ------2----- -------3------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Covered | T13,T51,T52 |
0 | 1 | 0 | Covered | T115,T71,T118 |
1 | 0 | 0 | Covered | T1,T2,T3 |
LINE 39
SUB-EXPRESSION (opcode_allowed & a_config_allowed)
-------1------ --------2-------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T115,T71,T118 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 42
EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
---------------1-------------- ----------------2---------------- -----------3----------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T115,T71,T118 |
0 | 0 | 1 | Covered | T1,T2,T3 |
0 | 1 | 0 | Covered | T1,T2,T3 |
1 | 0 | 0 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 72
EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
--------1--------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T13,T17 |
LINE 74
EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
--------1--------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T13,T17 |
LINE 96
EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
-----1----- ----2--- ------------------3-----------------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T115,T71 |
1 | 0 | 1 | Covered | T115,T71,T118 |
1 | 1 | 0 | Covered | T115,T71,T118 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 96
SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
---1-- -----2---- ------3-----
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Covered | T1,T2,T3 |
0 | 1 | 0 | Covered | T1,T2,T3 |
1 | 0 | 0 | Covered | T1,T2,T3 |
Branch Coverage for Module :
tlul_err
| Line No. | Total | Covered | Percent |
Branches |
|
8 |
8 |
100.00 |
IF |
61 |
8 |
8 |
100.00 |
61 if (tl_i.a_valid) begin
-1-
62 unique case (tl_i.a_size)
-2-
63 'h0: begin // 1 Byte
64 addr_sz_chk = 1'b1;
==>
65 mask_chk = ~|(tl_i.a_mask & ~mask);
66 fulldata_chk = |(tl_i.a_mask & mask);
67 end
68
69 'h1: begin // 2 Byte
70 addr_sz_chk = ~tl_i.a_address[0];
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
-3-
==>
==>
73 : ~|(tl_i.a_mask & 4'b1100);
74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
-4-
==>
==>
75 end
76
77 'h2: begin // 4 Byte
78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
==>
79 mask_chk = 1'b1;
80 fulldata_chk = &tl_i.a_mask[3:0];
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
==>
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 addr_sz_chk = 1'b0;
==>
Branches:
-1- | -2- | -3- | -4- | Status | Tests |
1 |
'h0 |
- |
- |
Covered |
T1,T2,T3 |
1 |
'h1 |
1 |
- |
Covered |
T2,T13,T17 |
1 |
'h1 |
0 |
- |
Covered |
T1,T2,T3 |
1 |
'h1 |
- |
1 |
Covered |
T2,T13,T17 |
1 |
'h1 |
- |
0 |
Covered |
T1,T2,T3 |
1 |
'h00000002 |
- |
- |
Covered |
T1,T2,T3 |
1 |
default |
- |
- |
Covered |
T9,T10,T115 |
0 |
- |
- |
- |
Covered |
T1,T2,T3 |
Assert Coverage for Module :
tlul_err
Assertion Details
dataWidthOnly32_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
5720 |
5720 |
0 |
0 |
T1 |
5 |
5 |
0 |
0 |
T2 |
5 |
5 |
0 |
0 |
T3 |
5 |
5 |
0 |
0 |
T4 |
5 |
5 |
0 |
0 |
T7 |
5 |
5 |
0 |
0 |
T8 |
5 |
5 |
0 |
0 |
T11 |
5 |
5 |
0 |
0 |
T12 |
5 |
5 |
0 |
0 |
T13 |
5 |
5 |
0 |
0 |
T17 |
5 |
5 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_to_rd_fifo.u_err
| Line No. | Total | Covered | Percent |
TOTAL | | 26 | 20 | 76.92 |
CONT_ASSIGN | 26 | 1 | 1 | 100.00 |
CONT_ASSIGN | 27 | 1 | 1 | 100.00 |
CONT_ASSIGN | 28 | 1 | 1 | 100.00 |
CONT_ASSIGN | 32 | 1 | 1 | 100.00 |
CONT_ASSIGN | 36 | 1 | 1 | 100.00 |
CONT_ASSIGN | 39 | 1 | 1 | 100.00 |
CONT_ASSIGN | 42 | 1 | 1 | 100.00 |
CONT_ASSIGN | 54 | 1 | 1 | 100.00 |
ALWAYS | 57 | 17 | 11 | 64.71 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
25 logic op_full, op_partial, op_get;
26 1/1 assign op_full = (tl_i.a_opcode == PutFullData);
Tests: T1 T2 T3
27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData);
Tests: T1 T2 T3
28 1/1 assign op_get = (tl_i.a_opcode == Get);
Tests: T1 T2 T3
29
30 // An instruction type transaction cannot be write
31 logic instr_wr_err;
32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) &
Tests: T1 T2 T3
33 (op_full | op_partial);
34
35 logic instr_type_err;
36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type);
Tests: T1 T2 T3
37
38 // Anything that doesn't fall into the permitted category, it raises an error
39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err;
Tests: T1 T2 T3
40
41 // opcode check
42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData)
Tests: T1 T2 T3
43 | (tl_i.a_opcode == PutPartialData)
44 | (tl_i.a_opcode == Get);
45
46 // a channel configuration check
47 logic addr_sz_chk; // address and size alignment check
48 logic mask_chk; // inactive lane a_mask check
49 logic fulldata_chk; // PutFullData should have size match to mask
50
51 localparam bit [MW-1:0] MaskOne = 1;
52 logic [MW-1:0] mask;
53
54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0];
Tests: T1 T2 T3
55
56 always_comb begin
57 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
58 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData
Tests: T1 T2 T3
60
61 1/1 if (tl_i.a_valid) begin
Tests: T1 T2 T3
62 1/1 unique case (tl_i.a_size)
Tests: T1 T7 T12
63 'h0: begin // 1 Byte
64 0/1 ==> addr_sz_chk = 1'b1;
65 0/1 ==> mask_chk = ~|(tl_i.a_mask & ~mask);
66 0/1 ==> fulldata_chk = |(tl_i.a_mask & mask);
67 end
68
69 'h1: begin // 2 Byte
70 0/1 ==> addr_sz_chk = ~tl_i.a_address[0];
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 0/1 ==> mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
73 : ~|(tl_i.a_mask & 4'b1100);
74 0/1 ==> fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
75 end
76
77 'h2: begin // 4 Byte
78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
Tests: T1 T7 T12
79 1/1 mask_chk = 1'b1;
Tests: T1 T7 T12
80 1/1 fulldata_chk = &tl_i.a_mask[3:0];
Tests: T1 T7 T12
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
91 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
92 1/1 fulldata_chk = 1'b0;
Tests: T1 T2 T3
93 end
94 end
95
96 1/1 assign a_config_allowed = addr_sz_chk
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_to_rd_fifo.u_err
| Total | Covered | Percent |
Conditions | 35 | 23 | 65.71 |
Logical | 35 | 23 | 65.71 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 26
EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 27
EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 28
EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 39
EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
--------------------1-------------------- ------2----- -------3------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T7,T12 |
0 | 0 | 1 | Not Covered | |
0 | 1 | 0 | Not Covered | |
1 | 0 | 0 | Covered | T1,T2,T3 |
LINE 39
SUB-EXPRESSION (opcode_allowed & a_config_allowed)
-------1------ --------2-------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T7,T12 |
LINE 42
EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
---------------1-------------- ----------------2---------------- -----------3----------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Not Covered | |
0 | 0 | 1 | Covered | T1,T2,T3 |
0 | 1 | 0 | Covered | T1,T2,T3 |
1 | 0 | 0 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 72
EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
--------1--------
-1- | Status | Tests |
0 | Not Covered | |
1 | Not Covered | |
LINE 74
EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
--------1--------
-1- | Status | Tests |
0 | Not Covered | |
1 | Not Covered | |
LINE 96
EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
-----1----- ----2--- ------------------3-----------------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Not Covered | |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T7,T12 |
LINE 96
SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
---1-- -----2---- ------3-----
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Not Covered | |
0 | 1 | 0 | Covered | T1,T2,T3 |
1 | 0 | 0 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_to_rd_fifo.u_err
| Line No. | Total | Covered | Percent |
Branches |
|
8 |
2 |
25.00 |
IF |
61 |
8 |
2 |
25.00 |
61 if (tl_i.a_valid) begin
-1-
62 unique case (tl_i.a_size)
-2-
63 'h0: begin // 1 Byte
64 addr_sz_chk = 1'b1;
==>
65 mask_chk = ~|(tl_i.a_mask & ~mask);
66 fulldata_chk = |(tl_i.a_mask & mask);
67 end
68
69 'h1: begin // 2 Byte
70 addr_sz_chk = ~tl_i.a_address[0];
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
-3-
==>
==>
73 : ~|(tl_i.a_mask & 4'b1100);
74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
-4-
==>
==>
75 end
76
77 'h2: begin // 4 Byte
78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
==>
79 mask_chk = 1'b1;
80 fulldata_chk = &tl_i.a_mask[3:0];
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
==>
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 addr_sz_chk = 1'b0;
==>
Branches:
-1- | -2- | -3- | -4- | Status | Tests |
1 |
'h0 |
- |
- |
Not Covered |
|
1 |
'h1 |
1 |
- |
Not Covered |
|
1 |
'h1 |
0 |
- |
Not Covered |
|
1 |
'h1 |
- |
1 |
Not Covered |
|
1 |
'h1 |
- |
0 |
Not Covered |
|
1 |
'h00000002 |
- |
- |
Covered |
T1,T7,T12 |
1 |
default |
- |
- |
Not Covered |
|
0 |
- |
- |
- |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_to_rd_fifo.u_err
Assertion Details
dataWidthOnly32_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1058 |
1058 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_tl_adapter_eflash.u_err
| Line No. | Total | Covered | Percent |
TOTAL | | 26 | 26 | 100.00 |
CONT_ASSIGN | 26 | 1 | 1 | 100.00 |
CONT_ASSIGN | 27 | 1 | 1 | 100.00 |
CONT_ASSIGN | 28 | 1 | 1 | 100.00 |
CONT_ASSIGN | 32 | 1 | 1 | 100.00 |
CONT_ASSIGN | 36 | 1 | 1 | 100.00 |
CONT_ASSIGN | 39 | 1 | 1 | 100.00 |
CONT_ASSIGN | 42 | 1 | 1 | 100.00 |
CONT_ASSIGN | 54 | 1 | 1 | 100.00 |
ALWAYS | 57 | 17 | 17 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
25 logic op_full, op_partial, op_get;
26 1/1 assign op_full = (tl_i.a_opcode == PutFullData);
Tests: T1 T2 T3
27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData);
Tests: T1 T2 T3
28 1/1 assign op_get = (tl_i.a_opcode == Get);
Tests: T1 T2 T3
29
30 // An instruction type transaction cannot be write
31 logic instr_wr_err;
32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) &
Tests: T1 T2 T3
33 (op_full | op_partial);
34
35 logic instr_type_err;
36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type);
Tests: T1 T2 T3
37
38 // Anything that doesn't fall into the permitted category, it raises an error
39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err;
Tests: T1 T2 T3
40
41 // opcode check
42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData)
Tests: T1 T2 T3
43 | (tl_i.a_opcode == PutPartialData)
44 | (tl_i.a_opcode == Get);
45
46 // a channel configuration check
47 logic addr_sz_chk; // address and size alignment check
48 logic mask_chk; // inactive lane a_mask check
49 logic fulldata_chk; // PutFullData should have size match to mask
50
51 localparam bit [MW-1:0] MaskOne = 1;
52 logic [MW-1:0] mask;
53
54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0];
Tests: T1 T2 T3
55
56 always_comb begin
57 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
58 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData
Tests: T1 T2 T3
60
61 1/1 if (tl_i.a_valid) begin
Tests: T1 T2 T3
62 1/1 unique case (tl_i.a_size)
Tests: T3 T7 T13
63 'h0: begin // 1 Byte
64 1/1 addr_sz_chk = 1'b1;
Tests: T9 T10
65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask);
Tests: T9 T10
66 1/1 fulldata_chk = |(tl_i.a_mask & mask);
Tests: T9 T10
67 end
68
69 'h1: begin // 2 Byte
70 1/1 addr_sz_chk = ~tl_i.a_address[0];
Tests: T9 T10
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 1/1 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
Tests: T9 T10
73 : ~|(tl_i.a_mask & 4'b1100);
74 1/1 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
Tests: T9 T10
75 end
76
77 'h2: begin // 4 Byte
78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
Tests: T3 T7 T13
79 1/1 mask_chk = 1'b1;
Tests: T3 T7 T13
80 1/1 fulldata_chk = &tl_i.a_mask[3:0];
Tests: T3 T7 T13
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
91 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
92 1/1 fulldata_chk = 1'b0;
Tests: T1 T2 T3
93 end
94 end
95
96 1/1 assign a_config_allowed = addr_sz_chk
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_tl_adapter_eflash.u_err
| Total | Covered | Percent |
Conditions | 35 | 25 | 71.43 |
Logical | 35 | 25 | 71.43 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 26
EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 27
EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T13,T8,T24 |
LINE 28
EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T3,T7,T11 |
LINE 39
EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
--------------------1-------------------- ------2----- -------3------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T3,T13,T9 |
0 | 0 | 1 | Covered | T13,T51,T52 |
0 | 1 | 0 | Not Covered | |
1 | 0 | 0 | Covered | T7,T11,T13 |
LINE 39
SUB-EXPRESSION (opcode_allowed & a_config_allowed)
-------1------ --------2-------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T3,T13,T9 |
LINE 42
EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
---------------1-------------- ----------------2---------------- -----------3----------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Not Covered | |
0 | 0 | 1 | Covered | T3,T7,T11 |
0 | 1 | 0 | Covered | T13,T8,T24 |
1 | 0 | 0 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T13,T8,T24 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T3,T7,T11 |
LINE 72
EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
--------1--------
-1- | Status | Tests |
0 | Not Covered | |
1 | Not Covered | |
LINE 74
EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
--------1--------
-1- | Status | Tests |
0 | Not Covered | |
1 | Not Covered | |
LINE 96
EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
-----1----- ----2--- ------------------3-----------------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7 |
1 | 0 | 1 | Not Covered | |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T3,T13,T9 |
LINE 96
SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
---1-- -----2---- ------3-----
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Not Covered | |
0 | 1 | 0 | Covered | T13,T8,T24 |
1 | 0 | 0 | Covered | T7,T11,T13 |
Branch Coverage for Instance : tb.dut.u_tl_adapter_eflash.u_err
| Line No. | Total | Covered | Percent |
Branches |
|
8 |
4 |
50.00 |
IF |
61 |
8 |
4 |
50.00 |
61 if (tl_i.a_valid) begin
-1-
62 unique case (tl_i.a_size)
-2-
63 'h0: begin // 1 Byte
64 addr_sz_chk = 1'b1;
==>
65 mask_chk = ~|(tl_i.a_mask & ~mask);
66 fulldata_chk = |(tl_i.a_mask & mask);
67 end
68
69 'h1: begin // 2 Byte
70 addr_sz_chk = ~tl_i.a_address[0];
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
-3-
==>
==>
73 : ~|(tl_i.a_mask & 4'b1100);
74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
-4-
==>
==>
75 end
76
77 'h2: begin // 4 Byte
78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
==>
79 mask_chk = 1'b1;
80 fulldata_chk = &tl_i.a_mask[3:0];
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
==>
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 addr_sz_chk = 1'b0;
==>
Branches:
-1- | -2- | -3- | -4- | Status | Tests |
1 |
'h0 |
- |
- |
Covered |
T9,T10 |
1 |
'h1 |
1 |
- |
Not Covered |
|
1 |
'h1 |
0 |
- |
Not Covered |
|
1 |
'h1 |
- |
1 |
Not Covered |
|
1 |
'h1 |
- |
0 |
Not Covered |
|
1 |
'h00000002 |
- |
- |
Covered |
T3,T7,T13 |
1 |
default |
- |
- |
Covered |
T9,T10 |
0 |
- |
- |
- |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_tl_adapter_eflash.u_err
Assertion Details
dataWidthOnly32_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1058 |
1058 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_to_prog_fifo.u_err
| Line No. | Total | Covered | Percent |
TOTAL | | 26 | 26 | 100.00 |
CONT_ASSIGN | 26 | 1 | 1 | 100.00 |
CONT_ASSIGN | 27 | 1 | 1 | 100.00 |
CONT_ASSIGN | 28 | 1 | 1 | 100.00 |
CONT_ASSIGN | 32 | 1 | 1 | 100.00 |
CONT_ASSIGN | 36 | 1 | 1 | 100.00 |
CONT_ASSIGN | 39 | 1 | 1 | 100.00 |
CONT_ASSIGN | 42 | 1 | 1 | 100.00 |
CONT_ASSIGN | 54 | 1 | 1 | 100.00 |
ALWAYS | 57 | 17 | 17 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
25 logic op_full, op_partial, op_get;
26 1/1 assign op_full = (tl_i.a_opcode == PutFullData);
Tests: T1 T2 T3
27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData);
Tests: T1 T2 T3
28 1/1 assign op_get = (tl_i.a_opcode == Get);
Tests: T1 T2 T3
29
30 // An instruction type transaction cannot be write
31 logic instr_wr_err;
32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) &
Tests: T1 T2 T3
33 (op_full | op_partial);
34
35 logic instr_type_err;
36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type);
Tests: T1 T2 T3
37
38 // Anything that doesn't fall into the permitted category, it raises an error
39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err;
Tests: T1 T2 T3
40
41 // opcode check
42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData)
Tests: T1 T2 T3
43 | (tl_i.a_opcode == PutPartialData)
44 | (tl_i.a_opcode == Get);
45
46 // a channel configuration check
47 logic addr_sz_chk; // address and size alignment check
48 logic mask_chk; // inactive lane a_mask check
49 logic fulldata_chk; // PutFullData should have size match to mask
50
51 localparam bit [MW-1:0] MaskOne = 1;
52 logic [MW-1:0] mask;
53
54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0];
Tests: T1 T2 T3
55
56 always_comb begin
57 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
58 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData
Tests: T1 T2 T3
60
61 1/1 if (tl_i.a_valid) begin
Tests: T1 T2 T3
62 1/1 unique case (tl_i.a_size)
Tests: T2 T7 T11
63 'h0: begin // 1 Byte
64 1/1 addr_sz_chk = 1'b1;
Tests: T9 T10
65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask);
Tests: T9 T10
66 1/1 fulldata_chk = |(tl_i.a_mask & mask);
Tests: T9 T10
67 end
68
69 'h1: begin // 2 Byte
70 1/1 addr_sz_chk = ~tl_i.a_address[0];
Tests: T9 T10
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 1/1 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
Tests: T9 T10
73 : ~|(tl_i.a_mask & 4'b1100);
74 1/1 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
Tests: T9 T10
75 end
76
77 'h2: begin // 4 Byte
78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
Tests: T2 T7 T11
79 1/1 mask_chk = 1'b1;
Tests: T2 T7 T11
80 1/1 fulldata_chk = &tl_i.a_mask[3:0];
Tests: T2 T7 T11
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
91 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
92 1/1 fulldata_chk = 1'b0;
Tests: T1 T2 T3
93 end
94 end
95
96 1/1 assign a_config_allowed = addr_sz_chk
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_to_prog_fifo.u_err
| Total | Covered | Percent |
Conditions | 35 | 26 | 74.29 |
Logical | 35 | 26 | 74.29 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 26
EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 27
EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 28
EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 39
EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
--------------------1-------------------- ------2----- -------3------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T2,T7,T11 |
0 | 0 | 1 | Not Covered | |
0 | 1 | 0 | Not Covered | |
1 | 0 | 0 | Covered | T1,T2,T3 |
LINE 39
SUB-EXPRESSION (opcode_allowed & a_config_allowed)
-------1------ --------2-------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T7,T11 |
LINE 42
EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
---------------1-------------- ----------------2---------------- -----------3----------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Not Covered | |
0 | 0 | 1 | Covered | T1,T2,T3 |
0 | 1 | 0 | Covered | T1,T2,T3 |
1 | 0 | 0 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 72
EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
--------1--------
-1- | Status | Tests |
0 | Covered | T9 |
1 | Not Covered | |
LINE 74
EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
--------1--------
-1- | Status | Tests |
0 | Covered | T9 |
1 | Not Covered | |
LINE 96
EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
-----1----- ----2--- ------------------3-----------------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Not Covered | |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T2,T7,T11 |
LINE 96
SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
---1-- -----2---- ------3-----
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Covered | T2,T7,T11 |
0 | 1 | 0 | Covered | T1,T2,T3 |
1 | 0 | 0 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_to_prog_fifo.u_err
| Line No. | Total | Covered | Percent |
Branches |
|
8 |
6 |
75.00 |
IF |
61 |
8 |
6 |
75.00 |
61 if (tl_i.a_valid) begin
-1-
62 unique case (tl_i.a_size)
-2-
63 'h0: begin // 1 Byte
64 addr_sz_chk = 1'b1;
==>
65 mask_chk = ~|(tl_i.a_mask & ~mask);
66 fulldata_chk = |(tl_i.a_mask & mask);
67 end
68
69 'h1: begin // 2 Byte
70 addr_sz_chk = ~tl_i.a_address[0];
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
-3-
==>
==>
73 : ~|(tl_i.a_mask & 4'b1100);
74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
-4-
==>
==>
75 end
76
77 'h2: begin // 4 Byte
78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
==>
79 mask_chk = 1'b1;
80 fulldata_chk = &tl_i.a_mask[3:0];
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
==>
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 addr_sz_chk = 1'b0;
==>
Branches:
-1- | -2- | -3- | -4- | Status | Tests |
1 |
'h0 |
- |
- |
Covered |
T9,T10 |
1 |
'h1 |
1 |
- |
Not Covered |
|
1 |
'h1 |
0 |
- |
Covered |
T9 |
1 |
'h1 |
- |
1 |
Not Covered |
|
1 |
'h1 |
- |
0 |
Covered |
T9 |
1 |
'h00000002 |
- |
- |
Covered |
T2,T7,T11 |
1 |
default |
- |
- |
Covered |
T9,T10 |
0 |
- |
- |
- |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_to_prog_fifo.u_err
Assertion Details
dataWidthOnly32_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1058 |
1058 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg_core.u_reg_if.u_err
| Line No. | Total | Covered | Percent |
TOTAL | | 26 | 26 | 100.00 |
CONT_ASSIGN | 26 | 1 | 1 | 100.00 |
CONT_ASSIGN | 27 | 1 | 1 | 100.00 |
CONT_ASSIGN | 28 | 1 | 1 | 100.00 |
CONT_ASSIGN | 32 | 1 | 1 | 100.00 |
CONT_ASSIGN | 36 | 1 | 1 | 100.00 |
CONT_ASSIGN | 39 | 1 | 1 | 100.00 |
CONT_ASSIGN | 42 | 1 | 1 | 100.00 |
CONT_ASSIGN | 54 | 1 | 1 | 100.00 |
ALWAYS | 57 | 17 | 17 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
25 logic op_full, op_partial, op_get;
26 1/1 assign op_full = (tl_i.a_opcode == PutFullData);
Tests: T1 T2 T3
27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData);
Tests: T1 T2 T3
28 1/1 assign op_get = (tl_i.a_opcode == Get);
Tests: T1 T2 T3
29
30 // An instruction type transaction cannot be write
31 logic instr_wr_err;
32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) &
Tests: T1 T2 T3
33 (op_full | op_partial);
34
35 logic instr_type_err;
36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type);
Tests: T1 T2 T3
37
38 // Anything that doesn't fall into the permitted category, it raises an error
39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err;
Tests: T1 T2 T3
40
41 // opcode check
42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData)
Tests: T1 T2 T3
43 | (tl_i.a_opcode == PutPartialData)
44 | (tl_i.a_opcode == Get);
45
46 // a channel configuration check
47 logic addr_sz_chk; // address and size alignment check
48 logic mask_chk; // inactive lane a_mask check
49 logic fulldata_chk; // PutFullData should have size match to mask
50
51 localparam bit [MW-1:0] MaskOne = 1;
52 logic [MW-1:0] mask;
53
54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0];
Tests: T1 T2 T3
55
56 always_comb begin
57 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
58 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData
Tests: T1 T2 T3
60
61 1/1 if (tl_i.a_valid) begin
Tests: T1 T2 T3
62 1/1 unique case (tl_i.a_size)
Tests: T1 T2 T3
63 'h0: begin // 1 Byte
64 1/1 addr_sz_chk = 1'b1;
Tests: T1 T2 T3
65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask);
Tests: T1 T2 T3
66 1/1 fulldata_chk = |(tl_i.a_mask & mask);
Tests: T1 T2 T3
67 end
68
69 'h1: begin // 2 Byte
70 1/1 addr_sz_chk = ~tl_i.a_address[0];
Tests: T1 T2 T3
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 1/1 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
Tests: T1 T2 T3
73 : ~|(tl_i.a_mask & 4'b1100);
74 1/1 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
Tests: T1 T2 T3
75 end
76
77 'h2: begin // 4 Byte
78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
Tests: T1 T2 T3
79 1/1 mask_chk = 1'b1;
Tests: T1 T2 T3
80 1/1 fulldata_chk = &tl_i.a_mask[3:0];
Tests: T1 T2 T3
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 1/1 addr_sz_chk = 1'b0;
Tests: T1 T2 T3
91 1/1 mask_chk = 1'b0;
Tests: T1 T2 T3
92 1/1 fulldata_chk = 1'b0;
Tests: T1 T2 T3
93 end
94 end
95
96 1/1 assign a_config_allowed = addr_sz_chk
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg_core.u_reg_if.u_err
| Total | Covered | Percent |
Conditions | 35 | 35 | 100.00 |
Logical | 35 | 35 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 26
EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 27
EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 28
EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 39
EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
--------------------1-------------------- ------2----- -------3------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Covered | T115,T118,T226 |
0 | 1 | 0 | Covered | T115,T118,T226 |
1 | 0 | 0 | Covered | T1,T2,T3 |
LINE 39
SUB-EXPRESSION (opcode_allowed & a_config_allowed)
-------1------ --------2-------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T115,T118,T226 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 42
EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
---------------1-------------- ----------------2---------------- -----------3----------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T115,T71,T118 |
0 | 0 | 1 | Covered | T1,T2,T3 |
0 | 1 | 0 | Covered | T1,T2,T3 |
1 | 0 | 0 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 72
EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
--------1--------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T13,T17 |
LINE 74
EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
--------1--------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T13,T17 |
LINE 96
EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
-----1----- ----2--- ------------------3-----------------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T115,T118,T226 |
1 | 0 | 1 | Covered | T115,T71,T118 |
1 | 1 | 0 | Covered | T115,T71,T118 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 96
SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
---1-- -----2---- ------3-----
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Covered | T1,T2,T3 |
0 | 1 | 0 | Covered | T1,T2,T3 |
1 | 0 | 0 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg_core.u_reg_if.u_err
| Line No. | Total | Covered | Percent |
Branches |
|
8 |
8 |
100.00 |
IF |
61 |
8 |
8 |
100.00 |
61 if (tl_i.a_valid) begin
-1-
62 unique case (tl_i.a_size)
-2-
63 'h0: begin // 1 Byte
64 addr_sz_chk = 1'b1;
==>
65 mask_chk = ~|(tl_i.a_mask & ~mask);
66 fulldata_chk = |(tl_i.a_mask & mask);
67 end
68
69 'h1: begin // 2 Byte
70 addr_sz_chk = ~tl_i.a_address[0];
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
-3-
==>
==>
73 : ~|(tl_i.a_mask & 4'b1100);
74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
-4-
==>
==>
75 end
76
77 'h2: begin // 4 Byte
78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
==>
79 mask_chk = 1'b1;
80 fulldata_chk = &tl_i.a_mask[3:0];
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
==>
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 addr_sz_chk = 1'b0;
==>
Branches:
-1- | -2- | -3- | -4- | Status | Tests |
1 |
'h0 |
- |
- |
Covered |
T1,T2,T3 |
1 |
'h1 |
1 |
- |
Covered |
T2,T13,T17 |
1 |
'h1 |
0 |
- |
Covered |
T1,T2,T3 |
1 |
'h1 |
- |
1 |
Covered |
T2,T13,T17 |
1 |
'h1 |
- |
0 |
Covered |
T1,T2,T3 |
1 |
'h00000002 |
- |
- |
Covered |
T1,T2,T3 |
1 |
default |
- |
- |
Covered |
T115,T71,T118 |
0 |
- |
- |
- |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_reg_core.u_reg_if.u_err
Assertion Details
dataWidthOnly32_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1273 |
1273 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.u_reg_top.u_reg_if.u_err
| Line No. | Total | Covered | Percent |
TOTAL | | 26 | 26 | 100.00 |
CONT_ASSIGN | 26 | 1 | 1 | 100.00 |
CONT_ASSIGN | 27 | 1 | 1 | 100.00 |
CONT_ASSIGN | 28 | 1 | 1 | 100.00 |
CONT_ASSIGN | 32 | 1 | 1 | 100.00 |
CONT_ASSIGN | 36 | 1 | 1 | 100.00 |
CONT_ASSIGN | 39 | 1 | 1 | 100.00 |
CONT_ASSIGN | 42 | 1 | 1 | 100.00 |
CONT_ASSIGN | 54 | 1 | 1 | 100.00 |
ALWAYS | 57 | 17 | 17 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
25 logic op_full, op_partial, op_get;
26 1/1 assign op_full = (tl_i.a_opcode == PutFullData);
Tests: T8 T55 T24
27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData);
Tests: T8 T55 T24
28 1/1 assign op_get = (tl_i.a_opcode == Get);
Tests: T8 T55 T24
29
30 // An instruction type transaction cannot be write
31 logic instr_wr_err;
32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) &
Tests: T8 T55 T24
33 (op_full | op_partial);
34
35 logic instr_type_err;
36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type);
Tests: T8 T55 T24
37
38 // Anything that doesn't fall into the permitted category, it raises an error
39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err;
Tests: T8 T55 T24
40
41 // opcode check
42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData)
Tests: T8 T55 T24
43 | (tl_i.a_opcode == PutPartialData)
44 | (tl_i.a_opcode == Get);
45
46 // a channel configuration check
47 logic addr_sz_chk; // address and size alignment check
48 logic mask_chk; // inactive lane a_mask check
49 logic fulldata_chk; // PutFullData should have size match to mask
50
51 localparam bit [MW-1:0] MaskOne = 1;
52 logic [MW-1:0] mask;
53
54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0];
Tests: T8 T55 T24
55
56 always_comb begin
57 1/1 addr_sz_chk = 1'b0;
Tests: T8 T55 T24
58 1/1 mask_chk = 1'b0;
Tests: T8 T55 T24
59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData
Tests: T8 T55 T24
60
61 1/1 if (tl_i.a_valid) begin
Tests: T8 T55 T24
62 1/1 unique case (tl_i.a_size)
Tests: T115 T70 T71
63 'h0: begin // 1 Byte
64 1/1 addr_sz_chk = 1'b1;
Tests: T115 T70 T71
65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask);
Tests: T115 T70 T71
66 1/1 fulldata_chk = |(tl_i.a_mask & mask);
Tests: T115 T70 T71
67 end
68
69 'h1: begin // 2 Byte
70 1/1 addr_sz_chk = ~tl_i.a_address[0];
Tests: T115 T70 T71
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 1/1 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
Tests: T115 T70 T71
73 : ~|(tl_i.a_mask & 4'b1100);
74 1/1 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
Tests: T115 T70 T71
75 end
76
77 'h2: begin // 4 Byte
78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
Tests: T115 T70 T71
79 1/1 mask_chk = 1'b1;
Tests: T115 T70 T71
80 1/1 fulldata_chk = &tl_i.a_mask[3:0];
Tests: T115 T70 T71
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 1/1 addr_sz_chk = 1'b0;
Tests: T8 T55 T24
91 1/1 mask_chk = 1'b0;
Tests: T8 T55 T24
92 1/1 fulldata_chk = 1'b0;
Tests: T8 T55 T24
93 end
94 end
95
96 1/1 assign a_config_allowed = addr_sz_chk
Tests: T8 T55 T24
Cond Coverage for Instance : tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.u_reg_top.u_reg_if.u_err
| Total | Covered | Percent |
Conditions | 35 | 35 | 100.00 |
Logical | 35 | 35 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 26
EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T8,T55,T24 |
LINE 27
EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T8,T55,T24 |
LINE 28
EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T8,T55,T24 |
LINE 39
EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
--------------------1-------------------- ------2----- -------3------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T115,T70,T71 |
0 | 0 | 1 | Covered | T115,T71,T118 |
0 | 1 | 0 | Covered | T115,T71,T118 |
1 | 0 | 0 | Covered | T8,T55,T24 |
LINE 39
SUB-EXPRESSION (opcode_allowed & a_config_allowed)
-------1------ --------2-------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T115,T71,T118 |
1 | 0 | Covered | T8,T55,T24 |
1 | 1 | Covered | T115,T70,T71 |
LINE 42
EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
---------------1-------------- ----------------2---------------- -----------3----------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T115,T71,T118 |
0 | 0 | 1 | Covered | T8,T55,T24 |
0 | 1 | 0 | Covered | T8,T55,T24 |
1 | 0 | 0 | Covered | T8,T55,T24 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
---------------1--------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T8,T55,T24 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
----------------1----------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T8,T55,T24 |
LINE 42
SUB-EXPRESSION (tl_i.a_opcode == Get)
-----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T8,T55,T24 |
LINE 72
EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
--------1--------
-1- | Status | Tests |
0 | Covered | T115,T70,T71 |
1 | Covered | T115,T70,T71 |
LINE 74
EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
--------1--------
-1- | Status | Tests |
0 | Covered | T115,T70,T71 |
1 | Covered | T115,T70,T71 |
LINE 96
EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
-----1----- ----2--- ------------------3-----------------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T115,T71,T118 |
1 | 0 | 1 | Covered | T115,T71,T118 |
1 | 1 | 0 | Covered | T115,T71,T118 |
1 | 1 | 1 | Covered | T115,T70,T71 |
LINE 96
SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
---1-- -----2---- ------3-----
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T8,T55,T24 |
0 | 0 | 1 | Covered | T115,T70,T71 |
0 | 1 | 0 | Covered | T8,T55,T24 |
1 | 0 | 0 | Covered | T8,T55,T24 |
Branch Coverage for Instance : tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.u_reg_top.u_reg_if.u_err
| Line No. | Total | Covered | Percent |
Branches |
|
8 |
8 |
100.00 |
IF |
61 |
8 |
8 |
100.00 |
61 if (tl_i.a_valid) begin
-1-
62 unique case (tl_i.a_size)
-2-
63 'h0: begin // 1 Byte
64 addr_sz_chk = 1'b1;
==>
65 mask_chk = ~|(tl_i.a_mask & ~mask);
66 fulldata_chk = |(tl_i.a_mask & mask);
67 end
68
69 'h1: begin // 2 Byte
70 addr_sz_chk = ~tl_i.a_address[0];
71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0]
72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011)
-3-
==>
==>
73 : ~|(tl_i.a_mask & 4'b1100);
74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ;
-4-
==>
==>
75 end
76
77 'h2: begin // 4 Byte
78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0];
==>
79 mask_chk = 1'b1;
80 fulldata_chk = &tl_i.a_mask[3:0];
81 end
82
83 default: begin // else
84 addr_sz_chk = 1'b0;
==>
85 mask_chk = 1'b0;
86 fulldata_chk = 1'b0;
87 end
88 endcase
89 end else begin
90 addr_sz_chk = 1'b0;
==>
Branches:
-1- | -2- | -3- | -4- | Status | Tests |
1 |
'h0 |
- |
- |
Covered |
T115,T70,T71 |
1 |
'h1 |
1 |
- |
Covered |
T115,T70,T71 |
1 |
'h1 |
0 |
- |
Covered |
T115,T70,T71 |
1 |
'h1 |
- |
1 |
Covered |
T115,T70,T71 |
1 |
'h1 |
- |
0 |
Covered |
T115,T70,T71 |
1 |
'h00000002 |
- |
- |
Covered |
T115,T70,T71 |
1 |
default |
- |
- |
Covered |
T115,T71,T118 |
0 |
- |
- |
- |
Covered |
T8,T55,T24 |
Assert Coverage for Instance : tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.u_reg_top.u_reg_if.u_err
Assertion Details
dataWidthOnly32_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1273 |
1273 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |