Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

VHDL-problem z łączeniem komponentów

_Wojciech_
-
-
Posty:269
Rejestracja:1 kwie 2003, o 20:32
Lokalizacja:Bielsko-Biała
VHDL-problem z łączeniem komponentów

Postautor: _Wojciech_ » 4 paź 2003, o 13:23

Mam taki problem z układami programowalnymi:

Mam zdefiniowane dwa komponenty w VHDL'u (prawie identyczne, to tylko przykład):

-------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

entity U1 is
port(a,b:in std_logic;q:out std_logic);
end entity U1;

architecture behavior of U1 is
begin
q<=a when b='1' else 'Z';
end architecture behavior;
------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

entity U2 is
port(a,b:in std_logic;q:out std_logic);
end entity U2;

architecture behavior of U2 is
begin
q<=a when b='1' else 'Z';
end architecture behavior;
-------------------------------------

I teraz chcialem ich wyjścia podłączyć do jednej magistrali. Nie powinno być problemu, bo jeśli jedno będzie wysterowane, to na drugim będzie wysoka impedancja.
No więc wklepałem takie coś:
--------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

entity test is
port(We:in std_logic;szyna:out std_logic);
end entity test;

architecture behavior of test3 is
component U1 is
port(a,b:in std_logic;q:out std_logic);
end component U1;

component U2 is
port(a,b:in std_logic;q:out std_logic);
end component U2;

signal B:std_logic;

begin
B<='0'; --czyli na obu wyjściach 'Z'
U_1:U1 port map (We,B,Szyna);
U_2:U2 port map (We,B,Szyna);
end architecture behavior;
-------------------------------------

I niestety :( Max Plus 2 Altery wywala błąd, że Szyma ma dwa źródła sygnału.
Natomiast Xilinx WebPack kompiluje ten kod bez problemu, informując (warning) o tym podwójnym źródle.

Jak ten problem rozwiązać?

Piotr
Moderator
Moderator
Posty:468
Rejestracja:14 lut 2003, o 13:53
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: Piotr » 4 paź 2003, o 20:16

1. Ten opis nie moze sie skompilowac, bo jest:

library ieee;
use ieee.std_logic_1164.all;

entity test is
port(We:in std_logic;szyna:out std_logic);
end entity test;

architecture behavior of test3 is

a powinno byc ...of test...


2. Chcesz zrobic (robisz) multiplekser z wyjsciem trojstanowym. Takie rozwiazanie jak probujesz zastosowac jest mozliwe wylacznie w niektorych typach PLD, w ktorych mozna laczyc wewnetrznie wyjscia buforow trojstanowych. Syntezer moze dopuscic laczenie buforow tristate wewnatrz ukladu przy zagwarantowaniu ich niejednoczesnego wlaczania, takze w innych ukladach PLD. Takie rozwiazanie jest jednak ryzykowne i nie zawsze akceptowane przez syntezery VHDL.
Lepszym wyjsciem (z punktu widzenia uniwersalnosci opisu) jest przelaczanie magistral za pomoca MUX i dodanie na wyjsciu bufora tristate.
Pzdr
PZb

_Wojciech_
-
-
Posty:269
Rejestracja:1 kwie 2003, o 20:32
Lokalizacja:Bielsko-Biała

Postautor: _Wojciech_ » 4 paź 2003, o 20:45

Dzieki za odpowiedź.

Oczywiście to of... to błąd literowy (pisałem to w notatniku).

A co to jest MUX? Wiem, pewnie beznadziejne pytanie, ale teraz nie kojarzę.

A co do sedna, to w takim razie czemu w książkach (np. bardzo dobra "Projektowanie układów cyfrowych z wykorzystaniem języka VHDL") stosuje się takie rozwiązanie?
Jest tam rozdział "Prosty mikroprocesor", w którym kilka komponentów łączy się jedną szyną. Z punktu widzenia tego projektu jest to chyba najlepsze rozwiązanie. Oczywiście, że to jest ryzykowne, ale uP chyba tak działają :?

A Xilinx kompiluje, szkoda że zainwestowałem w Alterę :(

Piotr
Moderator
Moderator
Posty:468
Rejestracja:14 lut 2003, o 13:53
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: Piotr » 4 paź 2003, o 21:13

Oczywiście to of... to błąd literowy (pisałem to w notatniku).

A co to jest MUX? Wiem, pewnie beznadziejne pytanie, ale teraz nie kojarzę.

>> Multiplekser.

A co do sedna, to w takim razie czemu w książkach (np. bardzo dobra "Projektowanie układów cyfrowych z wykorzystaniem języka VHDL") stosuje się takie rozwiązanie?

>> Bo jest ono dozwolone przez VHDL, ale nie zawsze moze zostac poprawnie zsyntezowane, bo to zalezy glownie od rozwiazan zastosowanych w PLD.

Jest tam rozdział "Prosty mikroprocesor", w którym kilka komponentów łączy się jedną szyną. Z punktu widzenia tego projektu jest to chyba najlepsze rozwiązanie. Oczywiście, że to jest ryzykowne, ale uP chyba tak działają :?

>> I np. w ukladach Spartan lub ACEX i wielu podobnych mozna cos takiego zrobic.


A Xilinx kompiluje, szkoda że zainwestowałem w Alterę :([/quote]

>> Jak wyzej: w ukladach umozliwiajacych implementacje magistral tristate - niezaleznie od producenta - mozesz taki opis stosowac. A Xilinx uzywa sztuczek: w XC9500 implementacja Twojego projektu wyglada przesmiesznie: tworzony jest wire-AND w matrycy FC, a nie - jak pewnie sadzisz - laczone wyjscia buforow tristate :-)
Na jaki uklad Altery chcesz kompilowac projekt?
Pzdr
PZb

P.S. Znasz Quartusa?

_Wojciech_
-
-
Posty:269
Rejestracja:1 kwie 2003, o 20:32
Lokalizacja:Bielsko-Biała

Postautor: _Wojciech_ » 5 paź 2003, o 14:24

Ha, teraz już wiem :). Czytajcie a znajdziecie. Wszystko pisze w helpie do Max Plus 2.

Po prostu trzeba sobie zrobić komponent, do którego wchodzą magistrale z innych komponentów i sygnały sterujące, a wychodzi szyna zbiorcza. I to sie skompiluje do każdego układu.

Kompilowałem to do układu Flex (bo taki mam). Ale teraz widzę, że Acex są w tej samej cenie nawet do 10x "pojemniejsze" i chyba się przestawię.

Quartusa nie używałem, bo na razie to się tym bawię za krótko :D .

Szkoda, że tak mało ludzi i firm w Polsce coś robi w tej dziedzinie. Firmy znalazłem tylko trzy: Digital Core Design (wyglada najbardziej profesjonalnie, porobili masę procesorków (8051) itp.), Evatronix (też mają implementację 8051) i JawiLogic (? chyba tylko sprzedają uklady - i dobrze, bo bym nie miał gdzie kupić :lol: ).
Może temu, że to dość droga zabawa :( .

Piotr
Moderator
Moderator
Posty:468
Rejestracja:14 lut 2003, o 13:53
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: Piotr » 5 paź 2003, o 19:37

Ha, teraz już wiem :). Czytajcie a znajdziecie. Wszystko pisze w helpie do Max Plus 2.

>> _jest napisane_

Po prostu trzeba sobie zrobić komponent, do którego wchodzą magistrale z innych komponentów i sygnały sterujące, a wychodzi szyna zbiorcza. I to sie skompiluje do każdego układu.

>>:-)

Kompilowałem to do układu Flex (bo taki mam). Ale teraz widzę, że Acex są w tej samej cenie nawet do 10x "pojemniejsze" i chyba się przestawię.

>> Do tego tansze.

Quartusa nie używałem, bo na razie to się tym bawię za krótko :D .

>> Ale ma lepszy synetzer. W M+PII lepiej uzywac Altera Advanced Sythesis Tool zamiast wewnetrznego syntezrea VHDL (wersja SE).

Szkoda, że tak mało ludzi i firm w Polsce coś robi w tej dziedzinie. Firmy znalazłem tylko trzy: Digital Core Design (wyglada najbardziej profesjonalnie, porobili masę procesorków (8051) itp.), Evatronix (też mają implementację 8051) i JawiLogic (? chyba tylko sprzedają uklady - i dobrze, bo bym nie miał gdzie kupić :lol: ).

>> Detalicznie raczej nic innego nie znajdziesz. Maja miec sklep w I-necie.

Może temu, że to dość droga zabawa :( .
>> ?? Droga? Do czego to odnosisz? Kompilatory za darmo, a uklady od 4 PLN :-)
Pzdr
PZb

_Wojciech_
-
-
Posty:269
Rejestracja:1 kwie 2003, o 20:32
Lokalizacja:Bielsko-Biała

Postautor: _Wojciech_ » 5 paź 2003, o 20:55

>> ?? Droga? Do czego to odnosisz? Kompilatory za darmo, a uklady od 4 PLN :-)
Od 4zł :o Jakie układy? Takich tanich nie widzialem! Chyba, że typu GAL, czy PAL, ale nimi się na razie nie interesowałem.
Ale faktycznie do największego Acex'a można wgrać wielgachny układ (z mojego punktu widzenia). I cała część cyfrowa może być za jakieś 200zł (a na jakiej małej powierzchni!). Zależy jak na to patrzeć.

Wróć do „Elektronika - tematy dowolne”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 34 gości