No hay nada de malo en usar enteros para RTL per se , pero hay razones por las que algunos lo evitan. Esta es realmente una pregunta acerca de la "mejor práctica" subjetiva y eventualmente tendrás que descubrir por ti mismo lo que prefieres. Como ayuda para eso, compartiré mi experiencia y pensamientos sobre esto.
Principalmente , estoy a favor de usar enteros (restringidos), también cuando escribo para síntesis. A veces lo hago, pero en la práctica , generalmente me quedo con signed
y unsigned
. Explicaré por qué.
De todos modos, se verá obligado a utilizar tipos de datos vectorizados en parte de su diseño:
Casi ninguna IP de proveedor o IP de terceros utilizará el integer
tipo para puertos
Por ejemplo, al enviar datos a través de BlockRam, incluso si lo infiere y, por lo tanto, nunca necesita interactuar con ninguna IP / macro / primitiva, lo más probable es que necesite convertir a tipo vectorizado de todos modos
Incluso si ninguno de los anteriores se aplica, en su mayoría necesitará interactuar con algo más en algún momento (un puerto de nivel superior, si nada más)
Dado que no puede utilizar integer
el diseño completo, es posible que desee omitirlo todo, porque:
En algunos puntos, tendrá que hacer las conversiones de todos modos, y esto elimina parte del punto de uso integer
en primer lugar
Además, para la simulación, estas conversiones generalmente se llamarán con vectores de 'U'
o 'X'
, antes del reinicio, o en otros momentos, y cada llamada de función generará un mensaje de advertencia de la función del paquete, abarrotando las advertencias / indicaciones de la simulación
Inconvenientes del usointeger
:
Al contrario de los tipos vectorizados, los enteros no tienen 'U'
y 'X'
; Los encuentro muy útiles en las simulaciones. Verá cómo se propagan las señales no inicializadas a través del diseño, y probablemente reaccionará si ve muchas señales no inicializadas después del reinicio. Este no será el caso si se usan números enteros.
Con los números enteros, existe un mayor riesgo de simulación / síntesis de errores de coincidencia al sumar o restar, lo que resulta en un exceso o un desbordamiento. (Como ya lo señaló otra persona).
Casos típicos donde encuentro integer
que realmente es una buena opción:
Para señales / contadores de depuración que supervisa a través de chipScope / signalTap, etc.
Representación totalmente interna de contadores, que nunca entran o salen de su propio código. Sí, hay tales casos, por ejemplo, si usted está escribiendo una FIFO y que son las escrituras-navegación a estima / lee para formar las señales full
, empty
, almostFull
etc (sin embargo, la aritmética de los punteros es una manera mejor que a estima en este caso. ..)
Mis propias conclusiones: a veces uso enteros, pero con moderación, y principalmente en los casos descritos anteriormente. No veo mucha sobrecarga en el uso unsigned
y en signed
lugar del número entero, y por lo tanto, generalmente me quedo con ellos.