=?ISO-8859-2?Q?Problem_z_VHDL_-_podczas_optymalizacji_?=
Masz problem? Zapytaj na forum elektroda.pl
From: Maksymilian Dutka <maxdutka_at_nospam_usuntopoczta.onet.pl>
Subject: =?ISO-8859-2?Q?Problem_z_VHDL_-_podczas_optymalizacji_?=
Date: Tue, 04 Jul 2006 21:57:51 +0200
Witam, dlaczego podczas optymalizacji są usuwane wszystkie wejścia
(zostaje tylko 8 wyjść)?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity MostekA is
Port ( MOSI : in STD_LOGIC;
MISO : out STD_LOGIC;
SCLK : in STD_LOGIC;
CS : in STD_LOGIC;
D : inout STD_LOGIC_VECTOR (7 downto 0);
A : out STD_LOGIC_VECTOR (11 downto 0);
ETH_RD : out STD_LOGIC;
ETH_WR : out STD_LOGIC;
ETH_RST : out STD_LOGIC;
MEM_WE : out STD_LOGIC;
MEM_RAS : out STD_LOGIC;
MEM_CAS : out STD_LOGIC;
MEM_OE : out STD_LOGIC;
PHE_RD : out STD_LOGIC;
PHE_WR : out STD_LOGIC);
end MostekA;
architecture Behavioral of MostekA is
signal shift_reg : std_logic_vector(7 downto 0);
begin
process(SCLK)
begin
if (SCLK'EVENT and SCLK = '1') then
shift_reg(7 downto 1)<= shift_reg(6 downto 0);
shift_reg(0)<=MOSI;
end if;
end process;
process(CS)
begin
if (CS'EVENT and CS = '1') then
shift_reg<="00000000";
end if;
end process;
D <= shift_reg;
end Behavioral;
Pozdrawiam
MD
From: Andrzej Ekiert <dspicant_at_nospam_tlen.pl>
Subject: =?ISO-8859-2?Q?Re=3A_Problem_z_VHDL_-_podczas_optyma?=
Date: Tue, 04 Jul 2006 23:48:30 +0200
Maksymilian Dutka napisał(a):
Witam, dlaczego podczas optymalizacji są usuwane wszystkie wejścia
(zostaje tylko 8 wyjść)?
Jakim cudem to przechodzi syntezę? Sygnał 'shift_reg' jest przypisywany
w dwóch różnych procesach, na zboczach dwóch różnych sygnałów. Tak nie
można.
ae
From: Maksymilian Dutka <maxdutka_at_nospam_usunpoczta.onet.pl>
Subject: =?ISO-8859-2?Q?Re=3A_Problem_z_VHDL_-_podczas_optyma?=
Date: Wed, 05 Jul 2006 10:58:21 +0200
Andrzej Ekiert napisał(a):
Maksymilian Dutka napisał(a):
Witam, dlaczego podczas optymalizacji są usuwane wszystkie wejścia
(zostaje tylko 8 wyjść)?
Jakim cudem to przechodzi syntezę?
D
Sygnał 'shift_reg' jest przypisywany
w dwóch różnych procesach, na zboczach dwóch różnych sygnałów. Tak nie
można.
Dopiero się uczę VHDL-a, wieczorkiem to przerobie.
Dziękuje i pozdrawiam
MD
From: "Pawel Cern" <name_at_nospam_surname.pl>
Subject: Re: Problem z VHDL - podczas optymalizacji usuwane są wszystkie wej.
Date: Tue, 11 Jul 2006 20:41:03 +0200
"Maksymilian Dutka" <maxdutka_at_nospam_usuntopoczta.onet.pl> wrote in message
news:e8eh8p$c47$1_at_nospam_atlantis.news.tpi.pl...
Witam, dlaczego podczas optymalizacji są usuwane wszystkie wejścia
(zostaje tylko 8 wyjść)?
... ciach
...
process(SCLK)
begin
if (SCLK'EVENT and SCLK = '1') then shift_reg(7 downto 1)<=
shift_reg(6 downto 0);
shift_reg(0)<=MOSI;
end if; end process;
process(CS)
begin
if (CS'EVENT and CS = '1') then
shift_reg<="00000000";
end if;
end process;
D <= shift_reg;
end Behavioral;
Widzę że na zboczu narastającym SCLK robisz jakąś operację na shift_reg i na
zboczu narastającym CS też robisz jakąś operację na tym samym rejestrze. A
co jeśli zdarzenia te wystąpią równocześnie? Takie rozwiązanie jest bez
sensu. Może syntezator gdzieś się gubi i dlatego eliminuje wejścia.
Widzę że usiłujesz zrobić jakiś rejestr o wyjściu równoległym, który
będziesz ładować szeregowo przez SPI.
To może załóżymy że shift_reg przepiszemy na wyjście na skutek zbocza
narastającego CS które nastąpi po przesłaniu wszystkich bitów danych:
process(SCLK, CS)
begin
if rising_edge(SCLK) then
shift_reg(7 downto 1) <= shift_reg(6 downto 0);
shift_reg(0) <= MOSI;
end if;
if rising_edge(CS) then
D <= shift_reg;
end if;
end process;
Rozwiązanie to prawdopodobnie pożre 2 globalne linie zegarowe. Dobrze jest
zastanowić się czy nie możnaby próbkować CS podczas aktywnych zboczy SCLK,
wtedy będzie jeden zegar:
process(SCLK, CS)
begin
if rising_edge(SCLK) then
if CS = '1' then
D <= shift_reg;
else
shift_reg(7 downto 1) <= shift_reg(6 downto 0);
shift_reg(0) <= MOSI;
end if;
end if;
end process;