OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [trunk/] [fpga/] [mc/] [src/] [tmr/] [tmr.v] - Diff between revs 68 and 69

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 68 Rev 69
Line 9... Line 9...
           wt, irq);
           wt, irq);
    input clk;
    input clk;
    input reset;
    input reset;
    input en;
    input en;
    input wr;
    input wr;
    input addr;
    input [3:2] addr;
    input [31:0] data_in;
    input [31:0] data_in;
    output [31:0] data_out;
    output reg [31:0] data_out;
    output wt;
    output wt;
    output irq;
    output irq;
 
 
  reg [5:0] prescaler;
 
  reg tick;
 
  reg [31:0] counter;
  reg [31:0] counter;
  reg [31:0] divisor;
  reg [31:0] divisor;
  reg divisor_loaded;
  reg divisor_loaded;
  reg expired;
  reg expired;
  reg alarm;
  reg alarm;
  reg ien;
  reg ien;
 
 
  always @(posedge clk) begin
  always @(posedge clk) begin
    if (reset == 1) begin
 
      prescaler <= 6'd50;
 
      tick <= 0;
 
    end else begin
 
      if (prescaler == 6'd1) begin
 
        prescaler <= 6'd50;
 
        tick <= 1;
 
      end else begin
 
        prescaler <= prescaler - 1;
 
        tick <= 0;
 
      end
 
    end
 
  end
 
 
 
  always @(posedge clk) begin
 
    if (divisor_loaded == 1) begin
    if (divisor_loaded == 1) begin
      counter <= divisor;
      counter <= divisor;
      expired <= 0;
      expired <= 0;
    end else begin
    end else begin
      if (tick == 1) begin
 
        if (counter == 32'h00000001) begin
        if (counter == 32'h00000001) begin
          counter <= divisor;
          counter <= divisor;
          expired <= 1;
          expired <= 1;
        end else begin
        end else begin
          counter <= counter - 1;
          counter <= counter - 1;
          expired <= 0;
          expired <= 0;
        end
        end
      end else begin
 
        expired <= 0;
 
      end
 
    end
    end
  end
  end
 
 
  always @(posedge clk) begin
  always @(posedge clk) begin
    if (reset == 1) begin
    if (reset == 1) begin
Line 68... Line 47...
      ien <= 0;
      ien <= 0;
    end else begin
    end else begin
      if (expired == 1) begin
      if (expired == 1) begin
        alarm <= 1;
        alarm <= 1;
      end else begin
      end else begin
        if (en == 1 && wr == 1 && addr == 0) begin
        if (en == 1 && wr == 1 && addr[3:2] == 2'b00) begin
          alarm <= data_in[0];
          alarm <= data_in[0];
          ien <= data_in[1];
          ien <= data_in[1];
        end
        end
        if (en == 1 && wr == 1 && addr == 1) begin
        if (en == 1 && wr == 1 && addr[3:2] == 2'b01) begin
          divisor <= data_in;
          divisor <= data_in;
          divisor_loaded <= 1;
          divisor_loaded <= 1;
        end else begin
        end else begin
          divisor_loaded <= 0;
          divisor_loaded <= 0;
        end
        end
      end
      end
    end
    end
  end
  end
 
 
  assign data_out =
  always @(*) begin
    (addr == 0) ? { 28'h0000000, 2'b00, ien, alarm } :
    case (addr[3:2])
                   divisor;
      2'b00:
 
        // ctrl
 
        data_out = { 28'h0000000, 2'b00, ien, alarm };
 
      2'b01:
 
        // divisor
 
        data_out = divisor;
 
      2'b10:
 
        // counter
 
        data_out = counter;
 
      2'b11:
 
        // not used
 
        data_out = 32'hxxxxxxxx;
 
      default:
 
        data_out = 32'hxxxxxxxx;
 
    endcase
 
  end
 
 
  assign wt = 0;
  assign wt = 0;
  assign irq = ien & alarm;
  assign irq = ien & alarm;
 
 
endmodule
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.