Ostatnie to ma najwyzej wplyw na szybkosc. No i ewaluuje w dobra strone, bo pewien uklad co mi wychodzil kiedys na 25MHz (Quartus 2.0 albo i 1.x) teraz wychodzi w tej samej kosci na 80MHz :-) Czy zajmuje mniej czy wiecej logiki to niestety juz nie powiem...
jak to nie bedzie dzialac ? jesli kompilator zrobi dokladnie to co napisane, to polaczy zanegowane wyjscie AND z wejsciem tegoz AND i bedzie piekny oscylator; tyle, ze stawiam raczej na jakies 3ns opoznienia, niz na jedna nanosekunde; inna sprawa, czy autorowi o to chodzilo ;)
Zdawalo mi sie ze petle for (for i in 10 downto 0 loop ...) da sie syntetyzowac? Przy okazji - moglby ktos polecic dobry podrecznik do vhdl? Na razie przedzieram sie przez "Projektwanie uk. cyf. z wyk. jezyka VHDL" Marka Zwolinskiego - ale przydaloby sie cos z indeksem rzeczowym, lezace na podoredziu, gdzie moglbym szybko skladnie sprawdzic - "normalnie" programuje c/c++ i czasem skladnia VHDL mnie do rozpaczy doprowadza... GRG
bedzie dzialac dokladnie tak, jak jest napisane w VHDL, ale nie tak, jak autor mial na mysli;
ano, "AFTER 1 NS" zostanie olane, ale reszta nie, wiec powstanie barmka AND, ktorej wejscie przez negator jest polaczone z wyjsciem i sygnalem "Clock" jako bramka; szacujac opoznienie ACEX -3 na ok. 3-4ns wyjdzie z tego oscylator ok. 330-250MHz, o ile ACEX potrafi przeniesc taka czestotliwosc, enable'owany sygnalem "Clock";
potrzebne...mam do przeslania dane z kamerki 64 megapiksele , musze to przesalc w 2s, 128MB...
w opnecores jest MAC 100/10, mysle go przerobic..na gigabit
mam cala specyfikacje..w sumei 15 MB pdf'a.. czytalem i jakos mnie to az tak nei przerazilo.. moduly CRC mam... no i na razei mam podstawe - rdzen z MTIP tylko musze tunel z firmy pod linuxem postawic, aby quartus na zewnatrz firmy widzial serwer licencyjny - czy ktos sie w to bawil? w sumie wyczailem na ktorych portach sie do serwera odzywa..dzis zrobie proby..
Niby 10x przyspieszyc i dolozyc przetwarzanie na sygnaly do PHY. Albo zamiast gigabit eth wsadzic po prostu swiatelko i juz - standard niby wlasny, ale przesylac mozna szybko.
A po co? Niech w firmie kupia sztuke T-dongle (do LPTa podlaczane).
Z tym sie calkowicie zgadzam, malo ktory programista jest uczony _prawdziwego_, drobnoziarnistego programowania wspolbieznego, a to jest podstawowa filozofia w HDL-ach. Z drugiej strony znane mi jezyki do pisania specyfikacji sprzetu sa zbyt niskopoziomowe
-- mozna w nich latwo zapisac jakies liczniki, jednostki arytmetyczno
-logiczne itd, ale gdy przychodzi opisac uklad o skomplikowanym sterowaniu, to zaczyna byc "wesolo". Na przyklad: jak w czytelny sposob opisac potok procesora superskalarnego, ktory dopuszcza "lokalne" wstrzymania (tj. brak jakichs danych nie wstrzymuje calego potoku, lecz tylko stopnie tych danych wymagajace?). A pytam powaznie, by miec porownanie, bo Wiesz Co tez ma umozliwiac napisanie takich specyfikacji. :-)
Druga sprawa to ubogie wsparcie nowoczesnych paradygmatow programowania. Szczegolnie brakuje mi rozbudowanych deklaracji generycznych (czego jak czego, ale zeby VHDL nie mial szablonow?!), pseudoobiektowosci (dziedziczenie jednobazowe, ukrywanie danych, "code", czy wlasciwie "specification reuse", za to bez deklaracji wirtualnych i byc moze koercji, bo z tym moga byc problemy podczas syntezy). Brak tez akcesorow, przez co przy co dziwniejszych interpretacjach wektorow bitowych (kodowaniach) trzeba wszystko robic recznie, zamiast zostawic to automatowi, wskazujac tylko jak kodowac dany typ, np. deklaracja generyczna dla kodu BCD:
// Liczby naturalne
type UnsignedInt is {k : int | k >= 0} type Positive is {k : int | k > 0}
// Dlugosci wektorow liczb BCD musza byc podzielne przez 4
type BCD_size is {k : Positive | k % 4 = 0}
generic type BCD_vector{N} is group of N bits encoded as BCD_encoding where {const N in {BCD_size}} with
public method add_to(in n : BCD{N}) is self <= self + n; // Kodowanie w obie strony zalatwia // automat na podstawie definicji // BCD_encoding end end
generic encoding BCD_encoding{N} for group of N bits where {const N in {BCD_size}} is
pure accessor in() : UnsignedInt is ... // BCD -> uint end
accessor out(i : UnsignedInt) is ...// uint -> BCD end end
Zamiast tworzenia gigantycznych switchow przydaloby sie tez miec "value dispatch":
method M(i : {n : int | n % 4 = 1}) is ... // Robimy cos dla dajacych reszte 1 end
method M(i : {n : int | n % 4 = 2}) is ... // Robimy cos dla dajacych reszte 2 end method M(i : int) is ... // Robimy cos dla pozostalych end M(5*7+2); // Wywola pierwsza z metod
W czytelny sposob to sie da zrobic niewiele wiecej niz licznik i automat stanow :-(
O cholera :-)
Wiesz - z drugiej strony to podczas pisania w VHDLu trzeba sobie wyobrazac jaki uklad wyjdzie po P&R zeby bylo to wszystko sensownie male i sensownie szybkie. Przy wyzszych poziomach abstrakcji czasami rozne dziwne rzeczy moga byc nie do zauwazenia/nie do wyobrazenia. Z drugiej strony jest System-C i Handel-C... ale jakos cisza o tym, wiec albo jest na tyle dobre ze amerykancy wzieli to dla wojskowosci, albo jest po prostu do dupy :-)
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.