Forum: FPGA, VHDL & Co. Initialisierung LCD-Display


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,
um meinen Thread von letzter Woche nochmal aufzugreifen, also vielleicht 
bin ich ja echt doof (kann ich eigentlich ausschließen! ;-)) aber mein 
LCD Display geht immer noch nicht, kein Lebenszeichen und langsam nervt 
es mich...
Ich habe zuerst versucht den Code von Lothar zum Laufen zu bringen, aber 
das ging so gar nicht, deshalb habe ich mich dann dafür entschieden 
einen eigenen (auf Basis von Lothars) zu schreiben, aber auch dieser 
bleibt erfolglos.
Kann mir bitte Einer/Eine helfen? Wäre total nett, weil ich nämlich 
langsam Verzweifel.
Im Anhang meinen Code..vielleicht nützt es ja etwas,
schon mal danke.

Gruß

Flo

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Aber holla:
> if rising_edge(clk) and clk = '1' then
Was ist denn das?
Sieh dir mal die Funktion rising_edge() im Quelltext an.


Was sagt denn die Simulation?
Klappt es dort?
Gib es zu: du hast das nicht simuliert!
Denn...
> einen eigenen (auf Basis von Lothars) zu schreiben
Das ist eine mächtig lange Sensitiv-Liste:
1
FSM: process ( zaehler1, zaehler2, zaehler3,zaehler4 ,reset, current_state, clk )
und abgesehen vom clk sind die meisten Signale unnötig...

Dafür fehlt durch die ungünstige Vermischung von getaktetem und 
kombinatorischem Prozess ein Signal
1
FSM: process ( zaehler1, zaehler2, zaehler3,zaehler4 ,reset, current_state, clk )  -- viel zuviel... und doch zu wenig: zaehler_gesamt fehlt!!!
2
variable Next_state : state_typ;
3
begin
4
   if rising_edge(clk) and clk = '1' then -- getaktet
5
   :
6
   end if;
7
   if zaehler_gesamt = 53999 then
8
      current_state <= next_state after 20ns; -- kombinatorisch, aber nicht in Sensitivliste
9
   end if;
10
end process;

Sowas lässt sich nicht synthetisieren:
1
      current_state <= next_state after 20ns; -- kombinatorisch
Denn es gibt keine einstellbaren Verzögerungsgleider in einem FPGA.


Wozu das Herumjonglieren mit Variablen für deine Zustände?
1
  
2
variable Next_state : state_typ;
3
4
begin
5
  if rising_edge(clk) and clk = '1' then 
6
    next_state := current_state; 
7
    case current_state is

>  also vielleicht bin ich ja echt doof (kann ich eigentlich ausschließen!
>  ;-))
Muss nicht unbedingt sein... ;-)
Aber: hast du schonmal die einfacheren Geschichten wie z.B. ein 
komplexeres Lauflicht durcherxerziert und verstanden?

Die Simulation ist der Debugger der Hardware. Du wirst hier ohne 
Simulation garantiert nur sehr sehr beschwerlich zum Erfolg kommen...

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Hallo,

vorneweg, doch ich habe das Simuliert, es laufen auch alle States durch 
und es werden Daten aus dem Speicher gelesen und 
geschrieben....faszienierend nicht war?!

So zu deinen Anmerkungen:

Was ist mit meiner rising_edge Funktion, bzw welche meinst du denn? Die 
oben mit den Zählern oder die in der State-Machine??? Aber beide 
arbeiten.
Dass Sachen mit 20ns nicht Synthesierbar sind, ist mir bewusst, aber es 
war so ein Verzweiflungsding, um es mal zu testen.
Das Herumjongliere mit den Variablen, habe ich bei meinem VHDL Prof zum 
Thema FSM abgeschrieben.
Ja einfachere Projekte, Lauflicht, auch schon einen Drehgeber mit 
Links/rechts erkennung habe ich gemacht, auch schon einen Sigma-Delta 
Modulator 1. Ordung habe ich lauffähig bekommen, also dachte ich (und 
die Arbeit) jetzt ist der Display dran.

Anbei sende ich mein Simulationsergebnis, zum Beweis, dass ich wirklich 
simuliere ;-)
Danke schonmal wieder für die Hilfe...aber es ist ja noch nicht ganz 
durchgestanden ;-)

Gruß

Florian

von Duke Scarring (Gast)


Lesenswert?

Lothar Miller schrieb:
> Denn es gibt keine einstellbaren Verzögerungsglieder in einem FPGA.
Aha ;-)
Und was sind die IODELAYs im Virtex 4 ?!?

Duke

von Duke Scarring (Gast)


Lesenswert?

Florian Z. schrieb:
> meinem VHDL Prof zum
> Thema FSM abgeschrieben
Ganz gefährlich.

Das was ich an der Hochschule zum Thema VHDL hatte, habe ich kurz in der 
Praxis probiert, um dann festzustellen, das davon so gut wie nix zu 
synthetisieren geht.

Duke

von Florian Z. (floz)


Lesenswert?

Ja,
das habe ich auch schon festgestellt, dass die Hochschulen, ein Leben im 
Simulator haben, aber dennoch kann man ja die eine oder andere Zeile 
abschreiben, um einen richtigen start zu finden, wenn das alles ist an 
wissen das man zur verfügung hat muss man damit das Arbeiten beginnen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Florian Z. schrieb:
> vorneweg, doch ich habe das Simuliert, es laufen auch alle States durch
> und es werden Daten aus dem Speicher gelesen und
> geschrieben....faszienierend nicht war?!
Ja.
Denn deine Simultaion ist falsch, weil deine Sensitivliste falsch ist.
Du hast aber "Glück", dass es trotzdem funktioniert (in der Simulation), 
denn der Prozess wird ja ständig durch den clk aufgerufen. Nur bekommst 
du auf dem Signal current_state dadurch einen (scheinbaren) Takt 
Latency...

> Das Herumjongliere mit den Variablen, habe ich bei meinem VHDL Prof zum
> Thema FSM abgeschrieben.
Böse (und vor allem unnötige) Sache, das...
In einer 1-Prozess-FSM wird der Folgezustand direkt auf das 
Zustandssignal zugewiesen. Da braucht es keine "Zwischenvariable".

> Was ist mit meiner rising_edge Funktion
Wenn du mal nachsiehst, was in der rising_edge() drinsteht, dann findest 
du sofort heraus, dass dort die Abfrage nach "and clk='1'" schon 
integriert ist. Such dort im Package std_logic_1164 mal nach der 
Funktion rising_edge(): 
http://optimal.vlsi.uwaterloo.ca/NEW/std_logic_1164_vhd.htm

> Duke Scarring schrieb:
>> Lothar Miller schrieb:
>>> Denn es gibt keine einstellbaren Verzögerungsglieder in einem FPGA.
>> Aha ;-)
>> Und was sind die IODELAYs im Virtex 4 ?!?
In einem FPGA... ;-)
Die IO-Zellen zählen für mich schon wegen der schlechten Zugänglichkeit 
und der schlechten Skalierbarkeit zur Aussenwelt. Zudem haben wir es 
hier mit einem S3 zu tun...

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Hallo,

so ich habe nun mal meinen Code abgeändert, danke für den tip mit der 
rising_edge, dass wusste ich noch nicht, hier also nun der Abgeänderte 
Code und die neue Simulations, wenn einer noch was sieht, oder der 
Meinung ist, nun müsste es gehen nur Posten,
danke schon mal für alle die Hilfe, Tips, Tricks

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Hier noch die Simulation, die wollte gerade nicht ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Das ist jetzt (ohne Witz) eine asynchrone FSM.
Die funktioniert nur in der Simulation...

Denn die Sensitivliste ist schon wieder unvollständig:
1
    when s3 => if zaehler4 = 6 then   
2
                    ort <=  ort + 1 ;
ort fehlt in der Liste....

Es bringt aber nichts, das reinzumachen, denn das hier ist die 
klassische kombinatorische Schleife: Sobald im Zustand s3 der 
zaehler4 gleich 6 ist, zählt ort mit irrsinniger Geschwindigkeit 
hoch:
http://www.lothar-miller.de/s9y/categories/36-Kombinatorische-Schleife
Lustigerweise merkt das die Synthese nicht mal unbedingt...

von Florian Z. (floz)


Lesenswert?

Hallo Lothar,
macht er aber laut meiner Simulation nicht, schau dir mal das Bild an...
Ich habe immer bei S4 einmal datenlesen, also klappt das doch oder habe 
ich da was falsch verstanden?
Also vom Abruf der Hex-Zahlen passt es genau zum 
Initialisierungsbeispiel meines LCDs.
Wie löse ich denn das Problem, wenn es eines ist, mit der 
Kombinatorischen Schleifen? Soll ich jetzt wieder die Clock dazu 
schalten, damit wird es wenigstens wieder Synchron, oder?
Danke für all die Hilfe und Erklärungen

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Florian Z. schrieb:
> macht er aber laut meiner Simulation nicht
Sag ich doch. Die Simulation ist falsch, weil die Sensitivliste 
unvollständig ist: ort fehlt.

Zur vereinfachten Darstellung:
1
signal cnt : unsigned (3 downto 0) := "0000";
2
process (clk) begin
3
  cnt <= cnt+1;
4
end process;
Simulier das mal: es sieht aus wie ein Zähler, der mit jeder 
Taktflanke hochgezählt wird.

Florian Z. schrieb:
> Kombinatorischen Schleifen? Soll ich jetzt wieder die Clock dazu
> schalten, damit wird es wenigstens wieder Synchron, oder?
Ja. Aber dann brauchst du nur clk in der Senslist...

von Florian Z. (floz)


Lesenswert?

also alles raus aus der Sensitivlist und clk rein, dann wirds was mit 
dem Display, verstehe ich das dann so richtig?
Und als Abfrage mach ich das  " if rising_edge (clk) then
                                      -- dann die states--"

na da bin ich ja mal gespannt ob das vor meiner Mittagspause noch was 
wird.
schon mal danke und ich melde mich wieder!

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

also entweder mag mich mein Display einfach nicht, oder ich mach noch 
was grundlegendes Falsch ;-)
Also hier nochmal der Überarbeitete und abgeänderte Quellcode...
Vielleicht kann mir noch jemand einen Tip geben, oder ach langsam weiß 
ich nicht mehr weiter.
Danke schon mal an alle, die mir helfen...
Flo

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Das nächste Mal bitte die Testbench gleich mitliefern.

Wie schnell ist denn Dein Systemtakt?
Hast Du ein Datenblatt/Timingdiagramm von dem Displaychip?

Duke

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Morgen Zusammen,
nach einer Kurzen nacht, aber ohne erfolge bin ich wieder auf der 
Arbeit,
klar habe ich Datenblätter für den Display, sind beide im Anhang.
Beim Dokument EA_dog-m finde ich nur die Seiten 6 und 7 interessant, ich 
habe übrigens den EA DOGM162 und im Dokument st7036 ist die Seite 54, 
das ist die mit dem Timing interessant...in diesem Dokument sind auch 
ein C-Programmierbeispiel, aber ich kann ja nicht "wait 20ns " 
schreiben...
ok, ich hoffe es hilft, weiter.
Ach ja mein Systemtakt sind 50MHz.
Danke schon mal wieder vorneweg für eure tolle Hilfe, ich hoffe ich 
bekomm das ding demnächst zum laufen, sonst trete ich es in die Tonne.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Florian Z. schrieb:
> ich hoffe ich bekomm das ding demnächst zum laufen,
Warum nimmst du nicht meine Beschreibung aus dem 
Beitrag "Re: EA DOG-M initialisieren" und machst die 
4-Bit-Ansteuerung einfach raus?

Ich würde einfach mal das ändern:
1
entity LCD_Controller is
2
    Port ( -- Signale an LCD
3
           :
4
           lcd_db : out  STD_LOGIC_VECTOR(7 downto 0);
5
:
6
:
7
type lcdbus_t is (IDLE, LOADDATA, BUSY);
8
signal lcdbus : lcdbus_t := BUSY;
9
:
10
:
11
   -- Buszugriff
12
   process begin
13
      wait until rising_edge(clk);
14
      case lcdbus is
15
         when IDLE =>
16
                     lcdidle <= '1';
17
                     lcd_e   <= '0';
18
                     if (lcdstart='1') then
19
                        lcdidle <= '0';
20
                        lcdbus <= LOADDATA;
21
                     end if;
22
                    
23
         when LOADDATA =>    
24
                     lcd_db <= lcddata;
25
                     lcd_rs <= lcdrs;
26
                     pulse_e <= 0;
27
                     lcdbus  <= BUSY;
28
                     waitbusy <= 0;
29
                     
30
          when BUSY =>
31
                     if(pulse_e=63 and oneus='1') then 
32
                        if (waitbusy<shorttime) then 
33
                           waitbusy <= waitbusy+1; 
34
                        else
35
                           lcdbus <= IDLE;
36
                        end if;
37
                     end if;
38
      end case;  
39
:

BTW: Welche Leitungen vom Display hast du denn alle angeschlossen?

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Hi,
also die Änderungen, die du mir da jetzt beschrieben hast, hatte ich bis 
auf ein paar kleinigkeiten schon versucht, aber mein Display macht so 
gar nichts... es leuchtet Grün ;-) , dass ist schon alles, aber ich 
hoffe, dass da noch mehr geht.
Auch mit deinen Änderungen passiert da nichts.
Wie ich es angeschlossen habe, so wie es auf seite 4 im EA_dog-m 
Datenblatt  für 8 Bit 3,3 V erklärt ist. Und Anbei sende ich dir dann 
meinen Schaltplan, wie es auf meinem Board verbaut ist, da liegt nämlich 
noch ein bisschen mehr rum... ;-) Ist ein Kleines Projekt von mir.
Aber es will nicht und ich bekomm das kotzen...
danke für eure tolle Hilfe, ich hoffe ich bekomm das ding demnächst zum 
laufen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Florian Z. schrieb:
> Und Anbei sende ich dir dann
> meinen Schaltplan, wie es auf meinem Board verbaut ist,
Derzeit hast du über R18 und R21 einen Kurzschluss zwischen 3V3 und 
GND... :-o

Welchen Pegel hat PSB?
Welchen hat Reset?

von Florian Z. (floz)


Lesenswert?

Hallo Lothar,
also der Kurzschluss bleibt aus,weil R21 nicht bestückt ist, also klappt 
das doch, zu den Pegeln Reset = 3,3 V und PSB hat 2,4 V ...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Florian Z. schrieb:
> und PSB hat 2,4 V ...
Das sollte laut DB aber ziemlich genau 3,3V sein.
Denn dorthin gehört für den 8-Bit Modus der Pin angeschlossen...  :-o

von Florian Z. (floz)


Lesenswert?

Dann werd ich mir jetzt mal die Lötstellen nochmal genau anschauen, 
nicht dass da eine kalte dabei ist...ich hoffe es ist da was 
mechanisches, sonst weiß ich nicht mehr weiter.

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

So alle Pins nochmal nachgelötet aber es bleiben 2,5V genau so wie an 
VDD,
da stimmt wohl was mit meiner 3,3V Versorgung nicht aber ich finde den 
Fehler nicht, hab gerade die ganze Platine abgesucht, im Anhang sende 
ich dir mal die ganze Platine mit, wenn du ein Target hast, kann ich es 
dir auch als Target file geben, vielleicht findest du ja den Fehler.
Ein dickes Dankeschön!

von Duke Scarring (Gast)



Lesenswert?

Also viel passt da ja nicht zusammen:

1. Es fehlen die 40 ms Pause nach dem Power on 
(st7036_init_by_instruction.png)
  (ist evtl. zu verschmerzen, weil der FPGA auch seine Zeit braucht, 
aber sicher ist sicher...)

2. Es wiederholt sich die Initialiierungs- und Ausgabesequenz alle Nase 
lang (laut Simulation)

3. Man erkennt (leider nicht sehr gut) im Timing-Diagramm 
(st7036_timing_diagram.png) das E(nable) ein wichitges Signal ist. Vor 
der steigenden Flanke müssen RS und R/W gesetzt werden und vor der 
fallenden Flanke auch entsprechend die Daten. Bei Dir wackelt E in der 
Simulation gar nicht und die Daten werden auch viel später erst gesetzt.
Siehe auch die Pinbeschreibung (st7036_pin_functions.png).

4. Für die Initialisirung müssen RS=0 und R/W=0 gesetzt werden 
(ea_dogm163_init_3_3V.png). Das stimmt bei Dir nicht (simulation.png)


Das einzige was zu stimmen scheint ist die Initialisierungssequenz 
(ea_dogm163_init_3_3V.png), aber ohne Enable wird Dein Display nicht 
viel machen...

Duke

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Hallo,
ich dachte man muss das mit dem Timing nicht so genau nehmen weil ja nur 
min. Werte angegeben sind, und ich bin bei mir überall in den min werten 
drinnen, ok, das mit dem e(nable) hab ich irgendwie übersehen. Die 40ms 
Pause für den Controller brauche ich nicht, da das display, auf einem 
Externen Board sitzt, und es dort lange genug Spannung bekommt.
Ich habe noch ein wenig an meinem Code geschrieben, kann mal noch jemand 
drüber schauen, besser bekomm ich die Timings nicht hin, ich bin echt am 
verzweifeln.
Danke schon mal für eure tolle Unterstützung!

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Florian Z. schrieb:
> Timing nicht so genau nehmen

Naja. Kann man als Bastler machen. Aber vielleicht willst Du ja mal 
Ingenieur werden?!

Also nochmal langsam: Du hast 50 MHz Systemtakt, also 20 ns Zykluszeit.

Enable muß (lt. Seite 54) tEWH = 200 ns = 10 Takte high sein und tEWL = 
150 ns = 8 Takte low sein.
Ob Du Schreiben oder Lesen (R/W) willst und welches Register (RS) muss 
tAW6 = 20 ns = 1 Takt vor der steigenden Flange von Enable gesetzt 
werden.
Die zu schreibenden Daten müssen tDS6 = 100 ns = 5 Takte vor der 
fallenden Flanke von Enable anliegen. Da Enable ja 10 Takte high sein 
muß, kannst Du die Daten auch gleich mit RS und R/W ausgeben, einen Takt 
warten und Enable für 10 Takte hochziehen.

Ich hab keine Ahnung, was Du in Deinem Code vermurkst hast, aber ich 
habe mal ein paar Timing-Checks in die Testbench eingebaut. (@all: 
Verbesserungsvorschläge um das eleganter/übersichtlicher zu schreiben 
sind gerne willkommen.)

Vielleicht hilft Dir das weiter.

Duke

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Hallo,
so ich habe nun mal alle Timings überarbeitet und sie alle angepasst,
weil ich ja Ingenieur werden will ;-)
Jetzt sieht es in der Simulation ganz gut aus, aber leider nicht auf 
meiner Hardware, die Leuchtet nämlich immer noch nur grün!
Kann nochmal bitte jemand reinschauen, ob er/sie noch was findet.
Danke für die tolle Hilfe.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Florian Z. schrieb:
> Kann nochmal bitte jemand reinschauen, ob er/sie noch was findet.
Funktioniert deine Hardware?
Hast du die Sache mit den 3,3V == 2,4V schon erledigt?

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab die Testbench nochmal erweitert. Jetzt sieht man, ob und wohin 
geschrieben/gelesen wird:
1
# ** Note: write       to instruction register: 84 (T)
2
#    Time: 11880100 ns  Iteration: 2  Instance: /lcd_daten_tb
3
# ** Note: write       to instruction register: 69 (E)
4
#    Time: 12959920 ns  Iteration: 2  Instance: /lcd_daten_tb
5
# ** Note: write       to instruction register: 83 (S)
6
#    Time: 14040160 ns  Iteration: 2  Instance: /lcd_daten_tb
7
# ** Note: write       to instruction register: 84 (T)
8
#    Time: 15119980 ns  Iteration: 2  Instance: /lcd_daten_tb

Wenn Du "TEST" ins Instruction- statt ins Datenregister schreibst, ist 
das sicher auch nicht sehr hilfreich.

Duke

von Duke Scarring (Gast)


Lesenswert?

Achja: Warum veränderst Du die Breite der RS und R/W-Impulse? Solltest 
Di nicht eher die Wartezeiten zwischen den Zugriffen (lt. Datenblatt) 
variieren?

DUke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Florian Z. schrieb:
> so ich habe nun mal alle Timings überarbeitet und sie alle angepasst,
> weil ich ja Ingenieur werden will ;-)
Ich bin da (als fertiger Ing.) nicht so streng mit den Timings. Denn ich 
würde gefühlt erst die Daten und die Steuersignale stabil anlegen, und 
dann den Enable-Puls bringen. Denn es tut garantiert nicht weh, wenn 
die Setupzeit tDS6 länger ist...

Und den Chip-Select CSB könntest du doch auch dauernd auf low lassen...

von Florian Z. (floz)


Lesenswert?

So Hallo,

also ich habe die Hardware nochmal durchgeschaut, und man kann ihn auch 
mit den 2,5 betreiben, weil ich finde beim besten willen nicht den Punkt 
an dem die Spannung abfällt. Aber es sollte trotzdem Funktionieren.
Weiter zu den Timings, soll ich jetzt weiter an der Perfektion arbeiten 
oder einfach alle Signale passend anstehen lassen und dann Enable auf 1 
setzen, also quasi
R/W auf 1
RS auf 0
CSB auf 0
Daten da
und danach Enable auf 1
oder das Timing wie es im Handbuch steht.
Wer meint was? Ich hättte jetzt einfach nur gerne einen laufenden 
Display, damit da mal was geht und ich ein Erfolgserlebnis habe...
Danke für die Hilfe

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Florian Z. schrieb:
> Aber es sollte trotzdem Funktionieren.
Wenn du nicht mal sicher bist, dass deine Hardware i.O. ist, dann suchst 
du derzeit an der falschen Stelle. Aus deinem Schaltplan geht klar 
hervor, dass über diese beiden Widerstände R18 oder R21 entweder 0V oder 
3,3V an den Pin angelegt werden. R21 ist nicht bestückt. Wenn also 
logischerweise R18 bestückt ist, und am RSB nur 3,3V sind, passt schon 
deine Versorgungsspannung nicht.

Oder: mir schwant Übles... Ist R18 etwa auch nicht bestückt? Und RSB 
daher einfach offen?

von Florian Z. (floz)


Lesenswert?

Nein, da kann ich dich beruhigen,
r18 ist bestückt. Aber ich mach mich jetzt nochmal mechanisch auf die 
suche nach einem Fehler und melde mich wieder, wenn ich weiß, dass die 
Hardware 100% geht.
Danke aber für all euere Hilfe
CU
flo

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
so nach langer Schaltplan suche reaktiviere ich den Thread, denn habe 
ich einen Hardwarefehler gefunden und ihn behoben.
Nun Funktioniert die Hardware so wie sie soll, und ich habe auch 
nochnmal an meinem Code und den Timings gebastelt, aber leider sehe ich 
immer noch nichts auf meinem Display, bitte helft mir, ich bin am 
Verzweifeln.
Anbei den Code und die TB
thx
Flo

von Florian Z. (floz)


Angehängte Dateien:

Lesenswert?

Und für alle die es noch Interessiert, hier mein Simulationsergebnis ;-)

von Duke Scarring (Gast)


Lesenswert?

Meine Testbench (siehe oben) sagt zu Deinem Code:
1
# ** Note: read        to data        register: 0 (
2
#    Time: 50001880 ns  Iteration: 2  Instance: /lcd_daten_tb
3
# ** Note: read        to data        register: 57 (9)
4
#    Time: 50766280 ns  Iteration: 2  Instance: /lcd_daten_tb
5
# ** Note: read        to data        register: 57 (9)
6
#    Time: 51845800 ns  Iteration: 2  Instance: /lcd_daten_tb
7
# ** Note: read        to data        register: 20 ()
8
#    Time: 52926100 ns  Iteration: 2  Instance: /lcd_daten_tb
9
# ** Note: read        to data        register: 85 (U)
10
#    Time: 54006400 ns  Iteration: 2  Instance: /lcd_daten_tb
11
# ** Note: read        to data        register: 109 (m)
12
#    Time: 55086700 ns  Iteration: 2  Instance: /lcd_daten_tb
13
# ** Note: read        to data        register: 120 (x)
14
#    Time: 56167 us  Iteration: 2  Instance: /lcd_daten_tb
15
# ** Note: read        to data        register: 15 ()
16
#    Time: 57246520 ns  Iteration: 2  Instance: /lcd_daten_tb

Und read to data register sieht für mich nicht nach
write to command register aus...

Duke

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.