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ę

verilog -> vhdl

rafalak
-
-
Posty:4
Rejestracja:20 kwie 2006, o 21:56
Lokalizacja:polska
verilog -> vhdl

Postautor: rafalak » 26 cze 2007, o 20:54

Witajcie, prosze o mala pomoc, jak moge zamienic wire veriloga na vhdl ?

oto kod bez zbednych linijek

Kod: Zaznacz cały

reg Transaction; wire TransactionStart = ~Transaction & ~Frame; wire Targeted = TransactionStart & (AD == IO_address); always @(postedge CLK or netedge RST) case(Transaction) 1'b0: Transaction <= TransactionStart; 1'b1: Transaction <= ~TransactionEnd; endcase reg DevSelOE; always @(postedge clk or negedge RST) case(Transaction) 1'b0: DevSelOE <= Targeted; 1'b1: if(TransactionEnd) DevSelOE <= 1'b0; endcase reg DevSel; always @(postedge CLK or negedge RST) case(Transaction) 1'b0: DevSel <= Targeted; 1'b1: if(TransactionEnd) DevSel <= 1'b0; endcase
zaczalem tak...

Kod: Zaznacz cały

process (clk, rst) begin if rising_edge(clk) then if transaction = '0' then transaction <= (not transaction) and (not frame); elsif transaction = '1' then transaction <= transaction and frame; end if; end if; end process;
nie zrobilem case'a w wyborze transaction bo ss stany 3-cie
stoje w dziwnym miejscu, czy masz sens wstawiania zawsze tam gdzie jest TransactionStart frazy (not transaction) and (not frame) ??
czy moze przez przypisac do to rejestru i potem przypisywac gdzie potrzeba ?

2 pytanie czy moze lepiej bedzie umiescic w 1 procesie ?
czym wogole jest wire ? (bardziej od strony praktyczno-techniczno-logicznej)
a nie lepiej zrobic zamiast wire, reg ?
Z gory dzieki za kazda odp.

ziggy
-
-
Posty:25
Rejestracja:2 cze 2006, o 21:44
Lokalizacja:Podkarpacie
Kontaktowanie:

Postautor: ziggy » 27 cze 2007, o 17:02

czym wogole jest wire ? (bardziej od strony praktyczno-techniczno-logicznej)
W Verilogu dane typu wire reprezentują fizyczne połączenia (przewody) w projektowanym układzie. Tak jak, na przykład, bierzemy jakiś przewód i dołączamy go do wyjścia bramki – podobnie danej typu wire przypisujemy wartość pewnego wyrażenia. Ale uwaga, przypisań do danych typu wire nie można wykonywać z wnętrza funkcji i bloku always (ogólnie z wnętrza bloku typu begin... end). Odczyt danych typu wire może być wykonany w dowolnym miejscu kodu. Typu wire używa się najczęściej w przypisaniach ciągłych (instrukcja assign, albo – podobnie jak w Twoim kodzie – w tej samej linii w której występuje deklaracja wire).

Z kolei dane typu reg są typowymi zmiennymi. Typem lewej strony w wyrażeniu przypisania wewnątrz bloku always (niezależnie od tego czy opisujemy układ sekwencyjny czy kombinacyjny) musi być zmienna typu reg. Danych typu reg nie można używać w przypisaniach ciągłych.

Dlatego też – z zasadniczych powodów – nie można zamieniać typów danych z reg na wire i odwrotnie.

W przypadku Twojego kodu można zastosować tylko jeden blok sekwencyjny always. W instrukcji always deklarujesz zdarzenie opisujące asynchroniczny reset – tymczasem brak obsługi tego zdarzenia wewnątrz bloku always. Instrukcje case można zamienić na konstrukcję if-else. Proponowałbym taki kod:

Kod: Zaznacz cały

reg Transaction; wire TransactionStart = ~Transaction & ~Frame; wire Targeted = TransactionStart & (AD == IO_address); reg DevSelOE; always @(posedge CLK, negedge RST) if (~RST) begin Transaction <=0; //jakieś wartości początkowe DevSelOE <=0; DevSel <=0; end else if(Transaction) begin Transaction <= ~TransactionEnd; if(TransactionEnd) begin DevSelOE <= 1'b0; DevSel <= 1'b0; end end else begin Transaction <= TransactionStart; DevSelOE <= Targeted; DevSel <= Targeted; end
Nie piszę jakby to wyglądało w VHDL-u bo go nie używam. Verilog jest lepszy :611: W każdym razie jest bardziej bliski sprzętu niż VHDL i ma znacznie bardziej zachęcającą, C-podobną, składnię. Wszystko co można opisać w VHDL, da się również opisać w Verilogu (odwrotna zależność nie zawsze występuje – np. opis obwodu na poziomie tzw. przełączników), a przy tym kod będzie krótszy, bardziej zwarty i przejrzysty.

Wróć do „PLD/FPGA i inne zagadnienia techniki cyfrowej”

Kto jest online

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