Witam,
Mam następujący problem: Chcę użyć pamięci (banków) o łącznej przestrzeni adresowej 24 bity. Z uP będę podawał po zresetowaniu maszyny stanu sygnałem "rst", w kolejnych taktach sygnału zegarowgo "clk" 3 porcje 8-bitowe adresu "Din". Po ich przesłaniu PLD ma wystawić na piny "Dout" podłączone do banków pamięci cały kompletny 24-bitowy adres. Dalsza zmiana sygnału "clk" ma nie mieć wpływu na adresy. Kod, którym chciałem to zrealizować (po skróceniu ilości bitów adresów) zamieszczam poniżej:
-------------------------------------------- LIBRARY ieee; USE ieee.std_logic_1164.all;
ENTITY Test_IO IS PORT( clk : IN STD_LOGIC; rst : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(1 downto 0); Dout : OUT STD_LOGIC_VECTOR(3 downto 0) ); END Test_IO;
ARCHITECTURE Test_IO_architecture OF Test_IO IS TYPE t_state IS ( s0, s1, s2, s3 ); SIGNAL state, state_nx: t_state; BEGIN PROCESS ( clk, rst ) BEGIN IF rst = '0' THEN state <= s0; -- resetowanie ukladu / start maszyny ELSIF ( clk'EVENT and clk = '1' ) THEN state <= state_nx; -- przejscie do nastepnego stanu maszyny ELSE state <= state; END IF; END PROCESS;
PROCESS ( state, Din ) VARIABLE tmp1: STD_LOGIC_VECTOR(1 downto 0); VARIABLE tmp2: STD_LOGIC_VECTOR(1 downto 0); BEGIN CASE state IS WHEN s0 =>
state_nx <= s1; WHEN s1 =>
tmp1 := Din; state_nx <= s2; WHEN s2 =>
tmp2 := Din; state_nx <= s3; WHEN s3 =>
Dout <= tmp1 & tmp2; state_nx <= s3; END CASE; END PROCESS; END Test_IO_architecture;
-----------------------------------------
Na symulacji wygląda wszystko bardzo ładnie, ale zastanawia mnie warning: "Info: Found combinational loop of 1 nodes".
Poniżej wybrana część z komilacji projektu:
----------------------------------------- Info:
******************************************************************* Info: Running Quartus II Fitter Info: Version 5.1 Build 213 01/19/2006 Service Pack 1 SJ Web Edition Info: Processing started: Thu Feb 23 17:00:56 2006 Info: Command: quartus_fit --read_settings_files=off--write_settings_files=off Test1 -c Test1 Info: Selected device EPM7128SLC84-15 for design "Test1" Info: Quartus II Fitter was successful. 0 errors, 0 warnings [...] Info:
******************************************************************* Info: Running Quartus II Timing Analyzer [...] Info: Command: quartus_tan --read_settings_files=off--write_settings_files=off Test1 -c Test1 Info: Started post-fitting delay annotation Info: Delay annotation completed successfully Warning: Timing Analysis does not support the analysis of latches as synchronous elements for the currently selected device family Info: Found combinational loop of 1 nodes Info: Node "Test_IO:inst|Dout[0]~46" Info: Found combinational loop of 1 nodes Info: Node "Test_IO:inst|Dout[1]~42" Info: Found combinational loop of 1 nodes Info: Node "Test_IO:inst|Dout[2]~38" Info: Found combinational loop of 1 nodes Info: Node "Test_IO:inst|Dout[3]~34" Info: Found combinational loop of 1 nodes Info: Node "Test_IO:inst|tmp2[0]~26" Info: Found combinational loop of 1 nodes Info: Node "Test_IO:inst|tmp2[1]~22" Info: Found combinational loop of 1 nodes Info: Node "Test_IO:inst|tmp1[0]~26" Info: Found combinational loop of 1 nodes Info: Node "Test_IO:inst|tmp1[1]~22" [..ciach..]
-----------------------------------------
Czy mam się tym przejmować - o co chodzi z grubsza wiem - ale nie mam pomysłu na wyeliminowanie przyczyny.
Pozdrawiam, Grzegorz Kępiński