He creado un módulo VHDL que genera un patrón ancho de un bit de "1010101010 ..." continuamente, siempre que se afirme una señal de entrada llamada "inicio". Este es el diseño de circuito elaborado producido por Xilinx Vivado v2014.4 (64 bits, Linux):
Lapregunta
¿Cuáleselpropósitodelmultiplexor"next_state_i"? Parece que un simple inversor entre Q y D sería un diseño más simple. ¿Existe alguna ventaja al usar un multiplexor en lugar de un inversor?
El Código
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity TASK2_PRE is
Port ( clock, start : in STD_LOGIC;
data_out : out STD_LOGIC);
end TASK2_PRE;
architecture Behavioral of TASK2_PRE is
signal current_state : STD_LOGIC := '0';
signal next_state : STD_LOGIC := '0';
begin
-- no need to decode current state - map FFs directly to outputs
data_out <= current_state;
-- decode next state
next_state_decode : process(current_state, start)
begin
if (start = '0') then
next_state <= '0';
elsif (current_state = '0') then
next_state <= '1';
else
next_state <= '0';
end if;
end process next_state_decode;
-- update current state
update : process(clock)
begin
if (clock'event AND clock = '1') then
current_state <= next_state;
end if;
end process update;
end Behavioral;
Nota: Sé que el enfoque de la máquina de estado es un poco torpe solo para generar este patrón, pero la implementación de este comportamiento como FSM fue un requisito de este proyecto para una clase.