-4

I have a project that works perfectly on simulation but when I'm going to do the synthesis process to program the FPGA, Xilinx ISE Design Suite on the oprmization process trims the signals that I use.

This is the code VHDL of the main entity:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Modulo_comunicacion is

PORT (clk,rst,entrada:IN STD_LOGIC;
      reloj_serial,salida:OUT STD_LOGIC);


end Modulo_comunicacion;

architecture Behavioral of Modulo_comunicacion is

component recepcion_uart
        PORT (clk,rst,entrada:IN STD_LOGIC;
      registro_lectura:OUT STD_LOGIC_VECTOR(7 downto 0);
        estado_recepcion:OUT STD_LOGIC_VECTOR(1 downto 0);
        reloj_serial:OUT STD_LOGIC);
end component;

component transmision_uart
        PORT (clk,rst,transmitir:IN STD_LOGIC;
      registro_lectura:IN STD_LOGIC_VECTOR(7 downto 0);
        estado_transmision:OUT STD_LOGIC_VECTOR(1 downto 0);
        salida:OUT STD_LOGIC);
end component;

type bank3 is array (2 downto 0) of std_logic_vector(7 downto 0);
type bank4 is array (2 downto 0) of std_logic_vector(7 downto 0);
signal m:bank3;
signal o:bank4;
signal enable,enable3,transmitir:std_logic;
signal contador,contador2,control: integer range 0 to 2;
signal estado_recepcion,estado_transmision2: STD_LOGIC_VECTOR(1 downto 0);
signal estado: STD_LOGIC_VECTOR(2 downto 0);
signal registro_escritura,registro_lectura,nula: std_logic_vector(7 downto 0);
--attribute S : string;
--attribute S of transmitir:signal is "true";


begin

R: recepcion_uart port map(clk=>clk,rst=>rst,reloj_serial=>reloj_serial,entrada=>entrada,registro_lectura=>registro_lectura,estado_recepcion=>estado_recepcion);
W: transmision_uart port map(clk=>clk,rst=>rst,transmitir=>transmitir,registro_lectura=>registro_escritura,estado_transmision=>estado_transmision2,salida=>salida);

enable<='1' when estado_recepcion="11" else '0';
enable3<='1' when estado_transmision2="11" else '0';
nula<=(OTHERS=>'1');


process(clk,rst) BEGIN
IF rst='1' then
transmitir<='0';
estado<="000";
m<=(nula,nula,nula);
o<=(nula,nula,nula);
control<=0;
registro_escritura<="00000000";

elsif clk' event and clk='1' then

CASE estado IS

WHEN "000" => -- Estado de ocio
transmitir<='0';
if enable='1' then
estado<="001";
end if;


WHEN "001" =>  --Guarda los simbolos en un arreglo m 
m(contador-1)<=registro_lectura;
if contador<3 then
else
estado<="010";
end if;


WHEN "010" =>  --pasa los simbolos del registro m al registro o
if control<3 then
control<=control+1;
o(control)<=m(control);
else
estado<="011";
control<=0;
end if;

WHEN "011" => --envia el registro o.
if contador2<=2 then
registro_escritura<=o(contador2);
transmitir<='1';
else
estado<="000";
end if;


WHEN OTHERS =>
estado<="000";
transmitir<='0';
m<=(nula,nula,nula);
o<=(nula,nula,nula);
control<=0;
registro_escritura<="00000000";

END case;


END IF;
END PROCESS;

process(enable,rst) BEGIN --cuenta el numero de bytes recibidos
IF rst='1' then
    contador<=0;

elsif enable' event and enable='1' then
if contador<=2 then
contador<=contador+1;
else
contador<=0;
end if;

END IF;
END PROCESS;

process(enable3,rst) BEGIN --cuenta el numero de bytes enviados
IF rst='1' then
    contador2<=0;

elsif enable3' event and enable3='1' then
if contador2<=2 then
contador2<=contador2+1;
else
contador2<=0;
end if;
END IF;
END PROCESS;

end Behavioral;
femtoRgon
  • 32,893
  • 7
  • 60
  • 87

1 Answers1

0

Perhaps one of your components is not found. You may need to add a "black box" attribute to your components and/or add a .ngc file to your project.

jdoyle
  • 11
  • 2