Forum: FPGA, VHDL & Co. Ablauf von einer Programmänderung mit Quartus2


von Peter B. (funkheld)


Lesenswert?

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;
------------------------------------

von Lisa (Gast)


Lesenswert?

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.

von Googler (Gast)


Lesenswert?

Peter Bierbach schrieb:
> count <= count + "0000000000000000000000001";
>      if (count = "1111111111111111111111111") then

wenn du + 0000000000000000000011111
rechnest kannst du nicht auf 1111111111111111111111111 kommen

ändere lieber die Abfrage

von Lisa (Gast)


Lesenswert?

Googler schrieb:
> wenn du + 0000000000000000000011111
> rechnest kannst du nicht auf 1111111111111111111111111 kommen

Wieso nicht?

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

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

von Josef G. (bome) Benutzerseite


Lesenswert?

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?

von Googler (Gast)


Lesenswert?

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.

von Peter B. (funkheld)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.