He estado tratando de averiguar por qué mi programa verilog no funciona durante horas. Para probarlo, solo 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 (flotante de 64 bits). Luego usé el ILA para verificar las entradas u y d y sus valores son cero. En este momento estoy usando $realtobits para crear constantes a partir de valores flotantes. ¿Es esto sintetizable?
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));
Respuesta sencilla. No, no creo que lo sea.
Hay un documento de referencia/ayuda en línea muy útil que tiene páginas que describen las construcciones y la sintaxis de Verilog. Tiene una página sobre la $realtobits
función, que indica
Las funciones de conversión no son sintetizables.
No puedo garantizar la precisión de la fuente, pero tiene sentido. Las $...
funciones de Verilog tienden a ser funciones de ayuda 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 hasta donde yo 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 no se pueda sintetizar nada que implique convertirse hacia y desde ellos.
Como @PeterGreen señala en los comentarios, si una construcción es sintetizable se reduce más que nada a la herramienta de síntesis. A medida que especifica Xilinx como una etiqueta, puede consultar la Guía del usuario de XST .
La Tabla 7-33 en la página 518 de ese documento, en una sección titulada "Tareas y funciones del sistema de 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 no es compatible con la herramienta.
persecucion255
pedro verde
pre_aleatorizar