Quiero probar un contador de 0 a 12. Puede ser un contador simple.
always @(posedge clock) begin
count <= count+1;
if (count == 4'd12) begin
counter <= 0;
end
end
Pero mi tarea necesita contar salteada. Por ejemplo, cuando el salto es 4, cuente 0-5-10-15-20-25-30, porque es un contador de 4 bits, debe continuar contando como 0-5-10-2-7-12. Este conteo de saltos puede ser cualquier número entre 0 y 11. ¿Cómo modificar el código simple de verilog según mi tarea?
Tal vez le sea útil a alguien.
module Counter(iClk, iRst, iSkip, iRev, oState);
input iClk, iRst, iSkip, iRev;
//declare oState:
//declare internal wires and reg types here:
output [3:0] oState;
parameter [3:0] limit = 14;
reg [4:0] temp = 5'd0;
reg [4:0] cnt = 5'd0;
integer skip = 1;
always @ (posedge iClk)
begin
if (!iRst) begin
temp = 5'd0; // to prevent overflow 5bits required
cnt = 5'd0;
end
else begin
if (iSkip && !iRev) begin // only iSkip asserted
skip = 5;
end
else if(!iSkip && iRev) begin // only iRev asserted
skip = -2;
end
else if(iSkip && iRev) begin //iSkip and iRev asserted
skip = 9;
end
else begin //Neither asserted
skip = 1;
end
temp = temp + skip;
if (temp > limit) begin
cnt = temp-limit-1;
end
else begin
cnt = temp;
end
temp = cnt;
end
end
broma
Berker Işık
broma
Berker Işık
Berker Işık
Berker Işık
broma
Berker Işık
Berker Işık
Berker Işık
Berker Işık
broma
Berker Işık
broma
david tweed
wire [3:0] temp = count + 1 + skip; always @(posedge clock) count <= temp >= limit ? temp - limit : temp;
Berker Işık
Berker Işık
david tweed
count
y, con suerte, demostrar la lógica más claramente. Ciertamente puede escribirlo sin usar el cable. Y siempre que solo haga una asignación acount
, puede usar una asignación de bloqueo o de no bloqueo.always @(posedge clock) count = count + 1 + skip >= limit ? count + 1 + skip - limit : count + 1 + skip;