Zeitverzug bei Mult.

Gast #3836419
Lesenswert?
• ▲
▼
Hallo, guten Tga.
Wie sieht bitte der Zeitverzug global aus beim Rechnen im FPGA.
Gibt es da einen Zeitverzug oder läuft da auch wieder alles Parallel?
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
use ieee.std_logic_arith.all;
5

6
entity mult is port(
7
  clock : in  std_logic;
8
  led_g : out STD_LOGIC_VECTOR(7 downto 0)
9
  ); 
10
end mult; 
11

12
architecture Behavioral of mult is
13
signal res : integer range 0 to 255:= 0;
14
signal op1 : integer range 0 to 16:= 3;
15
signal op2 : integer range 0 to 16:= 7;
16

17
signal ergebnis : STD_LOGIC_VECTOR(7 downto 0);
18
signal res1 : integer range 0 to 255:= 0;
19
signal op11 : integer range 0 to 16:= 5;
20
signal op22 : integer range 0 to 16:= 13;
21

22
begin
23

24
process(clock)
25
begin
26
  if rising_edge(clock) then
27
    res <= op1 * op2;
28
    led_g<= std_logic_vector(to_unsigned(res,8));
29
  end if;
30
end process;  
31

32
process(clock)
33
begin
34
  if rising_edge(clock) then
35
    res1 <= op11 * op22;
36
    ergebnis<= std_logic_vector(to_unsigned(res1,8));
37
  end if;
38
end process;  
39

40
end Behavioral;
Gast #3836446
Lesenswert?
• ▲
▼
peter schrieb:
> Gibt es da einen Zeitverzug oder läuft da auch wieder alles Parallel?

Den Zeitverzug hast du vorgegeben (VHDL Verhaltensbeschreibung)!

Synchrones Design -> (jeweils): 1. Takt Multiplikation, 2. Takt Ausgabe

Ob der FPGA das schafft, sagt die STA, sofern die nötigen Constraints 
angegeben sind.

grüße
#3836505
Lesenswert?
• ▲
▼
Wie lange das Multiplizieren dauert hängt am FPGA, also ob ein Hardware 
multiplizieren verwendet wird oder nicht, am Speedgrade, und an dir, 
also wie groß die Zahlen sind. Längere Zahlen mit mehr Stellen brauchen 
länger, zumindest theoretisch. Ob du da einen Unterschied merkst hängt 
davon ab wieviel Spielraum du noch hast bei deinem aktuellen Takt. Das 
sagt dir der Timing Report.
Moderator (Firma: Titel) Persönliche Seite #3836669
Lesenswert?
• ▲
▼
peter schrieb:
> use ieee.numeric_std.all;
> use ieee.std_logic_arith.all;
PETER, LASS DEN SCHEISS!

peter schrieb:
1
process(clock)
2
begin
3
  if rising_edge(clock) then
4
    res1 <= op11 * op22;
5
    ergebnis<= std_logic_vector(to_unsigned(res1,8));
6
  end if;
7
end process;
Diese Beschreibung is EXAKT GNEAU funktionsgleich mit dieser hier:
1
process(clock)
2
begin
3
  if rising_edge(clock) then
4
    ergebnis<= std_logic_vector(to_unsigned(res1,8));
5
    res1 <= op11 * op22;
6
  end if;
7
end process;
Denk da mal ausgiebig drüber nach. Kapitel in deinem VHDL Buch:
"Das scheinbar eigenartige Verhalten von Signalen in Prozessen".

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.