Entiendo cómo hacer un diagrama de estado y hacer una lógica combinacional (puertas) para obtener una ecuación booleana para los siguientes bits de estado y el bit de salida,
pero ¿cuál es la función de la ROM aquí?
Rom (= memoria de solo lectura) es una forma de fuerza bruta (= absolutamente no minimizada) para implementar un circuito combinatorio. Los bits de estado actual y las entradas juntas son la dirección, los datos almacenados en esa dirección contienen el siguiente estado y los posibles bits de salida que pueden depender del estado actual y de los bits de entrada.
Cuando se construye una máquina de estados con partes estándar, probablemente aprecia una construcción en la que todas las puertas lógicas en la transición de estado & la lógica de salida se reemplaza por un único IC fácilmente programable.
Yo agregaría latches de búfer a los bits de entrada y salida para asegurarme de que las entradas se lean y las salidas se actualicen en sincronización, los bits de salida en la rom deberían establecerse seguramente antes de que se usen.
Esto parece una representación general de la lógica secuencial. Puede ser memoria de solo lectura: cualquier combinación booleana de funciones o puertas lógicas puede implementarse como una tabla de consulta, y las tablas de consulta son equivalentes a las páginas de memoria de solo lectura donde las entradas son la dirección y las salidas son el contenido de la memoria.
Lea otras preguntas en las etiquetas verilog state-machines shift-register rom register