Hallo, guten Tag. Ich habe jetzt hier eine Demo wo die LED0 und LED7 blinkt. Dieses liegt als Projekt vor und läuft auch. Nun habe ich im Quartustextfenster dieses geändert und neu abgespeichert: count <= count + "0000000000000000000000001"; zu count <= count + "0000000000000000000011111"; Anschließend compiliert und die neue SOF übertragen, aber die Blinkfrequenz hat sich nicht geändert. Es wurde nicht übernommen? Muß man ein neues Projekt erzeugen? Danke. Gruss --------------------------------------------------- library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity blink is port ( clk: in STD_LOGIC; led: out STD_LOGIC_VECTOR (1 downto 0) ); end blink; architecture blink_arch of blink is signal state : STD_LOGIC_VECTOR(1 downto 0); signal terminal_count : STD_LOGIC; signal count : STD_LOGIC_VECTOR(24 downto 0); begin led <= state; -- led kann man nicht lesen, also verwenden wir intern ein anderes signal process (clk) -- Ein Puls begin if rising_edge(clk) then count <= count + "0000000000000000000000001"; if (count = "1111111111111111111111111") then terminal_count <= '1'; else terminal_count <= '0'; end if; end if; end process; process (clk) begin if rising_edge(clk) then if terminal_count = '1' then case state is when "01" => state <= "10"; when "10" => state <= "01"; when others => state <= "01"; end case; end if; end if; end process; end blink_arch; ------------------------------------
Hallo Peter Dein count signal wird nie auf 0 gesetzt (z.B. beim Reset am Start) und ist somit undefiniert. Daher wäre es Zufall, wenn count genau "1111111111111111111111111" erreichen würde.
Peter Bierbach schrieb: > count <= count + "0000000000000000000000001"; > if (count = "1111111111111111111111111") then wenn du + 0000000000000000000011111 rechnest kannst du nicht auf 1111111111111111111111111 kommen ändere lieber die Abfrage
Googler schrieb: > wenn du + 0000000000000000000011111 > rechnest kannst du nicht auf 1111111111111111111111111 kommen Wieso nicht?
Peter Bierbach schrieb: > use IEEE.std_logic_unsigned.all; Verwende lieber ieee.numeric_std.all Siehe: Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete" Dann kannst Du die Addition auch lesbarer gestalten:
1 | library ieee; |
2 | use ieee.std_logic_1164.all; |
3 | |
4 | entity blink_testbench is |
5 | end entity blink_testbench; |
6 | |
7 | |
8 | architecture testbench of blink_testbench is |
9 | |
10 | component blink is |
11 | port ( |
12 | clk : in std_logic; |
13 | led : out std_logic_vector (1 downto 0) |
14 | );
|
15 | end component blink; |
16 | |
17 | |
18 | constant tb_clk_period : time := (1 sec) / 50_000_000; |
19 | |
20 | signal tb_clk : std_logic := '0'; |
21 | signal tb_led : std_logic_vector (1 downto 0); |
22 | |
23 | begin
|
24 | |
25 | tb_clk <= not tb_clk after tb_clk_period / 2; |
26 | |
27 | dut : blink |
28 | port map ( |
29 | clk => tb_clk, -- : in std_logic; |
30 | led => tb_led -- : out std_logic_vector (1 downto 0) |
31 | );
|
32 | |
33 | end architecture testbench; |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | library ieee; |
40 | use ieee.std_logic_1164.all; |
41 | use ieee.numeric_std.all; |
42 | |
43 | entity blink is |
44 | port ( |
45 | clk : in std_logic; |
46 | led : out std_logic_vector (1 downto 0) |
47 | );
|
48 | end entity blink; |
49 | |
50 | architecture blink_arch of blink is |
51 | |
52 | signal state : std_logic_vector(1 downto 0); |
53 | signal terminal_count : std_logic; |
54 | signal count : unsigned(24 downto 0) := (others => '0'); -- mit 0 initialisieren |
55 | |
56 | begin
|
57 | |
58 | led <= state; -- led kann man nicht lesen, also verwenden wir intern ein anderes signal |
59 | |
60 | process -- Ein Puls |
61 | begin
|
62 | wait until rising_edge(clk); |
63 | count <= count + 1; |
64 | if count > 30000000 then |
65 | terminal_count <= '1'; |
66 | count <= (others => '0'); |
67 | else
|
68 | terminal_count <= '0'; |
69 | end if; |
70 | end process; |
71 | |
72 | process
|
73 | begin
|
74 | wait until rising_edge(clk); |
75 | |
76 | if terminal_count = '1' then |
77 | case state is |
78 | when "01" => |
79 | state <= "10"; |
80 | when "10" => |
81 | state <= "01"; |
82 | when others => |
83 | state <= "01"; |
84 | end case; |
85 | end if; |
86 | |
87 | end process; |
88 | |
89 | end architecture blink_arch; |
Ich hab gleich mal eine Stimulitestbench dazugebaut, damit kann man vorher testen, ob der Algorithmus passt. Duke
Peter Bierbach schrieb: > signal count : STD_LOGIC_VECTOR(24 downto 0); > count <= count + "0000000000000000000000001"; Zwischenfrage: Seit wann kann man mit std_logic_vector ohne vorherige Umwandlung nach unsigned Arithmetik betreiben?
Lisa schrieb: > Googler schrieb: >> wenn du + 0000000000000000000011111 >> rechnest kannst du nicht auf 1111111111111111111111111 kommen > > Wieso nicht? OK. war Unsinn. Die 1 am Ende kumuliert natürlich genauso auf 1111111111111111111111111 Schäm.
Hallo, vielen Dank für die Hilfe. ----------------------- Ich hab gleich mal eine Stimulitestbench dazugebaut, damit kann man vorher testen, ob der Algorithmus passt. ------------------------ Ist diese Simulation auch ein Programm für das compilieren zu einer SOF oder nur für den Simulator? Wie startet man bitte das Simulationsprogramm in Quartus? Gruss
Josef G. schrieb: > Zwischenfrage: Seit wann kann man mit std_logic_vector ohne > vorherige Umwandlung nach unsigned Arithmetik betreiben? Das geht, wenn man die alten Synopsys Libs verwendet: Peter Bierbach schrieb: > use IEEE.std_logic_unsigned.all; Aber das ist ein Beschreibungsstil des letzten Jahrausends!! Heute verwendet man die herstellerunabhängige numeric_std: http://www.lothar-miller.de/s9y/categories/16-Numeric_Std Peter Bierbach schrieb: > Ist diese Simulation auch ein Programm Nein. Das ist KEIN Programm, weil VHDL nämlich eine "hardware DESCRIPTION language" und keine "hardware PROGRAMMING language" ist. Und weil VHDL eben nicht VHPL heißt. Du machst dich sachte lächerlich, wenn du beharrlich bei VHDL Code von einem Programm sprichst.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.