Forum: FPGA, VHDL & Co. NIOS 2 Zugriff VHDL ohne Avalon ?


von Geldesch B. (Firma: haa) (dravr)


Lesenswert?

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

von Geldesch B. (Firma: haa) (dravr)


Angehängte Dateien:

Lesenswert?

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 ..

von Geldesch B. (Firma: haa) (dravr)


Angehängte Dateien:

Lesenswert?

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
von Tja (Gast)


Lesenswert?

Das wird so nix. Erarbeite doch besser mal die grundlagen.

von Duke Scarring (Gast)


Lesenswert?

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

von Martin S. (strubi)


Lesenswert?

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;

von Geldesch B. (Firma: haa) (dravr)


Lesenswert?

>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
von Geldesch B. (Firma: haa) (dravr)


Lesenswert?

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
Noch kein Account? Hier anmelden.