Gieneq Napisano Luty 7, 2022 Udostępnij Napisano Luty 7, 2022 (edytowany) Temat wydzielony z: dla poprawy czytelności worklogu. @FlyingDutch cześć i dzięki za odpowiedź 🙂 Dnia 7.02.2022 o 12:00, FlyingDutch napisał: Zamiast I2C wybrałbym SPI (jest dużo szybsze i jego implementacja w FPGA nastręcza mniej kłopotów). Dobrze wiedzieć, myślałem żeby użyć 16 bit przetwornik ADS1116, który już mam i ma właśnie I2C. Dnia 7.02.2022 o 12:00, FlyingDutch napisał: nie ma możliwości symulacji IP Cores firmy Gowin Też zwróciłem na to uwagę, jest to dość dobrze podkreślone na tej ilustracji Tu ludzie piszą żeby użyć do tego ModelSim https://surf-vhdl.com/how-to-get-free-modelsim-license-and-simulate-your-vhdl-code/ Ale najpierw musze opanować język 🙂 Edytowano Luty 10, 2022 przez Gieneq 1 Link do komentarza Share on other sites More sharing options...
FlyingDutch Luty 7, 2022 Udostępnij Luty 7, 2022 (edytowany) 3 godziny temu, Gieneq napisał: @FlyingDutch cześć i dzięki za odpowiedź 🙂 Dobrze wiedzieć, myślałem żeby użyć 16 bit przetwornik ADS1116, który już mam i ma właśnie I2C. Też zwróciłem na to uwagę, jest to dość dobrze podkreślone na tej ilustracji Tu ludzie piszą żeby użyć do tego ModelSim https://surf-vhdl.com/how-to-get-free-modelsim-license-and-simulate-your-vhdl-code/ Ale najpierw musze opanować język 🙂 Hej @Gieneq jak masz I2C w przetworniku to go użyj (czasami jest problem z adresami na magistrali bo mogą być adresy: 7bit, 8bit, 10 bit, 12bit i rzadko inne formaty ramek i nie mogą się dogadać dwie strony). Zewnętrzny symulator umożliwia tylko symulację kodu, który sam napisałeś - jak masz w projekcie IPCores Gowina, to nie przesymulujesz tego nawet na zewnętrznym symulatorze. To wkurza użytkowników układów firmy Gowin, ale firma na razie to olewa. Polecałbym Ci obejrzeć 10 do 15 pierwszych wykładów tego Hinduskiego profesora - to najlepszy kurs Verilogu na jaki trafiłem.Ja wkleiłem do jednego z moich postów pdf'a z podstawowym kursem Verilog'a - według mnie jest dobry na początek nauki tego języka. Pozdrawiam Edytowano Luty 7, 2022 przez FlyingDutch Link do komentarza Share on other sites More sharing options...
Gieneq Luty 7, 2022 Autor tematu Udostępnij Luty 7, 2022 @FlyingDutch ok, dobrze wiedzieć Dla ciągłości worklogu wrzucę link też tu: Jeszcze taki kurs znalazłem, będzie do porównania: Link do komentarza Share on other sites More sharing options...
FlyingDutch Luty 7, 2022 Udostępnij Luty 7, 2022 (edytowany) Cześć @Gieneq, to ja wkleję ponownie moją kompilację dot. Verilog'a (taki Verilog w pigułce) - uważam, że dobrze nadaje się na "szybki start" z tym językiem (przeczytać przed kursem w sieci). VerilogKursPodstawFinal.pdf Pragnę uczulić od razu na zrozumienie kilku pojęć: 1) różnice pomiędzy zmiennymi/sygnałami reg i wire (to absolutnie podstawowe w Verilog'u) 2) przypisania ciągłe (kombinacyjne) ze słowem kluczowym "assign" 3) przypisania blokujące w blokach proceduralnych z "=" np. a=b; 4) przypisania nieblokujące w blokach proceduralnych z "<=" np. a <= b; 5) różnice w działaniu przypisań blokujących i nieblokujących w blokach proceduralnych (w syntetyzerze) 6) zrozumienie działania opóźnień z symbolem # np. a= #10 1 (synteza i symulacja) 7) zasada działania "Test-bench" w Verilogu Ja uczyłem, się Verilog'a trochę chaotycznie, ale dopiero po zrozumieniu tematów wyżej wymienionych zacząłem w pełni rozumieć kod w tym języku. BTW: ten kurs Verilog'a, który wkleiłeś widzę (po liczbie wykładów), że też dość szczegółowy. Jak będę miał chwilę czasu to się z nim bliżej zapoznam 😀 Tak z ciekawości jak zdobyłeś licencję do "Gowin EDA"? Ja wysyłałem maila z MAC adresem karty sieciowej laptopa do naszego przedstawiciela handlowego w Rutroniku (oni są dystrybutorem układów FPGA firmy Gowin w Polsce). Potem Chińczycy wysyłali plik licencyjny. Ale ta licencja to do laptopa z pracy, a z chęcią bym sobie zainstalował "Gowin EDA" na kompie w domu. Ta ogólnodostępna licencja ze strony firmy "Sipeed" coś nie chciała mi działać. Pozdrawiam Edytowano Luty 7, 2022 przez FlyingDutch update 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Gieneq Luty 7, 2022 Autor tematu Udostępnij Luty 7, 2022 6 godzin temu, FlyingDutch napisał: Tak z ciekawości jak zdobyłeś licencję do "Gowin EDA"? Właśnie w ten sposób - formularz > wpisałem adres MAC > wysłałem. Ciekawe że oni to chyba ręcznie sprawdzają, bo wysłałem w piątek wieczorem, a dostałem odpowiedź z niedzieli na poniedziałek. I to chyba nie ma znaczenia co podasz... Przez te opóźnienie w odpowiedzi pomyślałem, że coś poszło nie tak i wysłałem ten sam adres MAC z innego maili i później dostałem 2 odpowiedzi. 6 godzin temu, FlyingDutch napisał: różnice pomiędzy zmiennymi/sygnałami reg i wire (to absolutnie podstawowe w Verilog'u) i tu już są problemy... To rozumiem: Pytanie 1) Dlaczego w modułach czasem nie określa się czym jest input/output? Np tu jest opisane że jedne są reg inne wire: // D flip-flop Code module d_ff ( d, clk, q, q_bar); input d ,clk; output q, q_bar; wire d ,clk; reg q, q_bar; always @ (posedge clk) begin q <= d; q_bar <= !d; end endmodule Ale w tym pdf przykład - tylko q jest opisany jako reg. Reszta jest jakoś domyślnie wire? Dalej, przejrzałem komentarze stąd : Cytat You use wire when the output of a logic element is connected to an input of another logic element while reg is a variable in verilog which is used in a procedural assignment statement such as sensitivity list within an always block,it denotes register Reg może być syntezowany jako układ kombinacyjny lub przerzutniki: //Example of a reg that will be synthesized as combinational logic: reg myreg; always @ (*) begin myreg = 1'b0; end //Example of a reg that will be synthesized as sequential logic (flip flop): reg myreg; always @ (posedge clk) begin myreg <= some_input; end Pytanie 2) w always jest w nawiasach sensitivity list, co oznacza *? Pytanie 3) Czy jest jakieś znaczenie w kolejności linii przypisań? I taki luźny temat do dyskusji, jak to się dzieje że większość tych bardzo wnikliwych tematów na YT opracowują hindusi? Te filmy są genialne, może język jest trochę koślawy, ale to nie problem, a o dziwo te materiały nie są jakoś bardzo popularne. Link do komentarza Share on other sites More sharing options...
Elvis Luty 8, 2022 Udostępnij Luty 8, 2022 Zmienna typu reg wcale nie oznacza rejestru / wyjścia przerzutnika. To zwykły przypadek, albo raczej błąd autorów pierwszej wersji Veriloga, że akurat takiej nazwy użyli. Współczesne wersje, czyli SystemVerilog zastąpiły "reg" przez "logic" - wtedy trudniej o pomyłkę. Ogólnie wire to połączenie między modułami, a logic (reg) to wartość logiczna (4-wartościowa). Natomiast implementacja zmiennej typu logic/reg w sprzęcie to inny temat i czasem może to być przerzutnik, innym razem układ kombinacyjny. Wszystko zależy jak jest używana. Link do komentarza Share on other sites More sharing options...
FlyingDutch Luty 8, 2022 Udostępnij Luty 8, 2022 1 godzinę temu, Elvis napisał: Zmienna typu reg wcale nie oznacza rejestru / wyjścia przerzutnika. To zwykły przypadek, albo raczej błąd autorów pierwszej wersji Veriloga, że akurat takiej nazwy użyli. Współczesne wersje, czyli SystemVerilog zastąpiły "reg" przez "logic" - wtedy trudniej o pomyłkę. Ogólnie wire to połączenie między modułami, a logic (reg) to wartość logiczna (4-wartościowa). Natomiast implementacja zmiennej typu logic/reg w sprzęcie to inny temat i czasem może to być przerzutnik, innym razem układ kombinacyjny. Wszystko zależy jak jest używana. Cześć @Elvis, to nie do końca jest prawda z reg - ogólnie reg jest elementem który pamięta stan pomiędzy wykonanymi zmianami. W Verilogu po lewej stronie wyrażenia często może być tylko reg (wire spowoduje błąd syntezy). Nie mówimy to o "SytemVerilogu". Natomiast rzeczywiście implementacja reg w sprzęcie może być zarówno przerzutnikiem jak i układem kombinacyjnym - zależy od napisanego kodu. Pozdrawiam Link do komentarza Share on other sites More sharing options...
FlyingDutch Luty 8, 2022 Udostępnij Luty 8, 2022 (edytowany) Cześć @Gieneq, Pytanie numer 1): Nie wiem,czy dobrze zrozumiałem twoje pytanie, więc odpowiem tak: A) Jeśli typ sygnału nie jest explicite opisany - to domyślnie przypisywany jest typ (Net), czyli wire B) W starszej wersji Verilog'a w nawiasach (parametrach modułu nie określało się kierunku/typów sygnałów - w nowszych wersjach Verilog'a jest to już mozliwe C) W przykładzie pierwszym mamy do czynienia z układem sekwencyjnym, który reaguje na zbocze narastające zegara (clk), i tylko wtedy dokonują się zmiany wyjść q i q_bar. Zmienne te muszą pamiętać stan pomiędzy zmianami sygnału zegara - dlatego muszą być typu reg.Przypisania są nieblokujące, użycie <= i wykonują się równolegle w tym samym czasie. Naprawdę proponuję obejrzenie pierwszych 10 wykładów indyjskiego profesora, on bardzo szczegółowo tłumaczy te tematy. Pytanie numer 2): Kod 1: /Example of a reg that will be synthesized as combinational logic: reg myreg; always @ (*) begin myreg = 1'b0; end W bloku always jest użyte jako zdarzenie @(*), co oznacza zmianę dowolnego sygnału w układzie - nie jest to reakcja na zbocze, czyli może dokonać się w dowolnym czasie - stąd generowany jest układ kombinacyjny (przypisanie blokujące) Kod 2: //Example of a reg that will be synthesized as sequential logic (flip flop): reg myreg; always @ (posedge clk) begin myreg <= some_input; end W tym bloku always układ reaguje na zbocze narastające clk (i przypisanie nieblokujące) wygenerowany będzie układ sekwencyjny (przerzutnik). Pytanie 3: Tak ,jest róznica: jeśli używamy przypisań blokujących (=) wtedy są one wykonywane sekwencyjnie (po kolei i czas jest zwiększany) i ich kolejność jest istotna. W przypadku przypisań nieblokujących (<=) są one wykonywane równolegle w tym samym czasie. Nie zaleca się mieszania przypisań blokujących i nieblokujących w jednym bloku always (jest to uważane za błędne praktyki projektowe). Jeśli jednak w bloku są mieszane przypisania, to zwykle kolejność zapisu tych przypisań jest istotna. Odnośnie listy wrażliwości (zdarzenia) - @(*) oznacza zmianę dowolnego sygnału wejśociwego. BTW: zapomniałem dodać: warto sobie zainstalować bezpłatne narzędzia: "IVerilog" - symulator Verilog'u i "GTKWave" - bezpłatna przeglądarka plików .vcd (Values Change dump) do oglądania przebiegów czasowych symulacji, i samemu popróbować symulacji przykładów. Pozdrawiam Edytowano Luty 8, 2022 przez FlyingDutch 1 Link do komentarza Share on other sites More sharing options...
Gieneq Luty 8, 2022 Autor tematu Udostępnij Luty 8, 2022 Tak dopytam, poczuję się jak użytkownik kursów forbota zadający trywialne pytania. Wikipedia: Cytat Ta sytuacja zmieniła się w roku 2009, kiedy obydwa standardy zostały połączone. Jaką wersję języka wybrać do syntezy? Domyślnie jest zaznaczona wersja 2001, ale z tego co rozumiem jest to trochę zabytek. Link do komentarza Share on other sites More sharing options...
Gieneq Luty 8, 2022 Autor tematu Udostępnij Luty 8, 2022 6 minut temu, FlyingDutch napisał: Naprawdę proponuję obejrzenie pierwszych 10 wykładów indyjskiego profesora, on bardzo szczegółowo tłumaczy te tematy. Jestem na 4 filmie 🙂 6 minut temu, FlyingDutch napisał: Nie zaleca się mieszania przypisań blokujących i nieblokujących Ok, dzięki! Ogólnie o to chodziło, dzięki za odpowiedź. Link do komentarza Share on other sites More sharing options...
FlyingDutch Luty 8, 2022 Udostępnij Luty 8, 2022 Cześć @Gieneq, teraz ja zadam pytanie: Prośbę o licencję wysyłałeś bezpośrednio do "Gowin Semiconductors", czy do firmy "Sipeed"? Pozdrawiam Link do komentarza Share on other sites More sharing options...
Gieneq Luty 8, 2022 Autor tematu Udostępnij Luty 8, 2022 Cześć 🙂 @FlyingDutch Tu jest formularz kontaktowy: https://www.gowinsemi.com/en/support/license/ Ciekawe, chińczykowi musiało spodobać się logo i podobno to co w środku też: 1 Link do komentarza Share on other sites More sharing options...
FlyingDutch Luty 11, 2022 Udostępnij Luty 11, 2022 Dnia 8.02.2022 o 19:45, Gieneq napisał: Cześć 🙂 @FlyingDutch Tu jest formularz kontaktowy: https://www.gowinsemi.com/en/support/license/ Ciekawe, chińczykowi musiało spodobać się logo i podobno to co w środku też: Cześć, właśnie przyszła licencja na "Gowin EDA" i dzisiaj po pracy będę instalował to środowisko na kompie w domu. Będę mógł się wtedy bliżej przyjrzeć IP Cores dla |"I2C controller" i FFT. Pozdrawiam 1 Link do komentarza Share on other sites More sharing options...
Gieneq Luty 11, 2022 Autor tematu Udostępnij Luty 11, 2022 (edytowany) Cześć @FlyingDutch super 🙂 Ja dalej przerabiam filmy z kursu, teraz już część 12 gdzie omawiane są różnice w wyniku syntezy. I przy okazji pytanko, bo nie jestem pewny czy to co jest w tym kursie przekłada się na każdy układ. Profesor opisuje tam, że zależnie jak napisze się program "behavioral" to zamieni się jakieś połączenie bramek. FPGA z kursu ma 1584 microceli, GW1NSR z Tang Nano 4k ma prawie 4tyś LUT. Jak rozumiem LUT to imitacja układu kombinacyjnego przy użyciu pamięci "tablic prawdy". Więc symulacja czasów propagacji, zastanawianie się nad wyścigami w LUT nie ma chyba znaczenia? Edytowano Luty 11, 2022 przez Gieneq 1 Link do komentarza Share on other sites More sharing options...
FlyingDutch Luty 11, 2022 Udostępnij Luty 11, 2022 1 godzinę temu, Gieneq napisał: Cześć @FlyingDutch super 🙂 FPGA z kursu ma 1584 microceli, GW1NSR z Tang Nano 4k ma prawie 4tyś LUT. Jak rozumiem LUT to imitacja układu kombinacyjnego przy użyciu pamięci "tablic prawdy". Więc symulacja czasów propagacji, zastanawianie się nad wyścigami w LUT nie ma chyba znaczenia? Cześć, budowa pojedyńczej CLB (Configurable Logic Block) jest bardziej skomplikowana 4,6,8 wejściowe LUT dą tylko częścią CLB (poza LUT CLB zawiera także kilka multiplekerów, przerzutnik (najczęściej typu D) - ich budowa trochę się różni w zależności od producenta układu FPGA. Tak LUT to funkcja kombinacyjna N wejść, z LUT można także zrobić malutką pamieć SRAM lub tejestr przesuwny (w różnych ukłądach FPGA liczba wejść funkcji logicznej jest różna np. 4,5,6,8 itd). Tutaj można zobaczyć jak są zbudowane CLB dla układów Intela i Xilinx'a: https://ep.com.pl/rynek/temat-miesiaca/14666-fpga-porownanie-ukladow-i-zestawow-startowych BTW: dzisaj poświęciłem trochę czasu na zapoznanie się z nowym softem do syntezy FPGA firmy Gowin i ich kolekcją IP Cores. Muszę powiedzieć, że jestem pod wrażeniem rozwoju bazy IP oraz dołączoną dokumentacją. Wygląda na to, że magistrala AHB Bus (używana w ARM-Cortex) pełni podobną rolę jak AXI Bus dla IP Cores Xilinx'a. Pozdrawiam Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »