Skocz do zawartości

Problem z adresowaniem własnego komponentu


Elvis

Pomocna odpowiedź

Używam płytki Maximator i próbuję stworzyć własny komponent podłączony do soft-procesora.

Czyli najpierw konfiguruję Nios2, podłączam pamięć SRAM dla programu i JTAG-UART do testowania.

Moim celem jest utworzenie prostego układu peryferyjnego - sterownika 4 diod LED dostępnych na płytce.

Połączenia układu wyglądają następująco:

Komponent reg16_avalon_interface_0 to mój pierwszy komponent podłączany przez magistralę avalon - wynalazek Altery, ale łatwiejsza niż AXI na początek.

Kod komponentu jest banalny:

module new_component (
	input  wire        clock_sink_clk,          //   clock_sink.clk
	input  wire        reset_sink_reset,        //   reset_sink.reset
	input  wire        avalon_slave_read,       // avalon_slave.read
	input  wire        avalon_slave_write,      //             .write
	output wire [15:0] avalon_slave_readdata,   //             .readdata
	input  wire [15:0] avalon_slave_writedata,  //             .writedata
	input  wire [1:0]  avalon_slave_byteenable, //             .byteenable
	input  wire        avalon_slave_chipselect, //             .chipselect
	output wire [3:0]  conduit_end_q_export     //  conduit_end.new_signal
);

reg [3:0] q;

always @(posedge clock_sink_clk)
begin
	if (reset_sink_reset == 1'b1)
		q <= 8'h00;
	else begin
		if (avalon_slave_chipselect  & avalon_slave_write  & avalon_slave_byteenable[1])
			q[3:0] <= avalon_slave_writedata[3:0];
	end
end

assign avalon_slave_readdata  = q;
assign conduit_end_q_export  = ~q;

endmodule

Czyli w skrócie, podłączam reset, clk, wyjścia do condui_end_q_export i chciałbym żeby to co zanegowane zostanie zapisane na magistrali, pojawiło się na wyjściu.

Do programowania używam Eclipse, wszystko standardowo jak wygeneruje środowisko Quartus:

Program jest prosty, zapala kolejne bity w 32-bitowym rejestrze układu.

I tutaj pojawia się problem, którego nie umiem poprawić, ani zrozumieć - dlaczego bity w układzie peryferyjnym odpowiadają górnemu pół-słowu, czyli bitom [19:16], zamiast [3:0]?

Może ktoś ma pomysł co robię źle?

Link do komentarza
Share on other sites

Używam płytki Maximator i próbuję stworzyć własny komponent podłączony do soft-procesora.

Czyli najpierw konfiguruję Nios2, podłączam pamięć SRAM dla programu i JTAG-UART do testowania.

...

I tutaj pojawia się problem, którego nie umiem poprawić, ani zrozumieć - dlaczego bity w układzie peryferyjnym odpowiadają górnemu pół-słowu, czyli bitom [19:16], zamiast [3:0]?

Może ktoś ma pomysł co robię źle?

Elvis strzelam w ciemno, ale może to jest twój problem:

http://www.alterawiki.com/wiki/Avalon-MM_Byte_Ordering

https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/nios2/mm_byte_ordering.pdf

https://alteraforum.com/forum/showthread.php?t=40292

Pozdrawiam

Link do komentarza
Share on other sites

Właśnie kolejność bajtów mi nie bardzo pasuje - bo wtedy zamiast pierwszego powinien być ostatni.

Ale już widzę, że to coś z adresowaniem - jeśli zamiast makra IOWR, użyję brzydkiego rzutowania:

		volatile uint8_t *test = (volatile uint8_t*)(REG16_AVALON_INTERFACE_0_BASE);

To wtedy adresowanie działa jak powinno. To chyba mi w tej chwili wystarczy. W sumie zależy mi na magistrali AXI/APB, a nie avalon.

W każdym razie dziękuję za podpowiedź.

Link do komentarza
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.