Ejemplo muy simple con el que estoy atascado. Quiero que el diseño escrito en Verilog devuelva un año definido en la fuente como formato de 16 bits al mundo exterior con dos bytes.
'define MY_YEAR 16'd2017
entonces necesito dividir de alguna manera esta constante en dos bytes para realizar algo como esto
wire [7:0] w_year_byte = w_current_byte ? ('MY_YEAR >> 8) : ('MY_YEAR & 8'hff);
Para mí, las expresiones anteriores con MY_YEAR no son correctas, ya que su resultado es de 16 bits. Y esta declaración no se compila en absoluto ...
Sé cómo hacerlo con vectores, pero nunca lo he hecho antes para las constantes; Vio varias respuestas para preguntas similares en Internet, pero aún no está claro cómo hacer las cosas correctamente . Puede parecer que mi enfoque es totalmente incorrecto, me alegraría enormemente educarme.
Actualización: mi fuente de Verilog es relativamente grande, y la idea principal era tener este año la definición al principio del archivo de origen, en la primera línea, porque se cambiará con frecuencia y No necesitaría bajar para encontrar el valor para cambiar.
Revisando la respuesta de Tom Carpenter, me di cuenta de que estaba cometiendo un error estúpido al declarar un parámetro, un parámetro local o un cable fuera del módulo (en la parte superior de la fuente, antes de la declaración del módulo), así que sigo su sugerencia de tener
'define MY_YEAR 16'd2017
en la primera línea de la fuente, y luego en algún lugar después de que haya una declaración del módulo
wire [15:0] c_MY_YEAR = 'MY_YEAR;
y luego use c_MY_YEAR[7:0]
y c_MY_YEAR[15:8]
como de costumbre. Gracias Tom!