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
libraryIEEE;
2
useIEEE.STD_LOGIC_1164.ALL;
3
useIEEE.NUMERIC_STD.ALL
4
5
entitywrite_mis
6
7
port(
8
clk:instd_logic;
9
rst:instd_logic;
10
enable_w:instd_logic;
11
d_out:outstd_logic_vector(17downto0);
12
w_out:outstd_logic;
13
full:instd_logic
14
);
15
16
endwrite_m;
17
18
architectureBehavioralofwrite_mis
19
20
signald_out_1:std_logic_vector(17downto0);
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')andclk'eventthen
30
if(enable_w='1'andfull='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
endif;
37
endif;
38
endprocess;
39
40
d_out<=d_out_1;
41
endBehavioral;
**************Code Lesemodul****************
1
libraryIEEE;
2
useIEEE.STD_LOGIC_1164.ALL;
3
useIEEE.NUMERIC_STD.ALL
4
5
entityread_mis
6
port(
7
clk:instd_logic;
8
rst:instd_logic;
9
d_in_r:instd_logic_vector(17downto0);
10
empty:instd_logic;
11
enable_r:instd_logic;
12
d_out:outstd_logic_vector(17downto0);
13
r_out:outstd_logic
14
);
15
16
17
endread_m;
18
19
architectureBehavioralofread_mis
20
signald_out_1:std_logic_vector(17downto0);
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')andclk'eventthen
29
if(enable_r='1'andempty='0')then
30
r_out<='1';
31
d_out_1<=std_logic_vector(unsigned(d_in_r));
32
endif;
33
endif;
34
endif;
35
endprocess;
36
37
d_out<=d_out_1;
38
39
endBehavioral;
****Speicher(FIFO mit IP Core generiert)************
***********TOPMODUL***************************
1
libraryIEEE;
2
useIEEE.STD_LOGIC_1164.ALL;
3
useIEEE.NUMERIC_STD.ALL
4
5
entityTOPis
6
port(
7
clk:instd_logic;
8
rst:instd_logic;
9
enable_w:instd_logic;
10
enable_r:instd_logic;
11
d_out:outstd_logic_vector(17downto0)
12
);
13
endTOP;
14
15
architectureBehavioralofTOPis
16
17
18
19
componentwrite_m
20
21
port(
22
clk:instd_logic;
23
rst:instd_logic;
24
enable_w:instd_logic;
25
d_out:outstd_logic_vector(17downto0);
26
w_out:outstd_logic;
27
full:instd_logic
28
ENDCOMPONENT;
29
30
31
32
33
COMPONENTfifo_neu
34
PORT(
35
clk:INSTD_LOGIC;
36
rst:INSTD_LOGIC;
37
din:INSTD_LOGIC_VECTOR(17DOWNTO0);
38
wr_en:INSTD_LOGIC;
39
rd_en:INSTD_LOGIC;
40
dout:OUTSTD_LOGIC_VECTOR(17DOWNTO0);
41
full:OUTSTD_LOGIC;
42
empty:OUTSTD_LOGIC
43
);
44
ENDCOMPONENT;
45
46
47
componentread_m
48
port(
49
clk:instd_logic;
50
rst:instd_logic;
51
d_in_r:instd_logic_vector(17downto0);
52
empty:instd_logic;
53
enable_r:instd_logic;
54
d_out:outstd_logic_vector(17downto0);
55
r_out:outstd_logic
56
);
57
endcomponent;
58
59
60
61
62
63
64
65
signalfifo_out:std_logic_vector(17downto0);
66
signalfifo_in:std_logic_vector(17downto0);
67
signalfifo_wr:std_logic;
68
signalfifo_full:std_logic;
69
signalfifo_empty:std_logic;
70
signalfifo_rd:std_logic;
71
72
begin
73
74
75
your_instance_name:fifo_neu
76
PORTMAP(
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
PortMap(
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
portmap(
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
endBehavioral;
***********Testbench von TOP ************
1
LIBRARYieee;
2
USEieee.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
ENTITYTOP_2tbIS
9
ENDTOP_2tb;
10
11
ARCHITECTUREbehaviorOFTOP_2tbIS
12
13
-- Component Declaration for the Unit Under Test (UUT)
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-Enablexyz schrieb:> Leider wird immmer noch nicht gelesen. Und der Ausgang des Fifos ist> noch auf 0(Dezimal)...
Woran erkennt man das?
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.
Ja hatte aus versehen die falsche Datei hochgeladen.
Der Teil von "write zu FIFO" klappt ohne Probleme aber der zweite Teil
von "FIFO zu read" klappt irgendwie nicht...