configuración de VHDL: selección de arquitectura

2

Estoy aprendiendo el uso de la declaración de configuración. Para esto he creado una entidad de nivel superior not_gate y una arquitectura estructural. También agregué otro archivo vhd a este programa, y ese archivo vhd (notgate) tiene una sola entidad y dos arquitecturas. Quiero elegir una arquitectura específica de la pareja. Para distinguir entre los dos, he decidido que el modelo de comportamiento de notgate funcionará como un búfer.

not_gate.vhd:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity not_gate is
    Port ( NI : in  STD_LOGIC;
           NO : out  STD_LOGIC);
end not_gate;

architecture structural of not_gate is
COMPONENT notgate IS
Port (  invin : in  STD_LOGIC;
        invout : out  STD_LOGIC);
end COMPONENT;
begin
INV: notgate PORT MAP (NI,NO);
end structural;

CONFIGURATION config1 OF not_gate IS
FOR structural
FOR INV: notgate USE ENTITY WORK.notgate(notarch);
END FOR;
END FOR;
END config1;

El archivo vhd notgate se agregó a esto.

notgate.vhd:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

ENTITY notgate IS
PORT (invin : IN STD_LOGIC;
        invout: OUT STD_LOGIC);
END ENTITY notgate;     

architecture notarch OF notgate IS
BEGIN
invout <= NOT invin;
END ARCHITECTURE notarch;

architecture notbeh OF notgate IS
BEGIN
PROCESS(invin)
BEGIN
IF invin = '0' THEN invout <= '0';
ELSIF invin = '1' THEN invout <= '1';
ELSE invout <= 'U';
END IF;
END PROCESS;
END ARCHITECTURE notbeh;

Cuando ejecuto not_gate.vhd, de acuerdo con la declaración de configuración que escribí, la arquitectura notarch debe seleccionarse desde notgate.vhd y la operación NO debe ocurrir. Sin embargo, parece que vhdl sigue seleccionando la última arquitectura compilada, es decir, no. Por lo tanto, la operación NO se produce. La declaración de configuración no parece estar funcionando. ¿Podría alguien decirme dónde salió mal?

    
pregunta Analon

2 respuestas

2

No tengo una licencia Xilinx ISE que se ejecute en ningún lado, pero sí tengo un ghdl y gtkwave recientes. Después de asegurar el análisis de notgate antes de not_gate y debido a que ghdl no tiene un shell interactivo para la simulación, agregué un testbench que proporciona estímulo:

library ieee;
use ieee.std_logic_1164.all;

entity test is
end entity;

architecture foo of test is
    component not_gate is
        port ( 
            ni:     in  std_logic;
            no:     out std_logic
        );
    end component;
    signal ni, no:     std_logic;
begin

DUT: not_gate
    port map (ni, no);

STIM:
    process 
    begin
        wait for 5 ns;
        ni <= '0';
        wait for 10 ns;
        ni <= '1';
        wait for 10 ns;
        wait;
    end process;

end architecture;

configuration config2 of test is
    for foo
        for DUT: not_gate
            use configuration work.config1;
        end for;
    end for;
end config2;

Guardé las unidades de diseño notgate , not_gate y config1 y adjunté el banco de pruebas anterior test a notgate.vhd. Y:

ghdl -a notgate.vhdl

ghdl -e config2

ghdl -r config2 --wave = config2.ghw

dio:

Esto nos dice dos cosas. 1) Su configuración funciona y 2) hay herramientas alternativas donde la configuración funciona correctamente.

También nos dice una tercera cosa, que es posible que deba hacerlo sin configuración en el entorno de síntesis particular, pero puede separar el aprendizaje de VHDL de un entorno de síntesis particular.

Esto se hizo con una versión gcc-4.8.2 de ghdl (ghdl-0.31dev) que se ejecuta en OS X 10.9.1 y que usa gtkwave 3.3.53 (la versión de la aplicación OS X).

    
respondido por el user8352
0

Al menos para los FPGA Xilinx más nuevos, ISE 14.7 admite configuraciones como se indica en la Guía del usuario de XST para Dispositivos de las series Virtex-6, Spartan-6 y 7 en página 39 . Para dispositivos más antiguos, podría ser necesario habilitar el nuevo analizador .

Pero, la configuración debe definirse en la parte declarativa de la arquitectura. Por lo tanto, la siguiente implementación de not_gate usa la arquitectura notarch como se esperaba:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity not_gate is
    Port ( NI : in  STD_LOGIC;
           NO : out  STD_LOGIC);
end not_gate;

architecture structural of not_gate is
COMPONENT notgate IS
Port (  invin : in  STD_LOGIC;
        invout : out  STD_LOGIC);
end COMPONENT;

FOR INV: notgate USE ENTITY WORK.notgate(notarch);

begin
INV: notgate PORT MAP (NI,NO);
end structural;

Lo mismo se indica en la Guía del usuario de XST para ISE 14.2, pero en realidad no puedo probarlo.

    
respondido por el Martin Zabel

Lea otras preguntas en las etiquetas