1 votos

¿Por qué 4 reglamentos para controlar un FSM? Verilog

Estoy estudiando un controlador de SDRAM (en Verilog), que utiliza 4 reg para controlar un FSM. No he podido entender por qué utilizan 4 regs en lugar de 2 (state y next_state).

Este es el fragmento de código:

reg [STATE_SIZE-1:0] state_d, state_q = INIT;
reg [STATE_SIZE-1:0] next_state_d, next_state_q;

Y aquí está el enlace al controlador: https://github.com/buffis/JammaGrabber/blob/602a47325acaad21340131ce41e283fc3e675a3b/FPGA/MojoJammaGrabber/src/sdram.v

Gracias de antemano.

0voto

GSerg Puntos 33571

En primer lugar, hay *_d y *_q versiones de cada variable porque el diseñador sigue la práctica de utilizar dos always bloques para su máquina de estado.

La máquina de estados requiere esperas temporizadas en varias etapas de su funcionamiento, y en lugar de tener un estado separado para cada uno, escribió un solo estado común WAIT estado. El next_state_* Las variables indican a la máquina lo que debe hacer cuando el WAIT ha terminado.

0voto

Peter Green Puntos 1888

Lo primero que hay que recordar es que un "reg" de Verilog no siempre representa un registro, que represente o no un registro depende de cómo se utilice.

El autor de este código ha implementado la máquina de estado utilizando dos bloques always separados. La lógica de la máquina de estado está representada por un bloque siempre combinatorio mientras que un bloque siempre secuencial representa los registros. Esta estructura significa que necesita registros Verilog para representar tanto las entradas "_d" como las salidas "_q" de sus registros.

La ventaja de esta estructura es que permite que la máquina de estados tenga salidas combinatorias. Si pones la lógica de la máquina de estado en un bloque siempre secuencial entonces todas las salidas de esa lógica deben ser registradas.

Ahora, en este caso particular, parece que todas las salidas son registrado, por lo que podría haber puesto la lógica en un bloque siempre secuencial, pero sospecho que a algunas personas les resulta más fácil ceñirse a un estilo consistente aunque dicho estilo sea más verboso de lo necesario en la mayoría de los casos. Traducir una máquina de estado de un solo bloque siempre a un estilo de dos bloques siempre porque descubriste que de hecho necesitabas una salida combinatoria no es divertido.

Tiene dos registros de estado para que pueda tener un único estado de "espera" que puede llevar a múltiples estados siguientes diferentes después de que la espera haya terminado.

Dos registros de estado, cada uno con un "reg" Verilog separado para su entrada y salida hacen cuatro "reg" Verilog.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X