Skocz do zawartości

Sipeed Tang Nano 4k z ADC - Gowin FPGA Designer


Pomocna odpowiedź

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.

image.thumb.png.9a25eefd476449330f51a956bcce7451.png

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

Synthesis.thumb.jpg.6ae86c01bb25fbc443e006397ca61179.jpg

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 przez Gieneq
  • Lubię! 1
Link to post
Share on other sites
(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.

image.thumb.png.9a25eefd476449330f51a956bcce7451.png

Też zwróciłem na to uwagę, jest to dość dobrze podkreślone na tej ilustracji

Synthesis.thumb.jpg.6ae86c01bb25fbc443e006397ca61179.jpg

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 przez FlyingDutch
Link to post
Share on other sites

@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 to post
Share on other sites
(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 przez FlyingDutch
update
  • Pomogłeś! 1
Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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:

image.thumb.png.cf971d3a5aed9764124f74e77cb01bfa.png

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?

image.thumb.png.2c6b115806d73d4248fa91181ebcecc2.png

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 *?

image.thumb.png.8c367a32ad952edb03e6cffa7efcf139.png

Pytanie 3) Czy jest jakieś znaczenie w kolejności linii przypisań?

image.thumb.png.8076b10fb299dd2cc5ab0695104c0809.pngimage.thumb.png.27c5311c82ead8280b5dc0975238f2fc.png

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 to post
Share on other sites

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 to post
Share on other sites
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 to post
Share on other sites
(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 przez FlyingDutch
  • Pomogłeś! 1
Link to post
Share on other sites

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.

image.thumb.png.95738aba76bf017c14557c2d651a636a.png

Link to post
Share on other sites
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 to post
Share on other sites

Cześć @Gieneq,

teraz ja zadam pytanie: Prośbę o licencję wysyłałeś bezpośrednio do "Gowin Semiconductors", czy do firmy "Sipeed"?

Pozdrawiam

Link to post
Share on other sites
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ż:

image.thumb.png.27ed8480c6c0e1881a9abdc06c70558e.png

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

  • Pomogłeś! 1
Link to post
Share on other sites
(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 przez Gieneq
  • Lubię! 1
Link to post
Share on other sites
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 to post
Share on other sites
  • Gieneq zmienił tytuł na: Sipeed Tang Nano 4k z ADC - Gowin FPGA Designer

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.