Da hast du eher einen Denkfehler. Du hast geschrieben, dass Y(0) auf E
gesetzt werden soll, wenn ADDRESS einen bestimmten Wert hat. Aber was
soll mit Y(0) passieren, wenn ADDRESS einen anderen Wert hat? Auf 0
gehen? Dann schreibst du:
1 | Y(0) <= E when ADDRESS = "00" else '0';
|
Soll Y(0) den Wert aber behalten, brauchst du ein FlipFlop, um ihn zu
speichern, sowie einen Takt, an dessen Flanke der Wert im FlipFlop
gespeichert wird. Ein solches Flipflop beschreibt man üblicherweise in
einem getakteten Process (CLK ist der Takt):
1 | process(CLK)
|
2 | begin
|
3 | if(CLK'event and CLK='1') then
|
4 | if(ADDRESS = "00") then
|
5 | Y(0) <= E;
|
6 | elsif(ADDRESS = "01") then
|
7 | Y(1) <= E;
|
8 | elsif(ADDRESS = "10") then
|
9 | Y(2) <= E;
|
10 | elsif(ADDRESS = "11") then
|
11 | Y(3) <= E;
|
12 | end if;
|
13 | end if;
|
14 | end process;
|
Das sind dann gleich 4 Flipflops für alle Kanäle.
Alternativ könnte das folgende auch gehen (bin mir nicht ganz sicher und
kanns grad nicht testen), ist in Hardware exakt das selbe, sieht nur
etwas schöner aus:
1 | process(CLK)
|
2 | begin
|
3 | if(CLK'event and CLK='1') then
|
4 | Y(To_Integer(ADDRESS)) <= E;
|
5 | end if;
|
6 | end process;
|