Hello :D Kann man (eigene ) Komponenten auch ohne Avalon Bus mit dem Nios verbinden ? Oder wenigstens indirekt indem man Daten an einen PIO schickt. Danke. Jetzt mache ich weiter mit Trial and Error und Recherche :D
Habe noch mal ein Bild im Anhang. Ich werde einfach mal versuchen die Signale zu verknüpfen. Kenne mich noch nicht so gut mit HDL aus. Will das gerade erst mal in System Verilog machen ..
hier mein erster Test ich will " test" verwenden um es in meinem hdl adder zu manipulieren und das ergebnis im nios zu sehen^^
1 | module p1( |
2 | (* chip_pin = "V11" *) input logic clk, |
3 | (* chip_pin = "AH17" *) input logic reset_n, |
4 | (* chip_pin = "W15" *) output logic led, |
5 | (* chip_pin = "AA24" *) output logic led2, |
6 | (* chip_pin = "Y24" *) input logic key, |
7 | (* chip_pin = "W24" *) input logic key2 |
8 | |
9 | ); |
10 | |
11 | logic [7:0] test; |
12 | |
13 | unsaved u0 ( // NIOS |
14 | .clk_clk (clk), // clk.clk |
15 | .reset_reset_n (reset_n), // reset.reset_n |
16 | .pio_in_export (test) |
17 | ); |
18 | |
19 | logic x; |
20 | logic y; |
21 | logic out; |
22 | logic out2; |
23 | |
24 | |
25 | |
26 | test1 adder( // eigene komponente |
27 | .clk_s(clk), |
28 | .x(key), |
29 | .y(key2), |
30 | .sum(led) |
31 | ); |
32 | // eigner COde |
33 | always_ff @(posedge clk) begin |
34 | |
35 | led2<=key; // non blocking |
36 | test <= 2+key; |
37 | end |
38 | |
39 | endmodule |
:
Bearbeitet durch User
Geldesch B. schrieb: > Kann man (eigene ) Komponenten auch ohne Avalon Bus mit dem Nios > verbinden ? An welche Schnittstelle hast Du da gedacht? Und mit welchen Nios-Befehlen willst Du mit Deiner Komponente kommunizieren? > Oder wenigstens indirekt indem man Daten an einen PIO schickt. Ja, sowas geht. Ähnlich wie man es beim Mikrocontroller machen würde. Nutze ich gerne für einzelne Status- bzw. Steuersignale, wo ein komplettes Businterface eine Übertreibung wäre. Duke
Vorschlag/Stichwort: memory mapped register. Schritte: - Register/Adressen definieren - Adress-Decoder implementieren oder generieren - Per C Register im entsprechend codierten Memory-Bereich (MMR_Offset) ansteuern. Z.B.
1 | |
2 | #define MMR32_PTR volatile uint32_t * |
3 | #define MMR32(x) *((MMR32_PTR) ((x) + MMR_Offset)) |
4 | ... |
5 | |
6 | uint32_t r; |
7 | // Register lesen: |
8 | r = MMR32(R_CONTROL); // Register-Adresse |
9 | // Register setzen: |
10 | MMR32(R_CONTROL) = r | ENABLE; |
>An welche Schnittstelle hast Du da gedacht? Auf dem FPGA soll ein SPI Slave laufen- er empfängt Daten und legt diese ab. Ich möchte genau darauf zugreifen. Außerdem soll ein HDMI Stream genutzt werden können. ( Einfach nur weiße Pixel auf den sonst schwarzen Stream legen) >Und mit welchen Nios-Befehlen willst Du mit Deiner Komponente >kommunizieren? Habe mal unten ein Beispiel wie ich es jetzt versucht habe.. aber gerne verwende ich auch andere Befehle. @Martin S. Deine Antwort schaue ich mir noch genauer an. Habe gerade erst mal meine Idee getestet. War mir wichtig. Vielen Dank für deinen Tipp - Vielleicht es ja sogar sowas ähnliches ! :D *Mein testmodul, was einem Signal die Kombination 101 zuweist (also 5)*
1 | module test1 ( |
2 | input logic clk_s, |
3 | input logic x, |
4 | input logic y, |
5 | output logic sum, |
6 | output bit [2:0] t1 |
7 | ); |
8 | |
9 | always @(clk_s) |
10 | begin |
11 | sum <= x + y; |
12 | t1<=3'b101; //6'b10_0011 => 100011 |
13 | end |
14 | |
15 | endmodule |
* Mein Toplvl Modul was mein testmodul instanziiert und das Signal an den NIOS weitergibt... *
1 | |
2 | module p1( |
3 | (* chip_pin = "V11" *) input logic clk, |
4 | (* chip_pin = "AH17" *) input logic reset_n, |
5 | (* chip_pin = "W15" *) output logic led, |
6 | (* chip_pin = "AA24" *) output logic led2, |
7 | (* chip_pin = "Y24" *) input logic key, // y24 erster |
8 | (* chip_pin = "W24" *) input logic key2 // w24 =zweiter |
9 | |
10 | ); |
11 | |
12 | // Signals |
13 | logic test; |
14 | logic raus; |
15 | logic x; |
16 | logic y; |
17 | logic adder_out; |
18 | logic out2; |
19 | bit [2:0] adder_out2 ; |
20 | |
21 | |
22 | unsaved u0 ( // NIOS |
23 | .clk_clk (clk), // clk.clk |
24 | .reset_reset_n (reset_n), // reset.reset_n |
25 | .pio_in_export(adder_out2) |
26 | ); |
27 | |
28 | |
29 | |
30 | |
31 | test1 adder( // eigene komponente |
32 | .clk_s(clk), |
33 | .x(test), |
34 | .y(key2), |
35 | .sum(adder_out), |
36 | .t1(adder_out2) |
37 | ); |
38 | // eigner COde |
39 | always_ff @(posedge clk) begin |
40 | |
41 | //led2<=key; // non blocking |
42 | test <= key; |
43 | end |
44 | |
45 | endmodule |
Mein NIOS Programm was das Signal erhält---
1 | |
2 | #include "sys/alt_stdio.h" |
3 | #include "io.h" |
4 | #include "alt_types.h" |
5 | #include "system.h" |
6 | int main() { |
7 | volatile unsigned int * key_ptr = (volatile unsigned int *) 0x80009000; |
8 | alt_putstr("Hello from Nios II!\n"); |
9 | int swValue = IORD(0x80009000, 0); |
10 | printf("key: %d", swValue); |
11 | /* Event loop never exits. */ |
12 | while (1) { |
13 | |
14 | } |
15 | |
16 | return 0; |
17 | } |
Wenn man den NIOS ausführt ( an dieser stelle stürzt eclipse beim copy und pasten einfach ab- aber so in etwas steht das da:) - das ist 101 , also das was ich oben im testmodul zugewiesen habe..
1 | Hello from Nios II! key: 5 |
:
Bearbeitet durch User
Hi , ich wollte euch mitteilen, dass es so höchstwahrscheinlich klappt. Auch wenn man es normalerweise so nicht machen würde. Ein Beispiel hat bei mir funktioniert: Ich wählte mir in meinem Toplvl vhdl Modul einen Input Slide. Anschließend habe ich diesem Eingangssignal einen Eingang eines Test-HDL-Moduls zugewiesen, welche in einer Bitkombination ein bestimmtes Bit setzen soll, wenn der Slide-Switch gesetzt ist. Dieses Modul leitete ich weiter an einen 8 Bit PIO meines Avalon Busses, an dem auch der NIOS angeschlossen ist. Ich hatte nun Zugriff auf diese 8 Bit und konnte diese zum Beispiel mit alt_putstr ausgeben. Außerder war an den Avalon Bus noch ein 8 Bit Ausgang angeschlossen. An diesen habe ich meine Daten vom PIO-In weitergeleitet. Der PIO Out wiederum war an ein weiteres Test-HDL-Modul angeschlossen, welche die Bitkombination toggelte und an die 8 LEDs ausgeben sollte. Es hat geklappt :DDDD Man konnte beobachten, dass je nach Slide-Switch-Stellung das eine Bit aktiv oder eben deaktiviert war, wobei alles noch invertiert war ! Grüße !
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.