nummernschalter schrieb:
> Ich möchte in einem Xilinx CPLD sowas wie einen internen Bus nachbilden.
Was genau möchtest du den, IM CPLD einen Bus nachbilden (das geht nur
mit einem MUX) oder soll der CPLD AN einen Bus später rangehängt
werden und intern was machen?
> Mir schweben da Standardbauteile, wie 74LS573 und 74LS245 vor.
Als orientierun okay aber wenn dich nichts dazu zwingt solltest du dich
von den Bauteilen lösen das macht nur dein Design unötig komplex
> Welche Elemente kann ich dafür in meinen Schaltplan benutzen?
> Ist "LD8" der richtige Funktionsblock für diese Aufgabe?
Beschreibe doch alles in VHDL, dann mußt du dir darüber kaum/keine
Gedanken machen.
Hier mal zwei Beispiele wie es aussehen könnte.
1 | ----------------------------------------------------------------------------------
|
2 | -- Create Date: 09:47:43 08/02/2009
|
3 | -- Module Name: 74LS573 - Behavioral
|
4 | ----------------------------------------------------------------------------------
|
5 | library IEEE;
|
6 | use IEEE.STD_LOGIC_1164.ALL;
|
7 | use IEEE.STD_LOGIC_ARITH.ALL;
|
8 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
9 |
|
10 | entity CPLD_74LS573 is
|
11 | Port ( nOE : in STD_LOGIC;
|
12 | LE : in STD_LOGIC;
|
13 | D : in STD_LOGIC_VECTOR (7 downto 0);
|
14 | Q : out STD_LOGIC_VECTOR (7 downto 0));
|
15 | end CPLD_74LS573;
|
16 |
|
17 | architecture Behavioral of CPLD_74LS573 is
|
18 | signal latch : std_logic_vector(7 downto 0);
|
19 | begin
|
20 |
|
21 | -- Solange LE High werden die Daten durchgereicht
|
22 | -- bei Low wird der alte Zustand beibehalten
|
23 | latch <= D when LE = '1' else latch;
|
24 |
|
25 | -- Wenn nOE = LOW erscheint latch Data am Ausgang
|
26 | -- Sonst High-Z
|
27 | Q <= latch when nOE = '0' else (7 downto 0 => 'Z');
|
28 |
|
29 | end Behavioral;
|
Und nochmal der 74LS245
1 | ----------------------------------------------------------------------------------
|
2 | -- Create Date: 09:59:36 08/02/2009
|
3 | -- Module Name: 74LS245 - Behavioral
|
4 | ----------------------------------------------------------------------------------
|
5 | library IEEE;
|
6 | use IEEE.STD_LOGIC_1164.ALL;
|
7 | use IEEE.STD_LOGIC_ARITH.ALL;
|
8 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
9 |
|
10 | entity CPLD_74LS245 is
|
11 | Port ( nE : in STD_LOGIC;
|
12 | dir : in STD_LOGIC;
|
13 | B : inout STD_LOGIC_VECTOR (7 downto 0);
|
14 | A : inout STD_LOGIC_VECTOR (7 downto 0));
|
15 | end CPLD_74LS245;
|
16 |
|
17 | architecture Behavioral of CPLD_74LS245 is
|
18 | begin
|
19 |
|
20 | -- Wenn nE = 1 oder dir = '1' dann HighZ
|
21 | -- Sonst B
|
22 | A <= (7 downto 0 => 'Z') when nE = '1' OR dir = '1' else B;
|
23 |
|
24 | -- Wenn nE = 1 oder dir = '1' dann HighZ
|
25 | -- Sonst A
|
26 | B <= (7 downto 0 => 'Z') when nE = '1' OR dir = '0' else A;
|
27 |
|
28 | end Behavioral;
|
Jezt müßtest du nurnoch deine Logik dazufügen oder das entsprechend
verdrahten. Benötigt mind 24 Makrozellen.