I found that the overwhelming majority of the Internet's solution to
slowing down a fast clock (for making the pulsing of an LED visible to
the human eye) was either using vendor-specific, proprietary clock
managers and PLLs or implementing some twenty-something-bit-wide counter
as to count hundreds of thousands of clock cycles and generate a 1 Hz
output.
On 7/21/2024 9:16 AM, Nioclás Pól Caileán de Ghloucester wrote:
I found that the overwhelming majority of the Internet's solution to
slowing down a fast clock (for making the pulsing of an LED visible to
the human eye) was either using vendor-specific, proprietary clock
managers and PLLs or implementing some twenty-something-bit-wide
counter as to count hundreds of thousands of clock cycles and generate
a 1 Hz output.
If you did not have access to FPGA shift register primitives, what would
be the most efficient way to build a prescaler from discrete parts?
Fereydoun Memarzanjany wrote via Google on 21/02/2024:alleviate that.
"
https://gist.github.com/Thraetaona/ba941e293d36d0f76db6b9f3476b823c
Having just started learning FPGA Hardware Description Languages by attempting to write a simple LED blinker, I found that the overwhelming majority of the Internet's solution to slowing down a fast clock (for
making the pulsing of an LED visible to the human eye) was either using vendor-specific, proprietary clock managers and PLLs or implementing
some twenty-something-bit-wide counter as to count hundreds of thousands
of clock cycles and generate a 1 Hz output.
Although there is a world of difference between counters in hardware-accelerated designs and those in software-emulated ones, I nonetheless viewed the number of daisy-chained components resulting from
a mere counter as far-from-ideal and absurd; I began searching for a
more efficient method.
I came upon a rather obscure blog post from 2015 (http://www.markharvey.info/art/srldiv_04.10.2015/srldiv_04.10.2015.html) outlining the exact same issue while also referencing Xilinx systems designer Mr. Ken Chapman's proposal: using FPGAs' shift register primitives (e.g., Xilinx's SRL32E) to
However, the method described therein would rely on the user to
calculate the target frequency's factors between [2, 32) and
painstakingly connect each and every instance of SRL32Es to one another,
all in a manual manner, not to mention that the resulting pulse would
have a low, one-cycle-long duty.
Thus, I wrote `srl_prescaler.vhd`, a fully automated template generator
in VHDL for an efficient, register-based cascaded clock divider based
solely on SRL32 primitives alongside AND gates---the advantage of this
module is that it is very generic and easy-to-use:
```
prescaler : entity work.srl_prescaler
generic map (100e6, 1)
port map (clk_in_100mhz, ce_out_1hz);
```
In the above example, an input clock of 100 MHz (i.e., `100e6` & `clk_in_100mhz`) gets divided into a clock enable signal of 1 Hz (i.e.,
`1` & `ce_out_1hz`). Among the other improvements, a third optional parameter (i.e., the duty cycle) may also get supplied as a real number (0.00, 1.00) to the generic map.
Overall, this small project makes an otherwise-niche method more
accessible by actually making use of the many language features that
VHDL has to offer (e.g., pre-computing factor results using functions, automating hardware creation via for...generate clauses, latching using registers and guarded signals, etc.), serving as a simple yet practical learning point.
Visualized and Tabular Comparisons: https://gist.github.com/Thraetaona/ba941e293d36d0f76db6b9f3476b823c?permalink_comment_id=4856214#gistcomment-4856214
(Usenet is shutting down tomorrow on February 22, 2024; this should be
one of the last messages.)"
Dear Fereydoun,
Usenet did not shut down. Google is not Usenet. Google ignores new
Usenet posts. However, news.eternal-September.org does not show this
quoted article so I saw it for the 1st time today via a different USENET server.
On 7/21/2024 9:16 AM, Nioclás Pól Caileán de Ghloucester wrote:
I found that the overwhelming majority of the Internet's solution to slowing >> down a fast clock (for making the pulsing of an LED visible to the human eye)
was either using vendor-specific, proprietary clock managers and PLLs or
implementing some twenty-something-bit-wide counter as to count hundreds of >> thousands of clock cycles and generate a 1 Hz output.
If you did not have access to FPGA shift register primitives, what would be the
most efficient way to build a prescaler from discrete parts?
On 8/1/2024 12:17 PM, Buzz McCool wrote:
On 7/21/2024 9:16 AM, Nioclás Pól Caileán de Ghloucester wrote:
I found that the overwhelming majority of the Internet's solution to slowing
down a fast clock (for making the pulsing of an LED visible to the human >>> eye) was either using vendor-specific, proprietary clock managers and PLLs >>> or implementing some twenty-something-bit-wide counter as to count hundreds >>> of thousands of clock cycles and generate a 1 Hz output.
That depends on what you want to use to "trigger" the LED's illumination. Monostables (in many forms) can generate an interval that is "close enough for the purposes of human perception" with very little (if ANY!) silicon.
If you did not have access to FPGA shift register primitives, what would be >> the most efficient way to build a prescaler from discrete parts?
How do you define "efficient"?
Shift counters are incredibly simple with the drawback of front-loading
all of the combinatorial logic. Certain divisors are, thus, more costly than others.
Binary ripple counters use the least resources but suffer from
propagation delays making decoding of states a bit trickier.
You will always need at least log2N flip-flops and could end up
using slightly more.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 365 |
Nodes: | 16 (3 / 13) |
Uptime: | 29:30:03 |
Calls: | 7,790 |
Calls today: | 5 |
Files: | 12,917 |
Messages: | 5,750,864 |