Decisión de diseño de Verilog: ¿dónde debería ubicarse mi contador?

2

Estoy codificando en Verilog un contador típico de conteo a n y luego reinicio a 0. Mi módulo tiene la lógica para incrementar y restablecer el contador.

Mi problema es que no sé dónde se debe definir el contador.

Podría pasar el contador (como inout?) al módulo. Está bien, pero el contador todavía tiene que definirse en algún lugar, así que esto no me sirve de nada.

Nada más, excepto este módulo, debe tocar el contador, por lo que me gustaría que el contador se creara dentro de este módulo y no se transfiera ni salga.

¿Es esto razonablemente estándar y, de ser así, alguien apuntará a una referencia sobre cómo instanciar el contador?

(Estoy en el día 2 de Verilog, así que ten miedo, jeh)

EDITAR - Aquí está mi código. Por lo que puedo decir, funciona. No he implementado DIR == REVERSE todavía. Pareja de interesantes gotchas. La línea (ahora comentada) PASADOR = 0 estaba causando un error en un esquema; pensaba que STEPPER estaba ligado a la tierra así como a otra lógica.

También, uso = en lugar de < = en algunos lugares que involucran mostrador: tuve problemas de tiempo (supongo). La asignación de procedimiento eliminó (¿escondió?) el problema.

module cam(
    input [7:0] DIVISOR,
    input DIR,
    input SPINDLE,
    output reg STEPPER
    );

     parameter FORWARD = 1'b1;
     parameter REVERSE = !FORWARD;

     reg[7:0] counter = 0;

    always @(posedge SPINDLE) begin
    //  STEPPER = 0;
        if (DIR == FORWARD) begin
            counter = counter + 1;
            if (counter == DIVISOR) counter = 0;
            end
        else begin
        //  counter <= counter - 1;
        //  if (counter == (-1)) counter <= DIVISOR;
            end
    end

    always @(negedge SPINDLE) begin
        STEPPER = (counter == 0) ? 1 : 0;
    end

endmodule
    
pregunta Tony Ennis

1 respuesta

5

Si tiene dos módulos y desea usar uno en el otro, debe crear una instancia y conectar los puertos deseados.

Por ejemplo, si tiene un módulo superior con las señales clk , rst_count , inc_count y count_out y desea crear una instancia de un módulo de contador (ya escrito) con el nombre "MyCount" y con los nombres de puerto clk , rst , inc y data_out en él:

Counter  MyCount (.clk(clk), 
                  .rst(rst_count), 
                  .inc(inc_count),
                  .data_out(count_out));

Un excelente libro de inicio que lo llevará a través de Verilog para la síntesis (a diferencia de la gran parte del lenguaje que no se puede usar de esta manera, y es principalmente para simulación) es el "FPGA Prototyping with Verilog Illustrations" de Pong Chu.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas