hi.
ich möchte gleich zur Sache kommen.
Wir haben eine Aufgabe bekommen, wir sollen LCD von SPARTAN3E ansteuern,
dazu haben wir auch eine Gesamt-Blockschaltung bekommen. es soll uns bei
der Programmierung helfen. wir programmieren selbstständig mit VHDL =).
Bis jetzt hat es nur 1 gruppe geschafft. ich versuche verzweifelt, aber
scheitern bei letzte Blockschaltung.
Nun, ich habe bereits die innere Schalung(componenten) bereits
programmiert. ich habe Testbench geschrieben und getestet. es
funktioniert einwandfrei. Aber Gesamt-Projekt funktioniert nicht.
Write-Bits.pdf ist ein tabelle mit Hex-code, diese code soll auf Display
als "Embedded Systems" darstellen, natürlich kann man es auch als
Binärcode reinschreiben.
LCD-Komponenten.txt: da steht VHDEL-Code für die komponenten. Sie
funtionieren, ich lade hoch, vielleicht kann jemand mit gesamt programm
dann simulieren.
Gesamt.jpg: es ist die schaltung, was unsere Fach-lehrer uns gegeben
hat.
LCD-gesamt: genau darin habe ich probleme, ich habe versucht, und auf
board darauf gespielt, es zeigt zwar was an, aber nur blödsinn.
Ich programmiere das mit Zustände, somit habe ich 36 Zustände eingebaut.
die Gruppe, die das geschafft haben, programmieren das mit Integer
zähler.
ich hoffe, jemand kann mir helfen.
ich danke mich schon mal vorraus.
Mit freundlichen Grüßen
Michael Schröderhofer schrieb:> Bis jetzt hat es nur 1 gruppe geschafft.
Warum wendet ihr euch in dem Fall nicht an denjenigen, der die Aufgabe
gestellt hat? Sieht so aus, als ob er euch nicht genug erklärt hat, wenn
das nur eine Gruppe geschafft hat... Der Tutor macht das ganze sicher
nicht unentgeltlich.
Michael Schröderhofer schrieb:> LCD-Komponenten.txt: da steht VHDEL-Code für die komponenten.
Meine VHDL-Dateien heißen mit Nachname .VHD
Dann kann die Foren-SW da schön syntax-highlighten... :-/
Michael Schröderhofer schrieb:> Ich programmiere das mit Zustände, somit habe ich 36 Zustände eingebaut.> die Gruppe, die das geschafft haben, programmieren das mit Integer> zähler.
Beide Wege führen nach ROM. Allerdings solltest du das einfach mal
selber simulieren. Dann siehst du sofort, wo es klemmt...
> vielleicht kann jemand mit gesamt programm dann simulieren.
Warum machst du das nicht kurz selber? Die Testbench für die Waveform
ist an Einfachheit hier ja kaum zu übertreffen:
Den Takt angelegt (und den hier absolut unnötigen Reset). Und fertig...
BTW: das wäre meine Lösung
Beitrag "Re: EA DOG-M initialisieren"
Anguel S. schrieb:> Michael Schröderhofer schrieb:>> Bis jetzt hat es nur 1 gruppe geschafft.>> Warum wendet ihr euch in dem Fall nicht an denjenigen, der die Aufgabe> gestellt hat? Sieht so aus, als ob er euch nicht genug erklärt hat, wenn> das nur eine Gruppe geschafft hat... Der Tutor macht das ganze sicher> nicht unentgeltlich.
ich habe mit ihn geredet. wir sollen die User Guide 230 nach schauen,
und da ich in englisch, speziell in technische englisch schlecht bin,
konnte ich es schwer nachvollziehen.
DieKomponenten ( entspricht: Write_c usw. in LCD-Componenten.txt), die
ich dann in Gesamt-projekt eingefügt habe, funktionieren bereits, ich
habe es selbst geschrieben. es war leicht für mich, weil wir eine
Zeitdiagramm bekommen haben. von dem bauteil FSM in Bild Gesamt.jpg habe
ich keine Ahnung, was es macht, dazu haben keine information bekommen,
ausser dass wir es in User Guide 230 lesen müssen.
ich habe versucht das ganze per 36 Zustände zu programmieren.
LCD-display zeigt zwar was an, aber nur "?" und "//". das ist das
problem.
Michael Schröderhofer schrieb:> DieKomponenten ( entspricht: Write_c usw. in LCD-Componenten.txt), die> ich dann in Gesamt-projekt eingefügt habe, funktionieren bereits
Wie hast du das überprüft?
Garantiert nicht mit einer Simulation.
Gut, da tut sich schon irgendwas...
Aber schon der allererste Zugriff mit lcd_e auf das Display (nach ca.
15ms) verletzt das Timing /garantiert: gleichzeitig mit der steigenden
Flanke von lcd_e ändern sich die Daten an lcd_db. So steht das nicht im
UG230 in der Abbildung 5-6. Da werden die Daten 40ns vor dem lcd_e
angelegt!
Und dann ab 20ms wird es haarsträubend: da kommt erst das von vorhin
bekannte Bild mit dem Enable, und dann toggelt lcd_rw wie blöd durch die
Gegend...
So kann das Display niemals irgendwas sinnvolles anzeigen!!
Also: lass da mal eine Simulation laufen. Die Testbench ist wie gesagt
unschlagbar simpel:
1
LIBRARYieee;
2
USEieee.std_logic_1164.ALL;
3
4
ENTITYtb_LCDIS
5
-- keine Ports --> das muss eine Testbench sein!
6
ENDtb_LCD;
7
8
ARCHITECTUREbehaviorOFtb_LCDIS
9
COMPONENTLCD_Ansteuerung
10
PORT(
11
Clk:INstd_logic;
12
reset:INstd_logic;
13
lcd_db:OUTstd_logic_vector(3downto0);
14
lcd_e:OUTstd_logic;
15
lcd_rw:OUTstd_logic;
16
lcd_rs:OUTstd_logic
17
);
18
ENDCOMPONENT;
19
20
--Inputs
21
signalClk:std_logic:='0';
22
signalreset:std_logic:='1';
23
24
--Outputs
25
signallcd_db:std_logic_vector(3downto0);
26
signallcd_e:std_logic;
27
signallcd_rw:std_logic;
28
signallcd_rs:std_logic;
29
30
BEGIN
31
32
-- Instantiate the Unit Under Test (UUT)
33
uut:LCD_AnsteuerungPORTMAP(
34
Clk=>Clk,
35
reset=>reset,
36
lcd_db=>lcd_db,
37
lcd_e=>lcd_e,
38
lcd_rw=>lcd_rw,
39
lcd_rs=>lcd_rs
40
);
41
42
clk<=notclkafter10ns;-- 50MHz Takt
43
reset<='1','0'after100ns;
44
45
END;
Zeitaufwand, um diese kapitalen Fehler zu sehen: 10 Minuten...
offenbar habt ihr mich falsch verstanden.
Wie ihr die Blockschaltung gesehen habt, besteht das Ganze aus 3 kleine
Blockschaltungen(komponenten) und 2 MUXs
die 3 Komponenten sind power_on_init, write und lcd_fsm.
power_on_init und write sind richtig programmiert wurden, auch die beide
MUXs.( wir haben zu die beiden komponenten zeitdiagramm bekommen, somit
konnte ich VHDL-code einwandfrei schreiben.siehe anhang)
Zu komponenten: ich habe schon bereits simuliert, ich weiss auch wie man
testbench schreibt. ich bin schließlich kein "blutiger" VHDL anfänger.
:P
Es wurde auch von unsere Fach-lehrer kontroliert. es ist fehler frei.
mein Problem sind, diese lcd_fsm und Zusammenhängen von andere
Komponenten alles zusammen.( auch Die Steuerung von MUXs, MUX intern als
komponent ist auch fehler frei.)
zu lcd_fsm haben wir keinelei informationen bekommen, wir sollen nus aus
ug230 rauslesen, und genau das checke ich nicht.
du sagtest, dass lcd_db und lcd_e gegenseitig behindert. das werde ich
heute noch unter lupe schauen. danke für diese hinweis.
PS: das ist eine Schulübung, keine Hausaufgaben oder ähnliches.
Duke Scarring schrieb:> Ich hab noch den folgenden process drin stehen:
So weit wollte ich Michael noch gar nicht treiben. Er hat sicher genug
zu tun, wenn er mal in der Waveform sein Timing anschauen kann...
BTW:
Ich würde statt write(l, image(r));
einfach die use ieee.std_logic_textio.all;
mit einbinden und write(l, r);
verwenden.