Usando iSim para simular el esquema CLA de 16 bits en Xilinx, todas las entradas y salidas en la forma de onda son 'X'. ¿Cómo puedo depurar?

1

Estoy construyendo un Ady Lookahead Adder de dieciséis bits para mi clase de EE. Definitivamente soy un noob a todo esto, así que ten paciencia, sin embargo, he estado buscando en Google por un MOMENTO y no he encontrado ninguna respuesta.

Aquí está el código para el banco de pruebas. SÉ que esta parte es correcta porque nos la dio el profesor.

Aquí está:

// Verilog test fixture created from schematic /home/alexx/Documents/ee101_xilinx/ee101_lab5_xilinx/ee101_lab5_cla/cla16.sch - Mon Mar 16 17:00:11 2015

'timescale 1ns / 1ps

module cla16_tb();

// Inputs
   reg C0;
   reg [15:0] A;
   reg [15:0] B;

// Output
   wire C16;
   wire [15:0] S;

// Bidirs

// Instantiate the UUT
   cla16 UUT (
        .C16(C16),
        .C0(C0),
        .A(A),
        .B(B),
        .S(S)
   );
// Initialize Inputs
   'ifdef auto_init
         initial begin
            A = 16’h0000; B = 16’h0000; C0 = 0;
            #200;
            A = 16’h0000; B = 16’h0000; C0 = 1;
            #100;
         end
   'endif
endmodule

Aquí está la salida de la consola en iSim:

reiniciar

ejecuta 2000 ns

El simulador está realizando el proceso de inicialización del circuito.

Proceso de inicialización del circuito terminado.

Así que no hay mucha ayuda allí.

Ejecuté la herramienta "verificar esquema" en CADA esquema asociado y todos devolvieron ninguna advertencia y ningún error. Lo único diferente de esto que los esquemas que he hecho en el pasado es el uso de símbolos creados por el usuario. Recibimos un PG completo y tenemos que crear nuestra propia CLL, usarla para hacer un sumador de 4 bits y combinarlas para hacer un sumador de 16 bits.

Estoy muy, muy frustrado por esto.

He adjuntado una captura de pantalla de la forma de onda, y puedo adjuntar capturas de pantalla de los esquemas si es necesario.

Por favor, ayúdame a depurar esto.

¡Gracias!

forma de onda de iSim

    
pregunta Alexx Murphy

2 respuestas

1

No asumas que es bueno solo porque el profesor te lo dio. Si aún no lo has aprendido, lo aprenderás en algún momento. Si asumes, haces un trasero de ti y de mí. VERIFICAR SUS ASUNCIONES. Para mí, parece que puede haber algunos problemas en el banco de pruebas.

Dos cosas para probar: inicialice los registros a cero agregando = 0 justo antes de los puntos y coma (por ejemplo, reg C0 = 0;). Lo segundo que se debe intentar es comentar el ifdef / endif alrededor del bloque inicial (agregar // al principio de ambas líneas).

Si esos no funcionan, aislelo comentando todo el bloque UUT e intente nuevamente.

    
respondido por el alex.forencich
0
  • Si desea utilizar ifdef auto_init , debe compilar su banco de pruebas definiendo auto_init . En modelsim puede usar el siguiente script para compilar su banco de pruebas y definir el parámetro auto_init . (escriba el siguiente script en Transcripción en lugar de compilación manual):

    vlog cla16_tb.v +define+auto_init

  • Sin embargo, puede eliminar las declaraciones ifdef auto_init y endif del banco de pruebas y compilarlas sin ninguna definición adicional. (compilación manual)

Simulé el siguiente código (cla16.v) con tu banco de pruebas con los dos métodos anteriores y podría obtener el resultado correcto:

module cla16(A,B,C0,S,C16);
    input [15:0] A,B;
    input C0;
    output [15:0] S;
    output C16;

    reg [15:0] S;
    reg [16:0] C;

    integer i;
    always @* begin
        C[0] <= C0;
        for (i=0; i<16; i=i+1) begin
            S[i] <= A[i] ^ B[i] ^ C[i];
            C[i+1] <= ( A[i] & B[i] ) | ( A[i] & C[i] ) | ( B[i] & C[i] );
        end
    end

    assign C16 = C[16];

endmodule
    
respondido por el Amir

Lea otras preguntas en las etiquetas