Logic Elements vs Memory Bits

OP #2936840
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
Gast #2936869
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren