¿Es sintetizable $ realtobits?

1

He estado tratando de averiguar por qué mi programa verilog no funciona durante horas. Para probarlo, simplemente agregué algunas constantes como entradas a mi módulo y estoy usando el analizador lógico integrado para verificar las salidas. Por alguna razón, todos mis valores intermedios son 0.0 (flotación de 64 bits). Luego usé el ILA para verificar las entradas u y d y sus valores son cero. Ahora mismo estoy usando $ realtobits para crear constantes a partir de valores flotantes. ¿Es sintetizable esto?

binomial_controller bc(.u($realtobits(1.0025031276057951857)),
                       .d($realtobits(0.99750312239745997367)),
                       .u_v($realtobits(1.0026284483291278971)),
                       .d_v($realtobits(0.99737844229982886013)),
                       .p_up($realtobits(0.49968750024413099986)),
                       .p_up_v($realtobits(99.500999000666340066)),
                       .p_dn($realtobits(0.50031249975586900014)),
                       .p_dn_v($realtobits(0.50035863068484875971)),
                       .int_exp($realtobits(0.99999843750122074937)),
                       .price($realtobits(100.0)),
                       .strike($realtobits(100.0)),
                       .start(start),
                       .clk(cclk),
                       .last_nine_tree_elements(r),
                       .ready(ready));
    
pregunta chasep255

1 respuesta

3

Respuesta simple. No, no creo que lo sea.

Hay un documento de ayuda / referencia en línea muy útil que tiene páginas que describen las sintaxis y las construcciones de Verilog. Tiene una página en la función $realtobits , que indica

  

Las funciones de conversión no son sintetizables.

No puedo responder por la precisión de la fuente, pero tiene sentido. Las funciones Verilog $... tienden a ser funciones auxiliares para cosas como la inicialización de la memoria, la visualización en simulación, etc. en lugar de construcciones realmente sintetizables. Este no es siempre el caso: cosas como $signed son sintetizables por lo que sé.

Además, los tipos de datos complejos, como real , time y event tampoco son sintetizables. Desde ese punto de vista, por lo tanto, tiene sentido que cualquier cosa que implique la conversión hacia y desde ellos no se pueda sintetizar.

Como @PeterGreen señala en los comentarios, si una construcción es sintetizable se reduce tanto como cualquier cosa a la herramienta de síntesis. Como especifica Xilinx como etiqueta, puede consultar la Guía del usuario de XST .

Tabla 7-33 en la página 518 de ese documento, en una sección titulada "Tareas y funciones del sistema Verilog admitidas en XST", se indica claramente qué funciones del sistema son compatibles y cuáles se ignoran.

$realtobits no aparece específicamente en esa tabla, por lo que se incluye en la entrada final que dice: All others: Ignored , lo que indica que la herramienta no la admite.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas