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

Subversion Repositories versatile_counter

[/] [versatile_counter/] [trunk/] [rtl/] [verilog/] [versatile_counter.v] - Blame information for rev 12

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

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

powered by: WebSVN 2.1.0

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