plastefuchs
Registrierter Benutzer
Beiträge: 1
|
Erstellt: 28.10.06, 16:11 Betreff: 60min Stoppuhr
drucken
Thema drucken weiterempfehlen
|
|
|
Hi
Für einen Beleg soll ich eine Stoppuhr (60min, mit Minuten- und Sekundenanzeige im BCD-Format und einer Auflösung von 0,01s als Testbench entwerfen. Das dumme ist, dass ich im letzten Semester über 5Wochen gefehlt hab und so gut wie keine Ahnung von VHDL (bzw. den grundlegenden Sachen) hab. Ausserdem muss das schon Ende nächster Woche fertig sein. Für echte Cracks wird das sicher kein großes Problem sein, aber ich sitzt immer vor dem Simili, als hätt ich noch nie was davon gehört.
Zwar hab ich schon einen Quelltext (mit Stimulus und Testbench etc...) aber absolut keine Ahnung, was das alles macht und vor allem, was ich damit machen kann.
countgen.vhd :
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY countgen IS PORT (clk,res, en :IN STD_LOGIC; clk_int :OUT STD_LOGIC );
END countgen;
ARCHITECTURE behav OF countgen IS SIGNAL q_s,en_s:STD_LOGIC:='0';
BEGIN
CE:PROCESS(clk) BEGIN IF (RISING_EDGE(clk) OR FALLING_EDGE(clk)) THEN en_s<='1'; ELSE en_s<='0'; END IF; END PROCESS CE;
p1: PROCESS(q_s)
BEGIN
IF(q_s = '0') THEN q_s <= '1' AFTER 5 ms; ELSE q_s <= '0' AFTER 5 ms; END IF;
IF (en='1'AND res='0' AND en_s='1') THEN clk_int<=q_s; ELSE clk_int<='0'; END IF;
END PROCESS p1;
END behav;
testbench.vhd : LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY testbench IS END;
ARCHITECTURE behav OF testbench IS
SIGNAL start_stop_top,res_top,clk_top,clk_int_top,rco1_top,rco2_top,rco3_top,rco4_top,rco5_top: STD_LOGIC; SIGNAL hundertstel,zehntel,einersec,zehnersec,einermin,zehnermin: STD_LOGIC_VECTOR(3 DOWNTO 0);
COMPONENT Stimulus PORT (start_stop,res,clk: OUT STD_LOGIC); END COMPONENT;
COMPONENT countgen PORT(clk,en,res: IN STD_LOGIC; clk_int: OUT STD_LOGIC ); END COMPONENT;
COMPONENT zaehler5er PORT ( clk, res, en :IN STD_LOGIC; q :OUT STD_LOGIC_VECTOR (3 DOWNTO 0); rco :OUT STD_LOGIC); END COMPONENT; COMPONENT zaehler9er PORT ( clk, res, en :IN STD_LOGIC; q :OUT STD_LOGIC_VECTOR (3 DOWNTO 0); rco :OUT STD_LOGIC); END COMPONENT; BEGIN
b1: stimulus PORT MAP (start_stop=>start_stop_top,res=>res_top,clk=>clk_top); b2: countgen PORT MAP (en=>start_stop_top,clk=>clk_top,res=>res_top,clk_int=>clk_int_top); b3: zaehler9er PORT MAP (en=>start_stop_top, clk=>clk_int_top,res=>res_top,q=>hundertstel,rco=>rco1_top); b4: zaehler9er PORT MAP (en=>rco1_Top, clk=>clk_int_top,res=>res_top,q=>zehntel,rco=>rco2_top); b5: zaehler9er PORT MAP (en=>rco2_Top, clk=>clk_int_top,res=>res_top,q=>einersec,rco=>rco3_top); b6: zaehler5er PORT MAP (en=>rco3_Top, clk=>clk_int_top,res=>res_top,q=>zehnersec,rco=>rco4_top); b7: zaehler9er PORT MAP (en=>rco4_Top, clk=>clk_int_top,res=>res_top,q=>einermin,rco=>rco5_top); b8: zaehler5er PORT MAP (en=>rco5_Top, clk=>clk_int_top,res=>res_top,q=>zehnermin);
end behav;
stimulus.vhd :
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY Stimulus IS PORT (clk,res,start_stop: OUT STD_LOGIC); END Stimulus;
ARCHITECTURE behav OF Stimulus IS SIGNAL clk_s: STD_LOGIC:='0';
BEGIN clk_s<= NOT clk_s AFTER 0.5 sec; --Taktsignal Periode 1 sec res<='0','1' AFTER 1.5 sec, '0' AFTER 1.9 sec;--Testwechsel zum Resettest start_stop<='1','0' AFTER 1.99 sec, '1' AFTER 2.5 sec;
clk<=clk_s;
END behav;
zaehler5er.vhd : LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY zaehler5er IS
PORT ( clk, res, en :IN STD_LOGIC; q :OUT STD_LOGIC_VECTOR (3 DOWNTO 0); rco :OUT STD_LOGIC);
END zaehler5er;
ARCHITECTURE behav OF zaehler5er IS SIGNAL q_s: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; BEGIN p1: PROCESS (clk,res) BEGIN IF(res='1') THEN q_s<="0000"; ELSIF RISING_EDGE(clk) THEN IF (en='1') THEN q_s<=q_s + "0001"; END IF; If (en='1' AND q_s="0101") THEN q_s<="0000"; END IF; END IF; END PROCESS p1; q <= q_s; rco <= en AND NOT q_s(3) AND q_s(2) AND NOT q_s(1) AND q_s(0); END behav;
zaehler9er.vhd :
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY zaehler9er IS
PORT ( clk, res, en :IN STD_LOGIC; q :OUT STD_LOGIC_VECTOR (3 DOWNTO 0); rco :OUT STD_LOGIC);
END zaehler9er;
ARCHITECTURE behav OF zaehler9er IS SIGNAL q_s: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; BEGIN p1: PROCESS (clk,res) BEGIN IF(res='1') THEN q_s<="0000"; ELSIF RISING_EDGE(clk) THEN IF (en='1') THEN q_s<=q_s + "0001"; END IF; If (en='1' AND q_s="1001") THEN q_s<="0000"; END IF; END IF; END PROCESS p1; q <= q_s; rco <= en AND q_s(3) AND NOT q_s(2) AND NOT q_s(1) AND q_s(0); END behav;
ich werd mich erstma hier im Forum n bissel rumtreiben wem dazu schon was einfallen sollte, möge mich bitte daran teilhaben lassen
[editiert: 28.10.06, 16:13 von plastefuchs]
|
|