TBG improve usability for formal fault injection
Problem to solve
Reduce amount of manual work to be done on the TBG-generated testbench.
Target audience
Further details
When running formal few parts of the testbench need to be manually removed as they are interfering with the formal fault injection.
Proposal
Move clock generation into the else
of the ifdef FRMSVA
.
-`ifdef TMR
-`ifdef NETLIST
-`ifdef FRMSVA
- `include "seu_assert.sv"
-`endif
-`endif
-`endif
[...]
-// - - - - - - - - - - - - - Actual testbench section - - - - - - - - - - - -
- initial
- begin
- AddrMap=0;
- Algorithm_Type=0;
- BC_Charge=0;
- BC_TC_map=0;
- Bx_Cnt_In=0;
- ChargeQ=0;
- Clk=0;
- MAX16_Addr=0;
- MAX4_Addr=0;
- RepeaterQ=0;
- Sum=0;
- SumNotTransmitted=0;
- XTC16_9_Sum=0;
- XTC4_7_Sum=0;
- XTC4_9_Sum=0;
- enable_buffer=0;
- err_clr=0;
- link_reset_econt_fcmd=0;
- outEncoder=0;
- reset_b=0;
- reset_config_b=0;
- wb_addr=0;
- wb_dat_in=0;
- wb_if_enable=0;
- wb_if_ro_addr=0;
- wb_if_wr_addr=0;
- wb_stb=0;
- wb_wen=0;
- #10_000
- reset_config_b=1;
-`ifdef SEE
- // enable SEE after 1ms
- #1000_000 SEEEnable=1;
- $display("Enabling SEE generation");
-`endif
- // finish simulation after 1ms
- #1000_000 $finish;
- end
-
- localparam CLK_PERIOD = 100000;
- initial
- begin
- #1000;
- forever
- begin
- Clk = !Clk;
- #(CLK_PERIOD/2);
- end
- end
+`ifdef FRMSVA
+`ifdef TMR
+`ifdef NETLIST
+ `include "seu_assert.sv"
+`endif
+`endif
+`else
+// - - - - - - - - - - - - - Actual testbench section - - - - - - - - - - - -
+ initial
+ begin
+ AddrMap=0;
+ Algorithm_Type=0;
+ BC_Charge=0;
+ BC_TC_map=0;
+ Bx_Cnt_In=0;
+ ChargeQ=0;
+ Clk=0;
+ MAX16_Addr=0;
+ MAX4_Addr=0;
+ RepeaterQ=0;
+ Sum=0;
+ SumNotTransmitted=0;
+ XTC16_9_Sum=0;
+ XTC4_7_Sum=0;
+ XTC4_9_Sum=0;
+ enable_buffer=0;
+ err_clr=0;
+ link_reset_econt_fcmd=0;
+ outEncoder=0;
+ reset_b=0;
+ reset_config_b=0;
+ wb_addr=0;
+ wb_dat_in=0;
+ wb_if_enable=0;
+ wb_if_ro_addr=0;
+ wb_if_wr_addr=0;
+ wb_stb=0;
+ wb_wen=0;
+ #10_000
+ reset_config_b=1;
+`ifdef SEE
+ // enable SEE after 1ms
+ #1000_000 SEEEnable=1;
+ $display("Enabling SEE generation");
+`endif
+ // finish simulation after 1ms
+ #1000_000 $finish;
+ end
+
+ localparam CLK_PERIOD = 100000;
+ initial
+ begin
+ #1000;
+ forever
+ begin
+ Clk = !Clk;
+ #(CLK_PERIOD/2);
+ end
+ end
+`endif
What does success look like, and how can we measure that?
Generated testbench above is implemented (or a variation of it with similar characteristics)