Falta la señal en la lista de sensibilidad y el truncamiento de la expresión

0

Para el siguiente módulo, recibo varias advertencias, ¿me pueden aconsejar cómo resolverlas?

Línea 22: El resultado de la expresión de 17 bits se trunca para encajar en el destino de 16 bits. Línea 25: la señal que falta en la lista de sensibilidad se agrega para fines de síntesis. HDL y las simulaciones posteriores a la síntesis pueden diferir como resultado. Línea 26: la señal que falta en la lista de sensibilidad se agrega para fines de síntesis.

module module_cell1( in_85,in_86,in_87,out_13,clk,rst );
parameter DATA_WIDTH = 16;

// Interfaces
input clk;
input rst;

input [DATA_WIDTH - 1:0] in_85,in_86,in_87;
output [DATA_WIDTH - 1:0] out_13;
reg [DATA_WIDTH - 1:0] out_13;

//clk state
reg [DATA_WIDTH - 1:0] clkState;

// Procedural Assignments

always @ ( posedge clk or negedge rst )
begin
if (~rst)
    clkState <= 0;
else
    clkState <= clkState + 1;

//Clk based State
case (clkState)
1: out_13 <= (in_87)?in_86 : in_85;

endcase
end

endmodule
    
pregunta Yakov

1 respuesta

2

Tu lógica de bloqueo siempre está rota. Exactamente como está escrito, la lógica que estás describiendo intentará cargar out_13 tanto en el borde del reloj como en la aserción de reinicio, porque no lo incluirás en el caso else .

No hay un estándar sintetizable equivalente a un flop que carga un valor dinámico en el borde positivo del reloj y cuando se restablece, es probable que la herramienta se esté quejando.

Debería verse así en su lugar:

always @ ( posedge clk or negedge rst )
begin
if (~rst)
    clkState <= 0;
else begin 
    clkState <= clkState + 1;

    //Clk based State
    case (clkState)
    1: out_13 <= (in_87)?in_86 : in_85;

    endcase
end
end
    
respondido por el Tim

Lea otras preguntas en las etiquetas