HDLmaker is offered free of charge by Polybus Systems corporation under a BSD style open source license.
Polybus offers Intellectual Property and FPGA and ASIC design services. For information on Polybus' InfiniBand cores for ASICs and FPGAs see,
If you are interested in licensing our InfiniBand IP or need FPGA or ASIC design consulting please contact Joshua Rosen bjrosen@polybus.com.
Download HDLmaker (Includes all libraries, Linux binaries)
Installing HDLmaker
Untar it, then run the install script which will compile HDLmaker for your architecture.
tar -xvf hdlmaker_install.tar
cd hdlmaker_install
./install.csh
Installing the Man Page
Man pages must be installed as root.
cd $HDLMAKER_LIB/sources/hdlmaker_sources
su
make man
Making and installing HDLmaker
The source code for HDLmaker is in the sources/hdlmaker_sources directory. The code can be built witht he make install command (the install script takes care of this step).
cd $HDLMAKER_LIB/sources/hdlmaker_sources
make install
Setting up paths
Two scripts are provided to help set up the env variables and paths, one script is for csh/tcsh and the other is for bash shells. The scripts are hdlmaker.cshrc and hdlmaker.sh. The scripts should be sourced in your .cshrc or .bashrc files after you have set the basic HDLmaker environment variables.
Setting up .cshrc files
Add the following to your .cshrc
setenv HDLMAKER_LIB /usr/local/hdlmaker_lib
setenv HDLMAKER_SYNTHESIS xst
setenv HDLMAKER_LANGUAGE verilog
setenv FPGA_FAMILY spartan3
setenv HDLMAKER_COMPANY "Polybus Systems, Westford MA"
setenv HDLMAKER_ENGINEER "B. Joshua Rosen"
source $HDLMAKER_LIB/csh/hdlmaker.cshrc
Setting up .bashrc files
Add the following to your .cshrc
export HDLMAKER_LIB=/usr/local/hdlmaker_lib
export HDLMAKER_SYNTHESIS=xst
export HDLMAKER_LANGUAGE=verilog
export FPGA_FAMILY=spartan3
export HDLMAKER_COMPANY="Polybus Systems, Westford MA"
export HDLMAKER_ENGINEER="B. Joshua Rosen"
source $HDLMAKER_LIB/csh/hdlmaker.sh
Required Environment Variables
HDLMAKER_LIB
HDLMAKER_LIB specifies the path to the HDLmaker installation. Example:
setenv HDLMAKER_LIB {/usr/tools/hdlmaker_lib}
Optional Environment Variables
HDLmaker environment variables may be defined as standard UNIX environment variable, or in the polybus.lib file or in an HDLmaker .top file. Some variables may also be specified on the command line.
If the variable is defined in multiple places then the precedence order is as follows
1)Command line
2).top File
3)polybus.lib
4)UNIX environment variable
HDLMAKER_LANGUAGE
HDLMAKER_LANGUAGE specifies the default language of the HDLmaker output. The legal options are verilog and vhdl. Examples:
setenv HDLMAKER_LANGUAGE verilog
The default language may be overridden at the command line level with the switches -verilog and -vhdl, example:
hdlmaker -verilog foo.top
or
hdlmaker -vhdl foo.top
HDLMAKER_COMPANY
HDLMAKER_COMPANY specifies the copyright holder of the design. HDLmaker inserts a standard copyright notice at the top of the generated Verilog and VHDL files. The HDLMAKER_COMPANY env variable can be overridden by the #company statement in a .top file, by the HDLMAKER_COPYRIGHT env variable or a #copyright statement in the .top file. The following are equivalent:
setenv HDLMAKER_COMPANY "Polybus Systems Corp., Westford, MA"
In the .top file
#company "Polybus Systems Corp., Westford, MA"; // A .top file statement
In polybus.lib
#HDLMAKER_LIB "Polybus Systems Corp., Westford, MA";
On the command line
hdlmaker -company "Polybus Systems Corp., Westford, MA" foo.top
Both will generate the following copyright statement:
//-- Copyright (c) 2001 Polybus Systems Corp., Westford, MA
//-- The information contained in this file is confidential and proprietary.
//-- Any reproduction, use or disclosure, in whole or in part, of this
//-- program, including any attempt to obtain a human-readable version of this
//-- program, without the express, prior written consent of Polybus Systems Corp., Westford, MA
//-- is strictly prohibited.
HDLMAKER_ENGINEER
HDLMAKER_ENGINEER specifies the name of the designer. A #engineer statement in the .top file overrides the HDLMAKER_ENGINEER env variable. The following are equivalent:
setenv HDLMAKER_ENGINEER "B. Joshua Rosen"
In the .top file
#engineer "B. Joshua Rosen";
In polybus.lib
#HDLMAKER_ENGINEER "B. Joshua Rosen";
Both will generate the following copyright statement:
//-- Engineer: B. Joshua Rosen
HDLMAKER_COPYRIGHT
HDLMAKER_COPYRIGHT specifies a path name to a master copyright statement file. A #copyright statement in the .top file takes precedence over the HDLMAKER_COPYRIGHT env variable. Both take precedence over the HDLMAKER_COMPANY env variable and #company .top statement. The following are equivalent:
setenv HDLMAKER_COPYRIGHT $HDLMAKER_LIB/copyright_files/polybus.bsd
In the .top file
#copyright "$HDLMAKER_LIB/copyright_files/polybus.bsd";
In polybus.lib
#HDLMAKER_COPYRIGHT "$HDLMAKER_LIB/copyright_files/polybus.bsd";
In this example the following would be generated:
//-- Copyright (c) 2001 Polybus Systems Corp. All rights reserved.
//--
//-- Redistribution and use in source and binary forms, with or without
//-- modification, are permitted provided that the following conditions
//-- are met:
//--
//-- 1. Redistributions of source code must retain the above copyright
//-- notice, this list of conditions and the following disclaimer.
//--
//-- 2. Redistributions in binary form must reproduce the above copyright
//-- notice, this list of conditions and the following disclaimer in the
//-- documentation and/or other materials provided with the distribution.
//--
//-- 3. All advertising materials mentioning features or use of this software
//-- must display the following acknowledgment:
//-- This product includes software developed by the Polybus Systems Corporation.
//--
//-- 4. Neither the name of Polybus System Corporation or the names of its contributors
//-- may be used to endorse or promote products derived from this software
//-- without specific prior written permission.
//--
//-- THIS SOFTWARE IS PROVIDED BY POLYBUS SYSTEMS CORP. AND IT'S CONTRIBUTORS "AS IS" AND
//-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
//-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
//-- ARE DISCLAIMED. IN NO EVENT SHALL THE POLYBUS SYSTEMS CORP. OR CONTRIBUTORS BE LIABLE
//-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
//-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
//-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
//-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
//-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
//-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
//-- SUCH DAMAGE.
HDLMAKER_CASE_SENS
HDLMAKER_CASE_SENS enables case sensitivity. For Verilog designs this variable should be set to TRUE, for VHDL it should be set to FALSE. The .top file directive #casesensitive takes precedence over the HDLMAKER_CASE_SENS env variable.
setenv HDLMAKER_CASE_SENS TRUE
In the .top file
#casesensitive; // This enables case sensitivity, the default is not case sensitive
In polybus.lib
#HDLMAKER_CASE_SENS "1";
HDLMAKER_SYNTHESIS
The HDLMAKER_SYNTHESIS env variable specifies the target synthesis tool. Hdlmaker generates tool specific scripts and Make files. It also inserts tool specific directives into the hdl code. The supported tools are:
synplicity, (Synplify)
synopsys, (design compiler and fpga_compiler)
xst
quartus
Synplicity and Synopsis have the best support, exemplar's support is probably out of date. There is no support for fpga_express.
To specify Synplify as the synthesis target:
setenv HDLMAKER_SYNTHESIS synplicity
In polybus.lib
#HDLMAKER_SYNTHESIS "synplicity";
HDLMAKER_SIMULATOR
The HDLMAKER_SIMULATOR env variable specifies the target simulation tool. HDLmaker creates tool specific scripts for most popular simulation tools. The legal values for the HDLMAKER_SIMULATOR variable are:
finsim (Fintronics Finsim)
verilogxl (Cadence VerilogXL)
vcs (Synopsys VCS)
leapfrog (Cadence Leapfrog)
ncverilog (Cadence ncverilog)
nc_sim (Cadence NC-Sim)
modeltech
setenv HDLMAKER_SIMULATOR ncverilog
HDLMAKER_VERILOG_CMD
HDLmaker generate an ordered list of source files called design_name_v.cmd (where design_name.top is the top level .top file and design_name.v is the top level verilog file). The HDLMAKER_VERILOG_CMD specifies a string that is inserted in the head of the _v.cmd file. For example consider a testbench where the top level file is called sys.top. If you specify an empty string
setenv HDLMAKER_VERILOG_CMD ""
then you could invoke verilogxl as follows
verilog -f sys_v.cmd
You could also put the verilog command in the sys_v.cmd file,
setenv HDLMAKER_VERILOG_CMD "verilog"
then you could invoke verilogxl as follows
./sys_v.cmd
HDLMAKER_FAMILY
HDLmaker has a set of libraries which contain family specific information about various FPGA families. These libraries contain IO component information, package pinouts, simulation models, synthesis commands and component designs. The libraries are located under the hdlmaker_lib directory.
The supported families are:
xc4000
xc4000e
xc4000ex
xc4000xl
xc9500
xc9500-xl
Virtex
Virtexe
Virtex2
Virtex2p
Virtex2px
Virtex4
Virtex5
Virtex6
orca2c
orca2ca
spartan
spartan-xl
spartan2
spartan2e
spartan3
spartan3e
xc5200
Stratix
Stratixiigx
Stratixivgx (includes gt as well as gx)
AcronixSpeedster
setenv HDLMAKER_FAMILY virtexe
In the .top file
#family "spartan2";
In polybus.lib
#family "spartan2";
HDLMAKER_MAP_EFFORT
This is a Synopsys design compiler specific variable. If defined this variable will put the specified map_effort directive into the Synopsys design compiler scripts (.job file).
setenv HDLMAKER_SYNOPSYS_MAP_EFFORT "high"
HDLMAKER_UPCASE_IO
Hdlmaker uses different IO component models for simulation and synthesis. For simulation a lower case component name is used, for synthesis an upper case name is used (i.e. fd.v versus FD.v). This is a legacy of the Xilinx XC4000 family which had a hidden reset line in the IO flops. The HDLMAKER_UPCASE_IO env variable tells HDLmaker to upcase IO component names when producing synthesis code. For Xilinx FPGAs you should set this variable to 1.
setenv HDLMAKER_UPCASE_IO 1
Schematic Layout Environment Variables
HDLmaker can generate schematics for designs of type "board". The WIDTH and HEIGHT variables specify the page dimensions in tenths of an inch. The ROTATE variable specifies landscape (1) or portrait (0) layout, The PLACE_VERTICALLY variable specifies the direction in which the components are placed on the page. PLACE_VERTICALLY 1 will start at the top left hand corner and place from top to bottom. PLACE_VERTICALLY 0 places the components from left to right. The schematic generator places components in the order that they are found in the .top file.
setenv HDLMAKER_PAGE_WIDTH 100
setenv HDLMAKER_PAGE_HEIGHT 75
setenv HDLMAKER_PAGE_ROTATE 1
setenv HDLMAKER_PLACE_VERTICALLY 1
HDLMAKER_SET_DEFPARAM
Verilog has two methods of passing parameters, by argument and with the defparam statement. HDLmaker supports both methods. To use defparam set the SET_DEFPARAM variable to 1, to use the argument method set it to 0. Generally the defparam method is better because it doesn't require you to specify all of the parameters, only those parameters which differ from the default.
setenv HDLMAKER_SET_DEFPARAM 1
HDLMAKER_LOCAL_COPY
Copy all files to the local directories. When set to TRUE HDLmaker will copy all files to the appropriate local directory (.v to ../v, .vhd to ../vhd, .top to ../top and so forth). In addition all files generated by HDLMaker will be saved in the appropriate local directory. When set to FALSE HDLmaker does not make local copies. HDLmaker generated files will be saved in the subdirectories associated with each .top file in the design. For example if HDLmaker finds a top file called foo.top in the directory ../bar/top/foo.top then it will place the resulting .v file (say foo.v) into the related v directory, ../bar/v/foo.v. The one exception to the rule are script files that are stored in both the related script directory (in this example ../bar/scripts) and into the local script directory (../script). Large projects which consist of multiple sub-projects should set the LOCAL_COPY directory to FALSE, small projects may find it convenient to set LOCAL_COPY to TRUE. Earlier versions of HDLmaker always made local copies so setting this variable to TRUE will mimic the behavior the earlier versions.
setenv HDLMAKER_LOCAL_COPY FALSE
In the polybus.lib
#HDLMAKER_LOCAL_COPY TRUE
HDLMAKER_USE_SUB_DIR
Modify relative pathnames inside of scripts to account for the use of a subdirectory. For must applications you will want to set this variable to TRUE or 1. The example below illustrates to effect of this variable. For a the module ../bar/v/foo.v the path used in a script would be
setenv HDLMAKER_USE_SUB_DIRECTORY FALSE
../bar/v/foo.v
setenv HDLMAKER_USE_SUB_DIRECTORY TRUE
../../v/foo.v
a local file, v/foobar.v, would be referenced as
setenv HDLMAKER_USE_SUB_DIRECTORY FALSE
v/foo.v
setenv HDLMAKER_USE_SUB_DIRECTORY TRUE
../v/foo.v
In polybus.lib
#HDLMAKER_USE_SUB_DIRECTORY FALSE
HDLMAKER_GEN_DATE
Include the generation date in the header. Default is FALSE.
HDLMAKER_ALLOW_SUB
Allow the substitution of an existing Verilog or VHDL file if a .top file is not found. The default is FALSE.
#HDLMAKER_UALLOW_SUB TRUE
HDLMAKER.CSHRC
source $HDLMAKER_LIB/csh/hdlmaker.cshrc
HDLMAKER.SH
A bashscript is provided in $HDLMAKER_LIB/csh/hdlmaker.sh which you may source in your .bashrc file to set the required HDLmaker env variables.
source $HDLMAKER_LIB/csh/hdlmaker.sh
|