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

Subversion Repositories versatile_counter

[/] [versatile_counter/] [tags/] [rev1/] [rtl/] [verilog/] [versatile_counter.v] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 unneback
`include "versatile_counter_defines.v"
2
`define LFSR_LENGTH `CNT_LENGTH
3
`include "lfsr_polynom.v"
4
`let CNT_INDEX=CNT_LENGTH-1
5
module `CNT_MODULE_NAME
6
  (
7
`ifdef CNT_TYPE_GRAY
8
   output reg [`CNT_LENGTH:1] q,
9
`else
10
 `ifdef CNT_Q
11
    output [`CNT_LENGTH:1]    q,
12
 `endif
13
`endif
14
`ifdef CNT_CLEAR
15
    input clear,
16
`endif
17
`ifdef CNT_SET
18
    input set,
19
`endif
20
`ifdef CNT_REW
21
    input rew,
22
`endif
23
`ifdef CNT_CE
24
    input cke,
25
`endif
26
`ifdef CNT_QNEXT
27
    output [`CNT_LENGTH:1] q_next,
28
`endif
29
`ifdef CNT_Z
30
    output z,
31
`endif
32
`ifdef CNT_ZQ
33
    output reg zq,
34
`endif
35
    input clk,
36
    input rst
37
   );
38
 
39
`ifdef CNT_SET
40
   parameter set_value = `CNT_SET_VALUE;
41
`endif
42
`ifdef CNT_WRAP
43
   parameter wrap_value = `CNT_WRAP_VALUE;
44
`endif
45
 
46
   // internal q reg
47
   reg [`CNT_LENGTH:1] qi;
48
 
49
`ifndef CNT_QNEXT
50
   wire [`CNT_LENGTH:1] q_next;
51
`endif
52
`ifdef CNT_REW
53
   wire [`CNT_LENGTH:1] q_next_fw;
54
   wire [`CNT_LENGTH:1] q_next_rew;
55
`endif
56
 
57
`ifndef CNT_REW
58
   assign q_next =
59
`else
60
     assign q_next_fw =
61
`endif
62
`ifdef CNT_CLEAR
63
       clear ? `CNT_LENGTH'd0 :
64
`endif
65
`ifdef CNT_SET
66
         set ? set_value :
67
`endif
68
`ifdef CNT_WRAP
69
           (qi == wrap_value) ? `CNT_LENGTH'd0 :
70
`endif
71
`ifdef CNT_TYPE_LFSR
72
             {qi[`CNT_INDEX:1],~(`LFSR_FB)};
73
`else
74
   qi + `CNT_LENGTH'd1;
75
`endif
76
 
77
`ifdef CNT_REW
78
   assign q_next_rew =
79
 `ifdef CNT_CLEAR
80
     clear ? `CNT_LENGTH'd0 :
81
 `endif
82
 `ifdef CNT_SET
83
       set ? set_value :
84
 `endif
85
 `ifdef CNT_WRAP
86
         (qi == `CNT_LENGTH'd0) ? wrap_value :
87
 `endif
88
 `ifdef CNT_TYPE_LFSR
89
           {~(`LFSR_FB_REW),qi[`CNT_LENGTH:2]};
90
 `else
91
   qi - `CNT_LENGTH'd1;
92
 `endif
93
`endif
94
 
95
`ifdef CNT_REW
96
   assign q_next = rew ? q_next_rew : q_next_fw;
97
`endif
98
 
99
   always @ (posedge clk or posedge rst)
100
     if (rst)
101
       qi <= `CNT_LENGTH'd0;
102
     else
103
`ifdef CNT_CE
104
   if (cke)
105
`endif
106
     qi <= q_next;
107
 
108
`ifdef CNT_Q
109
 `ifdef CNT_TYPE_GRAY
110
   always @ (posedge clk or posedge rst)
111
     if (rst)
112
       q <= `CNT_LENGTH'd0;
113
     else
114
  `ifdef CNT_CE
115
       if (cke)
116
  `endif
117
         q <= (q_next>>1) ^ q_next;
118
 `else
119
   assign q = q_next;
120
 `endif
121
`endif
122
 
123
`ifdef CNT_Z
124
   assign z = (q == `CNT_LENGTH'd0);
125
`endif
126
 
127
`ifdef CNT_ZQ
128
   always @ (posedge clk or posedge rst)
129
     if (rst)
130
       zq <= 1'b0;
131
     else
132
 `ifdef CNT_CE
133
       if (cke)
134
 `endif
135
         zq <= q_next == `CNT_LENGTH'd0;
136
`endif
137
endmodule

powered by: WebSVN 2.1.0

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