Da libertad de síntesis para elegir la señal

2

Me pregunto si hay algún tipo de indiferencia en Verilog (o VHDL) donde pueda decir, use la señal A o la señal B, realmente no me importa porque serían funcionalmente equivalentes, solo ¡Haz tu mejor esfuerzo, 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 idx_restricted, hay un fuera de límites para mem_r.

¿Alguien sabe algo como esto?

    
pregunta Moberg

3 respuestas

2

No. En lo que respecta a VHDL, son la misma señal o una señal diferente. Incluso si sabe que (por ejemplo) comienzan con 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 qué hacer. más adelante en software.

Podrías hacerlo de manera mandrónica, al tener dos arquitecturas diferentes, una que usa la señal A, una que usa 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 debe activar la declaración 'generar', para crear esas arquitecturas por usted.

Si es el caso de que esté asignando pasadores de bus, entonces solo tiene que hacer un intento inteligente por lo que probablemente sea mejor y dejar que las herramientas lo resuelvan. Solo comience a optimizar los pines si falla el enrutamiento.

    
respondido por el Neil_UK
0

No es necesario crear una variable idx_restricted separada. Verilog genera una X si el índice en mem_r está fuera de límites, y eso se convierte en un no importa.

    
respondido por el dave_59
0

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 la síntesis / sincronización debe usar idx . Esto se debe a que idx_restricted , que técnicamente es casi como idx , aún necesita decodificador cuando idx == 3 . Eso es solo agregar otro nivel de lógica.

De todos modos, las herramientas de síntesis generalmente hacen el trabajo correcto y, a menudo, optimizan la lógica de una buena manera. No me preocuparía por eso, a menos que realmente esté viendo los problemas de rendimiento / sincronización.

    
respondido por el Dawid Grabowski

Lea otras preguntas en las etiquetas