1. Formulario de organización de ingeniería
La organización del proyecto generalmente incluye las siguientes partes, que son doc, par, rtl y sim. doc: generalmente almacena documentos relacionados con el proyecto, incluida la hoja de datos (manual de datos), el plan de diseño, etc., que se utilizan en el proyecto. Sin embargo, para que sea más fácil de ver para todos, los documentos de nuestra placa de desarrollo se recopilan y almacenan en el disco de datos;
par: almacena principalmente archivos de proyecto y algunos archivos de IP utilizados;
rtl: Almacena principalmente el código RTL del proyecto. Este es el núcleo del proyecto. El nombre del archivo y el nombre del módulo deben ser consistentes. Se recomienda almacenarlos por separado según el nivel del módulo;
sim: almacena principalmente el código de simulación del proyecto. En proyectos complejos, la simulación también es una parte indispensable, que puede reducir en gran medida la carga de trabajo de depuración.
2.
Declaración del encabezado del archivo
Al principio de cada archivo Verilog, debe haber una declaración. Incluidos los derechos de autor, autor, fecha de creación e introducción del contenido del archivo, como se muestra en la siguiente tabla.
3. Definición de entrada y salida
① una fila define solo una señal;
② Todas las señales están alineadas;
③ Junte las señales del mismo grupo.
4.
Definición de
parámetros
①
No se recomienda colocar la declaración de parámetros en el
módulo en
todas partes;
② Coloque la
definición del
parámetro
inmediatamente
después de la definición de entrada y salida del
módulo
;
③
Todos los nombres de constantes, como los
parámetros,
están en mayúscula.
5.
Definición de
cable / registro
① Ponga
la definición de
reg
y
cable
inmediatamente después del
parámetro
;
② Se recomienda juntar las señales con la misma función;
③ La señal debe estar alineada, el
registro
y el ancho de bit deben estar vacíos por
2
espacios
, y el ancho de bit y el nombre de la señal deben estar vacíos por al menos cuatro espacios;
④ El ancho de bit se describe en orden descendente,
[6: 0]
;
⑤ El reloj usa el prefijo
clk
y el reinicio usa el sufijo
primero
;
⑥ Las
palabras clave de
Verilog
no se pueden utilizar
como nombres de señales;
⑦ Solo se define una señal en una línea.
6 . Nombre de la señal
① La denominación de señales debe reflejar su significado, por ejemplo,
FIFO_wr
representa la
habilitación de lectura y escritura
FIFO
;
② Puede utilizar "_" para separar señales, como sys_clk
;
③ No utilice mayúsculas o minúsculas para las señales internas, se recomienda utilizar todas las minúsculas;
④ Utilice minúsculas para el nombre del módulo;
⑤ Para señales activas de bajo nivel, use
_n
como sufijo de señal;
⑥ Señal asíncrona, utilice
_a
como sufijo de señal;
⑦ La señal de ritmo retardado puro utiliza
_dly
como sufijo.
7.
Bloquear
siempre la
descripción
①
Si
necesita cuatro espacios en blanco;
② An siempre
necesita un comienzo
y un
final
;
③
Se requiere un comentario delante de
siempre
;
④
Beign
sugiere
ponerlo en la misma línea de
siempre
;
⑤ Uno siempre
y el siguiente siempre debe estar en
blanco una línea, no deje en blanco varias líneas;
⑥ La descripción del disparador de reinicio del reloj usa
posedge sys_clk
y
negedge sys_rst_n
⑦ Un
bloque siempre
contiene solo un reloj y se reinicia;
⑧ La lógica secuencial utiliza una asignación sin bloqueo.
8. Asignar método de descripción de bloque
①
La lógica de
asignación
no puede ser demasiado complicada, de lo contrario la legibilidad no es buena;
②
Se requiere un comentario antes de
asignar
;
③ La lógica combinatoria utiliza la asignación de bloqueo.
9.
Espacios y
TAB
Debido a que los diferentes intérpretes son inconsistentes con la traducción TAB, se recomienda no usar TAB y usar todos los espacios.
10.
Comentarios
① La descripción del comentario debe ser clara y concisa;
② No utilice descripciones absurdas y redundantes;
③ La descripción del comentario debe usar "//";
④ La descripción del comentario debe estar alineada;
⑤ Deben agregarse notas entre el código central y la definición de la señal.
11.
Creación de instancias del módulo
① La
instanciación del módulo
moudle
está representada por
u_xx
.
12. Otro
① Cuanto más simple sea el código, mejor, para que sea fácil de leer y comprender para otros;
② No utilice
declaraciones de bucle como
repetir
;
③ La
declaración inicial no se usa en el código
RTL
, excepto para el código de simulación;
④ Evite generar
pestillos
Latch
, como
si
no
hubiera
otra
rama en la
lógica combinatoria y el
caso
carece de una
declaración
predeterminada
;
⑤ Evite el uso de una gramática demasiado complicada y poco común, que puede resultar en una menor optimización del sintetizador gramatical.
¡Buen estilo de codificación es mi insistencia!