Encontré un ejemplo de código Verilog como sigue:
module test #(parameter p=1) ();
localparam [1:0] lp = ~(p)'(1'b0);
endmodule
No puedo entender la asignación de localparam lp
.
¿Puede por favor explicar el código?
Encontré un ejemplo de código Verilog como sigue:
module test #(parameter p=1) ();
localparam [1:0] lp = ~(p)'(1'b0);
endmodule
No puedo entender la asignación de localparam lp
.
¿Puede por favor explicar el código?
Ejemplo muy extraño, no estoy seguro de qué pretendía hacer este ejemplo. Solo hay la declaración module
y una declaración localparam
, nada más.
Define un módulo que se denomina prueba, que no tiene puertos de entrada ni de salida (porque la lista de puertos es un conjunto vacío de paréntesis). Sin embargo, toma un solo parámetro llamado p (esto está dentro de la parte de paréntesis hash #(p)
parte de la declaración module
). El valor predeterminado del parámetro p es 1 a menos que se especifique lo contrario.
Dentro de la definición del módulo, hay otro parámetro declarado, que se llama lp, que se define como la expresión constante ~(p)'(1'b0)
.
El unario ~
es el operador de negación a nivel de bits, y la expresión entera literal (p)'(1'b0)
es una constante que tiene un ancho de bits de "p", y todos los bits son 0. Así que ~(p)'(1'b0)
es todos los bits 1. Tenga en cuenta que en verilog, siempre nos importa exactamente el ancho de bits de cada constante, cable y red; las constantes literales usan ese infijo apóstrofe '
para indicar el ancho de bits.
Este es un ejemplo muy extraño, porque sin puertos ni nada que haga uso de los parámetros, no hay nada para que haga un simulador o un compilador HDL.
Por lo general, los módulos Verilog tienen puertos de entrada y salida, con la excepción de un banco de pruebas que se usa para simular y probar otros módulos. Pero ese no es el caso aquí, porque este módulo no crea instancias de otros módulos, literalmente no hace nada.
Lea otras preguntas en las etiquetas hdl verilog hardware system-verilog