Soy nuevo en Verilog, así que, por favor, no me arruines.
Si en un módulo declaro como vector de entradas
[0:3]D
o
[3:0]D
¿Qué cambia?
Soy nuevo en Verilog, así que, por favor, no me arruines.
Si en un módulo declaro como vector de entradas
[0:3]D
o
[3:0]D
¿Qué cambia?
Ambos están permitidos.
[0: 3] D
Es la convención 'big endian'. Sin embargo, el 99.99% ** de todo el código de Verilog utiliza la convención little endian al declarar puertos y señales incluso cuando se construye un procesador big-endian.
La otra convención es que el bit LS tiene un índice 0. Por ejemplo, si tiene un bus de direcciones de 32 bits, la convención es usar:
cable [31: 0] address_bus;
Esto no significa que no puedas usarlo. Es posible que desee utilizar solo los 30 bits superiores en un módulo, en cuyo caso es perfectamente normal crear un bus de entrada:
entrada [31: 2] address_bus_top;
De hecho, cuando veo que en un módulo que recibo de uno de mis colegas (Todos los que siguen estas convenciones) me dice que es un subconjunto de un vector más grande.
Por último, si se trabaja con memorias (matrices bidimensionales), la convención de índice es:
reg [7: 0] byte_mem [0: 255];
He visto advertencias de los compiladores de Cadence si no se sigue esa convención. Creo que sucede si lo usas en combinación con $ readmem ...
** Estimación aproximada.
Cambia el significado de cómo se indexan MSB y LSB. D[0]
sería el MSB o LSB del vector de bits, dependiendo de la declaración que utilice. Si nunca hace referencia a un bit o parte de un vector, no hace ninguna diferencia.
Lea otras preguntas en las etiquetas digital-logic verilog