Forum: FPGA, VHDL & Co. VHDL algorithmische Ebene


von Thomas S. (tschenk)


Angehängte Dateien:

Lesenswert?

Hallo,

und zwar folgendes. Ich muss für die FH ein Projekt in DD 
(DigitalDesign) mit VHDL machen. Die Aufgabe ist eine Stoppuhr mit 
32,768kHz Systemtakt, 1/10 Sekunde auflösung und messen von 
Zwischenzeiten zu erstellen...
Dazu soll ich natürlich ein Modell auf algorithmischer Ebene und eins 
auf RT-Ebene erstellen...
Beide sollen auch mittels ModelSim und einer jeweiligen Testbensch 
verifiziert werden.

Wenn ich es richtig verstanden habe, ist die algorithmische Ebene mehr 
so eine Sache wie C-Programmierung (vom Stil her).

Ich hab mal angefangen so ein wenig was zu machen und würde gerne einmal 
wissen, ob ich denn überhaupt richtig lieg mit dieser Beschreibung auf 
algorithmischer Ebene?

Als Anhang habe ich mal noch ein Bild mit ein wenig Beschreibung 
angehängt, wie überhaupt die Funktion der Stoppuhr aussehen soll. Das 
ganze dann auf RT-Ebene zu erstellen halt ich für nicht das Problem, 
bzw. habe ich ja sogar schon durch teilweise Versuche gemacht.

Danke schon mal...
Grüße Thomas
1
library IEEE;
2
use ieee.std_logic_1164.all;
3
4
package package_Uhr is
5
  function BCD_Decode(value: integer range 9 downto 0) return std_logic_vector;
6
  procedure Count(min:integer; sec1: integer; sec0: integer; milsec: integer);
7
end package_Uhr;
8
9
PACKAGE BODY package_Uhr is
10
  
11
  function BCD_Decode(value: integer range 9 downto 0) return std_logic_vector is
12
  variable result   : std_logic_vector(6 downto 0);
13
  begin
14
    case value is
15
      when 0 => result:="1000000";        
16
      when 1 => result:="1111001";
17
      
18
      when 2 => result:="0100100";
19
      when 3 => result:="0110000";
20
      
21
      when 4 => result:="0011001";
22
      when 5 => result:="0010010";
23
      
24
      when 6 => result:="0000010";
25
      when 7 => result:="1111000";
26
      
27
      when 8 => result:="0000000";
28
      when 9 => result:="0010000";
29
     end case;
30
     return result;
31
   end BCD_Decode;
32
   
33
   procedure Count(min:integer; sec1: integer; sec0: integer; milsec: integer) is
34
   begin
35
     --Hier Code zum zählen von 1/10Sekunden, Sekunden und Minuten
36
  end Count;
37
end package_Uhr;
38
39
40
library IEEE;
41
use ieee.std_logic_1164.all;
42
use work.package_Uhr.all;
43
44
entity stoppuhr is
45
port (
46
  sw_start          : in std_logic;
47
  sw_stop           : in std_logic;
48
  bcd_digit_min     : out std_logic_vector(6 downto 0);
49
  bcd_digit_sec1    : out std_logic_vector(6 downto 0);
50
  bcd_digit_sec0    : out std_logic_vector(6 downto 0);
51
  bcd_digit_milsec  : out std_logic_vector(6 downto 0)
52
  );
53
end stoppuhr;
54
55
architecture uhr of stoppuhr is
56
begin process
57
  variable v_milsec    : integer range 9 downto 0 := 0;
58
  variable v_sec0       : integer range 9 downto 0 := 0;
59
  variable v_sec1       : integer range 9 downto 0 := 0;
60
  variable v_min        : integer range 9 downto 0 := 0;
61
  variable v_run      : integer :=0;
62
  variable v_count      : integer :=0;
63
  variable v_show    : integer := 1;
64
  begin
65
    bcd_digit_min <= BCD_Decode(v_min);
66
    bcd_digit_sec1 <= BCD_Decode(v_sec1);
67
    bcd_digit_sec0 <= BCD_Decode(v_sec0);
68
    bcd_digit_milsec <= BCD_Decode(v_milsec);
69
    wait until sw_start='1';
70
    v_run:=1;
71
    v_count:=1;
72
    while v_run=1 loop
73
      if v_show=1 then
74
        bcd_digit_min <= BCD_Decode(v_min);
75
        bcd_digit_sec1 <= BCD_Decode(v_sec1);
76
        bcd_digit_sec0 <= BCD_Decode(v_sec0);
77
        bcd_digit_milsec <= BCD_Decode(v_milsec);
78
      end if;
79
      if sw_stop='1' then
80
        v_count:=0;
81
      end if;
82
      if v_count=1 then
83
        Count(v_min, v_sec1, v_sec0, v_milsec);
84
      end if;
85
    end loop;  
86
  end process;  
87
end uhr;

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


Lesenswert?

1
  process begin
2
    :
3
    wait until sw_start='1';
4
    :
5
    while v_run=1 loop
6
      :
7
    end loop;
8
  end process;
Soll das mal auf Hardware abgebildet werden?
Falls ja: das würde mich wundern, wenn das ginge  :-/

Sieh dir doch mal an, wie andere so eine VHDL-Beschreibung aufbauen.
Und insbesondere, wie dort Schleifen und Takte verwendet werden:
Schleifen erzeugen parallele (mehrfache) Hardware.
Ein wait until wird zum Takt für ein Flipflop.

BTW: ich würde von der exzessiven Verwendung von Variablen dringlichst 
abraten. Suche mal hier im Forum, das war schon mehrmals das Thema.

von Thomas S. (tschenk)


Angehängte Dateien:

Lesenswert?

Hallo,

na ich weiß was du meinst.
Ich bin mir ehrlich gesagt ein wenig unsicher, aber in der 
Aufgabenstellung steht halt, das ich 2 VHDL-Modelle entwickeln soll. 
Eins eben auf dieser algorithmischen Ebene und eins auf RT-Ebene.
Was ich oben geschrieben hab, wird nicht wirklich auf ner Hardware 
laufen, da stimm ich zu. Keinerlei beachtung von Takt und ähnlichem. 
Selbst die eigentliche Struktur soll ja auf dieser Algorithmischen Ebene 
nicht beachtet werden. Dieses sollte eigentlich mehr ein Modell für die 
Funktion sein.

Auf RT-Ebene hab ich das ganz natürlich ein wenig unterteil nooch alles, 
in kleinere Komponenten (Zähler, BCD-Dekoder, Impulsdetetor usw.) und 
diese ganzen Komponenten über eine Strukturbeschreibung verknüpft. Die 
einzelnen Subsysteme sind natürlich auf RT-Ebene in einer 
Verhaltensbeschreibung mit Taktbeachtung und ähnlichem.
Als Anhang hab ich auch mal nen Screenshot von einem Submodule in der 
Verhaltensbeschreibung auf RT-Ebene noch dran, aber wie gesagt, die 
RT-Ebene ist nicht das eigentliche Problem, mir gehts eben mehr um diese 
algorithmische Ebene und wie des aussehen könnte.

Ich hoff ich hatte das so alles richtig verstanden bei den zig hunderten 
von Skripten die ich bereits teilweise durchforstet hab. Wenn ich 
irgendwie total daneben liegen sollte, wärs super, wenn mich jemand 
darauf hinweisen könnte...

Grüße Thomas

von Fpgakuechle K. (Gast)


Lesenswert?

> ... aber wie gesagt, die
> RT-Ebene ist nicht das eigentliche Problem, mir gehts eben mehr um diese
> algorithmische Ebene und wie des aussehen könnte.
>
> Ich hoff ich hatte das so alles richtig verstanden bei den zig hunderten
> von Skripten die ich bereits teilweise durchforstet hab. Wenn ich
> irgendwie total daneben liegen sollte, wärs super, wenn mich jemand
> darauf hinweisen könnte...
>
> Grüße Thomas

Hallo Thomas,

meines Wissens ist algorithmische Eben nirgens standardisiert, da wird 
dein Prof allein wissen, wass er meint. In der Regel meint A-Ebene eins 
drüber über jede Implementierung. Also ohne bit-signale oder std_logic. 
Auch die zahlen representation (BCD) sollte hier kein Thema sein. 
Vielleicht ist auch der Taktteiler unnötig, einfach ein sekundentakt und 
verschiedenen Zwischenspeicher plus "Knopfnachbildung" für 
Start|Stop|Lap etc..

Vielleicht hat der Fachschaftsrat was vom letzte Jahr als Anregung. oder 
nutzt die Sprechstunde des Assistenten.

MfG

von Markus S. (markus_s28)


Lesenswert?

Das selbe Problem wie das des Threaderstellers quält mich auch, da die 
Professoren offenbar Ihren Themen nur bedingt variieren. Hat jemand neue 
Erkenntnisse dazu? Danke im Voraus.

von Graka (Gast)


Lesenswert?

Die AE ist all das, was man logisch beschreiben kann und sich auf 
Proceduren bezieht und keine Rücksicht auf Hardware nimmt.

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.