sábado, 31 de julio de 2010

Codificación de Máquinas de Estado (FSM) con Synplify y XST

FSM codificación con Synplify:
Cuando se desea una asignación de código de estados específica para la FSM, Synplify permite realizar la asignación usando la siguiente sintaxis:


1 type fsm_type is (idle, setup, txing, stop);
2 attribute syn_enum_encoding: string;
3 attribute syn_enum_encoding of fsm_type: type is "111 101 001 011";


Cuando se desee asignar una codificación tal como Gray, OneHot, Sequential or Binary, se debe usar la siguiente sintaxis:

1 type fsm_type is (idle, setup, txing, stop);
2 attribute syn_encoding: string;
3 signal curr_state, nxt_state: fsm_type;
4 attribute syn_encoding of curr_state: signal is "onehot";

Importante: para que efectivamente Synplify realice las asignaciones específicadas por el atributo syn_encoding o syn_enum_encoding, la opción FSM Compiler en la pantalla principal de Synplify debe estar sin marcar (not checked).
En caso de usar Tcl script, use el siguiente comando para no hacer uso del FSM Compiler::

set_options -symbolic_fsm_compiler 0


Implementacion Segura (Safe Implementation):
Por defecto Synplify generará FSM optimizadas por velocidad y área; sin embargo hay casos en los la prioridad de la FSM es que funcione correctamente ante cualquier circunstancia. En el modo Safe Implementation, Synplify agregará lógica de modo que si la FSM alguna vez cae en un estado invalido (estado no asignado), sera forzada al estado de reset; evitando así que la FSM se 'cuelgue' dejando de funcionar correctamente. Para habilitar esta característica se usa el mismo atributo syn_encoding pero agregándole la opción safe. Sintaxis: 

1 attribute syn_encoding of curr_state: signal is "safe,onehot";

FSM codificación con Xilinx XST:
Se puede usar la siguiente sintaxis para una asignación de código de estados específica:

1 type fsm_type is (idle, setup, txing, stop);
2 attribute enum_encoding: string;
3 attribute enum_encoding of fsm_type: type is "111 101 001 011";


Sin embargo  XST no tendrá en cuenta lo especificado en el atributo a menos que se active el modo FSM en modo 'user' (usuario). El modo FSM 'user' se puede seleccionar de dos modos, usando attribute o mediante Project Manager.
Usando attribute:

4 attribute fsm_encoding: string;
5 signal curr_state, nxt_state: fsm_type;
6 attribute fsm_encoding of curr_state: signal is "user";

GUI:
- Click el botón derecho del mouse sobre la opción Synthesize-XST
- Seleccione Properties
- Seleccione HDL Options
- Seleccione FSM Encoding Algorithm como User


El atributo fsm_encoding también se usa en el caso que se desee una asignación de estados con alguno de los siguientes valores:
- Auto
- OneHot
- Compact
- Sequential
- Gray
- Johnson
- Speed1
Para especificar una codificacion use la siguiente sintaxis:

1 type fsm_type is (idle, setup, txing, stop);
2 attribute fsm_encoding: string;
3 signal curr_state, nxt_state: fsm_type;
4 attribute fsm_encoding of curr_state: signal is "one-hot";

En caso de no especificar ninguna codificacion en particular Auto sera usado por XST por defecto.
Implementacion Segura (Safe Implementation):
En el modo Safe Implementation, XST genera lógica adicional que fuerza la FSM a un estado válido en caso que la FSM entre en un estado inválido. Sintaxis:
 1 type fsm_type is (idle, setup, txing, stop);
2 attribute safe_implementation: string;
3 signal curr_state, nxt_state: fsm_type;
4 attribute safe_implementacion of curr_state: signal is "yes";

No hay comentarios:

Publicar un comentario