[Apio] Sintetizar y simular módulos PLL

108 views
Skip to first unread message

Diego Fernandez Gonzalez

unread,
Jan 11, 2017, 6:28:02 AM1/11/17
to FPGAwars: explorando el lado libre
Buenos días.

Estoy intentando simular el PLL que utiliza matthew venn en este hilo https://groups.google.com/forum/#!topic/fpga-wars-explorando-el-lado-libre/xZwEzmID0Es.

Este es el código de descripción que estoy usando.

gen.v

module gen(input clk, output clkout);

  wire clk;
  wire clkout;

  SB_PLL40_CORE #(
      .FEEDBACK_PATH("SIMPLE"),
      .PLLOUT_SELECT("GENCLK"),
      .DIVR(4'b0000),
      .DIVF(7'b1000010),
      .DIVQ(3'b101),
      .FILTER_RANGE(3'b001)
  ) uut (
      .RESETB(1'b1),
      .BYPASS(1'b0),
      .REFERENCECLK(clk),
      .PLLOUTCORE(clkout)
  );

endmodule

gen_tb.v

module gen_tb;

  reg  clk=0;
  wire clkout;

  gen gen25Mhz (.clk(clk),.clkout(clkout));

  initial begin
    $dumpfile("gen_tb.vcd");
    $dumpvars(0,gen_tb);
    #500
    $finish;
  end

  always #1 clk=!clk;

endmodule

Aunque parece sintetizar bien, a la hora de simularlo o verificarlo, me aparecía el siguiente error:
error: Unknown module type: SB_PLL40_CORE

Este error lo he podido solucionar gracias a Carlos modificando el archivo system.v y añadiendo la definición del módulo. 
El archivo está en la ruta ~/.apio/packages/toolchain-iverilog/vlib/system.v y he añadido al final esto:

module SB_PLL40_CORE (
input  REFERENCECLK,
output PLLOUTGLOBAL,
output PLLOUTCORE,
output LOCK,
input  EXTFEEDBACK,
input  DYNAMICDELAY,
input  RESETB,
input  BYPASS,
input  LATCHINPUTVALUE
);

endmodule

Bueno, después de toda la charla, ahora tengo el siguiente "problema".
El hardware verifica, sintetiza, no da errores al simular, pero no cambia la salida del PLL.



Muchas gracias a todo el que ha sido capaz de leer hasta aquí. ¿Se os ocurre algo que hacer? ¿Será que estos PLL no se pueden simular?


Un saludo.



Juan José Luna Espinosa

unread,
Jan 11, 2017, 6:44:49 AM1/11/17
to fpga-wars-explora...@googlegroups.com
Hola Diego,

En la prueba de sonido que hice hace algunas semanas yo utilizaba el módulo PLL y funcionaba correctamente.

Yo cogí este ejemplo de uso de PLL creo que de un ejemplo del creador de icestorm. Le añadí algunos comentarios.
Tiene más parámetros que los que has puesto.
Curiosamente no necesité añadir ningún fichero ni nada al sistema.

SB_PLL40_CORE #(
        .FEEDBACK_PATH("PHASE_AND_DELAY"),
        .DELAY_ADJUSTMENT_MODE_FEEDBACK("FIXED"),
        .DELAY_ADJUSTMENT_MODE_RELATIVE("FIXED"),
        .PLLOUT_SELECT("SHIFTREG_0deg"),
        .SHIFTREG_DIV_MODE(1'b0),
        .FDA_FEEDBACK(4'b0000),
        .FDA_RELATIVE(4'b0000),
        .DIVR(4'b0000),
        .DIVF(7'd3), // frecuency multiplier = 3 + 1 = 4; 4 * 12 = 48 mhz
        .DIVQ(3'd3),
        .FILTER_RANGE(3'b001),
    ) pll1 (
        .REFERENCECLK   (CLK),       // clk entrada
        .PLLOUTGLOBAL   (clk48mhz),  // clock salida
        .BYPASS         (1'b0),      // ?
        .RESETB         (1'b1)       // Reset se puede controlar, activo con 0
        //.LOCK (LOCK )              // lock es de salida e indica si el pll esta funcionando (frequency locked)
    );

Lo adjunto de nuevo en espera de que te sirva. Tampoco soy un experto, algunos parámetros no sé qué hacen.

Saludos.


--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/b537be57-3a5a-449b-ac75-ba8c144e4f1c%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

pruebaSonido.zip

Diego Fernandez Gonzalez

unread,
Jan 11, 2017, 6:59:30 AM1/11/17
to FPGAwars: explorando el lado libre
Muchas gracias Juan José.

El circuito he conseguido que sintetice bien, de hecho al hacer "apio buid" me dice que utiliza "PLL 1/1".
No he probado a subirlo a la iceZum, no me atrevo por que primero quería simularlo.

Voy a echarle un vistazo a tu proyecto. Veo que no tienes ningún techbech, ¿probaste a simularlo?.

Voy a estudiarme tu código a ver si encuentro inspiración.

Muchas gracias de nuevo.

matthew venn

unread,
Jan 11, 2017, 7:21:12 AM1/11/17
to FPGAwars: explorando el lado libre
No es possible para mi sumularlo tampoco. Despues de anadir la PLL, solo he hecho probar con la FPGA verdad.

Juan José Luna Espinosa

unread,
Jan 11, 2017, 7:21:41 AM1/11/17
to fpga-wars-explora...@googlegroups.com
Hola Diego. No probé a simularlo, lo debugueé directamente en la HX8K breakout board. Sin embargo el PLL me funcionó a la primera :-)



Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Juan José Luna Espinosa

unread,
Jan 11, 2017, 7:24:59 AM1/11/17
to fpga-wars-explora...@googlegroups.com
Otra cosilla, he encontrado el sitio donde encontré el ejemplo de Clifford:

https://github.com/cliffordwolf/yosys/issues/107

Diego Fernandez Gonzalez

unread,
Jan 11, 2017, 7:32:13 AM1/11/17
to FPGAwars: explorando el lado libre

Muchas gracias Matthew, pienso que no se va a poder simular.

Diego Fernandez Gonzalez

unread,
Jan 11, 2017, 7:35:45 AM1/11/17
to FPGAwars: explorando el lado libre
Gracias Juan José. ya había ese post.

Voy a ver si soy capaz de traducir la tabla de parámetros que hay en la documentación de Lattice sobre el SB_PLL40_CORE, a ver si logro entender para que son todos los parámetros posibles.

Creo que no va a ser posible simularlo.

Muchas gracias. 
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.

Carlos

unread,
Jan 11, 2017, 12:45:48 PM1/11/17
to FPGAwars: explorando el lado libre
Que tal Diego,
Una disculpa por no haber leído bien la pregunta en el otro thread, no se porque pensé que estabas haciendo el diseño en icestudio, de ahí lo de agregar el módulo en system.v.

Saludos

Diego

unread,
Jan 11, 2017, 1:07:38 PM1/11/17
to fpga-wars-explora...@googlegroups.com
No tienes que disculparte Carlos.

De todas formas, agregando el módulo a system.v ya no da error al verificar y me deja hacer la simulación, aunque no simula la salida del PLL, pero me da que eso tiene mala solución.

Lo voy a cargar en la iceZum a ver si funciona, pondré una frecuencia baja para poder verla en un led.

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/hTl47JUaYZ4/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Carlos 47

unread,
Jan 11, 2017, 6:22:49 PM1/11/17
to fpga-wars-explora...@googlegroups.com
Que tal Diego,

Puedes pasar la salida del PLL por varios FFD como divisores de frecuencia hasta "bajarla" hasta una frecuencia que se pueda ver, me parece que el PLL tiene limites en cuanto a la frecuencia minima que puede generar, esto lo vi en un issue en el github de yosys pero no puedo encontrarlo.

Saludos
Carlos

El 11 de enero de 2017, 12:07, Diego<diego...@gmail.com> escribió:
No tienes que disculparte Carlos.

De todas formas, agregando el módulo a system.v ya no da error al verificar y me deja hacer la simulación, aunque no simula la salida del PLL, pero me da que eso tiene mala solución.

Lo voy a cargar en la iceZum a ver si funciona, pondré una frecuencia baja para poder verla en un led.

Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Diego Fernandez Gonzalez

unread,
Jan 12, 2017, 6:17:37 AM1/12/17
to FPGAwars: explorando el lado libre
Tienes razón Carlos.

No encuentro el issue del git de yosys, pero según la documentación de Lattice, la frecuencia de entrada debe estar entre 10MHz y 133MHz (REFERENCECLK) y la de salida entre 16MHz y 275MHz (PLLOUT). Estos datos los he sacado del datasheet del ICE40, con mi deficiente ingles.

Que lastima no tener un osciloscopio para poder ver la salida del PLL a plena frecuencia, ese sera el próximo "juguete" que me pida...

Carlos 47

unread,
Jan 12, 2017, 3:28:48 PM1/12/17
to fpga-wars-explora...@googlegroups.com
Encontré el issue https://github.com/cliffordwolf/yosys/issues/107
En la respuesta de Clifford lo menciona, igual lo de los FFD.

Saludos

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Reply all
Reply to author
Forward
0 new messages