Hallo
Ich wäre dankbar für ein Tipp wie ich ein Byte Demultiplxer in VHDL
implementieren soll.
Folgende Schaltung funktioniert bereits ist aber noch keine
Demultiplexer. Es wird lediglich ein Byte (wb_dat_i) von Wishbone nach
gpo getaktet. Nun soll aber je nach Adresse (wb_adr_i) das Wisbone Byte
in ein bestimmtes Ausgangssignal getaktet werden, und dann auch dort
bestehen bleiben, bis es wieder üerschrieben wird.
Also z.B. soll wenn wb_adr_i = 3 => tvor (23 downto 15) <= wb_dat_i;
Ich bin nicht so der VHDL Experte, deshalb bin ich mir nicht sicher, wie
sowas am Besten implementiert wird.
Kann mir da jemand ein Vorschlag machen?
Gruss
1 | ENTITY GPO_wb IS
|
2 | PORT(
|
3 | clk : IN std_logic;
|
4 | reset : IN std_logic;
|
5 | -- wishbone interface
|
6 | wb_stb_i : IN std_logic;
|
7 | wb_dat_i : IN std_logic_vector(7 DOWNTO 0);
|
8 | wb_adr_i : IN std_logic_vector(7 DOWNTO 0);
|
9 | wb_ack_o : OUT std_logic;
|
10 | -- logik interface SM
|
11 | tvor : OUT unsigned(31 DOWNTO 0);
|
12 | ton : OUT unsigned(31 DOWNTO 0);
|
13 | toff : OUT unsigned(31 DOWNTO 0);
|
14 | tmag_on : OUT unsigned(31 DOWNTO 0);
|
15 | tmag_off : OUT unsigned(31 DOWNTO 0);
|
16 | umon_trig : OUT unsigned(15 DOWNTO 0);
|
17 | npuls : OUT unsigned(7 DOWNTO 0);
|
18 | SM_control : OUT std_logic_vector(7 DOWNTO 0);
|
19 | -- logik interface GPO
|
20 | gpo : OUT std_logic_vector(7 DOWNTO 0);
|
21 | );
|
22 | END GPO_wb ;
|
23 |
|
24 | ARCHITECTURE struct OF GPO_wb IS
|
25 | BEGIN
|
26 | PROCESS(clk,reset)
|
27 | BEGIN
|
28 | IF reset='1' THEN
|
29 | gpo <= (others => '0');
|
30 | wb_ack_o <= '0';
|
31 | ELSIF rising_edge(clk) THEN
|
32 | IF wb_stb_i='1' THEN
|
33 |
|
34 | --Hier müssten die Zuweisungen gem Adresse rein
|
35 | gpo <= wb_dat_i;
|
36 |
|
37 | wb_ack_o <= '1';
|
38 | ELSE
|
39 | wb_ack_o <= '0';
|
40 | END IF;
|
41 | END IF;
|
42 | END PROCESS;
|
43 | END ARCHITECTURE struct;
|