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