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

Subversion Repositories versatile_counter

[/] [versatile_counter/] [trunk/] [rtl/] [verilog/] [versatile_counter.v] - Diff between revs 13 and 20

Show entire file | Details | Blame | View Log

Rev 13 Rev 20
Line 1... Line 1...
`include "versatile_counter_defines.v"
`include "versatile_counter_defines.v"
`define LFSR_LENGTH `CNT_LENGTH
`define LFSR_LENGTH cnt_length
`include "lfsr_polynom.v"
`include "lfsr_polynom.v"
`let CNT_INDEX=CNT_LENGTH-1
`let CNT_INDEX=CNT_LENGTH-1
 
`ifndef CNT_MODULE_NAME
 
`define CNT_MODULE_NAME vcnt
 
`endif
module `CNT_MODULE_NAME
module `CNT_MODULE_NAME
  (
  (
`ifdef CNT_TYPE_GRAY
`ifdef CNT_TYPE_GRAY
    output reg [`CNT_LENGTH:1] q,
    output reg [cnt_length:1] q,
 `ifdef CNT_Q_BIN
 `ifdef CNT_Q_BIN
    output [`CNT_LENGTH:1]    q_bin,
    output [cnt_length:1]    q_bin,
 `endif
 `endif
`else
`else
 `ifdef CNT_Q
 `ifdef CNT_Q
    output [`CNT_LENGTH:1]    q,
    output [cnt_length:1]    q,
 `endif
 `endif
`endif
`endif
`ifdef CNT_CLEAR
`ifdef CNT_CLEAR
    input clear,
    input clear,
`endif
`endif
Line 25... Line 28...
`endif
`endif
`ifdef CNT_CE
`ifdef CNT_CE
    input cke,
    input cke,
`endif
`endif
`ifdef CNT_QNEXT
`ifdef CNT_QNEXT
    output [`CNT_LENGTH:1] q_next,
    output [cnt_length:1] q_next,
`endif
`endif
`ifdef CNT_Z
`ifdef CNT_Z
    output z,
    output z,
`endif
`endif
`ifdef CNT_ZQ
`ifdef CNT_ZQ
    output reg zq,
    output reg zq,
`endif
`endif
 
`ifdef CNT_LEVEL1
 
    output reg level1,
 
`endif
 
`ifdef CNT_LEVEL2
 
    output reg level2,
 
`endif
    input clk,
    input clk,
    input rst
    input rst
   );
   );
 
 
 
   parameter cnt_length = `CNT_LENGTH;
 
   parameter cnt_reset_value = `CNT_RESET_VALUE;
`ifdef CNT_SET
`ifdef CNT_SET
   parameter set_value = `CNT_SET_VALUE;
   parameter set_value = cnt_length'd`CNT_SET_VALUE;
`endif
`endif
`ifdef CNT_WRAP
`ifdef CNT_WRAP
   parameter wrap_value = `CNT_WRAP_VALUE;
   parameter wrap_value = cnt_length'd`CNT_WRAP_VALUE;
 
`endif
 
`ifdef CNT_LEVEL1
 
    parameter level1_value = cnt_length'd`CNT_LEVEL1_VALUE;
 
`endif
 
`ifdef CNT_LEVEL2
 
    parameter level2_value = cnt_length'd`CNT_LEVEL2_VALUE;
`endif
`endif
 
 
   // internal q reg
   // internal q reg
   reg [`CNT_LENGTH:1] qi;
   reg [cnt_length:1] qi;
 
 
`ifndef CNT_QNEXT
`ifndef CNT_QNEXT
   wire [`CNT_LENGTH:1] q_next;
   wire [cnt_length:1] q_next;
`endif
`endif
`ifdef CNT_REW
`ifdef CNT_REW
   wire [`CNT_LENGTH:1] q_next_fw;
   wire [cnt_length:1] q_next_fw;
   wire [`CNT_LENGTH:1] q_next_rew;
   wire [cnt_length:1] q_next_rew;
`endif
`endif
 
 
`ifndef CNT_REW
`ifndef CNT_REW
   assign q_next =
   assign q_next =
`else
`else
     assign q_next_fw =
     assign q_next_fw =
`endif
`endif
`ifdef CNT_CLEAR
`ifdef CNT_CLEAR
       clear ? `CNT_LENGTH'd0 :
       clear ? cnt_length'd0 :
`endif
`endif
`ifdef CNT_SET
`ifdef CNT_SET
         set ? set_value :
         set ? set_value :
`endif
`endif
`ifdef CNT_WRAP
`ifdef CNT_WRAP
           (qi == wrap_value) ? `CNT_LENGTH'd0 :
           (qi == wrap_value) ? cnt_length'd0 :
`endif
`endif
`ifdef CNT_TYPE_LFSR
`ifdef CNT_TYPE_LFSR
             {qi[`CNT_INDEX:1],~(`LFSR_FB)};
             {qi[`CNT_INDEX:1],~(`LFSR_FB)};
`else
`else
   qi + `CNT_LENGTH'd1;
   qi + cnt_length'd1;
`endif
`endif
 
 
`ifdef CNT_REW
`ifdef CNT_REW
   assign q_next_rew =
   assign q_next_rew =
 `ifdef CNT_CLEAR
 `ifdef CNT_CLEAR
     clear ? `CNT_LENGTH'd0 :
     clear ? cnt_length'd0 :
 `endif
 `endif
 `ifdef CNT_SET
 `ifdef CNT_SET
       set ? set_value :
       set ? set_value :
 `endif
 `endif
 `ifdef CNT_WRAP
 `ifdef CNT_WRAP
         (qi == `CNT_LENGTH'd0) ? wrap_value :
         (qi == cnt_length'd0) ? wrap_value :
 `endif
 `endif
 `ifdef CNT_TYPE_LFSR
 `ifdef CNT_TYPE_LFSR
           {~(`LFSR_FB_REW),qi[`CNT_LENGTH:2]};
           {~(`LFSR_FB_REW),qi[cnt_length:2]};
 `else
 `else
   qi - `CNT_LENGTH'd1;
   qi - cnt_length'd1;
 `endif
 `endif
`endif
`endif
 
 
`ifdef CNT_REW
`ifdef CNT_REW
   assign q_next = rew ? q_next_rew : q_next_fw;
   assign q_next = rew ? q_next_rew : q_next_fw;
`endif
`endif
 
 
   always @ (posedge clk or posedge rst)
   always @ (posedge clk or posedge rst)
     if (rst)
     if (rst)
       qi <= `CNT_LENGTH'd0;
       qi <= cnt_length'd0;
     else
     else
`ifdef CNT_CE
`ifdef CNT_CE
   if (cke)
   if (cke)
`endif
`endif
     qi <= q_next;
     qi <= q_next;
Line 125... Line 142...
   assign q = q_next;
   assign q = q_next;
 `endif
 `endif
`endif
`endif
 
 
`ifdef CNT_Z
`ifdef CNT_Z
   assign z = (q == `CNT_LENGTH'd0);
   assign z = (q == cnt_length'd0);
`endif
`endif
 
 
`ifdef CNT_ZQ
`ifdef CNT_ZQ
   always @ (posedge clk or posedge rst)
   always @ (posedge clk or posedge rst)
     if (rst)
     if (rst)
       zq <= 1'b1;
       zq <= 1'b1;
     else
     else
 `ifdef CNT_CE
 `ifdef CNT_CE
       if (cke)
       if (cke)
 `endif
 `endif
         zq <= q_next == `CNT_LENGTH'd0;
         zq <= q_next == cnt_length'd0;
 
`endif
 
 
 
`ifdef CNT_LEVEL1
 
    always @ (posedge clk or posedge rst)
 
        if (rst)
 
            level1 <= 1'b0;
 
        else
 
 `ifdef CNT_CE
 
        if (cke)
 
 `endif
 
            if (q_next == level1_value)
 
                level1 <= 1'b1;
 
            else if (q == level1_value & rew)
 
                level1 <= 1'b0;
`endif
`endif
 
 
 
`ifdef CNT_LEVEL2
 
    always @ (posedge clk or posedge rst)
 
        if (rst)
 
            level2 <= 1'b0;
 
        else
 
 `ifdef CNT_CE
 
        if (cke)
 
 `endif
 
            if (q_next == level2_value)
 
                level2 <= 1'b1;
 
            else if (q == level2_value & rew)
 
                level2 <= 1'b0;
 
`endif
 
 
endmodule
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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