Hallo ihr Lieben,
ich habe ein Problem bei dem ich einfach nicht mehr weiter weiß.
Es soll ein Muxer gebaut werden, der abhängig von einem Steuersignal die
entsprechenden Eingangsports auf die Ausgangsports schaltet. Ein rein
kombinatorischer Prozess also. Er schaltet alle Ports die NICHT
std_logic sind tadellos, so wie es sein soll. In der Simulation bleiben
die std_logic Out-Ports immer im Zustand 'U', egal welches Steuersignal
kommt.
Ich habe folgendes versucht:
- neue Projekte erstellt
- die VHDL für den Muxer aus den Projekten in denen ALLES funktioniert
in diesem Projekt integriert
- Ports außerhalb des Prozesses auf Dauerhigh gesetzt
- Ports in der entity selbst Werte zugewiesen
- Muxer in eine andere Entity integriert (Verhalten wandert mit)
- verschiedene Modelsim-Versionen, verschiedene ISE-WebPackversionen
probiert
Es führt einfach kein Weg rein, die std_logic outs in einen anderen
Zustand als 'U' zu bekommen.
Dann habe ich noch probiert aus dem einen Outport einen Vector zu machen
(siehe WEn) und siehe da, mit dem funktioniert es. Hä? Ich verstehe die
VHDL-Welt nicht mehr.
Weiß jermand von euch Rat? ichbin für alles Ideen offen.
Vielen Dank und Gute Nacht
Gruß,
Manuel
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.std_logic_arith.all;
4
use ieee.std_logic_unsigned.all;
5
6
7
entity Flash_Multiplexer is
8
port (
9
Flash_Multiplexer_ctrl : in std_logic_vector (3 downto 0);
10
Data_UART : in std_logic_vector (7 downto 0);
11
Flash_Addr : in std_logic_vector (20 downto 0);
12
WEn_FAg : in std_logic;
13
CEn_FAg : in std_logic;
14
OEn_FAg : in std_logic;
15
16
Data_ESPM : in std_logic_vector (15 downto 0);
17
Addr_ESPM : in std_logic_vector (20 downto 0);
18
WEn_ESPM : in std_logic;
19
CEn_ESPM : in std_logic;
20
OEn_ESPM : in std_logic;
21
22
Data_Chip_Erase : in std_logic_vector (15 downto 0);
23
Addr_Chip_Erase : in std_logic_vector (20 downto 0);
Das Problem liegt nicht am Std_logic sondern an deinen zuweisunge.
außerhalb des Prozesses weist Du
CEn <= '1';
OEn <= '1';
zu. Das bedeutet, dass die Ausgänge immer den Wert haben.
Anschließend weist innerhalb des Prozesses nochmals CEn und OEn zu.
Selbiges geht natürlich nicht. das ist genau das gleich als wenn du zwei
Prozesse hast und dort jeweils die Signale zuweist.
Frank
Hallo Frank,
ich habe doch nur zu Testzwecken die Zuweisung außerhalb des Process
eingefügt, damit überhaupt etwas zugewiesen werden kann und die
Zuweisungen innerhalb des Process für diesen Testzweck auskommentiert.
Aber das funktioniert nicht - Ports bleiben immer 'U'.
Schade das es nicht so einfach ist, aber danke trotzdem.
Gruß Manuel
Da stellt sich mir die Frage, ob die outputs vielleicht doch korrekt
funktionieren und einfach nur U durch die inputs zugewiesen bekommen?
Was schreibst du denn auf die ports, also was legst du an, z.B. an
WEn_ESPM?
Hi Leutz,
an den Eingängen liegt keinerlei 'U' an. Alle Inputs haben einen
bestimmten Zustand. Daran liegt es also nicht. Zumal es einen bestimmten
Zustand der Outputs im Case "when others" gibt, der nicht von den Inputs
abhänging ist (außer vom Steuersignal natürlich).
Der Fehler ist an einer anderen Stelle zu suchen und ist fast nicht zu
finden, weil es zu keinerlei Fehlermeldung kommt, sondern nur zu den
unbestimmten Zuständen 'U' von WEn, CEn und OEn.
Ich habe einen äquivalenten Ausgangsport Testpin erschaffen, den ich bis
in die höchste Hierarchie gezogen habe (genau wie die WEn, CEn, und
OEn). Mit diesem Testpin trat der Fehler nicht auf.
Dann habe ich verglichen was ist an dem Testpin anders, als bei den Pins
WEn, CEn, OEn. In der obersten Hierachie wurden die Outputs WEn, CEn und
OEn auf andere Ports gemappt mit den Namen (FLASH_WEn, FLASH_OEn, usw).
Im Gegensatz dazu wurde der Testpin auf ein Signal gemappt. Sollte ja
erstmal kein Problem sein, ob ich den Pin auf ein Signal lege und dieses
nicht weiter benutze oder auf einen Ausgangsport meiner höchsten
Hierarchie.
ABER
Es hatten sich in der höchsten Hierarchie weitere Zuweisungen versteht,
die auf die gleichen Ports gingen wie WEn, CEn und OEn. Die haben mir
mein Signal kaputt gemacht. Das heißt also das in der obersten
Hierarchie (ist ein ziemlich komplexes Projekt) einmal in der Portmap
drin stand WEn => FLASH_WEn, usw. und ebenfalls die Zuweisung FLASH_WEn
<= sig1; , die ich wahrscheinlich mal für irgendwelche Messungen, Tests
oder was weiß ich vorgenommen habe. Das Böse ist dabei die Situation,
dass der Port der obersten Hierarchie mit zwei Treibern versorgt wird
keine Fehlermeldung hervor ruft.
Ich habs gefunden - hurra! Immerhin nach bestimmt 11 Stunden intensiver
Suche.
Ich danke euch für eure Hilfe und wünsche noch einen schönen Freitag.
Gruß,
Manuel