Advertisement
Bobita

time_management

Nov 22nd, 2023
786
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module time_manager(input clk,
  2.         input rst,
  3.         input [2:0] op,
  4.         output [15:0]time_manager);
  5.  
  6. `define IDLE 3'b000
  7. `define START 3'b001
  8. `define STOP 3'b010
  9. `define RESTART 3'b100
  10.  
  11. reg [15:0] cnt_reg, cnt_nxt;
  12. reg [2:0] state_reg, state_nxt;
  13. reg restart_flg_nxt;
  14.  
  15. always @(posedge clk or negedge rst)
  16.     begin
  17.         if(rst == 0)
  18.         begin
  19.             cnt_reg <= 0;
  20.             state_reg <= 3'b000;
  21.         end
  22.         else
  23.         begin
  24.             cnt_reg <= cnt_nxt;
  25.             state_reg <= state_nxt;
  26.         end
  27.     end
  28. /*
  29. always @*
  30. begin
  31.     cnt_nxt = cnt_reg + 1;
  32. end*/
  33.  
  34.  
  35.  
  36.  
  37. always @(cnt_reg, op, state_reg)
  38. begin
  39. state_nxt = state_reg;
  40. restart_flg_nxt = 0;
  41. case (state_reg)
  42.     `IDLE:
  43.         begin
  44.            if(op == 3'b001)
  45.             state_nxt = `START;
  46.         end
  47.     `START:
  48.         begin
  49.            cnt_nxt = cnt_reg + 1;
  50.            if(restart_flg_nxt == 1)
  51.             begin
  52.                 restart_flg_nxt=0;
  53.                 cnt_reg = 0;
  54.                 state_reg = `IDLE;
  55.             end
  56.            if(op == 3'b000)
  57.             state_nxt = `IDLE;
  58.            if(op == 3'b010)
  59.             state_nxt = `STOP;
  60.            if(op == 3'b100)
  61.             state_nxt = `RESTART;
  62.         end
  63.     `STOP:
  64.         begin
  65.            if(op == 3'b001)
  66.                 state_nxt = `START;
  67.         end
  68.     `RESTART:
  69.         begin
  70.            restart_flg_nxt = 1;
  71.            if(op == 3'b001)
  72.             state_nxt = `START;
  73.         end
  74. endcase
  75. end
  76.  
  77. assign time_manager = cnt_reg;
  78.  
  79. endmodule
  80.  
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement