RTV forum PL | NewsGroups PL

Optymalizacja VHDL w MostkuA - dlaczego znikają wejścia podczas syntezy?

Problem z VHDL - podczas optymalizacji usuwane są wszystkie

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Optymalizacja VHDL w MostkuA - dlaczego znikają wejścia podczas syntezy?

Maksymilian Dutka
Guest

Tue Jul 04, 2006 7:57 pm   



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

Andrzej Ekiert
Guest

Tue Jul 04, 2006 9:48 pm   



Maksymilian Dutka napisał(a):
Quote:
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

Maksymilian Dutka
Guest

Wed Jul 05, 2006 8:58 am   



Andrzej Ekiert napisał(a):
Quote:
Maksymilian Dutka napisał(a):
Witam, dlaczego podczas optymalizacji są usuwane wszystkie wejścia
(zostaje tylko 8 wyjść)?


Jakim cudem to przechodzi syntezę?

:D

Quote:
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

Pawel Cern
Guest

Tue Jul 11, 2006 6:41 pm   



"Maksymilian Dutka" <maxdutka@usuntopoczta.onet.pl> wrote in message
news:e8eh8p$c47$1@atlantis.news.tpi.pl...
Quote:
Witam, dlaczego podczas optymalizacji są usuwane wszystkie wejścia
(zostaje tylko 8 wyjść)?

.... /ciach/
....

Quote:

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;

elektroda NewsGroups Forum Index - Elektronika Polska - Optymalizacja VHDL w MostkuA - dlaczego znikają wejścia podczas syntezy?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map