Diseño basado en estado vs. estado (en verilog)

3

Recientemente, he estado realizando algunos diseños de nivel principiante a nivel más bajo, desde el inicio hasta la codificación HDL en verilog. Pensé que el diseño basado en FSM, ya sea Mealy o Moore, es la única opción the . Sin embargo, al traducir el diseño en verilog HDL, tuve muchos problemas. Muchas veces, el diseño simplemente no funcionaría como debería debido a problemas relacionados con la sincronización. Además, tomó una buena cantidad de esfuerzos de escritura también.

Contrariamente a este enfoque, me tomó bastante menos tiempo y esfuerzo seguir un enfoque sin estado para los mismos diseños, y produjo resultados. Pero quizás esto podría deberse a que mis diseños no son demasiado grandes en esta etapa.

Entonces, ¿cómo decide si usar un modelo FSM basado en el estado o un modelo sin estado en el diseño?

¿Hay algún patrón al seguir algún enfoque? ¿O tal vez algún grupo específico de problemas que deberían resolverse solo mediante un enfoque basado en el estado?

Por diseño sin estado, me refiero a crear / conectar módulos ya diseñados, junto con un poco de lógica nueva. No se puede decir del modelo estructural, se puede decir una combinación de modelo estructural y de comportamiento.

No estoy preguntando sobre los pros y los contras de Mealy vs Moore.

Gracias

    

1 respuesta

6

A pesar de que un diseño puede considerarse "sin estado" porque no hay una máquina de estados explícita, es posible que todavía esté codificando un tipo de mecanismo de estado sin llamarlo explícitamente. Por ejemplo, las banderas pueden usarse para indicar si una parte del código está ocupada o no. En el ejemplo de su 'calculadora', es posible que no tenga una máquina de estado, pero puede tener un indicador que indica que los datos están disponibles y listos para su procesamiento. Aunque esto no se puede llamar una máquina de estado, está utilizando indicadores u otras señales como un mecanismo para garantizar que las operaciones específicas se realicen en una secuencia determinada. Esencialmente estás haciendo una máquina de estado usando tus banderas.

Como resultado, una máquina de estados está bastante presente en la mayoría de las cosas. Un diseño explícito es realmente una forma de que el programador detrás del teclado realice un seguimiento del proceso por el que está pasando su sistema para garantizar que todo funcione como se espera. Cuando un sistema es más complicado, este es un mecanismo realmente útil porque solo es posible hacer un seguimiento de todo al mismo tiempo. Si es un diseño simple, puede ser necesario usar un par de banderas y terminar con él. En realidad, todo se reduce a lo complicado que es el problema.

    
respondido por el stanri

Lea otras preguntas en las etiquetas