dispositivo de ley cuadrada usando FPGA

0

Estoy tratando de implementar Square Law Device en Virtex 5 Family FPGA, pero antes de grabarlo en la FPGA intentaba simularlo en el kit ISE de Xilinx. No estoy seguro de si el código es correcto o no, pero aquí está el procedimiento que seguí:

  1. creó el esquema
  2. Generó e instató los núcleos IP para el contador binario (solo para fines de simulación) y el generador de onda sinusoidal mediante Cordic
  3. Insertó un dispositivo de prueba Verilog.

Pero no tuve éxito en simularlo. Estoy insertando el código para el dispositivo de prueba Verilog.

// Verilog test fixture created from schematic F:\Xilinx\demod\demod\schema.sch - Wed May 01 19:16:25 2013

'timescale 1ns / 1ps

module schema_schema_sch_tb();

// Inputs
   reg clk;

// Output
   wire [35:0] outp;

// Bidirs

// Instantiate the UUT
    schema UUT (
    .outp(outp), 
    .clk(clk)
   );

// Initialize Inputs
   'ifdef auto_init
         initial begin
             clk = 0;
                 repeat(100) begin
                     #10 clk = 1;
                     #10 clk = 0;
                 end
         end         
   'endif
endmodule

También estoy copiando el esquema del proyecto.

¿Dónde estoy equivocado?

Editar: el elemento multiplicador es rojo solo porque se seleccionó al tomar una instantánea. Intenté eliminar la instalación de los núcleos IP y obtuve algunos resultados pero no el correcto. Después de eso, reemplacé el bucle always begin con el bucle repeat(16) begin , pero muestra un error cerca de repetir .

    
pregunta mozart

2 respuestas

1

Su bloque initial begin no tiene un end , por lo que está obteniendo un error de sintaxis.

Si ve errores más allá de esto, por favor incluya el texto completo del error en su pregunta.

    
respondido por el Tim
0

Con el código en el estado actual, a menos que tenga otro archivo para la opción del compilador en que define auto_init , el compilador ignorará el bloque de repetición. Si desea que clk se inicialice a 0 en algunas condiciones y X y otras, entonces su bloque inicial debería tener este aspecto.

// Initialize Inputs
initial begin
  'ifdef auto_init
    clk = 0; // clk is 0 if auto_init is defined, otherwise default(i.e. X)
  'endif
  /* repeat block is outside the ifdef and still inside the initial block. 
   * Will run regardless of the ifdef result */
  repeat(100) begin
    #10 clk = 1;
    #10 clk = 0;
  end
end

Si desea que clk se inicialice a 0 , entonces la compilación debe leerse en 'define auto_init antes de ver 'ifdef auto_init . Alternativamente, debería poder definir auto_init desde la opción de línea de comando del compilador. Deberá consultar su manual de usuario, ya que puede ser diferente entre proveedores.

    
respondido por el Greg

Lea otras preguntas en las etiquetas