Advertencia de puerto desconectado en VHDL

-1

Recibo esta advertencia después de completar la síntesis en Vivado. Tengo un solo ram del puerto que se construye usando el generador de memoria de bloque. Su salida está conectada a la entrada data_in del módulo Brightness_Contrast pero, aparentemente, algo no está bien. Pero todo parece estar bien. ¿Cómo puedo resolver este problema? Aquí está la advertencia

signal data_out_ram : std_logic_vector(11 downto 0); --in top_module

[Synth 8-3331] design Brightness_Contrast has unconnected port data_in[11]

Aquí lo que tengo

component Brightness_Contrast
port (
clk_in : in  std_logic;
operation : in std_logic_vector(1 downto 0);
data_in: in std_logic_vector(11 downto 0);
output_of_operation: out std_logic_vector(11 downto 0);
mode: in std_logic
);

component Block_Ram
port(addra :in std_logic_vector(15 downto 0);
     clka : in std_logic;
     dina : in std_logic_vector(11 downto 0);
     douta: out std_logic_vector(11 downto 0);
     wea: in std_logic);
     end component;

U4: Block_Ram port map(addra => address_ram,
                       clka => clk,
                       dina => data_in_ram,
                       douta => data_out_ram,
                       wea => write_enable);

U5: Brightness_Contrast port map(clk_in => clk,
                                 operation => operation,                                
                                 data_in => data_out_ram,
                                 output_of_operation => output_of_operation,
                                 mode => mode);

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;

entity Brightness_Contrast is
generic (
PICTURE_WIDTH_HEIGHT : integer := 250;
COLOR_BIT : integer := 4);
port (
clk_in : in  std_logic := '0';
operation : in std_logic_vector(1 downto 0);
data_in: in std_logic_vector(11 downto 0);
output_of_operation: out std_logic_vector(11 downto 0);
mode: in std_logic
);
end Brightness_Contrast;

architecture Behavioral of Brightness_Contrast is

signal check : std_logic_vector(11 downto 0) := data_in;

begin

       BRIGHTNESS_CONTRAST: process(clk_in,operation,mode) is

       begin

       if rising_edge(clk_in) then --clk

              if operation = "00" then              

              if mode = '0' then 

              if check(3*COLOR_BIT-1 downto 2*COLOR_BIT) < "1110" then
              check(3*COLOR_BIT-1 downto 2*COLOR_BIT) <= ((check(3*COLOR_BIT- 
 1 downto 2*COLOR_BIT)) + "0010");
              end if;

              if check(2*COLOR_BIT-1 downto COLOR_BIT) < "1110" then
              check(2*COLOR_BIT-1 downto COLOR_BIT) <= ((check(2*COLOR_BIT-1 
 downto COLOR_BIT)) + "0010");
              end if;

              if check(COLOR_BIT-1 downto 0) < "1110" then
              check(COLOR_BIT-1 downto 0) <= ((check(COLOR_BIT-1 downto 0)) + 
 "0010");
              end if;

              output_of_operation <= check;

              elsif mode = '1' then 

              if  check(3*COLOR_BIT-1 downto 2*COLOR_BIT) > "0001" then
              check(3*COLOR_BIT-1 downto 2*COLOR_BIT) <= ((check(3*COLOR_BIT- 
 1 downto 2*COLOR_BIT)) - "0010");
              end if;

              if  check(2*COLOR_BIT-1 downto COLOR_BIT) > "0001" then
             check(2*COLOR_BIT-1 downto COLOR_BIT) <= ((check(2*COLOR_BIT-1 
 downto COLOR_BIT)) - "0010");
              end if;

              if check(COLOR_BIT-1 downto 0) > "0001" then
              check(COLOR_BIT-1 downto 0) <= ((check(COLOR_BIT-1 downto 0)) - 
 "0010");
              end if;   

              output_of_operation <= check;

              end if; 

              elsif operation = "01" then   

              if mode = '0' then  

              if   check(3*COLOR_BIT-1 downto 2*COLOR_BIT) < "1000" and  
 check(3*COLOR_BIT-1 downto 2*COLOR_BIT) > "0001" then

              check(3*COLOR_BIT-1 downto 2*COLOR_BIT) <=  
 ((check(3*COLOR_BIT-1 downto 2*COLOR_BIT)) - "0010"); 

              elsif  check(3*COLOR_BIT-1 downto 2*COLOR_BIT) > "0111" and 
 check(3*COLOR_BIT-1 downto 2*COLOR_BIT) < "1110" then

              check(3*COLOR_BIT-1 downto 2*COLOR_BIT) <=  
 ((check(3*COLOR_BIT-1 downto 2*COLOR_BIT)) + "0010") ;
              end if;

              if   check(2*COLOR_BIT-1 downto COLOR_BIT) < "1000" and  
 check(2*COLOR_BIT-1 downto COLOR_BIT) > "0001" then

              check(2*COLOR_BIT-1 downto COLOR_BIT) <=  ((check(2*COLOR_BIT-1 
 downto COLOR_BIT)) - "0010");

              elsif  check(2*COLOR_BIT-1 downto COLOR_BIT) > "0111" and  
 check(2*COLOR_BIT-1 downto COLOR_BIT) < "1110" then

              check(2*COLOR_BIT-1 downto COLOR_BIT) <=  ((check(2*COLOR_BIT-1 
 downto COLOR_BIT)) + "0010") ;
              end if;

              if   check(COLOR_BIT-1 downto 0) < "1000" and  check(COLOR_BIT- 
 1 downto 0) > "0001" then

              check(COLOR_BIT-1 downto 0) <=  ((check(COLOR_BIT-1 downto 0)) 
 - "0010");

              elsif  check(COLOR_BIT-1 downto 0) > "0111" and  
 check(COLOR_BIT-1 downto 0) < "1110" then

              check(COLOR_BIT-1 downto 0) <=  ((check(COLOR_BIT-1 downto 0)) 
 + "0010") ;
              end if;

              output_of_operation <= check;

              elsif mode = '1' then                    

              if  check(3*COLOR_BIT-1 downto 2*COLOR_BIT) < "1000" and 
 check(3*COLOR_BIT-1 downto 2*COLOR_BIT) > "0010" then

              check(3*COLOR_BIT-1 downto 2*COLOR_BIT) <= ((check(3*COLOR_BIT- 
 1 downto 2*COLOR_BIT)) - "0011");

              elsif check(3*COLOR_BIT-1 downto 2*COLOR_BIT) > "0111" and 
 check(3*COLOR_BIT-1 downto 2*COLOR_BIT) < "1101" then

              check(3*COLOR_BIT-1 downto 2*COLOR_BIT) <= ((check(3*COLOR_BIT- 
 1 downto 2*COLOR_BIT)) +"0011") ;
              end if;

              if  check(2*COLOR_BIT-1 downto COLOR_BIT) < "1000" and 
 check(2*COLOR_BIT-1 downto COLOR_BIT) > "0010" then

              check(2*COLOR_BIT-1 downto COLOR_BIT) <= ((check(2*COLOR_BIT-1 
 downto COLOR_BIT)) - "0011");

              elsif check(2*COLOR_BIT-1 downto COLOR_BIT) > "0111" and 
 check(2*COLOR_BIT-1 downto COLOR_BIT) < "1101" then

              check(2*COLOR_BIT-1 downto COLOR_BIT) <= ((check(2*COLOR_BIT-1 
 downto COLOR_BIT)) +"0011") ;
              end if;

              if  check(COLOR_BIT-1 downto 0) < "1000" and check(COLOR_BIT-1 
 downto 0) > "0010" then

              check(COLOR_BIT-1 downto 0) <= ((check(COLOR_BIT-1 downto 0)) - 
 "0011");

              elsif check(COLOR_BIT-1 downto 0) > "0111" and check(COLOR_BIT- 
 1 downto 0) < "1101" then

              check(COLOR_BIT-1 downto 0) <= ((check(COLOR_BIT-1 downto 0)) + 
 "0011") ;
              end if;

              output_of_operation <= check;

              end if; --mode                      
              end if; --Operation                                                   
              end if; --CLK

              end process BRIGHTNESS_CONTRAST ;


  end Behavioral;
    
pregunta runo

1 respuesta

0

No tengo una respuesta directa a su pregunta, ya que no es obvio para mí qué ha declarado dónde y qué hay en qué archivo. Pero puedo darle algunos consejos sobre cómo probar y depurar un diseño de este tipo.

  1. La simulación es un pequeño ayudante poderoso para verificar un diseño VHDL. Como está bastante limitado con las salidas de depuración, una simulación adecuada puede mostrarle bastante fácil dónde las cosas salen mal. Una herramienta que siempre estoy usando (me gusta porque es independiente de la plataforma) es GHDL en combinación con GTKWave.

  2. Si una síntesis se ejecuta, lea todas las advertencias y errores cuidadosamente (en realidad, esta es una buena práctica, incluso si la síntesis es exitosa). En caso de un error como el tuyo, tiendo a comenzar a reducir mi diseño a partes simples y verificar sus funciones 1 a 1 hasta que el diseño se rompa nuevamente. Como su culpa es sobre la asignación de puertos, elimine todo el código y comience solo con la asignación de puertos.

respondido por el Humpawumpa

Lea otras preguntas en las etiquetas