Forum: FPGA, VHDL & Co. Implementierung Bytes Demultiplexer


von Reto B. (schnuber)


Lesenswert?

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;

von Valko Z. (hydravliska)


Lesenswert?

Vielleicht hilft dir das weiter...
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
USE ieee.numeric_std.ALL;
4
...
5
PROCESS(clk,reset)
6
BEGIN
7
 IF reset='1' THEN 
8
  gpo      <= (others => '0');
9
  wb_ack_o <= '0';
10
  tvor     <= (others => '0');
11
 ELSIF rising_edge(clk) THEN
12
  IF wb_stb_i='1' THEN
13
      
14
    --Hier müssten die Zuweisungen gem Adresse rein
15
   case to_integer(unsigned(w_adr_i)) is
16
     when 0 => tvor (7 downto 0)   <= wb_dat_i;
17
     when 1 => tvor (15 downto 8)  <= wb_dat_i;
18
     when 2 => tvor (23 downto 16) <= wb_dat_i;
19
     when 3 => tvor (31 downto 24) <= wb_dat_i;
20
     when OTHERS => NULL;
21
   end case;
22
23
   gpo <= wb_dat_i;
24
25
...

Gruss

von Reto B. (schnuber)


Lesenswert?

Ja das klappt, danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.