Wie kann ich bitte dieses setzen counterx ="0000000001"; wenn es : signal Addr : integer range 0 to 800 :=800; ist counterxmax <= "1" when counterx ="0000000001"; Danke. Gruss
Welche Datentypen haben die ganzen angesprochenen Signale? Und was ist was und wird wofür verwendet?
Hallo... das sind die Signale: signal counterxmax : std_logic_vector (0 downto 0); signal counterx : std_logic_vector (9 downto 0); signal Addr : integer range 0 to 800 :=800; counterxmax <= "1" when counterx =...addr... Danke.Gruss
Wenn du jetzt noch schreibst was du machen willst dann können wir dir helfen. Du kannst da sehr viele Bedingungen formulieren aber je nach Anwendungsfall sind einige sinnlos. Also was soll das Ergebnis sein?
:
Bearbeitet durch User
peter schrieb: > signal counterxmax : std_logic_vector (0 downto 0); Warum nimmst du da nicht einem einfachen std_logic? Und wo ist jetzt nochmal das Problem?
Weil ich später die bestimmten Bits wieder rausholen muss. Quäle mich damit ab, unten das Verilog umzusetzen in Vhdl. Für mich ist das Umsetzen ein Horror..., diese ganzen Umwandlungen. Vielleicht ist das für Euch eine Leichtigkeit...? Danke. Gruss
1 | module vga_text( |
2 | input clock, |
3 | output hsync, |
4 | output vsync, |
5 | output reg [3:0] red, |
6 | output reg [3:0] green, |
7 | output reg [3:0] blue |
8 | );
|
9 | |
10 | wire clk; |
11 | wire [7:0] char; |
12 | wire [7:0] dat; |
13 | wire [9:0] charLin; |
14 | |
15 | wire CounterXmaxed; |
16 | wire CounterYmaxed; |
17 | wire h_enable; |
18 | wire v_enable; |
19 | wire vid_enable; |
20 | |
21 | reg [16:0] qc; |
22 | reg Pixel; |
23 | reg [9:0] CounterX; // 10 Bit, range 0..799 |
24 | reg [9:0] CounterY; // 10 Bit, range 0..524 |
25 | reg [11:0] Basis; // Adr. Zeilenanfang |
26 | reg [6:0] Offs; // Pos. in Zeile |
27 | reg [11:0] ZPos; // effektive Zeichenpos. in BWS |
28 | |
29 | assign CounterXmaxed = (CounterX==800); |
30 | assign CounterYmaxed = (CounterY==525); |
31 | |
32 | always @(posedge clock) |
33 | begin
|
34 | qc <= qc + 1; |
35 | end
|
36 | // 50Mhz 2^1 = 25MHz |
37 | assign clk = qc[0]; |
38 | |
39 | always @(posedge clk) begin |
40 | // Zählen in horizontaler Richtung |
41 | if(CounterXmaxed) |
42 | CounterX <= 0; |
43 | else begin |
44 | CounterX <= CounterX + 1; |
45 | if (dat & (1 << CounterX[2:0])) |
46 | Pixel <= 1; |
47 | else
|
48 | Pixel <= 0; |
49 | end
|
50 | |
51 | // Zählen in vertikaler Richtung |
52 | if(CounterXmaxed) begin |
53 | if (CounterYmaxed) CounterY <= 0; |
54 | else CounterY <= CounterY + 1; |
55 | end
|
56 | |
57 | if (CounterX[2:0] == 0) begin |
58 | if (CounterX == 0 && CounterY == 0) Basis <= 0; |
59 | else if (CounterX == 0 && CounterY[3:0]==0) Basis <= Basis + 80; |
60 | end
|
61 | |
62 | Offs <= CounterX[9:3]; |
63 | ZPos <= Basis + Offs; |
64 | end
|
65 | |
66 | always @(posedge clk) |
67 | begin
|
68 | if (vid_enable==1 && Pixel == 1) |
69 | begin
|
70 | red = 4'b1111; |
71 | blue = 4'b1111; |
72 | green = 4'b1111; |
73 | end
|
74 | else
|
75 | begin
|
76 | red = 4'b0000; |
77 | blue = 4'b1111; |
78 | green = 4'b0000; |
79 | end
|
80 | end
|
81 | |
82 | assign hsync = (CounterX < 655) || (CounterX > 751); |
83 | assign vsync = (CounterY < 489) || (CounterY > 491); |
84 | |
85 | assign charLin = {char,CounterY[3:1]}; // Zeiger fuer Zeichensatz |
86 | |
87 | // Filter für video enable ableiten |
88 | assign h_enable = (CounterX > 4 && CounterX < 640); |
89 | assign v_enable = (CounterY < 480); |
90 | assign vid_enable = h_enable && v_enable; |
91 | |
92 | endmodule
|
Ich kann dir da auch nicht helfen weil du zwar code postest, aber nicht beschreibst was wie seien oder funktionieren soll. Wie wäre es wenn du in ruhe VHDL lernst, das kostet etwas Zeit, aber dann kannst du deine Probleme auch selber Lösen, also ohne verilog anderer ohne eigenes Verständnis zu übersetzen.
------------------------------------------ Ich kann dir da auch nicht helfen weil du zwar code postest, aber nicht beschreibst was wie seien oder funktionieren soll. Wie wäre es wenn du in ruhe VHDL lernst, das kostet etwas Zeit, aber dann kannst du deine Probleme auch selber Lösen, also ohne verilog anderer ohne eigenes Verständnis zu übersetzen. ------------------------------------------ Daran hat man sich schon die Zähne ausgebissen an dieser Textausgabe in VGA mit VHDL. Darum wollte ich es umsetzen. Aber diese Umwandlungen von int nach vec und wieder zurück usw ist eine Zumutung , so etwas kann man nicht in kurzer Zeit lernen. Ich bin kein Student mehr der das aus dem Hämdsärmeln schüttelt mit 65 Jahren, darum frage ich hier. Danke. Gruss
Ps: Dieser Thread kann geschlossen werden bitte vom Mod. Danke Gruss
peter schrieb: > reg [9:0] CounterX; // 10 Bit, range 0..799 > ... > assign CounterXmaxed = (CounterX==800); Bei Verilog bekommst du die Umwandlung eines Vektors in eine Zahl (Vorzeichenlos oder Zweierkomplement?) ohne explizite Konvertierungen. Bei VHDL nimmst du am leichtesten einen Integer als Zähler und dann kannst du ebenfalls einfach mit klar leserlichen Integerzahlen hantieren. peter schrieb: > assign CounterXmaxed = (CounterX==800); > ... > if(CounterXmaxed) Das könntest du sicher auch in einer Zeile so schreiben: if(CounterX==800) Und damit ist die Umsetzung in VHDL ein Leichtes. Wobei auch ich nicht verstehe, warum du mit Verilog UND VHDL rumhampelst. Mir reicht eine einzige Beschreibungssprache locker aus. Schreiben und Denken tue ich in VHDL, und Lesen und grob Verstehen kann ich Verilog auch... peter schrieb: > Daran hat man sich schon die Zähne ausgebissen an dieser Textausgabe in > VGA mit VHDL. Darum wollte ich es umsetzen. Ich noch nicht. Aber evtl. haben wir einen strengen Winter und ich ein paar Abende Zeit... > Aber diese Umwandlungen von int nach vec und wieder zurück usw ist > eine Zumutung , so etwas kann man nicht in kurzer Zeit lernen. Das muss man eben einfach Üben. Und es gibt nur 4 Konvertierungsfunktionen in der numeric_std. Da wird das ganz einfach: http://www.lothar-miller.de/s9y/categories/16-Numeric_Std peter schrieb: > Ps: Dieser Thread kann geschlossen werden bitte vom Mod. Peter, ein "Schließen" von Threads gibt es hier nicht. Geschlossen werden Threads nur, wenn Beleidigungen, Pöbeleien und Flamewares losgehen.
:
Bearbeitet durch Moderator
hier noch eine PDF wo die Umwandlungen von numeric_std und std_logic_arith verglichen werden. Mir hat diese PDF die Augen geöffnet, warum die numeric_std lib wirklich so gut ist! Ganz klare Regeln wie und weshalb man wie konvertieren und benutzen muss ;-) http://www.synthworks.com/papers/vhdl_math_tricks_mapld_2003.pdf
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.