Inicializar un número de bit grande como cero

¿Existe una forma más eficiente de registrar un valor inicial para una variable que

reg [3:0] COUNT = 4'b0000;  

¿dónde, en este caso, si tuviera que definir, por ejemplo, un COUNT de 32 bits, necesitaría escribir 32'b (32 ceros aquí)?

Respuestas (2)

Nada dice que siempre necesita especificar todos los ceros en base binaria. De hecho, puedes escribirlo así:

reg [31:0] COUNT = 32'd0;

....utilizando una base decimal. El Verilog extenderá ese cero decimal al ancho de 32 bits especificado.

32'b0funcionará igual de bien, también lo hará 32'h0. Verilog rellenará cualquier constante 'sin firmar' con ceros y cualquier constante 'firmada' con copias del MSB.
reg [WIDTH -1: 0] count = {WIDTH{1'b0}}también puede ser usado.

Verilog siempre rellena los valores integrales estrechos con ceros a la izquierda cuando asigna variables más anchas, y los trunca a la izquierda cuando asigna variables más anchas a variables más estrechas. Así que podrías haber escrito

reg [31:0] COUNT = 0;

El signo de Verilog se extiende cuando todas las variables son tipos de datos firmados. Hay reglas que se vuelven más complicadas cuando mezclas operandos de tipos firmados y no firmados.

No especificar un ancho en absoluto no es la mejor opción. Por defecto, las constantes tienen un ancho de 32 bits, por lo que si intenta esto con un número de 16 bits, recibirá advertencias del sintetizador sobre constantes truncadas para que quepan.