Added: 22-11-2021, Nightrider. Fun: runs the 'Nightrider' pattern on 15 LEDs, with the real fading effect.
Added: 18-04-2020, SPI slave. A very small SPI slave interface. Tested and used in a CPLD.
Added: 18-01-2017, Clock mux. A safe way to multiplex two clocks.
Added: 23-01-2017, Crystal startup. A circuit which passes a crystal clock after it has stabilised.
Added: 27-01-2017, System Reset. How to avoid reset_tree balancing
For all three follow the link: Clock and reset control
Added: 28-02-2017, AHB SRAM interface. Connect synchronous memory to an AHB bus without incurring wait cycles
Follow the link: AHB
Added: 9-10-2017, AXI mux/arbiter with test IP. A number of absolute minimum size multiplexors for two, three ... five AXI slaves into one AXI master with round-robin or static priority.
Added: 24-10-2017, 25-10-2017, AXI 2-, 3-, and 4-port splitter. Added: 25-10-2017, AXI decode error handling module. Here is the link: AXI

New: 22-11-2021, Nightrider.

A circuit from just for fun which generates the "Nightrider" pattern on 15 LEDs. Here is the link: Fun

What I offer

In this Verilog website I hope to offer some things others don't have.

Free source code

margin-top:-5px; > There are many Verilog examples and tutorial web sites but few have complete free modules you can download. Let alone the test benches (from which you can often learn more than the code itself). All code snippets and modules given as example are provided completely free. There are no restrictions to any use or re-use of this code in any form or shape. Which also means the user is free to modify the code. It would be nice if you keep my company name 'Fen Logic Ltd.' in the source or modified source code but even that is not required as I can't check it anyway. But the code comes with no warranties or guarantees whatsoever.

With Test benches!

Writing a test bench requires a totally different coding style than writing RTL code. I have yet come across a verilog webpage where you find testbench code. Well... this one has test benches.
An ideal test bench is self-checking. That is, at the end it reports pass or fail. The biggest pitfal is that you test what you have written. My solution for that is as follows:

You are then reasonable sure that the feature works and is covered in you test. As a side note : many of my testbenches are ten times bigger than the actual module under test.

Unconventional Circuits

Most websites offer you the standard circuitry (FIFO, UART, Synchroniser). Yes, you find some of those here too, but this website also deals with the more exotic and complex pieces of Verilog coding. For example all the other websites assume that you have a clean clock (or clocks) and a nicely behaving reset. However those do not appear by themselves. In this website I plan to offer you some of these more exotic and notorious circuits.

ARM Circuits

I have dealt with ARM (c) processors for most of my twenty years. I have dropped in the old ARM7, ARM1176, ARM9 (FPGA only), Quad A7 and assisted with a Quad A53. In the next year I hope to provide interface circuits for the AMBA bus interface and if I have some time left I might drop the occasional AXI infrastructure component.

23 years of experience

This website offers you advice and experience gathered in more then twenty years of writing Verilog code. Some of it is personal preference but most of it has been learned the hard way. If I seem to do something 'overly complex' there is likely a reason for it.

The website is far from complete. I plan to spend a lot more time in the next year on it so please bear with me. For now I strongly suggest you do not link to any of the sub-pages as they will all be moving around when I get around to categorising them.

No nonsense

As you can see there are no adverts. Neither are there any cookies. I hope to keep it that way.

For questions or contract work email me: Picture