I'm new in everything that involves VHDL physical description code, I have a university project to finish (four different text animations on a Nexys2 or Nexys3 board) and I keep getting this warning messages:
WARNING:Xst:737 - Found 7-bit latch for signal . Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
WARNING:Xst:737 - Found 7-bit latch for signal . Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
WARNING:Xst:737 - Found 7-bit latch for signal . Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
WARNING:Xst:737 - Found 7-bit latch for signal . Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
WARNING:PhysDesignRules:372 - Gated clock. Clock net temp_reg1_not0001 is sourced by a combinatorial pin. This is not good design practice. Use the CE pin to control the loading of data into the flip-flop.
WARNING:PhysDesignRules:372 - Gated clock. Clock net temp_reg3_not0001 is sourced by a combinatorial pin. This is not good design practice. Use the CE pin to control the loading of data into the flip-flop.
WARNING:PhysDesignRules:372 - Gated clock. Clock net temp_reg2_not0001 is sourced by a combinatorial pin. This is not good design practice. Use the CE pin to control the loading of data into the flip-flop.
WARNING:PhysDesignRules:372 - Gated clock. Clock net temp_reg4_not0001 is sourced by a combinatorial pin. This is not good design practice. Use the CE pin to control the loading of data into the flip-flop.
Here is the link to all of the source files (I'm working in Ise Design Suite 14.7) http://www.fileshare.ro/e31590660
Edit: Unfortunately, I've spent almost half a day and I'm still not able to pinpoint precisely where the problem lies. I can only say very roughly though that it's in the process that's in the code below(line 73 and on).
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Folosim mai jos pachetul nostru
use work.Constante_si_componente.all;
entity Optiune1 is
port(
clk_50M:in std_logic;
reset:in std_logic;
catozi: out std_logic_vector(0 to 6);
anozi: out std_logic_vector(0 to 3);
opt1, opt2, opt3, opt4: in std_logic);
end entity;
architecture Behavioral of Optiune1 is
-- Instantierea semnalelor locale
signal local_clk_1Hz: std_logic;
signal local_clk_1Khz: std_logic;
signal adresa: integer range 0 to nr_cuvinte_distincte-1;
signal sec_4: integer range 0 to limita_sup:=0; -- Numara exact 5 secunde
signal cuvant: std_logic_vector(lungime_cuvinte-1 downto 0);
signal reg1, reg2, reg3, reg4: std_logic_vector(0 to 6):=(others=>'0');
signal temp_reg1, temp_reg2, temp_reg3, temp_reg4: std_logic_vector(0 to 6) := (others=> '0');
-- Declarare componente
component ROM
port (addr : in integer range 0 to nr_cuvinte_distincte-1;
data: out std_logic_vector(lungime_cuvinte-1 downto 0));
end component ROM;
component numarator
port(reset: in std_logic;
clk: in std_logic;
limita_numarare: in integer;
count: out integer range 0 to limita_sup);
end component;
component registru
port(clk_1Hz: in std_logic;
reset: in std_logic;
write_mode: in std_logic;
input: in std_logic_vector(0 to 6);
output: out std_logic_vector(0 to 6));
end component;
component RRate
port(clk_1KHz: in std_logic;
reg1, reg2, reg3, reg4: in std_logic_vector(0 to 6);
catozi: out std_logic_vector(0 to 6);
b:out std_logic_vector(0 to 3));
end component;
begin
-- Instantiem divizoarele de tact
COMP_CLOCK_tat: divizor port map(clk_50M=>clk_50M, reset => reset, clk_1Hz => local_clk_1Hz, clk_1KHz=>local_clk_1KHz);
-- Instantiem numaratorul
Numarator_1: numarator port map(reset => reset, clk => local_clk_1Hz, limita_numarare => nr_cuvinte_distincte-1, count => adresa);
Numarator_2: numarator port map(reset => reset, clk => local_clk_1Hz, limita_numarare => 4, count => sec_4);
-- Instantiem memoria
Memorie1: ROM port map(addr => adresa, data => cuvant);
-- Instantiem registrul
Registrul_1: registru port map(local_clk_1Hz, reset, '1', temp_reg1, reg1);
Registrul_2: registru port map(local_clk_1Hz, reset, '1', temp_reg2, reg2);
Registrul_3: registru port map(local_clk_1Hz, reset, '1', temp_reg3, reg3);
Registrul_4: registru port map(local_clk_1Hz, reset, '1', temp_reg4, reg4);
-- Instantiem refresh rate-ul de la anozi
Refresh_Rate: RRate port map (local_clk_1KHz, reg1, reg2, reg3, reg4, catozi, anozi);
process(opt1, opt2, opt3, opt4, local_clk_1Hz, temp_reg1, temp_reg2, temp_reg3, temp_reg4, cuvant, sec_4)
begin
if(opt1='1')and(opt2='0')and(opt3='0')and(opt4='0')and(local_clk_1Hz='1') then
temp_reg1 <= cuvant;
temp_reg2 <= temp_reg1;
temp_reg3 <= temp_reg2;
temp_reg4 <= temp_reg3;
elsif(opt1='0')and(opt2='1')and(opt3='0')and(opt4='0')and(local_clk_1Hz='1') then
temp_reg4 <= cuvant;
temp_reg3 <= temp_reg4;
temp_reg2 <= temp_reg3;
temp_reg1 <= temp_reg2;
elsif(opt1='0')and(opt2='0')and(opt3='1')and(opt4='0')and(local_clk_1Hz='1') then
if sec_4 = 0 then
temp_reg1 <= cuvant;
elsif sec_4 = 1 then
temp_reg2 <= cuvant;
elsif sec_4 = 2 then
temp_reg3 <= cuvant;
elsif sec_4 = 3 then
temp_reg4 <= cuvant;
elsif sec_4 = 4 then
temp_reg1 <= "1111111";
temp_reg2 <= "1111111";
temp_reg3 <= "1111111";
temp_reg4 <= "1111111";
end if;
elsif(opt1='0')and(opt2='0')and(opt3='0')and(opt4='1')and(local_clk_1Hz='1') then
if sec_4 = 0 then
temp_reg1 <= cuvant;
elsif sec_4 = 1 then
temp_reg2 <= cuvant;
temp_reg1<="1111111";
elsif sec_4 = 2 then
temp_reg3 <= cuvant;
temp_reg2<="1111111";
elsif sec_4 = 3 then
temp_reg4 <= cuvant;
temp_reg3<="1111111";
elsif sec_4 = 4 then
temp_reg1 <= "1111111";
temp_reg2 <= "1111111";
temp_reg3 <= "1111111";
temp_reg4 <= "1111111";
end if;
else
temp_reg1 <= (others => '0');
temp_reg2 <= (others => '0');
temp_reg3 <= (others => '0');
temp_reg4 <= (others => '0');
end if;
end process;
end architecture Behavioral;
Last EDIT: I had to turn in the project yesterday and it worked as intended on the Nexys2 FPGA board, and i added David Koontz's multiplexer code to the "Future development" section of the project's documentation.
Thank you vey much for your help :)