Verilog - Spielfeld

Gast #4388228
Lesenswert?

Hallo,

ich bin Anfänger in Verilog. Ich habe einen folgendes Problem.
Ich habe eine VGA-Verbindung vom FPGA zum Monitor aufgebaut und eine 
LED, die ich per Taster ein- und ausschalten kann. Jetzt muss ich aber 
nicht nur eine LED ein- und ausschalten können, sondern ein "Spielfeld" 
in Form eines 7x6 großen Gitters programmieren. Kann jmd helfen? Das, 
was ich bisher hab:

module LED(input [24:0] VGA_Ctrl, input data, input [15:0] PixColor, 
output [15:0] VGA_Color);
    parameter PosX = 10, PosY = 10;
    wire [10:0] X;
    wire [9:0] Y;

    assign {Y,X} = VGA_Ctrl[21:1];
    wire AtPosition = ((X[10:3] == PosX) && (Y[9:3] == PosY));

    wire [15:0] BoxColor = (data == 1'b1) ? PixColor : 16'h0000;
    assign VGA_Color = (AtPosition == 1'b1) ? BoxColor : 16'd0;

endmodule
Moderator (Firma: Titel) Persönliche Seite #4388321
Lesenswert?

Zaher schrieb:
> und eine LED, die ich per Taster ein- und ausschalten kann.
Du meinst ein Feld, das mit einer bestimmten anderen Farbe als der 
Hintergrund dargestellt wird? Denn eine LED ist üblicherweise ein 
elektronisches Halbleiterbauteil...

> sondern ein "Spielfeld" in Form eines 7x6 großen Gitters programmieren.
Eher so wie ein Schachbrett mit durchgefärbten Bereichen? Oder eher ein 
Gitternetz wie bei einem Oszilloskop?

> Das, was ich bisher hab:
Und damit steuerst du einen VGA-Monitor an?
#4390903
Lesenswert?

Ich habe es nun geschafft ein "Gitter" mit 7x6 Feldern zu "zeichnen".. 
siehe im ANhang HLine für Horizontale Line und in der VGA -Datei die 
Zuordnung der HLine.
Das Gitter geht von Anfang bis zum Ende des Bildschirms, ich möchte 
dieses aber begrenzen. Hat jmd ne Idee, wie ich das machen kann, 
sodassdie Linie an einer anderen Position beginnt und nicht von 0.
Angehängte Dateien:
#4391239
Lesenswert?

Außerdem würde ich gerne meine "LED" per Taster nach links und rechts 
verschieben können.

`timescale 1ns / 1ps

module LED(input [24:0] VGA_Ctrl, input [15:0] PixColor, output [15:0] 
VGA_Color);
    parameter PosX = 4, PosY = 4;
    wire [10:0] X;
    wire [9:0] Y;

    assign {Y,X} = VGA_Ctrl[21:1];
    wire AtPosition = ((X[10:6] == PosX) && (Y[9:6] == PosY));

   // wire [15:0] BoxColor = (data == 1'b1) ? PixColor : 16'h0000;
    assign VGA_Color = (AtPosition == 1'b1) ? PixColor : 16'd0;

endmodule
 Was muss ich dafür tun?

Danke im Vorraus
#4391492
Lesenswert?

Raba Zaher schrieb:
> Das Gitter geht von Anfang bis zum Ende des Bildschirms, ich möchte
> dieses aber begrenzen. Hat jmd ne Idee, wie ich das machen kann,
> sodassdie Linie an einer anderen Position beginnt und nicht von 0.
Du musst nur in HLine für die X-Achse so ähnlich machen, wie du es schon 
für die Y-Achse gemacht hast. z.B. wenn du im Bereich von 100 bis 500 
Pixel deine horizontale Line haben willst, musst du X entsprechend 
auswerten (100 <= X <= 500) oder abhängig von der X-Position eine fixe 
Länge zeichnen.
Das gleiche nochmal für die Y-Achse in VertLinie.

> Außerdem würde ich gerne meine "LED" per Taster nach links und rechts
> verschieben können.
Wenn du jeweils für die Parameter von LED zwei Variablen verwendest, 
kannst du diese entsprechend der Tasterbetätigung hoch bzw. runter 
zählen.
Die anderen LEDs müssen dann relativ von dieser Position gezeichnet 
werden.
1
     LED       #(HPos,VPos)   LED_Inst1  ( VGA_Ctrl, 16'hF800, VGA_ColorFullLED1 );
2
     LED       #(HPos+1,VPos) LED_Inst2  ( VGA_Ctrl, 16'h001F, VGA_ColorFullLED2 );
3
...

Am besten du gibts bei HLine und VertLinie immer zwei Parameter mit 
(VPos und HPos), anstatt nur einen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren