====== GECKO3 Coding Guidelines ====== In order to keep code readable and consistent, please use the coding guidelines shown on this page. ===== C/C++ ===== * File names: small, use underline for separation ''usb_tmc.c'' * Variables: small, without underlines ''numberOfGeckos'' * Function names: Capitalized, without underlines: ''GeckoGetFw()'' * Constants: completely in uppercase with underlines: ''BUFFER_SIZE'' ==== File and Function Header ==== The headers have to be commented in the [[http://www.stack.nl/~dimitri/doxygen/|Doxygen]] style. After [[http://www.stack.nl/~dimitri/doxygen/commands.html/|commenting]] you can use therefore Doxygen to create your source code documentation. === Demo File Header === /* GECKO3COM * * Copyright (C) 2008 by * ___ ____ _ _ * ( _`\ ( __)( ) ( ) * | (_) )| (_ | |_| | Bern University of Applied Sciences * | _ <'| _) | _ | School of Engineering and * | (_) )| | | | | | Information Technology * (____/'(_) (_) (_) * * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /************************************************************************* * \file usb_tmc.c /************************************************************************/ /* \brief Implements the USB TMC protocol. ************************************************************************* * \author Lukas Kohler kll1 bfh.ch * \date 2009-02-04 kll1 created ************************************************************************/ === Demo Function Header === /************************************************************************/ /* \brief Reads all USB devices and returns the amount of found * Gecko3 systems. ************************************************************************* * \param[in] char print: if not 0, prints more information * \param[out] - * \return int numberOfGeckos: amount of found Gecko3's * \warning The amount of Gecko3's is limited by MAX_GECKOS_ON_USB! ************************************************************************* * \author Lukas Kohler kll1 bfh.ch * \date 2009-02-04 kll1 created * \test OK ************************************************************************/ ==== Further Reading ==== http://www.mono-project.com/Coding_Guidelines ===== VHDL ===== To get a good an structured VHDL project, it's important to use some basic code guidelines. First of all, use never spaces in names. In place of a space use an underline. ==== File names ==== Every VHDL file in a project has a unique and well chosen name. The file name must be the same as the ENTITY name in the file. E.g.: File named: adder_gen.vhd entity adder_gen is generic ... port ... end adder_gen; ==== File header ==== Every VHDL file has a header part. This part contains the developer's name and some infos concerning the file. If you develop for the GECKO3 you have to take the following header template. -- ------------------------------------------------------------------------ -- Filename : test_name.vhd -- Modelname : -- Title : -- Purpose : -- Author(s) : Muster || muster@bfh.ch -- Comment : -- Assumptions : -- Limitations : -- Known errors : -- Specification ref : Part of ... -- Description : Short description -- ------------------------------------------------------------------------ -- Modification history: -- ------------------------------------------------------------------------ -- Version | Author | Date | Changes made -- ------------------------------------------------------------------------ -- 1.0 | hga3 | 04.07.2008 | inital version -- | | | ==== Name of signals and variables ==== To get informations about the function of a signal or a variable during the programming follow, it's important to choose a name as good as possible. The following obligatory conventions should used: === Signals in an entity === In an entity you have ports to communicate with the outside world of your component those signals can take one of the following types: IN, OUT, BUFFER, INOUT. In the name of the ports it's important to get informations about the port, also take the following name conventions: \\ ^ Portnames ^^^ ^ Type ^ info ^ name prefix | | IN | input | i_ | | OUT | output | o_ | | BUFFER | buffered output | b_ | | INOUT | bidirectional port| io_ | To get informations about the activity, the conventions are as follows: \\ low active n \\ high active “nothing” \\ E.g.: Signal name i_nReset -- name for a negative reset (input) i_Clk -- name for a positive clock (input) === GENERICS === For a GENERIC (generic value) use g_ as name prefix \\ === In the ARCHITECTURE === The CONSTANTS, SIGNALS and VARIABLES available in the architecture of your IP core should be named as follows:\\ //CONSTANTS// -> The name of a constant is written in capital letters\\ //SIGNALS // -> The name of a signal starts with a s_ \\ //VARIABLE // -> The name of a variable starts with a v_ \\