Naming Conventions¶
Todo
Write an intruduction paragraph for this page.
Root Directory Overview (PoCRoot)¶
The PoC-Library is structured into several sub-directories, naming the purpose
of the directory like src
for sources files or tb
for testbench files.
The structure within these directories is most likely the same and based on
PoC’s sub-namespace tree. PoC’s installation directory is
also referred to as PoCRoot
.
lib
- Third party libraries like Coctb, OSVVM or VUnit are shipped in this folder. The external library is stored in a sub directory named like the library. If a library is available as a Git submodule, then it is linked as a submodule for better version tracking.
netlist
- This is the output directory for pre-configured netlists, synthesized by PoC.
Netlists and related constaint files are the result of IP core synthesis
flows, either from PoC’s source files or from vendor specific IP core files
like *.xco files from Xilinx Core Generator. Generated IP cores are stored
in device sub-directories, because most netlists formats are device specific.
For example the IP core
PoC.arith.prng
created from source filesrc\arith\arith_prng.vhdl
generated for a Kintex-7 325T mounted on a KC705 board will be copied tonetlist\XC7K325T-2FFG900\arith\arith_prng.ngc
if Xilinx ISE XST is used for synthesis.
py
- The supporting Python infrastructure, the configuration files and the IP core ‘database’ is stored in this directory.
sim
- Some of PoC’s testbenches are shipped with pre-configured waveform views/
waveform configuration files for selected simulators or waveform viewers.
If a testbench is launched in GUI mode (
--gui
) and a waveform view for the choosen simulator is found, it’s loaded as the default view.
src
- The source files of PoC’s IP cores are stored in this directory. The IP cores are grouped by their sub-namespace into sub-directories according to the sub-namespace tree. See the paragraph below, for how IP cores are named and how PoC core names map to the sub-namespace hierachy and the resulting sub-namespace directory structure.
tb
- PoC is shipped with testbenches. All testbenches are categorized and stored in sub-directories like the IP core, which is tested.
tcl
- Supporting Tcl files.
temp
- A pre-created temporary directors for various tool’s intermediate outputs. In case of errors in a used vendor tool or in PoC’s infrastructure, this directory contains intermediate files, log files and report files, which can be used to analyze the error.
tools
- This directory contains miscelaneous files or scripts for external tools like emacs, git or text editor syntax highlighting files.
ucf
- Pre-configured constraint files (*.ucf, *.xdc, *.sdc) for many FPGA boards, containing physical (pin, placement) and timing constraints.
xst
- Configuration files to synthesize PoC modules with Xilinx XST into a netlist.
Namespaces and Modules¶
Namespaces¶
PoC uses namespaces and sub-namespaces to categorize all VHDL and Verilog modules. Despite VHDL doesn’t support sub-namespaces yet, PoC already uses sub-namespaces enforced by a strict naming schema.
Rules:
1. Namespace names are lower-case, underscore free, valid VHDL identifiers.
2. A namespace name is unique, but can be part of a entity name.
Module Names¶
Module names are prefixed with its parents namespace name. A module name can contain underscores to denote implementation variants of a module.
Rules:
3. Modul names are valid VHDL identifiers prefixed with its parent namespace’s name.
4. The first part of module name must not contain the parents namespace name.
Example 1 - PoC.fifo.cc_got
For example a FIFO module with a common clock interface and a got
semantic is named PoC.fifo.cc_got
(fully qualified name). This name can
be split at every dot and underscore sign, resulting in the following table of
name parts:
PoC | fifo | cc | got |
---|---|---|---|
Root Namespace | Sub-Namespace | Common Clock Interface | Got Semantic |
Because PoC.fifo.cc_got
refers to an IP core, the source file is located in
the <PoCRoot>\src
directory. The (sub-)namespace of the PoC entity is
fifo
, so it’s stored in the sub-directory fifo
. The file name cc_got
FIFO is prefixed with the last sub-namespace: In this case fifo_
. This is
summarized in the following table:
Property | Value |
---|---|
Fully Qualified Name | PoC.fifo.cc_got |
VHDL entity name | fifo_cc_got |
File name | fifo_cc_got.vhdl |
IP Core Description File | \src\fifo\fifo_cc_got.files |
Source File Location | \src\fifo\fifo_cc_got.vhdl |
Testbench Location | \tb\fifo\fifo_cc_got_tb.vhdl |
Testbench Description File | \tb\fifo\fifo_cc_got_tb.files |
Waveform Description Files | \sim\fifo\fifo_cc_got_tb.* |
Other implementation variants are:
_dc
– dependent clock / related clock_ic
– independent clock / cross clock_got_tempgot
– got interface extended by a temporary got interface_got_tempput
– got interface extended by a temporary put interface
Example 2 - PoC.mem.ocram.tdp
PoC | mem | ocram | tdp |
---|---|---|---|
Root Namespace | Sub-Namespace | Sub-Namespace | True-Dual-Port |
Property | Value |
---|---|
Fully Qualified Name | PoC.mem.ocram.tdp |
VHDL entity name | ocram_tdp |
File name | ocram_tdp.vhdl |
IP Core Description File | \src\mem\ocram\ocram_tdp.files |
Source File Location | \src\mem\ocram\ocram_tdp.vhdl |
Testbench Location | \tb\mem\ocram\ocram_tdp_tb.vhdl |
Testbench Description File | \tb\mem\ocram\ocram_tdp_tb.files |
Waveform Description Files | \sim\mem\ocram\ocram_tdp_tb.* |
Note: Not all sub-namespace parts are include as a prefix in the name, only the last one.
Signal Names¶
Todo
No documentation available.