SpeakHDL makes every attempt to focus on simplicity and practicality when configuring an FPGA. This is done by imposing some standardized structure on a coding problem that otherwise be ad-hoc in nature. Attaining simplicity (for both the end user and the parser) comes at the cost of sacrificing some flexibility in naming conventions on various VHDL coding constructs. The rationale for the naming conventions is two-fold:

  1. Intuitive Rationale
  2. Automatic Declaration of Signal Names

Some naming conventions utilized by SpeakHDL are quite intuitive as to the design choice. For example, an application module VDHL entity name must be the same as the corresponding .vhd file. However, the primary reason for introducing naming conventions is to aid in coding productivity. SpeakHDL removes the necessity for the end user to manually declare signals assignments while coding. The use of meaningful signal naming conventions give the parser unambiguous hints as to the signals type. Thus, the declaration for signal assignments and state machine state names can be automatically declared by the parser.

Shown below is a list of naming conventions that SpeakHDL uses for various design elements.

Table of Naming Conventions

Parameter Convention Used
application module entity name must be the same as the design filename without the .vhd extension
state machine state name must be either an integer literal or name must begin with st_ prefix
testbench file name must be the same name as the application file used as the DUT except with a _tb suffix
std_logic_vector signal assignment assignment name must be a validVHDL identifier} with a range (X downto Y)
integer signal assignment name must be a valid VHDL identifier with _i suffix
resource name must be referenced as this_sm* for the same application module and the VHDL entity name for another application module
resource offset name must be the same as the resource name with _<integer> suffix

Notes and Warnings

The use of 'this_sm' instead of using the entity name inside an application module is necessary because the use of the entity name would clash with the integer identifier assigned to the application module inside USER_DEFS_PKG.vhd. This is the reason why an application module can reference a different application module by name. However, the same application module cannot use its own name to reference itself.

See also