[iceStudio] Bloque Contador Generico

83 views
Skip to first unread message

Carlos

unread,
Dec 15, 2016, 12:31:38 AM12/15/16
to FPGAwars: explorando el lado libre
Que tal,
Estoy haciendo un contador genérico para derivar más bloques de el. La cuenta es ascendente de 1 en 1 desde el parámetro INIT_VAL hasta FIN_CNT y regresa al valor de INIT_VAL, es de 4bits, y al llegar a FIN_CNT pone un 1 lógico en la terminal tc (terminal count) que se pone a 0 lógico con los demás valores del contador. También tiene una entrada en, que es para habilitarlo.

Las dudas que tengo son:
¿Se me escapa algún parámetro que se le podría añadir? Pensé que la cuenta de 1 en 1 es la más usada, tal vez ese 1 podría añadirse como un parámetro.
¿Como podría hacer el contador descendente usando el mismo bloque? O sería mejor hacer un bloque para el contador ascendente y otro para el descendente para evitar complicar las cosas.
¿Puedo poner el always @(posedge clk) dentro de un if, creo que no es posible?

Adjunto el proyecto para la iCEStick.
Saludos
-c
contador.ice

Juan José Luna Espinosa

unread,
Dec 15, 2016, 2:19:33 AM12/15/16
to FPGAwars: explorando el lado libre
Hola Carlos,
Se me ocurre que puedes añadir una línea countDirection, que sea 1 para ascender y 0 para descender.
No implica ninguna desventaja, ni pérdida de recursos de ningún tipo, ya que al sintetizar, si ese parámetro countDir se ha puesto como constante, se generará el circuito óptimo igual que si no se hubiera definido ese parámetro. Es lo bueno de las fpga.


¿Puedo poner el always @(posedge clk) dentro de un if, creo que no es posible?

Efectivamente, creo que no se puede.

Juan José Luna Espinosa

unread,
Dec 15, 2016, 2:24:15 AM12/15/16
to FPGAwars: explorando el lado libre
Para hacer que descienda también, puedes hacer algo así:

always @(posedge clk) begin
    if(en) begin
        if (countDir == 1'b1 ) begin
                _o <= _o + 1;
                if(_o >= FINAL_CNT) begin
                    _o <= INIT_VAL;
                end
        end
        else begin
                _o <= _o - 1;
                if(_o == 0) begin
                    _o <= FINAL_CNT;
                end
        end
    end
end

Carlos 47

unread,
Dec 15, 2016, 4:59:50 AM12/15/16
to fpga-wars-explora...@googlegroups.com
Hola Juan José,
Gracias por revisar y corregir el código, buena idea la de controlar el sentido con una sola entrada, creo que el código final terminara siendo muy similar a tu código, solo que tengo un par de dudas:

» En la parte del contador descendente _o <= FINAL_CNT; creo que deberia ser _o <= INIT_VAL, el contador al hacer underflow debería regresar al valor inicial del registro _o que es INIT_VAL.

» Y creo que los parámetros deberían tener nombres similares, FIN_CNT y INIT_CNT me parecen buenos nombres xD.

¿Pudiste sintetizar y revisarlo en fisico?

Hay una herramienta en desarrollo que se llama icedrom muestra las compuertas que se ocuparon para implementar el diseño que sintetizaste, alguien sabe si hay forma de obtener el archivo .json que requiere?

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/b0c5a5fa-ed61-4644-944e-9190fab07ec8%40googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

Juan José Luna Espinosa

unread,
Dec 15, 2016, 5:07:30 AM12/15/16
to fpga-wars-explora...@googlegroups.com
De acuerdo con tus modificaciones; no, no lo he sintetizado :-)

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.

Carlos

unread,
Dec 15, 2016, 10:02:54 AM12/15/16
to FPGAwars: explorando el lado libre
Que tal,

Acá esta un ejemplo de cada uno de los contadores, ambos para la iCEStick, todavía sin ser bloques.

Saludos
contador_desc.ice
contador_asc.ice
Reply all
Reply to author
Forward
0 new messages