Line Coverage for Module :
rom_ctrl_scrambled_rom
| Line No. | Total | Covered | Percent |
TOTAL | | 4 | 3 | 75.00 |
CONT_ASSIGN | 81 | 1 | 0 | 0.00 |
CONT_ASSIGN | 82 | 0 | 0 | |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 149 | 1 | 1 | 100.00 |
CONT_ASSIGN | 153 | 1 | 1 | 100.00 |
80 logic [Aw-1:0] addr_scr_nonce;
81 0/1 ==> assign data_scr_nonce = scr_nonce[63-Aw:0];
82 unreachable assign addr_scr_nonce = scr_nonce[63-:Aw];
83
84 // Parameter Checks ==========================================================
85
86 // The depth needs to be a power of 2 to use address scrambling
87 `ASSERT_INIT(DepthPow2Check_A, (Depth & (Depth - 1)) == 0)
88 // We only support a width up to 64
89 `ASSERT_INIT(MaxWidthCheck_A, Width <= 64)
90
91 // Address scrambling ========================================================
92
93 logic [Aw-1:0] addr_scr;
94 prim_subst_perm #(
95 .DataWidth (Aw),
96 .NumRounds (2),
97 .Decrypt (0)
98 ) u_sp_addr (
99 .data_i (rom_addr_i),
100 .key_i (addr_scr_nonce),
101 .data_o (addr_scr)
102 );
103
104 // Keystream generation ======================================================
105
106 logic [63:0] keystream;
107
108 prim_prince #(
109 .DataWidth (64),
110 .KeyWidth (128),
111 .NumRoundsHalf (3),
112 .HalfwayDataReg (1'b1),
113 .HalfwayKeyReg (1'b1)
114 ) u_prince (
115 .clk_i (clk_i),
116 .rst_ni (rst_ni),
117 .valid_i (req_i),
118 .data_i ({data_scr_nonce, prince_addr_i}),
119 .key_i (scr_key),
120 .dec_i (1'b0),
121 .data_o (keystream),
122 .valid_o ()
123 );
124
125 if (Width < 64) begin : gen_unread_keystream
126 // Ignore top bits of keystream: we just use the bottom Width bits.
127 logic unused_top_keystream;
128 1/1 assign unused_top_keystream = ^keystream[63:Width];
Tests: T1 T2 T3
129 end
130
131 // The physical ROM ==========================================================
132
133 logic [Width-1:0] rdata_scr;
134
135 prim_rom_adv #(
136 .Width (Width),
137 .Depth (Depth),
138 .MemInitFile (MemInitFile)
139 ) u_rom (
140 .clk_i (clk_i),
141 .rst_ni (rst_ni),
142 .req_i (req_i),
143 .addr_i (addr_scr),
144 .rvalid_o (rvalid_o),
145 .rdata_o (rdata_scr),
146 .cfg_i (cfg_i)
147 );
148
149 1/1 assign scr_rdata_o = rdata_scr;
Tests: T1 T2 T3
150
151 // XOR rdata with keystream ==================================================
152
153 1/1 assign clr_rdata_o = rdata_scr ^ keystream[Width-1:0];
Tests: T1 T2 T3
Assert Coverage for Module :
rom_ctrl_scrambled_rom
Assertion Details
DepthPow2Check_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
307 |
307 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
MaxWidthCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
307 |
307 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.gen_rom_scramble_enabled.u_rom
| Line No. | Total | Covered | Percent |
TOTAL | | 3 | 3 | 100.00 |
CONT_ASSIGN | 81 | 0 | 0 | |
CONT_ASSIGN | 82 | 0 | 0 | |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 149 | 1 | 1 | 100.00 |
CONT_ASSIGN | 153 | 1 | 1 | 100.00 |
80 logic [Aw-1:0] addr_scr_nonce;
81 excluded assign data_scr_nonce = scr_nonce[63-Aw:0];
Exclude Annotation: Waived the continuous assignment block as RHS is a fixed wire
82 unreachable assign addr_scr_nonce = scr_nonce[63-:Aw];
83
84 // Parameter Checks ==========================================================
85
86 // The depth needs to be a power of 2 to use address scrambling
87 `ASSERT_INIT(DepthPow2Check_A, (Depth & (Depth - 1)) == 0)
88 // We only support a width up to 64
89 `ASSERT_INIT(MaxWidthCheck_A, Width <= 64)
90
91 // Address scrambling ========================================================
92
93 logic [Aw-1:0] addr_scr;
94 prim_subst_perm #(
95 .DataWidth (Aw),
96 .NumRounds (2),
97 .Decrypt (0)
98 ) u_sp_addr (
99 .data_i (rom_addr_i),
100 .key_i (addr_scr_nonce),
101 .data_o (addr_scr)
102 );
103
104 // Keystream generation ======================================================
105
106 logic [63:0] keystream;
107
108 prim_prince #(
109 .DataWidth (64),
110 .KeyWidth (128),
111 .NumRoundsHalf (3),
112 .HalfwayDataReg (1'b1),
113 .HalfwayKeyReg (1'b1)
114 ) u_prince (
115 .clk_i (clk_i),
116 .rst_ni (rst_ni),
117 .valid_i (req_i),
118 .data_i ({data_scr_nonce, prince_addr_i}),
119 .key_i (scr_key),
120 .dec_i (1'b0),
121 .data_o (keystream),
122 .valid_o ()
123 );
124
125 if (Width < 64) begin : gen_unread_keystream
126 // Ignore top bits of keystream: we just use the bottom Width bits.
127 logic unused_top_keystream;
128 1/1 assign unused_top_keystream = ^keystream[63:Width];
Tests: T1 T2 T3
129 end
130
131 // The physical ROM ==========================================================
132
133 logic [Width-1:0] rdata_scr;
134
135 prim_rom_adv #(
136 .Width (Width),
137 .Depth (Depth),
138 .MemInitFile (MemInitFile)
139 ) u_rom (
140 .clk_i (clk_i),
141 .rst_ni (rst_ni),
142 .req_i (req_i),
143 .addr_i (addr_scr),
144 .rvalid_o (rvalid_o),
145 .rdata_o (rdata_scr),
146 .cfg_i (cfg_i)
147 );
148
149 1/1 assign scr_rdata_o = rdata_scr;
Tests: T1 T2 T3
150
151 // XOR rdata with keystream ==================================================
152
153 1/1 assign clr_rdata_o = rdata_scr ^ keystream[Width-1:0];
Tests: T1 T2 T3
Assert Coverage for Instance : tb.dut.gen_rom_scramble_enabled.u_rom
Assertion Details
DepthPow2Check_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
307 |
307 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
MaxWidthCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
307 |
307 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |