Advertisement
Guest User

Untitled

a guest
Apr 14th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module counter(
  2.  
  3.     input logic clk, resetn, start,
  4.     output logic [2:0] count
  5. );
  6.  
  7.     localparam MAX_VAL = 5;
  8.     localparam CNT_LIM = 5;//????????
  9.     logic [2:0] delay_cnt;
  10.     logic [2:0] run_cnt;
  11.  
  12.     enum logic unsigned [2:0] {ST_DELAY, ST_STOP, ST_RUN} state;
  13.  
  14.     always_ff @ (posedge clk or negedge resetn)
  15.     begin
  16.         if(!resetn)
  17.         begin
  18.             delay_cnt <= 0;
  19.             run_cnt <= 0;
  20.             count <= 0;
  21.             if(start)
  22.                 state <= ST_RUN;
  23.  
  24.             else
  25.                 state <= ST_STOP;
  26.         end
  27.  
  28.         else
  29.         begin
  30.             case(state)
  31.  
  32.             ST_RUN: begin
  33.                 if(start)//|| count != 0)
  34.                 begin
  35.                     if( (count < MAX_VAL) || (run_cnt < CNT_LIM-1) )
  36.                     begin
  37.                         count <= count + 1;
  38.                         run_cnt <= run_cnt + 1;
  39.                     end
  40.  
  41.                     else
  42.                     begin
  43.                         count <= 0;
  44.                         run_cnt <= 0;
  45.                         state <= ST_DELAY;
  46.                     end
  47.                 end
  48.  
  49.                 else
  50.                 begin
  51.                     if(count == 0)
  52.                         state <= ST_STOP;
  53.                     else
  54.                     begin
  55.                         if( (count < MAX_VAL) )// || (run_cnt < CNT_LIM) )
  56.                         begin
  57.                             count <= count + 1;
  58.                             run_cnt <= run_cnt + 1;
  59.                         end
  60.                         else
  61.                             state <= ST_STOP;
  62.                     end
  63.                 end
  64.             end
  65.  
  66.             ST_STOP: begin
  67.                 if(!start)
  68.                 begin
  69.                     run_cnt <= 0;
  70.                     count <= 0;
  71.                 end
  72.                 else
  73.                     state <= ST_RUN;
  74.             end
  75.  
  76.             ST_DELAY: begin
  77.                 if( delay_cnt < CNT_LIM)
  78.                 begin
  79.                     count <= 0;
  80.                     delay_cnt <= delay_cnt + 1;
  81.                 end
  82.                 else
  83.                 begin
  84.                     delay_cnt <= 0;
  85.                     if(start)
  86.                         state <= ST_RUN;
  87.                     else
  88.                         state <= ST_STOP;
  89.                 end
  90.             end
  91.             endcase
  92.         end
  93.     end
  94. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement