Verilog - Referencia a buses aplanados en la instanciación de módulos

1

Tengo una lista de redes de nivel de puerta de verilog generada por Synopsys Design Compiler.

DC fue dirigido para aplanar todos los buses y puertos al crear la lista de redes, y la declaración del módulo se encuentra a continuación:

module DES_SBOX1 ( CLK, \ptext[5] , \ptext[4] , \ptext[3] , \ptext[2] , 
    \ptext[1] , \ptext[0] , \key[5] , \key[4] , \key[3] , \key[2] , 
    \key[1] , \key[0] , \ctext[3] , \ctext[2] , \ctext[1] , 
    \ctext[0]  );

Mi problema es que cuando voy a usar este módulo en un banco de pruebas, recibo errores de sintaxis porque no estoy seguro de cómo hacer referencia a los nombres de los puertos (debido a la barra inclinada).

Aquí hay un intento de crear una instancia de uno de estos módulos:

DES_SBOX1 feistel( .CLK(CLK_tb),
                 .ptext[5](ptext_tb[5]),
                 .ptext[4](ptext_tb[4]),
                 .ptext[3](ptext_tb[3]),
                 .ptext[2](ptext_tb[2]),
                 .ptext[1](ptext_tb[1]),
                 .ptext[0](ptext_tb[0]),
                 .key[5](1'b0),
                 .key[4](1'b0),
                 .key[3](1'b0),
                 .key[2](1'b0),
                 .key[1](1'b0),
                 .key[0](1'b0),
                 .ctext[5](ctext_tb[5]),
                 .ctext[4](ctext_tb[4]),
                 .ctext[3](ctext_tb[3]),
                 .ctext[2](ctext_tb[2]),
                 .ctext[1](ctext_tb[1]),
                 .ctext[0](ctext_tb[0]),
                );

... y aquí está el mensaje de error de Modelsim PE:

** Error: C:\Users\Kristin\Desktop\des_feistel_90nm\testbench.v(14): (vlog-2730) Undefined variable: 'ptext'.

** Error: C:\Users\Kristin\Desktop\des_feistel_90nm\testbench.v(14): near "[": syntax error, unexpected '[', expecting ')'

También he intentado usar la barra diagonal invertida en la creación de instancias en sí, de esta forma:

 .\ptext[5](ptext_tb[5])

..pero esto también da un error de sintaxis.

Me pregunto cuál es el significado de la barra diagonal inversa en primer lugar?

Cualquier idea de cómo instanciar correctamente este módulo es muy apreciada.

Gracias de antemano!

-k

    
pregunta kbarber

2 respuestas

3

Parece que te estás encontrando con los identificadores de escape de Verilog gotcha:

  

§2.7.1 Identificadores escapados

     

Los identificadores escapados comenzarán con el carácter de barra invertida () y   Termina con espacio en blanco (espacio, tabulador, nueva línea). Proporcionan un medio de   incluyendo cualquiera de los caracteres ASCII imprimibles en un identificador (el   valores decimales 33 a 126, o 21 a 7E en hexadecimal).

     

Ni el carácter de barra diagonal inicial ni el blanco de terminación   El espacio se considera parte del identificador. Por lo tanto, un   el identificador de escape \ cpu3 se trata de la misma manera que un no capturado   identificador cpu3.

Por lo tanto, no solo debe escribir correctamente el nombre del puerto de escape, sino que también debe asegurarse de no olvidar poner un espacio en blanco al final. Por ejemplo:

DES_SBOX1 feistel( .CLK(CLK_tb),
                 .\ptext[5] (ptext_tb[5]),
                 .\ptext[4] (ptext_tb[4]),
  ...

Espero que ayude. ¡Buena suerte!

    
respondido por el user8459
1

Wow, nunca he visto una lista de redes con nombres de puertos escapados así. Supongo que es porque tienen [] como parte del nombre del puerto.

Intente eliminar los nombres de puertos de la lista de conexiones de puertos. Es decir, use el mapeo posicional en lugar de conectarse por nombre. Normalmente, esto se desaconseja porque "por nombre" es más legible, pero puede hacer que pase el error de compilación en este caso.

por ejemplo

DES_SBOX1 feistel(CLK_tb,        // CLK
                 ptext_tb[5],    // ptext[5]
                 ptext_tb[4],    // ptext[4]
                 ptext_tb[3],    // ptext[3]
                 ptext_tb[2],    // ptext[2]
                 ptext_tb[1],    // ptext[1]
                 ptext_tb[0],    // ptext[0]
                 1'b0,           // key[5]
                 1'b0,           // key[4]
                 1'b0,           // key[3]
                 1'b0,           // key[2]
                 1'b0,           // key[1]
                 1'b0,           // key[0]
                 ctext_tb[5],    // ctext[5]
                 ctext_tb[4],    // ctext[4]
                 ctext_tb[3],    // ctext[3]
                 ctext_tb[2],    // ctext[2]
                 ctext_tb[1],    // ctext[1]
                 ctext_tb[0]     // ctext[0]
                );
    
respondido por el dwikle

Lea otras preguntas en las etiquetas