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
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?
Zu deiner ersten Frage: Ja! Zweite: Eher ein Gitternetz, sodass ich mit der "LED" wählen kann, welche Reihe ich wählen möchte. Dritte: Nein, der Monitor wird anders abgesteuert. Hiermit pragrammiere ich die Psoition und die Größe der "LED".
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.
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
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.
:
Bearbeitet durch User
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.