High Level Coding Patterns in synthesizable VHDL

The main things that make up of a high level coding pattern is abstraction.

Creating callable object with records and subroutines

Creating objects from objects

Simple state machines

We should strive for making only linear state machines. Here we will show how to achieve arbitrarily complex begavior with only linear state machines

Separate trigger and catch counters for timing insensitive design