Quartus da una señal indefinida para el estado de una máquina de estados finitos. Se supone que se muestra Enum of the State_type

0

Antes de comenzar un proyecto más grande en Quartus II, estoy tratando de hacer el ejemplo de la sección 8.8 "FSM como un circuito de arbitraje" del libro "Fundamentos de la lógica digital con VHDL Design 3rd ed" y no puedo lograr que Quartus Trabajar como si supuestamente se documenta. La Variable de estado de la máquina, que es una SEÑAL VHDL en la arquitectura del FSM, no se mostrará como otra cosa que no esté definida, a pesar de que el FSM funciona bien.

Aquí hay una captura de pantalla de la máquina de estados finitos implementada en Quartus: enlace

El libro, en un ejemplo diferente, muestra el estado del FSM bien. El estado de la máquina es la variable Y, que muestra un ENUM como se supone que debe hacer Quartus.

InclusoheseguidolasinstruccionesproporcionadasporAlteraenelpdfvinculadoacontinuación.Lasinstruccionesparaestoestánenlaspáginas27a29.Lasheseguidoexactamente,peroesaSEÑALsigueapareciendocomoindefinidasinimportarnada.¿Meestoyperdiendoalgo?
ftp://ftp.altera.com/ up / pub / Altera_Material / 11.0 / Tutorials / VHDL / Quartus_II_Simulation.pdf

    
pregunta Derek Ziemba

2 respuestas

1

Lo descubrí. En el editor de formas de onda, vaya a Opciones, luego cambie el Simulador de ModelSim a Quartus II Simulator.

Enelpostnúmero10enestehilo: enlace

El usuario FvM mencionado

  

El simulador de Quartus puede mostrar señales internas solo de acuerdo con su codificación real, no en una representación arbitraria como, por ejemplo, ModelSim puede.

    
respondido por el Derek Ziemba
1

Este es definitivamente un problema de Quartus II. Le sugiero que elimine el estado de la pantalla de simulación y que vuelva a agregarlo asegurándose de que coincida con la Figura 29 en la página 29 del tutorial para el que proporcionó el enlace, arriba.

Escribí un banco de pruebas que reproduce la forma de onda del libro. Puede usarlo para asegurarse de que el árbitro funcione como es debido, incluso si no puede mostrar state :

library ieee;
use ieee.std_logic_1164.all;

entity arbiter_tb is
end entity;

architecture foo of arbiter_tb is
    signal clk:        std_logic := '0';
    signal reset:      std_logic := '0';
    signal r:          std_logic_vector(1 to 3) := (others => '0');
    signal g:          std_logic_vector(1 to 3);
begin
CLOCK:
    process 
    begin
        wait for 50 ns;
        clk <= not clk;
        if Now > 1150 ns then
            wait;
        end if;
    end process;

DUT:
    entity work.arbiter
        port map (
            clk => clk,
            reset => reset,
            r => r,
            g => g
        );

STIMULUS:
    process
    begin
        wait for 51 ns; 
        reset <= '1';
        r <= (others => '1');
        wait until rising_edge(clk) and g(1) = '1';
        r(1) <= '0';
        wait until rising_edge(clk) and g(2) = '1';
        r(2) <= '0';
        wait until rising_edge(clk) and g(3) = '1';
        r(3) <= '0';
        wait;
    end process;

end architecture;

Y esto es lo más cerca que pude con ghdl y gtkwave:

Si volver a agregar state no funcionó, deberá encontrar la ayuda específica de Altera.

    
respondido por el user8352

Lea otras preguntas en las etiquetas