Advertisement
Guest User

InterruptConverter

a guest
Sep 25th, 2013
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module InterruptConverter (/*AUTOARG*/
  2.    // Outputs
  3.    edge_irq, irq_counter,
  4.    // Inputs
  5.    clk, rst_n, level_irq
  6.    ) ;
  7.    input clk;
  8.    input rst_n;
  9.    
  10.    input            level_irq;
  11.    output reg       edge_irq;
  12.    output reg [7:0] irq_counter = 0;
  13.    
  14.    reg        [3:0] shift_register = 0;
  15.  
  16.    always @ ( posedge clk or negedge rst_n ) begin
  17.       if (!rst_n) begin
  18.         shift_register <= 0;
  19.       end  else begin
  20.           shift_register <= { shift_register[2:0], level_irq };
  21.          
  22.           if (shift_register[3] == 1 &&
  23.               shift_register[2:0] != 3'b111) begin
  24.              edge_irq <= 1;
  25.           end else begin
  26.              edge_irq <= 0;        
  27.           end
  28.       end
  29.    end
  30.  
  31.    always @ ( negedge level_irq or negedge rst_n ) begin
  32.       if (!rst_n) begin
  33.         irq_counter <= 0;
  34.       end else begin
  35.         irq_counter <= irq_counter + 1;
  36.       end
  37.    end
  38.    
  39. endmodule // InterruptConverter
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement