Quick start
Hdlmake aims to be a multi-purpose tool for HDL development. It can put together projects made of several modules, create project files for ISE or Quartus, run synthesis flows, run simulations in Modelsim, run synthesis on remote machines and more. All these things can be done in two ways: by running hdlmake or by generating a makefile containing all needed commands. It's up to you which way you choose.
Before you can do all these fancy things, you have to describe your project in a special way. We tried to avoid making too much hassle.
First of all, think about your project. The most basic thing is to think about your project: is it a monolithic creation? Is it composed of many small modules that you would like too put in different repositories, but for some reasons you didn't? Maybe you would like to divide your design into smaller ones and maintain them separately?
If your answer was positive, go to paragraph How to divide a design
and apply hdlmake.
If your project is simple enough our you are just prefer to keep
everything in one place, read following paragraph (How to apply
hdlmake)
How to apply hdlmake
The only thing you have to do is to create Manifest's. These are Python files that describe your project's structure and some options. The structure is the same, whatever you want to do, but options varies, depending on what you want to do (simulate/synthesis). Let's do it for synthesis.
How to apply hdlmake for synthesis
Let's say that you want to apply hdlmake to a single module (kept in a
single repository). Go to the place where your top HDL file is. Touch a
file called Manifest.py and edit it.
What you need to do is to list there all files that are needed in
synthesis. That includes sources (.vhd, .v, .sv), constraints files
(.ucf) and whatever you consider needed.
Define a python list that contains paths to all files that you need, for
example:
files = ["../hdl/file1.vhd", "../hdl/file2.vhd", "../hdl1/file.v"]
Typing this "../hdl" prefix can be annoying. If you want to avoid it, you can do one fo two things:
# Treat hdl and hdl1 as separate modules. Then you need to list them as modules:
modules = {"local" : ["../hdl", "../hdl1"]}
The syntax complicated a bit. What you see here is a python dictionary with "local" key. Its value is a python list, with paths to modules listed.