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); |
24 | WEn_Chip_Erase : in std_logic; |
25 | CEn_Chip_Erase : in std_logic; |
26 | OEn_Chip_Erase : in std_logic; |
27 | |
28 | WEn : out std_logic_vector(1 downto 0); |
29 | -- WEn : out std_logic := '1'; |
30 | CEn : out std_logic := '1'; |
31 | OEn : out std_logic := '1'; |
32 | Data_io : inout std_logic_vector (15 downto 0); |
33 | Addr : out std_logic_vector (20 downto 0); |
34 | Data : out std_logic_vector (15 downto 0) |
35 | |
36 | ); |
37 | end Flash_Multiplexer; |
38 | |
39 | architecture Behavioral of Flash_Multiplexer is |
40 | |
41 | begin |
42 | |
43 | --WEn <= "11"; |
44 | --WEn <= '1'; |
45 | CEn <= '1'; |
46 | OEn <= '1'; |
47 | |
48 | |
49 | process( Flash_Multiplexer_ctrl, Data_io,Data_Chip_Erase, |
50 | Addr_Chip_Erase, WEn_Chip_Erase,CEn_Chip_Erase,OEn_Chip_Erase,Data_UART, |
51 | Flash_Addr,WEn_FAg,CEn_FAg,OEn_FAg,Data_ESPM,Addr_ESPM,WEn_ESPM,CEn_ESPM, |
52 | OEn_ESPM) |
53 | |
54 | |
55 | begin |
56 | |
57 | case Flash_Multiplexer_ctrl is |
58 | |
59 | when "0001" => --ESPM |
60 | Data_io <= Data_ESPM; |
61 | Data <= (others => 'Z'); |
62 | Addr <= Addr_ESPM; |
63 | WEn(0) <= WEn_ESPM; |
64 | -- WEn <= WEn_ESPM; |
65 | -- CEn <= CEn_ESPM; |
66 | -- OEn <= OEn_ESPM; |
67 | |
68 | |
69 | when "0010" => --Write (Flash_Addr_gen + UART) |
70 | Data_io(15 downto 8) <= (others => '0'); |
71 | Data_io(7 downto 0) <= Data_UART; |
72 | Data <= (others => 'Z'); |
73 | Addr <= Flash_Addr; |
74 | WEn(0) <= WEn_FAg; |
75 | -- WEn <= WEn_FAg; |
76 | -- CEn <= CEn_FAg; |
77 | -- OEn <= OEn_FAg; |
78 | |
79 | when "0011" => --Read |
80 | Data_io <= (others => 'Z'); |
81 | Data <= Data_io; |
82 | Addr <= Flash_Addr; |
83 | WEn(0) <= WEn_FAg; |
84 | -- WEn <= WEn_FAg; |
85 | -- CEn <= CEn_FAg; |
86 | -- OEn <= OEn_FAg; |
87 | |
88 | when "0100" => --Chip_Erase |
89 | Data_io <= Data_Chip_Erase; |
90 | Data <= (others => 'Z'); |
91 | Addr <= Addr_Chip_Erase; |
92 | WEn(0) <= WEn_Chip_Erase; |
93 | -- WEn <= WEn_Chip_Erase; |
94 | -- CEn <= CEn_Chip_Erase; |
95 | -- OEn <= OEn_Chip_Erase; |
96 | |
97 | when others => |
98 | Data_io <= (others => 'Z'); |
99 | Data <= (others => 'Z'); |
100 | Addr <= (others => '0'); |
101 | WEn(0) <= '1'; |
102 | -- WEn <= '1'; |
103 | -- CEn <= '1'; |
104 | -- OEn <= '1'; |
105 | |
106 | |
107 | end case; |
108 | |
109 | |
110 | end process; |
111 | end Behavioral; |