Forum: FPGA, VHDL & Co. Logic Elements vs Memory Bits


von GS (chromosoma)


Lesenswert?

Hallo.
Ich lerne weiter die FPGA-"Programmierung".

Hier ist mein Werk:
1
ENTITY U2 IS
2
PORT(
3
CLK : IN STD_LOGIC;
4
Din :IN  STD_LOGIC_VECTOR(7 downto 0);
5
ADDR: IN INTEGER RANGE 0 to 511;
6
Dout : OUT STD_LOGIC_VECTOR(7 downto 0)
7
);
8
END U2;
9
10
ARCHITECTURE RD OF U2 IS
11
12
 
13
BEGIN
14
PROCESS(CLK)
15
TYPE PIC IS ARRAY (0 to 511) OF STD_LOGIC_VECTOR (7 downto 0);
16
VARIABLE DATA:PIC;
17
VARIABLE i: INTEGER RANGE 0 to 511;
18
BEGIN
19
20
IF (CLK'EVENT AND CLK='1') THEN
21
DATA(i) := Din;
22
i:= i+1;
23
IF (i>511) THEN
24
i:=0;
25
END IF;
26
Dout <= DATA(ADDR);
27
28
END IF;
29
30
END PROCESS;
31
END RD;

Wie man schon erahnen kann, ist es so ein 512x8 Bit RAM.
Quartus erkennt das auch, und verwendet für die oben beschriebene 
Programm  interne Memory Bits.


SO.

Aber  schreibe ich jetzt es einwenig anders, und zwar:
1
IF (CLK'EVENT AND CLK='1') THEN
2
DATA(i) := Din;
3
i:= i+1;
4
IF (i>511) THEN
5
i:=0;
6
END IF;
7
END IF;
8
Dout <= DATA(ADDR);
Dann verwenden Quartus die LE, und zwar  über 7000 stück, und keine 
Momery Bits.

Ich neheme an, die erste Methode ist schlauer, da man damit  wichtige 
Resourcen sparen kann.

Meine Frage ist aber, wieso macht es so einen Unterschiend, ob
Dout <= DATA(ADDR);
in IF statement oder außerhalb  liegt?
Kann mir das bitte jemand erklären, damit ich in der Zukunft sowas 
berücksichtigen kann.


Danke

von Gustl B. (-gb-)


Lesenswert?

Im ersteren Fall ist die Leseadresse getaktet, im zweiteren Fall nicht. 
Das ist der Unterschied und daher bekommst du einmal ein BlockRAM und 
einmal distributed RAM.

von Hmm (Gast)


Lesenswert?

Die schon fest im FPGA vorhandenen Strukturen (ob Speicher oder 
Multiplizierer oder ws auch sonst) haben eine bestimmte Struktur.
Diese Bestimmtheit der Struktur, die Tatsache das es sich um eine, 
besondere, im Unterschied zu allen anderen möglichen handelt hat auch 
eine Konsequenz.

Deine eigene Beschreibung dieser Struktur muss mit der Beschreibung der 
vorgegebenen Struktur übereinstimmen. Sonst wird sie nicht instanziiert.
Weichst Du in Deiner Beschreibung von der Vorgabe ab, wird etwas ganz 
anderes instanziiert, wie Du auch erlebst.

Hier ist der Unterschied, das der Datenausgang einmal vom Takt abhängig 
ist und in der zweiten Variante nicht. Im zweiten Fall stimmt also Deine 
Beschreibung nicht mit der schon fest im FPGA vorhanden Struktur 
überein. Deswegen wird sie nicht instanziiert, sondern die Software 
setzt den ganzen Speicher nochmal selbst aus einzelnen Logikzellen und 
Flip-Flops zusammen.

Du wirst im Kontextmenue einen Punkt "Templates", also "Muster" finden. 
Hier findest Du neben anderem auch genau den Text den Du schreiben musst 
um gewisse Strukturen zu erzeugen.

von GS (chromosoma)


Lesenswert?

Aha. Danke.
 D.H. Ich habe zuerst direkt die BRAM struktur getroffen:)

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


Lesenswert?

Nur noch als Anregung:
Anton R. schrieb:
> Ich lerne weiter die FPGA-"Programmierung".
> Hier ist mein Werk:
>  ENTITY U2 IS
Eine VHDL Beschreibung fängt schon vor der Entity an.
Und es ist i.A. wichtig, was davor kommt...

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.