QUARTUS II: Visualizar Máquinas de Estado em hierarquia ?

olá Pessoal,
Estou aqui novamente para pedir ajuda, mas agora em Verilog. A dúvida talvez nem seja exatamente com a linguagem, mas apenas com o aplicativo; mais exatamente com a estética da apresentação dos blocos no RTL viewer. O que acontece é que eu gostaria de criar máquinas de estado que fossem visualizadas em camadas, ao invés de tudo no mesmo sheet.
Baixei o template da ALTERA para um state machine do tipo Moore para criar nele o esqueleto do meu projeto. O projeto que eu havia feito anteriormente num uC consistia de estados principais e estados internos, digamos assim. Em outras palavras, quando o programa entrava num determinado modo de operação ( estado principal ), ele ficava retido nesse modo, e sequenciava operações internas ( estados internos ).
No programa abaixo, eu criei os estados principais
O esqueleto do programa é esse abaixo, no qual eu usei um case-endcase dentro do outro:
E olhando a simulação, as coisas acontecem como o previsto:
E olhando as maquinas de estados criadas, estão ocorrendo na sequencia:
Mas o RTL viewer não mostra os estados em camadas:
Sei que estou pastando em algo trivial, mas não descobri ainda como resolver.
Pensei em usar o recurso de função, ou até separar em arquivos .v distintos...
Poderiam dar uma luz ?
Estou aqui novamente para pedir ajuda, mas agora em Verilog. A dúvida talvez nem seja exatamente com a linguagem, mas apenas com o aplicativo; mais exatamente com a estética da apresentação dos blocos no RTL viewer. O que acontece é que eu gostaria de criar máquinas de estado que fossem visualizadas em camadas, ao invés de tudo no mesmo sheet.
Baixei o template da ALTERA para um state machine do tipo Moore para criar nele o esqueleto do meu projeto. O projeto que eu havia feito anteriormente num uC consistia de estados principais e estados internos, digamos assim. Em outras palavras, quando o programa entrava num determinado modo de operação ( estado principal ), ele ficava retido nesse modo, e sequenciava operações internas ( estados internos ).
No programa abaixo, eu criei os estados principais
S0>S1>S2>S3
num loop infinito, ou seja, na incialização começa em S0 e quando atinge S3 retorna para S0 circularmente. Os estados intermediários subS0>subS1>subS2
que se inciam somente quando alcança S3, como abaixo:
- S0<=S1
- S1<=S2
- S2<=S3
- subS0<=subS1
- subS1<=subS2
- subS0<=subS3
- S3<=S0
O esqueleto do programa é esse abaixo, no qual eu usei um case-endcase dentro do outro:
- Código: Selecionar todos
module moore_mac
(
input clk, data_in, reset,
output reg [2:0] data_out
);
reg [2:0] sub_state, state ;
// Declare states
parameter S0 = 3'b000, S1 = 3'b001, S2 = 3'b010, S3 = 3'b011, S3_0 = 3'b100, S3_1 = 3'b101, S3_2 = 3'b110, S3_3 = 3'b111;
// Determine the next state
always @ (posedge clk or posedge reset) begin
if (reset)
begin
state <= S0 ;
sub_state <= S3_0 ;
end
else
case (state)
S0:
begin state <= S1; end
S1:
/*if (data_in) state <= S1;
else */ begin state <= S2; end
S2:
/*if (data_in) state <= S1;
else */ begin state <= S3; end
S3:
// internal states - begin : keep on S3 *******************************
case (sub_state)
S3_0:
sub_state <= S3_1 ;
S3_1:
sub_state <= S3_2 ;
S3_2:
begin
sub_state <= S3_0 ;
state <= S0 ;
end
endcase
// internal states - end : exit from S3 *******************************
endcase
end
// Output depends only on the current state
always @ (state) begin
case (state)
S0:
data_out = S0 ;
S1:
data_out = S1 ;
S2:
data_out = S2 ;
S3:
data_out = S3 ;
default:
data_out = S0 ;
endcase
end
endmodule
E olhando a simulação, as coisas acontecem como o previsto:
E olhando as maquinas de estados criadas, estão ocorrendo na sequencia:
Mas o RTL viewer não mostra os estados em camadas:
Sei que estou pastando em algo trivial, mas não descobri ainda como resolver.
Pensei em usar o recurso de função, ou até separar em arquivos .v distintos...
Poderiam dar uma luz ?