Verilog Netlist format with “\”

3

Después de sintetizar el diseño de mi nivel RTL en la lista de redes verilog, encuentro que la sintaxis es confusa. Esto es lo que quiero decir.

El compilador RTL me da:

  MUX2X1 g11005(.A (n_741), .B (\in_a[9] ), .S (n_2197), .Y (n_1063));

¿Qué es "\ in_a [9]"?

XST me da:

  wire [1 : 0] \inv/qmul/p ;

¿Qué es "\ inv / qmul / p"?

¿Son "\" y "/" incluso elegibles en las convenciones de nomenclatura verilog?

    
pregunta drdot

3 respuestas

4

El mecanismo de escape de verilog es poner \ al comienzo de un identificador y una "" al final. El espacio al final es obligatorio. Dentro de esos, cualquier cosa es un nombre de verilog legal. Es bastante feo.

Parece que el compilador ha "aplanado" parte del diseño, lo que podría haber sido inv.qmul.p se ha convertido en un solo identificador y la jerarquía de módulos ha desaparecido.

    
respondido por el pjc50
2

El \ es un carácter de escape, que escapa de toda la cadena de caracteres ascii hasta el siguiente carácter de espacio (tenga en cuenta el espacio antes del paréntesis de cierre de .B).

Entonces, \in_a[9] , es literalmente solo una red llamada in_a[9] . Ya no es parte de ningún bus, es solo un nombre de red que tiene algunos paréntesis. Similar a inv/qmul/p , este es solo un nombre de red con algunas barras inclinadas (he visto que los sintetizadores generan redes como esta cuando quiere preservar la jerarquía original de una red por alguna razón, aunque no puedo decir exactamente por qué).

Pienso que podrías tener una red verilog llamada wire \@#$%{{[[@#$^@ ; y no se quejaría, pero, por supuesto, nunca lo he intentado :)

    
respondido por el Tim
1

Consulte la especificación formal de sintaxis de Verilog para <IDENTIFIER>

  

Un identificador es cualquier secuencia de letras, dígitos, dólares   los signos ($) y el símbolo de subrayado (_), excepto que el primero debe ser un   letra o el guión bajo; el primer carácter no puede ser un dígito o   PS Las letras mayúsculas y minúsculas se consideran diferentes.   Los identificadores pueden tener hasta 1024 caracteres. Algunos basados en Verilog   Las herramientas no reconocen los caracteres identificadores más allá del 1024 como un   Parte significativa del identificador. Los identificadores escapados comienzan con   el carácter de barra invertida () y puede incluir cualquier ASCII imprimible   personaje. Un identificador de escape termina con un espacio en blanco. El líder   El carácter de barra invertida no se considera parte del identificador.

Tomando tu ejemplo wire [1 : 0] \inv/qmul/p ; . El cable se llama inv/qmul/p , típico de un diseño jerárquico (modular) que se aplana.

Dado que inv/qmul/p no es un 'literal desnudo' válido en Verilog (debido a las barras diagonales), se escribe como un identificador de escape. El mecanismo de escape es prefijar con barra diagonal inversa \ y agregar espacios en blanco .

    
respondido por el shuckc

Lea otras preguntas en las etiquetas