Tengo tres estados en mi máquina mealey, cuando dcsel = 0 luego pasa al estado de escala de grises s1, si dcsel = 1 entonces pasa al estado de corrección de puntos s2, restablece = 1 y permanece en estado inactivo s0. Quiero que en estado de corrección de escala de grises y puntos después de la demora del ciclo de ocho horas debe generar una señal sin cambiar a otro estado. Significo que la enbala generada debe ser independiente de la transición de estado. ¿Puedo usar tarea para llamar demora? Intenté usarlo, pero tengo dudas de si funcionará.
He intentado el código verilog es
always @(dcsel or state or rst)
case (state)
idle: begin
if (dcsel == 1'b1 & rst==1'b0 & hold_wr_dc == 1) begin
// valid_wr_en to enbale fifo to write after 8 sclk
next_state = dc;
valid_wr_en <= 1;
end else if (rst) begin
next_state = idle;
valid_wr_en = 0;
end else if (dcsel==1'b0 & rst==1'b0 & hold_wr_gs == 1) begin
next_state = gs;
valid_wr_en = 1;
end
end
gs: begin
if (dcsel==1'b1 & rst==1'b0) begin
next_state = dc;
valid_wr_en = valid_en;
valid_rd_en
end else if(dcsel==1'b0 & rst==1'b0) begin
next_state = gs;
valid_wr_en = valid_en;
valid_rd_en
end else if(rst) begin
next_state = idle;
valid_wr_en = 1'bz;
valid_rd_en
end
end
dc: begin
if (dcsel==1'b1 & rst==1'b0) begin
next_state = dc;
valid_wr_en = valid_en;
valid_rd_en
end else if(dcsel==1'b0 & rst==1'b0) begin
next_state = gs;
valid_wr_en = valid_en;
end else if(rst) begin
next_state = idle;
valid_wr_en = 1'bz;
valid_rd_en
end // else: !if(dcsel)
end
endcase
always @(posedge sclk, posedge rst) begin
if (rst)
cnt <=0;
else if(cnt != 'd8)
cnt <= cnt +1;
else if(cnt == 'd8) // grayscale ,wait till 6 sclk to write in fifo
hold_wr_gs < = 1;
else if(cnt == 'd6) // for dot correction wait till 8 sclk to write in fifo
hold_wr_dc <= 1;
else
cnt <= 3'b0;
end