Guest User

Untitled

a guest
Jan 16th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. //design example
  2. module design_module(
  3. input logic enable,
  4. input logic reset,
  5. input logic clk,
  6. output logic active);
  7.  
  8. logic [1:0] fsm_cs;//current state
  9. logic [1:0] fsm_ns;//next state
  10.  
  11. always @(posedge clk or posedge reset)
  12. begin
  13. if(reset)
  14. fsm_cs <= 2'b0;
  15. else
  16. fsm_cs <= fsm_ns;
  17. end
  18.  
  19. always_comb
  20. case(fsm_cs)
  21. 2'b00: if(enable==1'b1 && reset==1'b0)
  22. fsm_ns=2'b1;
  23. 2'b01: if(enable==1'b0 || reset==1'b1)
  24. fsm_ns=2'b0;
  25. default: fsm_ns=2'b0;
  26. endcase
  27.  
  28. assign active = (fsm_ns==2'b01) ? 1'b1:1'b0;
  29. endmodule
  30.  
  31. //assertion module
  32. module assertion_module(input logic fsm_state,input logic enable,input logic reset,input logic clk);
  33.  
  34. property fsm_check();
  35. @(posedge clk)
  36. disable iff(reset) $rose(enable)|=> (fsm_state==2'b1);
  37. endproperty
  38.  
  39. FSM_ASSERT:assert property(fsm_check) else `uvm_error("assertion_module", $sformatf("fsm assertion failed");
  40.  
  41. endmodule
  42.  
  43. //testbench top
  44. module top();
  45. logic en,reset,tester_clk,active_out;
  46.  
  47. initial
  48. begin
  49. tester_clk=1'b0;
  50. forever #10 tester_clk=~tester_clk;
  51. end
  52.  
  53. design_module mydut(.enable(en),.reset(reset),.clk(tester_clk),.active(active_out));
  54.  
  55. //binding assertion module(assertion_module) to design module(design_module)
  56. bind design_module assertion_module assert_instance(.fsm_state(fsm_cs),.enable(enable),.reset(reset),.clk(clk));
  57.  
  58. initial
  59. begin
  60. #5;
  61. reset=1'b1;
  62. #10;
  63. reset=1'b0;
  64. #10
  65. en=1'b1;
  66. #100;
  67. $finish;
  68. end
  69. endmodule
Add Comment
Please, Sign In to add comment