Hilfe beim lesen von Daten

Gast #3901728
Lesenswert?

Hallo Leute

Ich arbeite seit einer Woche mit VHDL
Ich hab einen Zähler implementiert der auch funktioniert.
Der Zählerstand wird dann in meinen FIFO geladen (also es wird im FIFO 
geschrieben) Die Module habe ich über Signale miteinander verbunden.
Man erkennt auch, dass der Eingang meines Speichers (Din) den selben 
Zählerstand des Ausgangs meines Schreibmodul hat. Was ich jetzt aber 
nicht verstehe ist, dass mein Lesemodul diesen Zählerstand nicht lesen 
kann...
Ich würde mich freuen Wenn mein Speicher am Ausgang überhaupt einen 
Zählerstand ungleich 0 ausgibt. Habt ihr eventuell eine Ahnung woran es 
liegen kann? Der Schreibvorgang funktioniert ja


****************Code Schreibmodul***********************
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL
4

5
entity write_m is
6

7
port(
8
    clk      : in std_logic;
9
    rst      : in std_logic;
10
    enable_w : in std_logic;
11
    d_out    : out std_logic_vector(17 downto 0); 
12
    w_out    : out std_logic; 
13
    full     : in std_logic
14
); 
15

16
end write_m;
17

18
architecture Behavioral of write_m is
19

20
signal d_out_1 : std_logic_vector(17 downto 0);
21

22
begin
23

24
process(rst,clk)
25
begin
26
  if(rst = '1') then
27
  d_out_1 <= (others => '0');
28
        w_out <= '0';
29
         elsif (clk = '1') and clk'event then
30
          if (enable_w = '1' and full = '0') then
31
            w_out <=  '1';
32
            d_out_1  <= std_logic_vector(unsigned(d_out_1)+1);
33
         else
34
            d_out_1  <= std_logic_vector(unsigned(d_out_1));
35
            w_out <= '0';
36
        end if;
37
       end if;
38
     end process;
39
    
40
  d_out <= d_out_1; 
41
  end Behavioral;

**************Code Lesemodul****************
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL
4

5
entity read_m is
6
port(
7
     clk       : in std_logic;
8
     rst       : in std_logic;
9
     d_in_r    : in std_logic_vector(17 downto 0);
10
     empty     : in std_logic;
11
     enable_r  : in std_logic;
12
     d_out     : out std_logic_vector(17 downto 0);
13
     r_out     : out std_logic
14
);
15

16

17
end read_m;
18

19
architecture Behavioral of read_m is
20
signal d_out_1 : std_logic_vector(17 downto 0);
21

22
begin
23
  process(rst,clk)
24
  begin
25
      if(rst = '0') then 
26
     d_out_1 <=  (others => '0');
27
     r_out <= '0';
28
        if (clk = '1') and clk'event then
29
        if (enable_r = '1' and empty = '0') then  
30
      r_out <= '1';
31
            d_out_1 <= std_logic_vector(unsigned(d_in_r));
32
         end if;
33
         end if;
34
      end if;
35
    end process;
36
 
37
           d_out <= d_out_1; 
38
  
39
 end Behavioral;



****Speicher(FIFO mit IP Core generiert)************


***********TOPMODUL***************************
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL
4

5
entity TOP is
6
port (
7
     clk      : in std_logic;                    
8
     rst      : in std_logic;
9
     enable_w : in std_logic;
10
     enable_r : in std_logic;
11
     d_out    : out std_logic_vector(17 downto 0)
12
     );    
13
end TOP;
14

15
architecture Behavioral of TOP is 
16

17

18

19
component write_m 
20

21
port(
22
     clk      : in std_logic;
23
     rst      : in std_logic;
24
     enable_w : in std_logic;              
25
     d_out    : out std_logic_vector(17 downto 0);   
26
     w_out    : out std_logic;                
27
     full     : in std_logic                  
28
END COMPONENT;
29

30

31

32

33
COMPONENT fifo_neu
34
  PORT (
35
    clk   : IN STD_LOGIC;
36
    rst   : IN STD_LOGIC;
37
    din   : IN STD_LOGIC_VECTOR(17 DOWNTO 0);
38
    wr_en : IN STD_LOGIC;
39
    rd_en : IN STD_LOGIC;
40
    dout  : OUT STD_LOGIC_VECTOR(17 DOWNTO 0);
41
    full  : OUT STD_LOGIC;
42
    empty : OUT STD_LOGIC
43
  );
44
END COMPONENT;
45

46

47
component read_m
48
port(
49
     clk       : in std_logic;
50
     rst       : in std_logic;
51
     d_in_r    : in std_logic_vector(17 downto 0);
52
     empty     : in std_logic;
53
     enable_r  : in std_logic;
54
     d_out     : out std_logic_vector(17 downto 0);
55
     r_out     : out std_logic
56
    );
57
end component;
58

59

60

61

62

63

64

65
signal fifo_out   : std_logic_vector(17 downto 0);
66
signal fifo_in    : std_logic_vector(17 downto 0);
67
signal fifo_wr    : std_logic;
68
signal fifo_full  : std_logic;
69
signal fifo_empty : std_logic;
70
signal fifo_rd    : std_logic;
71

72
begin
73

74

75
your_instance_name : fifo_neu
76
  PORT MAP (
77
           clk => clk,
78
           rst => rst,
79
           din => fifo_in,
80
           wr_en => fifo_wr,
81
           rd_en => fifo_rd,        
82
           dout =>  fifo_out,                 
83
           full => fifo_full,
84
           empty =>  fifo_empty
85
          );
86

87
write_i : write_m
88
Port Map(
89
     clk => clk,
90
     rst => rst,
91
     enable_w => enable_w,
92
     d_out => fifo_in,
93
     w_out => fifo_wr,
94
     full =>  fifo_full
95
    );
96
  
97
      
98
read_i : read_m 
99
port map(      
100
  
101
      clk => clk,
102
      rst => rst,
103
      enable_r => enable_r,
104
      d_in_r =>  fifo_out,        
105
      empty => fifo_empty,
106
      d_out => d_out,
107
      r_out => fifo_rd
108
    );
109

110

111
end Behavioral;


***********Testbench von TOP ************
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
 
4
-- Uncomment the following library declaration if using
5
-- arithmetic functions with Signed or Unsigned values
6
--USE ieee.numeric_std.ALL;
7
 
8
ENTITY TOP_2tb IS
9
END TOP_2tb;
10
 
11
ARCHITECTURE behavior OF TOP_2tb IS 
12
 
13
    -- Component Declaration for the Unit Under Test (UUT)
14
 
15
    COMPONENT TOP
16
    PORT(
17
         clk : IN  std_logic;
18
         rst : IN  std_logic;
19
         enable_w : IN  std_logic;
20
         enable_r : IN  std_logic;
21
         d_out : OUT  std_logic_vector(17 downto 0)
22
        );
23
    END COMPONENT;
24
    
25

26
   --Inputs
27
   signal clk : std_logic := '0';
28
   signal rst : std_logic := '0';
29
   signal enable_w : std_logic := '0';
30
   signal enable_r : std_logic := '0';
31

32
   --Outputs
33
   signal d_out : std_logic_vector(17 downto 0);
34

35
   -- Clock period definitions
36
   constant clk_period : time := 10 ns;
37
 
38
BEGIN
39
 
40
  -- Instantiate the Unit Under Test (UUT)
41
   uut: TOP PORT MAP (
42
          clk => clk,
43
          rst => rst,
44
          enable_w => enable_w,
45
          enable_r => enable_r,
46
          d_out => d_out
47
        );
48

49
   -- Clock process definitions
50
   clk_process :process
51
   begin
52
   clk <= '0';
53
   wait for clk_period/2;
54
   clk <= '1';
55
   wait for clk_period/2;
56
   end process;
57
 
58

59
   -- Stimulus process
60
   stim_proc: process
61
   begin    
62
    --Reset
63
    rst <= '1';
64
     wait for 20 ns;
65
     rst <= '0';
66
      
67
    --Write
68
    enable_W <= '1';
69
    wait for 350 ns;
70
    
71
    --Write and Read
72
    enable_R <= '1';
73
    wait for 100 ns;
74
    
75
    --Read
76
    enable_W <= '0';
77
    wait for 350 ns;
78
  
79
    --No operation
80
    enable_R <= '0';
81
    
82
    wait for clk_period*10;
83
    wait;
84
   end process;
85

86
END;
Moderator (Firma: Titel) Persönliche Seite #3901846
Lesenswert?

Ääähm, wo lernt man denn sowas:
1
  process(rst,clk)
2
  begin
3
     if (rst = '0') then 
4
        d_out_1 <=  (others => '0');
5
        r_out <= '0';
6
        if (clk = '1') and clk'event then
7
           if (enable_r = '1' and empty = '0') then  
8
              r_out <= '1';
9
              d_out_1 <= std_logic_vector(unsigned(d_in_r));
10
           end if;
11
        end if;
12
     end if;
13
  end process;
Der Reset ist hier nur ein Clock-Enable und sonst an Nutzlosigkeit nicht 
zu übertreffen...

Siehe dort die Variante 3:
http://www.lothar-miller.de/s9y/categories/6-Clock-Enable

xyz schrieb:
> Leider wird immmer noch nicht gelesen. Und der Ausgang des Fifos ist
> noch auf 0(Dezimal)...
Woran erkennt man das?
Gast #3902984
Lesenswert?

In der Simulation sieht man, dass der Ausgang des FIFO das folgende 
Bitmuster hat ("000000000000000000")

Der Eingang des FIFO erhält wie gewünscht den Zählerstand des Zählers,
Jetzt wollte ich diesen Zählerstand zum Eingang des Lesemoduls verbinden 
was nicht funktioniert. Das Problem ist,dass d_out bzw fifo_out die 
ganze Zeit keine Daten erhalten.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren