Advertisement
markkurvers

Untitled

Jun 30th, 2021
508
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 100ps
  2.  
  3. module edge_detector (
  4.     input clk,
  5.     input reset,
  6.     input update,
  7.     input [1:0] level,
  8.     output tick
  9.     );
  10.  
  11.     localparam  s0 = 2'b00,
  12.                 s2 = 2'b10,
  13.                 s1 = 2'b01;
  14.  
  15.  
  16.  
  17.     reg [1:0] cur_state;
  18.     reg [1:0] next_state;
  19.     reg prev_update;
  20.    
  21.     always @(posedge clk)
  22.     begin
  23.             cur_state <= next_state;
  24.             prev_update <= update;
  25.     end
  26.  
  27.     always @(*)
  28.     begin
  29.         if(reset) next_state = s0;
  30.         if (update && update != prev_update)
  31.         begin
  32.             case(cur_state)
  33.                 s0: next_state = s1;
  34.                 s2: next_state = (level==1)?s0:s1;
  35.                 s1: next_state = s2;
  36.                 default:next_state = s0;
  37.             endcase        
  38.         end    
  39.     end
  40.    
  41.     assign tick = (cur_state == s2);
  42. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement