Hallo liebe VHDL Experten,
ich habe folgendes Problem:
Ich habe in ISE ein Design mit zwei MOdulen erstellt, die ich gerne
miteinander verdrahten möchte. Dazu folgender Code:
1
libraryieee;
2
useieee.std_logic_1164.ALL;
3
useieee.numeric_std.ALL;
4
libraryUNISIM;
5
useUNISIM.Vcomponents.ALL;
6
7
entitywholeDesignis
8
port(clk_24:instd_logic;
9
backLight_out:outstd_logic;
10
en_out:outstd_logic;
11
rs_out:outstd_logic;
12
rw_out:outstd_logic;
13
data_out:inoutstd_logic_vector(3downto0));
14
endwholeDesign;
15
16
architectureBEHAVIORALofwholeDesignis
17
signalXLXN_1:std_logic_vector(3downto0);
18
signalXLXN_2:std_logic_vector(7downto0);
19
signalXLXN_3:std_logic;
20
signalXLXN_5:std_logic;
21
signalXLXN_6:std_logic;
22
signalXLXN_4:std_logic;
23
componentlcdController
24
port(clk_24:instd_logic;
25
reset_n:instd_logic;
26
posY:instd_logic;
27
writeData:instd_logic;
28
dataIn:instd_logic_vector(7downto0);
29
posX:instd_logic_vector(3downto0);
30
ready:outstd_logic;
31
en:outstd_logic;
32
rw:outstd_logic;
33
rs:outstd_logic;
34
backLight:outstd_logic;
35
data:inoutstd_logic_vector(3downto0));
36
endcomponent;
37
38
componentwriteText
39
port(clk_24:instd_logic;
40
isReady:instd_logic;
41
reset_n:outstd_logic;
42
posY:outstd_logic;
43
writeData:outstd_logic;
44
char_out:outstd_logic_vector(7downto0);
45
posX:outstd_logic_vector(3downto0));
46
endcomponent;
47
48
begin
49
XLXI_1:lcdController
50
portmap(clk_24=>clk_24,
51
dataIn(7downto0)=>XLXN_2(7downto0),
52
posX(3downto0)=>XLXN_1(3downto0),
53
posY=>XLXN_4,
54
reset_n=>XLXN_5,
55
writeData=>XLXN_3,
56
backLight=>backLight_out,
57
en=>en_out,
58
ready=>XLXN_6,
59
rs=>rs_out,
60
rw=>rw_out,
61
data(3downto0)=>data_out(3downto0));
62
63
XLXI_2:writeText
64
portmap(clk_24=>clk_24,
65
isReady=>XLXN_6,
66
char_out(7downto0)=>XLXN_2(7downto0),
67
posX(3downto0)=>XLXN_1(3downto0),
68
posY=>XLXN_4,
69
reset_n=>XLXN_5,
70
writeData=>XLXN_3);
71
72
endBEHAVIORAL;
Das Problem ist, dass ISE einfach nicht die posY Leitung synthetisieren
will. Das RTL Ergebnis ist wie im Bild.
Hat jemand eine Idee woran das liegen könnte?
Viele Grüße
Johannes schrieb:> Hat jemand eine Idee woran das liegen könnte?
Das Problem liegt icht im geposteten Code. Es liegt sehr wahrscheinlich
daran, dass das Signal, das darauf transporttiert wird, sich nicht
(relevant) ändert.
Was sagt die Simulation?
Duke Scarring schrieb:> Das dürfte bloß ein Anzeigefehler im Schematic-View sein.>> Duke
Das Signal wird aber, im Gegensatz zu den anderen Leitunge, auch bei den
Verbindungsleitungen nicht angezeigt. Wird also definitiv nicht
synthetisiert.
Simulation läuft fehlerfrei.
Lothar Miller schrieb:> Johannes schrieb:>> Hat jemand eine Idee woran das liegen könnte?> Das Problem liegt icht im geposteten Code. Es liegt sehr wahrscheinlich> daran, dass das Signal, das darauf transporttiert wird, sich nicht> (relevant) ändert.>> Was sagt die Simulation?
Kann es denn wirklich sein, dass die Leitung einfach wegsynthetisiert
wird. Was empfängt dann die Gegenseite? Z oder U oder 0?
Duke Scarring schrieb:> Das dürfte bloß ein Anzeigefehler im Schematic-View sein.
Ja, ich empfehle hier mal einen Blick auf die Technology Schematic zu
werfen. Geht zwar sehr ins Detail, funktioniert aber...
Johannes schrieb:> Kann es denn wirklich sein, dass die Leitung einfach wegsynthetisiert> wird. Was empfängt dann die Gegenseite? Z oder U oder 0?
Sie wird nur wegsynthesisiert, wenn kein Empfänger vorhanden ist (Port
zwar in der Entity definiert, aber in der Architecture wird er nicht
verwendet) oder der Synthesizer feststellt, dass eine Änderung an diesem
Signal keinen Einfluss auf folgende Signale hat (Einfaches Beispiel, Ein
Und-Gatter wo ein Eingang konstant auf '0' ist, dann optimiert der
Synthesizer gleich das ganze Und-Gatter und die Logik an den anderen
Eingängen weg).
Der erste Fall kann manchmal aber selten gewünscht sein, der zweite Fall
ist so gut wie immer ein Hinweis auf ein Fehler im Design (Entsprechend
gibt es dazu Warnungen im Synthesis Report).