Estou estudando Verilog a fundo, e já começaram a surgir algumas dúvidas, certamente triviais pra alguns, mas aqui vai:
O programa abaixo, baixei do seguinte site Introduction to Verilog - UPC - Departament de Ciències de, e na página 25 do PDF, no exemplo copiado abaixo, eu não consegui entender o porquê de terem declarado a variável Zot além de out, também como reg sob o pretexto de ser usado numa lista de sensitividade de um bloco always, mas não vi essa variavel sendo usada além de apenas como saída.
- Código: Selecionar todos
module my_fsm (clk, rst, start, skip3, wait3, Zot);
input clk, rst, start, skip3, wait3;
output [2:0] Zot; // Zot is declared reg so that it can
reg [2:0] Zot; // be assigned in an always block.
parameter state0=0, state1=1, state2=2, state3=3;
reg [1:0] state, nxt_st;
always @ (state or start or skip3 or wait3)
begin : next_state_logic //Name of always procedure.
case (state)
state0: begin
if (start) nxt_st = state1;
else nxt_st = state0;
end
state1: begin
nxt_st = state2;
end
state2: begin
if (skip3) nxt_st = state0;
else nxt_st = state3;
end
state3: begin
if (wait3) nxt_st = state3;
else nxt_st = state0;
end
default: nxt_st = state0;
endcase // default is optional since all 4 cases are
end // covered specifically. Good practice says uses it.
always @(posedge clk or posedge rst)
begin : register_generation
if (rst) state = state0;
else state = nxt_st;
end
always @(state) begin : output_logic
case (state)
state0: Zot = 3’b000;
state1: Zot = 3’b101;
state2: Zot = 3’b111;
state3: Zot = 3’b001;
default: Zot = 3’b000;// default avoids latches
endcase
end
endmodule
Teria sido isso desnecessário, ou tem algo que me escapou ?