Forum: FPGA, VHDL & Co. Bildspeicher mit Reset lässt sich nicht synthetisieren


von Hans (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin ein VHDL-Anfänger und arbeite mich momentan durch das Buch 
VHDL-Synthese von Jürgen Reichhardt.

In der Übungsaufgabe 5.9 soll man einen taktsynchronen Bildspeicher 
synthetisieren, der 128 x 128 Pixel im Schwarz-Weiß-Format aufnehmen 
kann. Die entity ist dabei vorgegeben.

Mein Problem besteht nun darin, dass das Synthese Tool (ISE 12.2 von 
Xilinx) ewig für die Synthese benötigt, wenn ich versuche ein 
asynchrones Reset zu implementieren. Ohne Reset funktioniert die 
Synthese einwandfrei. Das Tool generiert mir dann einen entsprechenden 
Rambaustein.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_Arith.ALL;
4
5
--taktsynchroner Bildspeicher 128x128 Pixel in Schwarz='1' und Weiß= '0'
6
7
entity Aufgabe59 is
8
    Port ( Clock : in  STD_LOGIC;
9
           RESET : in  STD_LOGIC;
10
           Z_IND : in  STD_LOGIC_VECTOR (6 downto 0);
11
           SP_IND : in  STD_LOGIC_VECTOR (6 downto 0);
12
           RNW : in  STD_LOGIC;
13
           D : inout  STD_LOGIC);
14
end Aufgabe59;
15
16
architecture Behavioral of Aufgabe59 is
17
Signal MEM: STD_LOGIC_VECTOR(0 to 16383);
18
begin
19
20
Display_Mem: process(Clock,RESET)
21
Variable Index: Natural range 0 to 16383:= 0;
22
Variable Index_Vect: STD_LOGIC_VECTOR(13 downto 0):=(others => '0');
23
begin
24
if RESET = '1' then
25
  MEM <= (others => '0');
26
elsif Rising_Edge(Clock) then
27
  Index_Vect := Z_IND & SP_IND;
28
  Index := CONV_INTEGER(unsigned(Index_Vect));
29
  if RNW = '0' then
30
    MEM(Index) <= D;
31
  else
32
    D <= MEM(Index);
33
  end if;
34
end if;
35
end process Display_Mem;
36
end Behavioral;

Ich weiß ehrlich gesagt nicht, wie ich dieses Problem lösen kann bzw. 
warum das Tool mit dem Reset nicht zurecht kommt.

Das angehängte Bild entspricht der RTL Schematic ohne Reset.

von Duke Scarring (Gast)


Lesenswert?

Das was Du da hast, ist ein Speicher. Der muß im FPGA abgebildet werden. 
Das geht mit Logik-Flipflops (lange Synthese, eingeschrängte Größe) oder 
mit eingebauten Block-RAMs (kurze Synthese, etwas weniger eingeschränkte 
Größe).

Die Block-RAMS haben aber kein Reset (schon gar kein asynchrones). Daher 
zwingst Du die Synthese mit Deinem Reset die Logik-FF zu verbraten.

Mein Tipp: Laß den Reset weg.

Duke

von Hans (Gast)


Lesenswert?

@Duke Scarring

Hallo Duke,

vielen Dank für die einleuchtende Antwort.

Allerdings verstehe ich dann ehrlich gesagt nicht, warum die in ihrem 
Buch ein asynchrones Reset einbinden (steht sogar in der Lösung!).

Außerdem sieht man doch auf dem Bild eindeutig, dass der Ram-Baustein 
einen Eingang mit der Bezeichnung RSTA hat, ist das nicht ein 
Reset-Eingang bzw. kann ich damit vielleicht ein synchrones Reset 
realisieren?

Gruß
Hans

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


Lesenswert?

Hans schrieb:
> kann ich damit vielleicht ein synchrones Reset realisieren?
Du kannst ein BRAM nicht auf einen Schlag mit einem Pin zurücksetzen. 
Das kommt irgendwie jedes Jahr mal wieder wie im 
Beitrag "Xilinx Block-RAM voll resetten"

von Hans (Gast)


Lesenswert?

Hallo Miller,

danke für die Antwort und den Link.

Dann ist die im Buch vorgeschlagene Lösung wohl nicht ganz stimmig.

Ich lasse das Zurücksetzen einfach weg.

Gruß
Hans

von Duke Scarring (Gast)


Lesenswert?

@Hans: Ich kenne jetzt das Buch nicht im Detail, aber ich glaube nicht, 
daß es sich konkret auf z.B. Xilinx-Bausteine bezieht. Von daher ist es 
nicht wirklich falsch. Nur insofern, daß mir auch kein anderer 
Hersteller bekannt ist, der an seinem RAM einen Reset anbietet.

(Das Reset was Du gesehen hast, wirkt wahrscheinlich auf die 
Ausgangsregister des Block-RAMs.)

Duke

von Hans (Gast)


Lesenswert?

Hallo Duke,

>Ich kenne jetzt das Buch nicht im Detail, aber ich glaube nicht,
>daß es sich konkret auf z.B. Xilinx-Bausteine bezieht.

Im Vorwort des Buches VHDL-Synthese (Entwurf digitaler Schaltungen und 
Systeme) von Jürgen Reichhard und Bernd Schwarz steht aber:

"Auf der Suche nach geeignetem Unterrichtsbegleitmaterial mussten wir 
feststellen, dass der deutschsprachige Lehrbuchmarkt kein diesen 
Vorstellungen entsprechendes Angebot enthält. Deshalb haben wir 
begonnen, zunächst im Rahmen einer Wahlfachverantstaltung "VHDL-Synthese 
für XILINXs-FPGAs" eine praxinahe und hochsprachenorientierte 
Entwurfsmethodik in der Lehre zu erproben."

Einen Bezug zu Xilinx kann man daher nicht völlig von der Hand weisen 
und so wie ich Miller und auch dich verstanden habe, gibt es keinen 
Blockram, den man mit einem Pin zurücksetzen kann. Wenn die auf 
praktikable Lösungen wertlegen, so wie es im Vorwort steht, dann trifft 
das auf diese Aufgabe definitiv nicht zu.

Ich meine was hat das in einem Übungsbuch zu suchen, soll der Lernende 
dem Synthesetool stundenlang beim synthetisieren zuschauen?

Egal. Ich danke euch für eure hilfreichen Antworten zu diesem Thema.

Auf Millers Seite habe ich dann noch einige Ausführungen zum Thema 
asynchrones Reset gefunden, die ich ziemlich interessant fand. In dem 
Buch wird das ständig verwendet ohne das Für und Wider zu erklären...

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.