Forum: FPGA, VHDL & Co. Algorithmus in vhdl. Verbesserungen und Frage


von kleiens Licht (Gast)


Lesenswert?

hallo,

Mir ist bei meinen vhdl Studien etwas langweilig geworden und ich möchte 
mich etwas damit auseinandersetzen, wie ich nun konkrete Berechnungen 
bzw Algorithmen angehe.
Ich habe dafür einfach mal eine entity für die Berechnung des ggt 
gemacht. Simuliert auch.
Nur Frage ich mich - (weil das Stichwort latency ja für mich seit Beginn 
eine Hirnzerrung nach sich zieht) - ob ich dort etwas grundsätzlich 
anders angehen könnte. Oder besser sollte.

ggt als eine Prozedur implementieren. Wie genau interagiert der Rest der 
Schaltung überhaupt mit einer Prozedur. Wenn die Berechnung gestartet 
wird, muss ja ein Großteil der Schaltung warten bis busy weggeht. Ist 
das in einer Prozedur zu erledigen?


Außerdem Frage ich mich langsam nach konkreten Anwendungen. Sprich ich 
würde mir mal eine Hardware kaufen und damit etwas realisieren. Habe nur 
noch keinerlei Inspiration. Und auch schwierigkeiten mir vorzustellen, 
wie ich mir Algorithmen und 'Berechnungen' in einer Hardware vorstellen 
kann und wie diese interagieren.

Den ganz brutalen Performance Zuwachs kann ich mir auch nicht vorstellen 
- der tritt auch nur zutage, wenn etwas "parallelisiert" werden kann. ok 
aber gebt ihr mir da mal ein Beispiel? Wenn ich eine 3d-2d Projektion 
hätte, die ich in einen Bildspeicher schreiben möchte und zur Anzeige 
bringe. Wo ist das parallelisierbar.
Geht schon EINIGES über die konkrete Frage zu meiner kleinen 
Beschreibung hinaus, aber ich sucher inzwischen fast krampfhaft nach 
einem motivierenden, doch für Anfänger beherrschbaren und zerlegbaren 
Aufgabe für die es sich lohnt, Hardware zu kaufen. (die auch nciht nach 
2 Wochen im Müll landet)


Wer kann möge bitte Rat geben. Im Bezug auf beide Fragen.


hier der code der mich so abschweifen ließ:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity calc is
6
    Port ( clk : in  STD_LOGIC;
7
           val1 : in  STD_LOGIC_VECTOR (7 downto 0);
8
           val2 : in  STD_LOGIC_VECTOR (7 downto 0);
9
        go   : in  STD_LOGIC;
10
        busy : out STD_LOGIC;
11
           ggt : out  STD_LOGIC_VECTOR (7 downto 0));
12
end calc;
13
14
architecture Behavioral of calc is
15
type states is (idle, calc);
16
signal state : states := idle;
17
18
signal a : unsigned (7 downto 0);
19
signal b : unsigned (7 downto 0);
20
begin
21
22
  process begin
23
  wait until rising_edge(clk);
24
  
25
    case state is
26
      when idle =>
27
              a <= unsigned(val1); --speicher ich die IMMER in ff wenn idle ist, oder reicht ein sichern wenn go gefunden wird?
28
              b <= unsigned(val2);
29
              if( go = '1' ) then
30
                --a <= unsigned(val1); 
31
                --b <= unsigned(val2);
32
                state <= calc;
33
                ggt <= (others=>'0');--während berechnung läuft, alten Wert löschen Null anzeigen
34
                busy <= '1';            
35
              else
36
                busy <= '0';
37
              end if;      
38
      when calc =>
39
              if( a /= 0) then 
40
                if( to_integer(b) = 0 ) then --fertig, a ist der ggt
41
                  state <= idle;
42
                  busy <= '0';
43
                  ggt <= std_logic_vector(a);
44
                else
45
                  if ( a > b ) then  
46
                    a <= a - b;
47
                  else
48
                    b <= b - a;
49
                  end if;
50
                end if;
51
              else          --wenn a = 0 ist, kann man direkt wieder raus und b als ergebnis nehmen oder kann 
52
                state <= idle;  --das auch IN idle geprüft werden und gar nciht erst in calc gewechselt werden?
53
                busy <= '0';
54
                ggt <= std_logic_vector(b);
55
              end if;
56
      
57
    end case;
58
59
  end process;
60
61
end Behavioral;

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.