¿Hay algún tipo de no importa en Verilog (o VHDL) donde puedo decir:
"Use la señal A o la señal B, realmente no me importa porque serían funcionalmente equivalentes. Solo haga lo mejor que pueda, ¡buena suerte!"
Ejemplo:
module example
(input wire [1:0] idx,
// Sometimes an address of 3 shows up, but in this case the
// output is irrelevant (not used/read).
output wire [2+8-1:0] out);
reg [8*3-1:0] mem_r; // 3 words of 1 byte each, imagine content
wire [1:0] idx_restricted;
always @* begin
if(idx == 3) begin
idx_restricted = 2'b00;
end else begin
idx_restricted = idx;
end
end
assign output = {idx, mem_r[8*idx_restricted +: 8]};
// ***Here "idx" could be either idx, or idx_restricted***
endmodule
Sin el idx_restricted, hay un fuera de los límites para el mem_r.
Alguien sabe de algo como esto?
No. En lo que respecta a VHDL, son la misma señal o una señal diferente. Incluso si sabe que (por ejemplo) parten de la misma señal y pasan por dos puertas diferentes funcionalmente idénticas, o que son dos pines equivalentes de un bloque de E/S de un chip de propósito general, y puede elegir lo que hacen más tarde en el software.
Podrías hacerlo mandrónicamente, teniendo dos arquitecturas diferentes, una usando la señal A, otra usando la B, y ver cuál te dio la mejor síntesis. Eso funcionará para una señal incierta, pero rápidamente se volvería tedioso si necesitara comparar docenas o permutaciones de docenas. Ahí es cuando necesita iniciar la declaración 'generar', para crear esas arquitecturas para usted.
Si es el caso de que está asignando pines de bus, entonces solo tiene que hacer una puñalada inteligente en lo que probablemente sea mejor y dejar que las herramientas lo resuelvan. Solo comience a optimizar los pines si falla el enrutamiento.
No es necesario crear una variable idx_restricted separada. Verilog genera una X si el índice en mem_r está fuera de los límites, y eso se convierte en un no importa.
En el ejemplo proporcionado, esas dos señales son diferentes. Si el diseño puede funcionar con ambos, entonces, desde el punto de vista de síntesis/tiempo, debe usar idx
. Esto se debe a idx_restricted
que, técnicamente es casi como el idx
, todavía necesita decodificador cuando idx == 3
. Eso es solo agregar otro nivel de lógica.
De todos modos, las herramientas de síntesis generalmente harán el trabajo correcto y muy a menudo optimizarán la lógica de una buena manera. No me preocuparía por eso, a menos que realmente esté mirando los problemas de rendimiento/tiempo.
En principio, la respuesta a su pregunta es 'sí'. Un sintetizador puede tratar un valor X como indiferente, lo que puede llevar a una mejor minimización. En la práctica, sin embargo, esta es una muy mala idea. El problema fundamental es que la simulación trata los valores X como "desconocidos" o "comodines", que no es lo mismo que la interpretación del sintetizador. Esto significa que una simulación RTL de un diseño defectuoso puede pasar (incorrectamente), mientras que la simulación de netlist puede fallar (correctamente). Los verificadores de equivalencia también pueden fallar al detectar el error, es posible que obtenga informes de cobertura de código incorrectos, etc.
Mike Turpin escribió un buen artículo sobre esto hace años, véase aquí .
Supongo, por supuesto, que puede reescribir su código para pasar una X en el caso relevante.
casex
/ casez
y VHDL case?
; a "no me importa qué señal": mux, con una de las entradas X
para el caso en que "la salida es irrelevante"casex
y casez
se utilizan principalmente para controlar la síntesis . Usted dijo " la simulación trata a X... como... 'comodín'. Y no dijo nada sobre casex
o casez
en su respuesta original, ni aclaró que por 'valores X' se refería a valores en una expresión literal utilizada en a casex
o casez
. Y el simulador nunca dirá "la salida es irrelevante", dirá "la salida es desconocida". Las palabras tienen significado, y el significado importa.X
como 'desconocido o comodín'. 'comodín' es un término genérico común que se usa para describir casex
y casez
. Véase, por ejemplo, casex
el artículo de Cummings. Tenga en cuenta que todos sus artículos son sobre simulación, no síntesis. No tuve que decir nada sobre casex
, porque cualquiera que use Verilog regularmente sabrá lo que significa 'comodín'. No dije nada sobre 'irrelevante'; Simplemente cité el requisito del OP. Si realmente objeta mi respuesta, lea el artículo de Turpin, que vinculé.
Dave Grabowski
usuario98663
Moberg
Moberg
ks0ze