VHDL a RTL / esquema, no es lo que espero ver

1

Me estoy enseñando VHDL (utilizando Altera Quartus Prime Web Edition) para que podamos incorporar un CPLD en un diseño. Solo lo he estado haciendo unos pocos días, pero hasta ahora el VHDL en sí parece bastante sencillo. Aprendí cómo diseñar entidades y usar múltiples instancias de ellas dentro de un diseño como componentes, unir diferentes componentes dentro de la VHDL y estoy satisfecho con mi progreso. De hecho, lo más difícil hasta ahora parece ser el banco de pruebas / simluaton.

Pensé que sería bueno ver si pudieras ver tu VHDL como un esquema para ver si lo que he estado escribiendo parece que debería. Así que busqué en Google y encontré referencias a un visor RTL y descubrí cómo usarlo con una buena documentación de Altera. Al principio pensé que se veía perfecto. La vista de alto nivel parecía acertada: los buses internos están conectados correctamente a cada componente, el reloj y el clr ingresan en los registros de 4 bits, las entradas ingresan en un multiplicador y salen del otro lado, etc., exactamente como se vería. .

Sin embargo, cuando hace clic en el signo más para abrir un componente en particular (espero que sea la terminología correcta que utiliza el componente como una instancia de una entidad), no se parece en nada a cómo esperaría.

El siguiente código, por ejemplo:

library ieee;
use ieee.std_logic_1164.all;

-- Four bit eight way multiplexer. The eight four bit latches are fed into this and one of them is 
-- selected depedning on the select line. This select line will automatically cycle through
-- and also control the eight column outputs.
entity four_bit_eight_way_multiplex is
    port
        (
        sel : in std_logic_vector(2 downto 0);
        IN1: in std_logic_vector(3 downto 0);
        IN2: in std_logic_vector(3 downto 0);
        IN3: in std_logic_vector(3 downto 0);
        IN4: in std_logic_vector(3 downto 0);
        IN5: in std_logic_vector(3 downto 0);
        IN6: in std_logic_vector(3 downto 0);
        IN7: in std_logic_vector(3 downto 0);
        IN8: in std_logic_vector(3 downto 0);       
        O: out std_logic_vector(3 downto 0)
        );

end four_bit_eight_way_multiplex;

architecture behaviour of four_bit_eight_way_multiplex is
begin   
    mult_process : process (sel,IN1,IN2,IN3,IN4,IN5,IN6,IN7,IN8)
        begin   
        case sel is
        when "000" => O <= IN1; -- sel = 0, number 1
        when "001" => O <= IN2; -- 1
        when "010" => O <= IN3;
        when "011" => O <= IN4;
        when "100" => O <= IN5; -- sel = 0, number 1
        when "101" => O <= IN6; -- 1
        when "110" => O <= IN7;
        when "111" => O <= IN8;
        when others => O <= IN1; -- Can never get here of course        
        end case;       
    end process mult_process;
end behaviour;

Da el siguiente diagrama RTL:

Estonosevecomounmultiplexordecuatrovíasyochobits.Buenoparaminolohace.InclusotoméunmultiplexordeochobitsdeunsitiotutorialylediunesquemaRTLdeaspectosimilar.

Habríaesperadoalgodeesteestilo.Tengaencuenta,estilo,medoycuentadequesetratadeundispositivodecuatrovíasdeunbit.

Entonces, ¿no puedo hacer lo que pensé que podría? ¿Es posible, pero de una manera completamente diferente? ¿Debería olvidarme de hacer esto y simplemente permitir que el dispositivo funcione con una buena simulación?

También he probado los visores de mapas tecnológicos, pero tampoco parecen estar bien.

Repito, he estado haciendo esto por unos pocos días y aprecio plenamente que pueda tener algunos malentendidos importantes aquí. Muchas gracias.

    
pregunta DiBosco

1 respuesta

3

Quartus está sintetizando un mux separado para cada bit del vector de salida. Las ocho entradas a cada mux son bit \ $ N \ $ de cada una de las ocho entradas. La salida de cada mux es bit \ $ N \ $ de la salida. El uso de buses y la extracción de señales individuales de cada bus pueden ser un poco confusos y difíciles de leer.

    
respondido por el Elliot Alderson

Lea otras preguntas en las etiquetas