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

Subversion Repositories pcounter

[/] [pcounter/] [trunk/] [doc/] [README] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 robotron
--
2
-- * pipelined synchronous pulse counter *
3
--
4
-- fast counter for slow-carry architectures
5
-- non-monotonic counting, value calculable by HDL/CPU
6
--
7
-- idea&code by Marek Peca  08/2012
8
-- Vyzkumny a zkusebni letecky ustav, a.s. http://vzlu.cz/
9
-- thanks to Michael Vacek  for testing
10
--
11
 
12
Pipelined Synchronous Pulse Counter
13
===================================
14
 
15
is a proposal of binary counter, designed to minimize logic path
16
length in between flip-flops to one gate (MUX/AND) only, at the
17
expense of not so straightforward binary counting. The reason for this
18
design has emerged while using Actel (MicroSemi) ProASIC/IGLOO
19
architecture, lacking any hardwired support for fast carry.
20
 
21
During our work on Actel FPGAs (basically, 3-LUT & DFF only), we were
22
aware of following types of faster counters:
23
- LFSR counter
24
- Johnson counter
25
- "RLA counter" (as tailored using Actel's SmartGen core generator)
26
 
27
Johnson due to its O(2^n) (n as number of bits) can not be used for
28
longer counts; LFSR's are hard to invert (table lookup seems to be
29
only known method), therefore also impractical for wider counters. RLA
30
counter is still too slow and complex for wider counters and moderate
31
speeds (e.g.  > 24bits @ >100MHz).
32
 
33
As a consequence, the proposed counter uses synchronous divide-by-two
34
blocks, each using 1-bit pipeline and carry by single-clock
35
pulse. Design is simple and fast, preliminary results from Synplify
36
and Actel Designer shows 32bits @200MHz feasible.
37
 
38
However, output bit lines are non-proportionaly delayed by discrete
39
number of clock periods. Therefore, to obtain linear bit word, an
40
inversion formula needs to be applied. Fortunately, the inversion is
41
simple (unlike LFSR's), in C (pcount.c):
42
 
43
  for (k = 1; k < n; k++)
44
    if ((y & ((1<
45
      y = y ^ (1<
46
 
47
-- it may be implemented in VHDL core, or within CPU as shown, depending on
48
application requirements.
49
 
50
Files
51
=====
52
 
53
pdivtwo.vhdl                    basic building block -- 1-stage pipelined
54
                                flip-flop
55
pdchain.vhdl                    counter top-level entity
56
pcount_tb.vhdl                  GHDL testbench
57
pcount.c                        C language encoder/decoder of counter bitword
58
doc/pcounter_4bit_trace.pdf     simulated signals of 4-bit counter
59
doc/pcounter_sch.pdf            schematic diagram of the counter
60
 
61
Results
62
=======
63
 
64
Synthesized within larger circuit for Actel ProASIC3E A3PE1500-Std
65
as 32bit wide counter, typical frequency: 234MHz
66
 
67
Comments?
68
=========
69
 
70
***
71
* First, if you find this pretty simple idea to be non-original work
72
* *please* send me an e-mail with respective pointers; I will then freeze
73
* the repository, including link to the reference.
74
***
75
 
76
If you find this idea useful, apply it whenever you want, however,
77
share your improvements. E.g.:
78
- (fast) HDL implementation of bitword encode/decode
79
- preset/reset/match/enable logic
80
 
81
Testimonials (usage/frequency/bits/architecture) are indeed welcome.
82
 
83
 
84
--
85
Greetings by Marek 

powered by: WebSVN 2.1.0

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