El sumador BCD no ve la salida del complementador de 9 en verilog

0

Estoy intentando construir un circuito sumador-sumador BCD en verilog usando un circuito sumador BCD y el circuito complementario de BCD-a-9.

Los módulos funcionan correctamente individualmente. Sin embargo, cuando se crea una instancia como parte del circuito sumador-sumador BCD, no obtengo la suma de salida correcta del sumador BCD cuando se simula.

En cambio, solo obtengo el LSB del complementador que va al BCD Adder y la siguiente advertencia, que de alguna manera implica que esto es lo que está sucediendo "[PCDPC] - El tamaño del puerto (4) no coincide con el tamaño de conexión (1) para el puerto 'N'" y "PCDPC] - Tamaño del puerto (4 ) no coincide con el tamaño de conexión (1) para el puerto 'B' ". N es la salida del complementador de los 9 y B es el agregado del sumador BCD.

Esto es algo frustrante, ya que el tamaño del puerto para N y B se define correctamente en sus módulos relevantes.

La declaración del módulo es la siguiente:

module BCDto9Compl(A, N);
input   [3:0] A;
output  [3:0] N;

module BCD_Adder(A, B, Cin, S, Cout);
input [3:0] A;
input [3:0] B;

BCD_AdderSub(A, B, Cin, S, Cout);
input    [3:0] A;
input    [3:0] B;

y la instanciación del módulo es la siguiente:

crear instancias de módulos

BCDto9Compl  B9C(B, F);
BCD_Adder    BcA(A, F, Cin, S, Cout);

Apreciaría mucho cualquier información que pueda dar.

Gracias

    
pregunta aLoHa

2 respuestas

1

Supongo que no ha declarado F en su creación de instancias y, como tal, la herramienta de síntesis lo está creando implícitamente. Las redes implícitas pueden terminar con el tamaño correcto, o predeterminarse a un cable de 1 bit, dependiendo de la herramienta de síntesis.

Siempre debes crear todos los cables y registros explícitamente. Además, usar las asignaciones de puertos explícitas (basadas en el nombre) en lugar de las implícitas (basadas en la posición) es un método preferido para evitar posibles problemas si cambia algo en la línea.

BCDto9Compl  B9C(B, F);

Se convierte en:

wire [3:0] B;
wire [3:0] F;
BCDto9Compl  B9C(.A(B), .N(F));

También intentaría usar nombres más descriptivos para redes y registros cuando sea posible.

    
respondido por el Tom Carpenter
0

La respuesta a la pregunta inmediata planteada es la sugerida por @Tom Carpenter y es que F (es decir, la conexión entre el complementador y BCD Adder) no se declaró como un cable dentro de la declaración del módulo y, por lo tanto, estaba predeterminado a un cable de 1 bit en verilog y causando el problema enfrentado.

    
respondido por el aLoHa

Lea otras preguntas en las etiquetas