Advertisement
Guest User

Untitled

a guest
Oct 17th, 2023
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module SimpleFIFO #(
  2.   parameter SIZE = 32,         // Size of each element in bits
  3.   parameter DEPTH = 180,       // Depth of the FIFO
  4.   parameter MT = 1'b0,   // Initial value to fill the FIFO with
  5.   parameter DIVISOR = 28'd30000000
  6. )(
  7.   input clk,             // Clock input
  8.   input wire r_input,           // r_input input
  9.   input wire event_trig,  // Write enable input
  10.   output reg led,
  11.   output reg led2,
  12.   output reg led3,
  13.   output reg led4,
  14.   output reg rgb1g,
  15.   output reg trig =0           // counter trigger
  16. );
  17.   reg [63:0] count = 0;       // Declare count as a register
  18.   reg [0:0] fifo[DEPTH-1:0];
  19.   reg [27:0] head;                 // Head pointer
  20.   reg [27:0] time_counter=28'd0;
  21.   integer i;
  22.   reg eventflag;
  23.   reg resetflag;
  24.   reg resetflag2;
  25. //   Initialize FIFO pointers and fill all cells with MT
  26. initial begin
  27.     head = 28'd0;
  28.     for (i = 0; i < DEPTH; i = i + 1) begin
  29.       fifo[i] = MT;
  30.     end
  31.     time_counter=28'd0;
  32.     count=0;
  33.     trig=0;
  34. end
  35.  
  36. always @(posedge clk)
  37. begin
  38.     eventflag <= event_trig;
  39.     if (event_trig == 1 && eventflag == 0) begin
  40.         fifo[head] <= 1'b1;
  41.         led<=~led;
  42.     end else begin
  43.         if (time_counter % 125000 == 41667) begin
  44.             count = 0;
  45.         end else if (time_counter % 125000 == 0) begin
  46.             for (i = 0; i < DEPTH; i = i + 1) begin
  47.               if (fifo[i] != MT) begin
  48.                 count = count + 1;
  49.                 if (count>=3)begin trig<=1;end
  50.               end
  51.             end
  52.         end else if (time_counter % 125000 == 83333) begin
  53.             if (resetflag2 == 1) begin
  54.                 for (i = 0; i < DEPTH; i = i + 1) begin
  55.                     fifo[i] = MT;
  56.                 end
  57.                 resetflag2 <=0;
  58.             end
  59.         end
  60.         resetflag <= r_input;
  61.         if (r_input == 1 && resetflag == 0    ) begin
  62.             count=0;
  63.             trig=0;
  64.             resetflag2 <= 1;
  65.         end
  66.         if (head>DEPTH) begin
  67.             led4<=~led4;
  68.             head <= 32'b0;
  69.         end else begin
  70.                  time_counter <= time_counter + 28'd1;
  71.                  if(time_counter>=(DIVISOR-1))begin
  72.                     time_counter <= 28'd0;
  73.                     led3<=~led3;
  74.                     head <= (head + 1);
  75.                 end
  76.             rgb1g <= (time_counter<DIVISOR>>1)?1'b1:1'b0;
  77.             if (head == DEPTH) begin
  78.                 fifo[0] <= MT;
  79.             end else begin
  80.                 fifo[head+1] <= MT;
  81.             end
  82.         end
  83.     end
  84. end
  85. endmodule
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement