Datum: 08.05.2008 12:57
Datum: 08.05.2008 13:03
Ist sehr einfach. Du nimmst zunächst einen Zähler um Dir ein Clockenable zu generieren. Der Zähler stellt eine Art "Teiler" für Dein Taktsignal von 50MHz dar. In dem LED-Prozess schreibst Du dann:
led_lau_reg: process(reset, clk) begin if reset = '1' then --init elsif(rising_edge(clk))then if(clockenable = '1')then --tue was... end if; end if; end process led_lauf_reg; |
Das Lauflicht an sich kannst Du mit einer Statemachine oder einen einfachen schieberegister realisieren. Schieberegister mit "001" initialisieren, und bei jedem clockenable um eins nach links schieben. Wenn Du "100" hast, einfach wieder auf "001" setzen... Hoffe es hilft weiter...
Datum: 08.05.2008 13:10
super danke ich werde versuchen und hoffe dass ich es ihn bekomme
Datum: 08.05.2008 13:18
wie gehe ich vor? Was muss hier eintragen?? hepl please habe null ahnung:(( ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity lauf_licht is end lauf_licht; architecture Behavioral of lauf_licht is begin end Behavioral;
Datum: 08.05.2008 13:19
oder was muss hier eintragen??
ENTITY laufi IS
END laufi;
ARCHITECTURE behavior OF laufi IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT lauf_licht
PORT(
);
END COMPONENT;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: lauf_licht PORT MAP (
);
-- No clocks detected in port list. Replace <clock> below with
-- appropriate port name
constant <clock>_period := 1ns;
<clock>_process :process
begin
<clock> <= '0';
wait for <clock>_period/2;
<clock> <= '1';
wait for <clock>_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100ms.
wait for 100ms;
wait for <clock>_period*10;
-- insert stimulus here
wait;
end process;
END;
Datum: 08.05.2008 15:48
es wäre super nett wenn mir jemand hilft ich komme einfach nicht vorwärts und versuch schon seid heute morgen Danke
Datum: 08.05.2008 16:11
Als kurzen Tipp (habe gerade nicht viel Zeit): mach erstmal einen einzelnen Blinker... Das muss die entity so aussehen:
entity blinker is port( Reset: IN std_logic; Clk: IN std_logic; Led: OUT std_logic ); end entity; |
Bei einem Lauflicht musste für die Entity aus dem Led ein std_logic_vector(2 downto 0) machen...
Datum: 09.05.2008 11:52
einen einzelnen Blinker und ich krieg das nicht hin, was ist hier Falsch
entity Lauflicht is
Port ( clk : in STD_LOGIC;
reset : in STD_LOGIC;
LED_out : out std_logic_vector(2 downto 0));
end Lauflicht;
architecture Behavioral of Lauflicht is
signal led: std_logic_vector(2 downto 0);
begin
Lauflicht: process(reset, clk)
begin
if reset = '1' then
--init
elsif(rising_edge(clk))then
if(clk = '1')then
--tue was...
end if;
end if;
end process;
end Behavioral;
Datum: 09.05.2008 12:53
Ich sehe nichts Falsches. Ich sehe aber auch nichts richtiges. Dort wo "--init" oder "-- tue was" steht, muss Code hin, der etwas macht. Versuche mal, Beispiele zu finden, zb eine Counterimplementierung, eine Flip-Flop Implementierung, ... (hauptsache kleine entities) und mit dem Simulator und Herumspielen in die Sprache rein zu finden. Von null beginnen kann gerade bei VHDL sehr frustrierend sein.
Datum: 09.05.2008 14:09
also ich seh da schon einiges falsches. zumindest das:
elsif(rising_edge(clk))then
if(clk = '1')then
ist bloedsinn, das zweite if naemlich voellig unnoetig und
wahrscheinlich unsynthetisierbar
Datum: 09.05.2008 14:12
ich bin immer noch am rum spielen geht nicht, wie krieg dass dann nun hin damit es läuft. danke
Datum: 09.05.2008 19:12
Du solltest schon genauer sagen was du probiert hast und was nicht geht. Ansonsten solltest du mal nachschauen wie man einem std_logic_vector Werte zuweist und wieder ausliest.
Datum: 10.05.2008 09:52
Gehe Schritt für Schritt vor. Baue erstmal einen Zähler mit dem Du ein passendes clk_enable generierst. Die Breite des Zählers hängt von Deiner Taktfrequenz und der Frequenz des Lauflichtes ab. Als Beispiel:
signal clk_div: unsigned(15 downto 0); signal clk_en: std_logic; clk_div_reg: process(Reset, Clk) begin if(Reset = '1')then clk_div <= (others => '0'); clk_en <= '0'; elsif(rising_edge(Clk))then clk_div <= clk_div + 1; if(clk_div = 2**16-1)then clk_en <= '1'; else clk_en <= '0'; end if; end if; |
Das benutzt Du nun in Deinem Lauflichtprozess als clockenable.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [vhdl]VHDL-Code[/vhdl]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel