Advertisement
Guest User

Untitled

a guest
Nov 5th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `default_nettype none
  2.  
  3. module test (i_clk, i_wr, i_val, i_rst, o_match);
  4.  
  5. input i_clk;
  6. input i_wr;
  7. input i_val;
  8. input i_rst;
  9. output o_match;
  10.  
  11. reg r_val;
  12.  
  13. always @(posedge i_clk) begin
  14.     if (i_rst) begin
  15.         r_val <= 1'b0;
  16.     end
  17.     else if (i_wr) begin
  18.         r_val <= i_val;
  19.     end
  20. end
  21.  
  22. assign o_match = (r_val == i_val);
  23.  
  24. endmodule
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31. module test_tb();
  32.  
  33. reg clk;
  34. reg wr;
  35. reg val;
  36. reg rst;
  37. wire match1;
  38. wire match2;
  39.  
  40. initial begin
  41.     rst <= 1'b1;
  42.     wr <= 1'b1;
  43.     val <= 1'b1;
  44.     #1000 rst<= 1'b0;
  45. end
  46.  
  47. `ifdef FORMAL
  48.     reg f_last_clk;
  49.     always @($global_clock) begin
  50.         assume(clk == !f_last_clk);
  51.         f_last_clk <= clk;
  52.         clk <= (clk === 1'b0);
  53.     end
  54.  
  55.     reg f_past_valid;
  56.     initial f_past_valid = 1'b0;
  57.     always @(posedge clk) begin
  58.         f_past_valid <= 1'b1;
  59.     end
  60.  
  61.     always @(posedge clk) begin
  62.         if (!f_past_valid) begin
  63.             assume(rst);
  64.         end
  65.         if (!rst) begin
  66.             assert (match1 == match2);
  67.         end
  68.     end
  69. `else
  70.     always #100 clk <= (clk === 1'b0);
  71. `endif
  72.  
  73. test test1 (
  74.     .i_clk(clk),
  75.     .i_wr(wr),
  76.     .i_val(val),
  77.     .i_rst(rst),
  78.     .o_match(match1)
  79. );
  80.  
  81. test test2 (
  82.     .i_clk(clk),
  83.     .i_wr(wr),
  84.     .i_val(val),
  85.     .i_rst(rst),
  86.     .o_match(match2)
  87. );
  88.  
  89. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement