injector.v 944 B

123456789101112131415161718192021222324252627282930313233
  1. module injector (
  2. input clk,
  3. input reset_n,
  4. input [2 : 0] apply,
  5. input [2 : 0] inject,
  6. input [2 : 0] mode,
  7. input [2 : 0] original,
  8. output [2 : 0] tampered
  9. );
  10. // mode = 0 simulates xor fault (inverted output);
  11. // mode = 1 simulates stuck at valueof(inject) fault
  12. reg [2 : 0] saved_mode;
  13. // inject = 0 simulates injection of 0 according to mode
  14. // inject = 1 simulates injection of 1 according to mode
  15. reg [2 : 0] saved_inject;
  16. assign tampered[0] = saved_mode[0] ? (saved_inject[0] & original[0]) : (saved_inject[0] ^ original[0]);
  17. assign tampered[1] = saved_mode[1] ? (saved_inject[1] & original[1]) : (saved_inject[1] ^ original[1]);
  18. assign tampered[2] = saved_mode[2] ? (saved_inject[2] & original[2]) : (saved_inject[2] ^ original[2]);
  19. always @(posedge clk) begin
  20. if (reset_n == 1'b0) begin
  21. saved_mode <= 0;
  22. saved_inject <= 0;
  23. end else begin
  24. saved_mode <= apply & mode;
  25. saved_inject <= apply & inject;
  26. end
  27. end
  28. endmodule