Macros are intellectual properties that you can use in your design. You do not need to design it.
For example, memories, processor core, serdes, PLL etc. Macros might have a fixed function, or being parameterised. Your own design could become a fixed-function macro that some other designer could use, but a parameterised macro includes design elements and code that says how to build a macro to suit a particular set of parameters - for instance the number of words in a memory and how many bits wide it is.
A good example would be memory that’s been created by OpenRAM. Typically for larger memories in a design you
want to avoid using lots of flip-flops. A memory created from flip-flops is much bigger than something that has
been optimised just for data storage. A memory made with flops would also likely be slower and much more power hungry than a sensibly designed memory macro, which might make use of special function cells that are not part of the standard cell library used by synthesis.
OpenRAM creates a macro that you can then use in your design without having to deal with the details inside.
This talk by Matt Guthaus explains OpenRAM and its current status. Skywater 130 support is being added
and is being tested in the first tapeouts.
I love the layout of the course, you did a perfect job Matt. Building up the foundation and then getting into the depths of it. Having everything lined up. I love the walkthroughs at the end of each section. I did the work and then I looked back, maybe there's a better way and in your videos you point out some other interesting things as well so that was really helpful. So yes I love the course.