Skocz do zawartości

Błąd ISE: "This Xilinx application has run out of memory or has encountered a memory conflict"


Pomocna odpowiedź

To jest cały komunikat: Portability:3 - This Xilinx application has run out of memory or has encountered a memory conflict.  Current memory usage is 50156012 kb.  You can try increasing your system's physical or virtual memory.  If you are using a Win32 system, you can increase your application memory from 2GB to 3GB using the /3G switch in your boot.ini file.

Według podpowiedzi, które udało mi się znaleźć upewniłam się, że używam 64-bit ISE i jako, że mam Windows 10 (na innych forach dotyczyło to starszych wersji) to nie będę zwiększać pamięci aplikacji, bo nawet nie za bardzo wiem jak dostać się do pliku boot.ini

Ktoś ma pomysł o co chodzi? Załącze cały projekt, jest to generator wzorów na VGA

Synteza zacina się na pliku Test_Pattern_Gen.v

VGA_NANDLAND2.rar

Edytowano przez monsiw
Link to post
Share on other sites

Cześć,

jak dużą masz pamięć RAM na tym komputerze? Zakładam, że rzeczywiście używasz 64-bitowej wersji ISE.

Pozdrawiam

Jak długo działała synteza, zanim pojawił się ten błąd?

Edytowano przez FlyingDutch
update
Link to post
Share on other sites

Cześć, tak jak @FlyingDutch zapytał, napisz ile masz pamięci RAM w komputerze, bo możliwe, że jej po prostu brakuję. Uruchomiłem twój projekt u siebie (64 bit, Win10, 8GB RAM) i tak samo brakuje pamięci, ale widać, że program jej potrzebuje, bo po uruchomieniu menedżera zadań można zobaczyć, że praktycznie cały RAM jest wykorzystany. 

  • Lubię! 1
Link to post
Share on other sites

Cześć,

ja uruchoniłem projekt w ISE (64 bit) i bardzo szybko wysycił mi całą pamięć RAM - 16GB (patrz zrzut)

RAMusage_.thumb.png.f7cc925183b002a4671dbd61af0f8653.png

Zrobiłłem jesze jeden eksperyment i we wszystkich plikach źródłowych zamieniłem parametry z ilością kolumn i wierszy z 800x640 na 320x240 (połowa rozdzielczości VGA) i nadal wysyca całą pamięc (tylko wolniej), Chyba jest jakiś błąd w projekcie, albo potrzeba naprawdę dużej ilości RAM w kompie.

Pozdrawiam

Edytowano przez FlyingDutch
update
  • Lubię! 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

No ja mam 12GB RAM...

Ogólnie jest to projekt z tej strony https://www.nandland.com/goboard/vga-introduction-test-patterns.html

tutaj są wszystkie moduły https://www.edaplayground.com/x/Uct

i te pliki występują razem z plikami z projektu UART RX-TX, które chciałam pominąć, więc mogłam coś namieszać

Nie chciałam ich używać, bo do końca mi nie działał projekt poprawnie, ale tym razem zrobiłam wszystko razem. Udała się synteza oraz wygenerowanie pliku z tym, że nic nie działa 😞 tzn. ani UART ani VGA.

Musiałam dokonać zmian pod Elbert v2, który np. ma 2 wyprowadzenia dla koloru niebieskiego, a nie 3 jak jest w oryginale. Też nie wiem jak mają się wówczas prezentować zmienne w_Col_Count, w_Row_Count, VIDEO_WIDTH itp.

  • Lubię! 1
Link to post
Share on other sites
14 godzin temu, monsiw napisał:

No ja mam 12GB RAM...

Ogólnie jest to projekt z tej strony https://www.nandland.com/goboard/vga-introduction-test-patterns.html

tutaj są wszystkie moduły https://www.edaplayground.com/x/Uct

i te pliki występują razem z plikami z projektu UART RX-TX, które chciałam pominąć, więc mogłam coś namieszać

Nie chciałam ich używać, bo do końca mi nie działał projekt poprawnie, ale tym razem zrobiłam wszystko razem. Udała się synteza oraz wygenerowanie pliku z tym, że nic nie działa 😞 tzn. ani UART ani VGA.

Musiałam dokonać zmian pod Elbert v2, który np. ma 2 wyprowadzenia dla koloru niebieskiego, a nie 3 jak jest w oryginale. Też nie wiem jak mają się wówczas prezentować zmienne w_Col_Count, w_Row_Count, VIDEO_WIDTH itp.

Cześć,

wklej cały ten projekt w ISE (spakowany zip'em) do postu - akurat dzisiaj mam chwilę czasu to mógłbym do niego zajrzeć.

Pozdrawiam

Link to post
Share on other sites

Pobrałem projekt - zobaczę może uda mi się coś znaleźć.

Pozdrawiam

 

Hej,

otworzyłem twój ostatni projekt w ISE 64-bit, ale nadal synteza kończy się tym samym błędem o braku pamięci RAM (i RAM w kompie jest naprawdę wysycana do końca). Zobaczę oryginalne pliki projektu, czy też występuje ten błąd i dam znać.

Pozdrawiam

 

Zrobiłem projekt "od zera" z tych źródeł podanych na "edaplayground" i synteza oraz implementacja projektu kończy się bezbłędnie 9nie ma nawet ani jednego warninga). W pliku zip spakowany taki minimalny projekt ISA (VGA Pattern Gen.).

Teraz postaram się ustalić, gdzie lezy błąd w twoim projekcie.

BTW: na przyszłość jak masz więcej bitów na kolor niż masz zaimplementowane w sprzęcie nie musisz zmieniać nic w źródłach projektu - po prost podłączasz do płytki FPGA najstarsze bity

PozdrawiamVGAPatternGen01.zip

 

Hej,

wygląda na to, że twoje zmiany związane z kolorem niebieskim w pliku "Test_Pattern_Gen.v" spowodowały te problemy z zajętością pamięci komputera.

Po przywróceniu długości rejestrów dla koloru niebieskiego do oryginalnych wartości w twojej ostatniej wersji projektu fazy syntezy i implementacji przechodzą bez błędów - patrz zrzut ekranu;

VGATestGen.thumb.png.8f614be20c290f0766caebac806b8600.png

Teraz przejrzę plik ucf (user constaraints() i postaram się uruchomić projekt na płytce FPGA Elbert v.2

Pozdrawiam

  • Lubię! 1
Link to post
Share on other sites

Według mnie plik UCF jest z grubsza biorąc poprawny (tylko diody led mają zamienioną kolejność 1-8 na 8-1 i sygnały Enable dla wyświetlacza 7 mio segmentowego, ale to pewnie celowe działanie).

Załączam twój projekt z poprawkami (jest wygenerowany plik bin i można go wgrać na płytkę Elbert). Muszę to chwilowo odłozyć, ale3 powrócę do tegp projektu wieczorem.

Jeśli możesz to proszę opisz jak cały projekt powinien działać na sprzęcie (płytce VGA) - w skrócie oczywiście (żeby wiedzieć jak testować).

VGA_NANDLAND3.zip

Pozdrawiam

Edytowano przez FlyingDutch
Link to post
Share on other sites
(edytowany)

Ok, ja też wieczorem to sprawdzę, a powinno dokładnie w ten sposób działać (od 37min) ->

EDIT

Po wgraniu programu mam na ekranie komunikat "Tryb nieoptymalny. Tryb zalecany 1360x768 60Hz". Na wyświetlaczach pokazuje mi się 00 albo 01 albo 10 (przy wybieraniu cyfr) lub 11 jak wcisnę jakiś symbol typu myślnik -

Mam też na stałe włączone diody D4 i D3 (diody D1-8 dodane do debugowania) bez względu na wybór w terminalu, przy czym nie udało się ustalić przyczyny tego w tym temacie

Gdy wgrywałam Twój program albo innego użytkownika gry PONG i zwykłego wyświetlania 3 kolorów na VGA to działało bez zarzutów.

Zastanawiam się, czy to nie kwestia konwertera, którego używam.

Jeszcze dodam, że zasilam płytkę przez EXT PWR, a nie USB PWR (kabel potrzebny był do konwertera)

Edytowano przez monsiw
  • Lubię! 1
Link to post
Share on other sites

Cześć,

mam teraz chwilę czasu, aby dalej zajrzeć do tego projektu. Pierwsza rzecz, którą trzeba zmienić to częstotliwość głównego zegara projektu Elbert ma zegar 12Mhz ("GoBoard"  używa zegara 25 MHz - specjalnie został tak dobrany, aby bezpośrednio z niego można taktować projekty używające VGA). Więc trzeba dodać IPCore xilinx'a z nowym zegarem 25 MHz. Zaraz to zrobię i zobaczymy jak teraz  działa projekt.

Pozdrawiam

Link to post
Share on other sites
3 minuty temu, FlyingDutch napisał:

Cześć,

mam teraz chwilę czasu, aby dalej zajrzeć do tego projektu. Pierwsza rzecz, którą trzeba zmienić to częstotliwość głównego zegara projektu Elbert ma zegar 12Mhz ("GoBoard"  używa zegara 25 MHz - specjalnie został tak dobrany, aby bezpośrednio z niego można taktować projekty używające VGA). Więc trzeba dodać IPCore xilinx'a z nowym zegarem 25 MHz. Zaraz to zrobię i zobaczymy jak teraz  działa projekt.

Pozdrawiam

Ja właśnie wzięłam pod uwagę to, że w GoBoard jest 25 i zmieniłam wartość zmiennej CLKS_PER_BIT na 104 (12000000/115200). Czyli rozumiem, że to nie wystarczy i trzeba zmienić na poprzednią wartość 208 i wygenerować ten plik IPCore?

Link to post
Share on other sites
1 godzinę temu, monsiw napisał:

Ja właśnie wzięłam pod uwagę to, że w GoBoard jest 25 i zmieniłam wartość zmiennej CLKS_PER_BIT na 104 (12000000/115200). Czyli rozumiem, że to nie wystarczy i trzeba zmienić na poprzednią wartość 208 i wygenerować ten plik IPCore?

Hej, mówisz o UART'cie prawda? Dla UART'a to powinno wystarczyć (muszę jeszcze przejrzeć źródła), ale zegar dla pixeli VGA koniecznie musi mieć 25 MHz (z niego wynikają częstotliwości synchronizacji poziomej i pionowej.

Po wgraniu wersji programu na płytkę Elbert bez zmiany zegara u mnie efekt jest taki, ze monitorek VGA pisze na środku ekranu "Not support" - co w praktyce oznacza, że wartości tych trzech częstotliwości są poza zakresem. - Patrz ekran:

 

IMG_20210925_132101_1CS.thumb.jpg.07d9a11f79b6aca32fd705043c545d09.jpg

Pozdrawiam

Link to post
Share on other sites

Dodałem IP "clocking wizard" z zegarem 25 Mhz (generowanym za  pomocą pętli PLL z 12 Mhz) i dałem ten zegar na taktowanie wszystkich modułów). Zrobiłem kilka zmian w głównym module - teraz jego kod wygląda tak:

module VGA_Test_Patterns_Top
  (input  i_Clk,       // Main Clock
   input  i_UART_RX,   // UART RX Data
   output o_UART_TX,   // UART TX Data
   // Segment1 is upper digit, Segment2 is lower digit
	output o_Segment_7,   
	output o_Segment_A,
   output o_Segment_B,
   output o_Segment_C,
   output o_Segment_D,
   output o_Segment_E,
   output o_Segment_F,
   output o_Segment_G,
     
   // VGA
   output o_VGA_HSync,
   output o_VGA_VSync,
   output o_VGA_Red_0,
   output o_VGA_Red_1,
   output o_VGA_Red_2,
   output o_VGA_Grn_0,
   output o_VGA_Grn_1,
   output o_VGA_Grn_2,
   output o_VGA_Blu_1,
   output o_VGA_Blu_2,  

	output reg [2:0] led_enable = 3'h0,
	output reg [7:0] LED = 8'h00);
    
  // VGA Constants to set Frame Size
  parameter c_VIDEO_WIDTH = 3;
  parameter c_TOTAL_COLS  = 800;
  parameter c_TOTAL_ROWS  = 525;
  parameter c_ACTIVE_COLS = 640;
  parameter c_ACTIVE_ROWS = 480;
   
  wire w_RX_DV;
  wire [7:0] w_RX_Byte;
  wire w_TX_Active, w_TX_Serial;
 
  wire w_Segment_7;
  wire w_Segment_A;
  wire w_Segment_B;
  wire w_Segment_C;
  wire w_Segment_D;
  wire w_Segment_E;
  wire w_Segment_F;
  wire w_Segment_G;
   
  reg [3:0] r_TP_Index = 0;
 
  // Common VGA Signals
  wire [c_VIDEO_WIDTH-1:0] w_Red_Video_TP, w_Red_Video_Porch;
  wire [c_VIDEO_WIDTH-1:0] w_Grn_Video_TP, w_Grn_Video_Porch;
  wire [c_VIDEO_WIDTH-1:1] w_Blu_Video_TP, w_Blu_Video_Porch;
  
	reg [3:0] nowyWektor = 4'h0;
	reg wybranyBajtMlodszy = 1'b1;
	reg [10:0] licznik = 11'h00;
	
	reg [7:0] nowy = 8'h0;  
	
  //new clock 25Mhz	
  wire clkIBUF,clkOUT;

// Instantiate the module
PLL_25MHz CLK_PLL (
    .CLKIN_IN(i_Clk), 
    .CLKFX_OUT(clk25MHz), 
    .CLKIN_IBUFG_OUT(clkIBUF), 
    .CLK0_OUT(clkOUT)
    );
	   
  // 25,000,000 / 115,200 = 217
  UART_RX #(.CLKS_PER_BIT(217)) UART_RX_Inst
  (.i_Clock(clk25MHz),
   .i_RX_Serial(i_UART_RX),
   .o_RX_DV(w_RX_DV),
   .o_RX_Byte(w_RX_Byte));
    
  UART_TX #(.CLKS_PER_BIT(217)) UART_TX_Inst
  (.i_Clock(clk25MHz),
   .i_TX_DV(w_RX_DV),      // Pass RX to TX module for loopback
   .i_TX_Byte(w_RX_Byte),  // Pass RX to TX module for loopback
   .o_TX_Active(w_TX_Active),
   .o_TX_Serial(w_TX_Serial),
   .o_TX_Done());
   
  // Drive UART line high when transmitter is not active
  assign o_UART_TX = w_TX_Active ? w_TX_Serial : 1'b1; 
     
  // Binary to 7-Segment Converter for Upper Digit
  Binary_To_7Segment SevenSeg1_Inst
  (.i_Clk(clk25MHz),
   .i_Binary_Num(w_RX_Byte[nowyWektor]),
	.o_Segment_7(w_Segment_7),
   .o_Segment_A(w_Segment_A),
   .o_Segment_B(w_Segment_B),
   .o_Segment_C(w_Segment_C),
   .o_Segment_D(w_Segment_D),
   .o_Segment_E(w_Segment_E),
   .o_Segment_F(w_Segment_F),
   .o_Segment_G(w_Segment_G));

  assign o_Segment_7 = ~w_Segment_7;    
  assign o_Segment_A = ~w_Segment_A;
  assign o_Segment_B = ~w_Segment_B;
  assign o_Segment_C = ~w_Segment_C;
  assign o_Segment_D = ~w_Segment_D;
  assign o_Segment_E = ~w_Segment_E;
  assign o_Segment_F = ~w_Segment_F;
  assign o_Segment_G = ~w_Segment_G;

  //////////////////////////////////////////////////////////////////
  // VGA Test Patterns
  //////////////////////////////////////////////////////////////////
  // Purpose: Register test pattern from UART when DV pulse is seen
  // Only least significant 4 bits are needed from whole byte.
  always @(posedge clk25MHz)
  begin
    if (w_RX_DV == 1'b1)
      r_TP_Index <= w_RX_Byte[3:0];
  end
   
  // Generates Sync Pulses to run VGA
  VGA_Sync_Pulses #(.TOTAL_COLS(c_TOTAL_COLS),
                    .TOTAL_ROWS(c_TOTAL_ROWS),
                    .ACTIVE_COLS(c_ACTIVE_COLS),
                    .ACTIVE_ROWS(c_ACTIVE_ROWS)) VGA_Sync_Pulses_Inst 
  (.i_Clk(clk25MHz),
   .o_HSync(w_HSync_Start),
   .o_VSync(w_VSync_Start),
   .o_Col_Count(),
   .o_Row_Count()
  );
   
  
  reg [3:0] myPattern = 3'h04;
  // Drives Red/Grn/Blue video - Test Pattern 5 (Color Bars)
  Test_Pattern_Gen  #(.VIDEO_WIDTH(c_VIDEO_WIDTH),
                      .TOTAL_COLS(c_TOTAL_COLS),
                      .TOTAL_ROWS(c_TOTAL_ROWS),
                      .ACTIVE_COLS(c_ACTIVE_COLS),
                      .ACTIVE_ROWS(c_ACTIVE_ROWS))
  Test_Pattern_Gen_Inst
   (.i_Clk(clk25MHz),
    //.i_Pattern(r_TP_Index), 
	 .i_Pattern(myPattern),
    .i_HSync(w_HSync_Start),
    .i_VSync(w_VSync_Start),
    .o_HSync(w_HSync_TP),
    .o_VSync(w_VSync_TP),
    .o_Red_Video(w_Red_Video_TP),
    .o_Grn_Video(w_Grn_Video_TP),
    .o_Blu_Video(w_Blu_Video_TP));
     
  VGA_Sync_Porch  #(.VIDEO_WIDTH(c_VIDEO_WIDTH),
                    .TOTAL_COLS(c_TOTAL_COLS),
                    .TOTAL_ROWS(c_TOTAL_ROWS),
                    .ACTIVE_COLS(c_ACTIVE_COLS),
                    .ACTIVE_ROWS(c_ACTIVE_ROWS))
  VGA_Sync_Porch_Inst
   (.i_Clk(clk25MHz),
    .i_HSync(w_HSync_TP),
    .i_VSync(w_VSync_TP),
    .i_Red_Video(w_Red_Video_TP),
    .i_Grn_Video(w_Grn_Video_TP),
    .i_Blu_Video(w_Blu_Video_TP),
    .o_HSync(w_HSync_Porch),
    .o_VSync(w_VSync_Porch),
    .o_Red_Video(w_Red_Video_Porch),
    .o_Grn_Video(w_Grn_Video_Porch),
    .o_Blu_Video(w_Blu_Video_Porch));
       
  assign o_VGA_HSync = w_HSync_Porch;
  assign o_VGA_VSync = w_VSync_Porch;
       
  assign o_VGA_Red_0 = w_Red_Video_Porch[0];
  assign o_VGA_Red_1 = w_Red_Video_Porch[1];
  assign o_VGA_Red_2 = w_Red_Video_Porch[2];
   
  assign o_VGA_Grn_0 = w_Grn_Video_Porch[0];
  assign o_VGA_Grn_1 = w_Grn_Video_Porch[1];
  assign o_VGA_Grn_2 = w_Grn_Video_Porch[2];

  assign o_VGA_Blu_1 = w_Blu_Video_Porch[1];
  assign o_VGA_Blu_2 = w_Blu_Video_Porch[2];
  
always @(posedge clk25MHz)
begin 
LED = w_RX_Byte;
  	if(w_RX_DV) 
  	begin
      nowy = w_RX_Byte;
		//nowy = 8'h5A;
    end
	licznik <= licznik + 1;
	if (licznik == 1200) 
	begin
		licznik <= 0;
			if (wybranyBajtMlodszy)
			begin
				nowyWektor = nowy[3:0];				
			end
			else
			begin
			  nowyWektor = nowy[7:4];		  
			end
			wybranyBajtMlodszy = ~wybranyBajtMlodszy;
	end		
	if (licznik == 0) 
	begin
		if (wybranyBajtMlodszy)
		begin
			led_enable = 3'b101;
		end
		else
		begin
			led_enable = 3'b110;
		end		
end
end  
   
endmodule

teraz oprócz zmiany zegara podaję numer wzoru wyświetlanego na ekranie VGA z kodu verilog (w głównym module):

 reg [3:0] myPattern = 3'h04;
  // Drives Red/Grn/Blue video - Test Pattern 5 (Color Bars)
  Test_Pattern_Gen  #(.VIDEO_WIDTH(c_VIDEO_WIDTH),
                      .TOTAL_COLS(c_TOTAL_COLS),
                      .TOTAL_ROWS(c_TOTAL_ROWS),
                      .ACTIVE_COLS(c_ACTIVE_COLS),
                      .ACTIVE_ROWS(c_ACTIVE_ROWS))
  Test_Pattern_Gen_Inst
   (.i_Clk(clk25MHz),
    //.i_Pattern(r_TP_Index), 
	 .i_Pattern(myPattern),
    .i_HSync(w_HSync_Start),
    .i_VSync(w_VSync_Start),
    .o_HSync(w_HSync_TP),
    .o_VSync(w_VSync_TP),
    .o_Red_Video(w_Red_Video_TP),
    .o_Grn_Video(w_Grn_Video_TP),
    .o_Blu_Video(w_Blu_Video_TP));

Jest więc na stałe wybrana biało-czarna szachownica (kod wzoru = 4) - patrz zrzut ekranu:

IMG_20210925_145805.thumb.jpg.317dfd128929f21ccf5464cc340a60ee.jpg

Teraz, gdy "VGA Test Pattern Gen." działa, trzeba przejrzeć kod dotyczący UART i wyświetlacza 7-mio segmentowego i usunąć ewentualne błędy. Załączam do postu zmodyfikowany kod projektu (spakowany zip'em).

VGA_NANDLAND3.zip

Pozdrawiam

  • Lubię! 2
Link to post
Share on other sites

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.