mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL Verzögerung in process


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich möchte für Demonstrationszwecke ein Logikgatter(AND mit 2 Inputs) 
mit meinem FPGA(Altera DE2-115)über die GPIOs ansteuern. Dazu nutze ich 
VHDL. Anfangs setzte ich die beiden Inputs auf 1 und 1, sodass der 
Ausgang auch theoretisch 1 ist.
Das FPGA ist jedoch schneller als das Gatterdelay und der Ausgang Q ist 
immer LOW.
Mein Ansatz wäre:
Könnte ich einen Counter in einen State implementieren welcher die State 
Machine ein paar Mikrosekunden verzögert?
Wenn ja, wie könnte ich das realisieren?
Das wäre mein kleiner Beispielcode(bei dem die Geschwindikkeit zu hoch 
ist):
process
  begin
    wait until rising_edge(clock);

    case state is
      

       when S_1=>
        I1  <= '1';
        I1  <= '1';
        state <= S_2;
      
    
      when S_2=>
      if Q1 = '1' then
                            LED <= "1111";
                        else 
                            LED_R <= "1111";
          state <= READY;
                        end if;

      
      when READY =>
        LED_G <= <'1';;

    end case;

  end process;

Viele Grüße

Autor: Weltbester FPGA-Pongo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage schrieb:
> Anfangs setzte ich die beiden Inputs auf 1 und 1, sodass der
> Ausgang auch theoretisch 1 ist.
> Das FPGA ist jedoch schneller als das Gatterdelay und der Ausgang Q ist
> immer LOW.

Warum sollte er das sein? Du wirst die Eingänge mal ändern müssen. Was 
genau soll das "demonstriert" werden?

Hoffentlich nicht die zufällligen Ergebnisse infolge der Nutzung 
asynchroner Schaltungen ohne Takt, für die FPGAs genau NICHT gemacht 
wurden ( und die tools auch nicht).

Die Bedeutung eines FPGA ist gerade die Optimierung auf synchrones 
Design. Alle weiteren Spielereien darum herum macht man mit Gattern der 
HC Serie.

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage schrieb:
> ein Logikgatter(AND mit 2 Inputs) mit meinem FPGA
Ich sehe da kein Logikgatter.

> Das wäre mein kleiner Beispielcode(bei dem die Geschwindikkeit zu hoch
> ist)
Der Code, den du da gepostet hast, ist quasi statisch. Nach 3 Taktzyklen 
sind einfach alle LEDs irgendwie gesetzt (wenn sie denn
Das Problem liegt also nicht (allein) in diesem Codeschnipsel.

> Das FPGA ist jedoch schneller als das Gatterdelay und der Ausgang Q ist
> immer LOW.
Das hört sich nach Holzweg an. Wie stellst du das fest? Was sagt denn 
(abgesehen von offensichtlichen Syntaxfehlern) der Simulator zu diesem 
Code? Denn der Simulator ist der Debugger für (d)eine VHDL Beschreibung.

> Könnte ich einen Counter in einen State implementieren welcher die State
> Machine ein paar Mikrosekunden verzögert?
Ja, aber das ist hier sicher nicht das Problem. Im Simulator kannst du 
die Zeit ja beliebig "langsam" laufen lassen.

Um eine definierte Aussage machen zu können, wäre es sinnvoll, wenn du 
die VHDL-Datei(en) einfach hier anhängst.

Autor: Carl (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
>Was sagt denn
>(abgesehen von offensichtlichen Syntaxfehlern) der Simulator zu diesem
>Code?

Als Simulator kann ich GHDL empfehlen:
Beitrag "Re: GHDL und gtkwave Grundlagen"

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll dieser Code machen?

Wo ist die Entity?

Welche Signale gehen auf das AND?

Wieso setzt du zwei mal I1 auf 1?

Wieso endet die FSM nach einem Durchlauf?

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Carl schrieb:
> Als Simulator kann ich GHDL empfehlen
Der ISE-Simulator reicht da schon aus und ist dank der eingebauten 
Automatik nur ein paar Mausklicks weit weg:
http://www.lothar-miller.de/s9y/archives/81-Xilinx-ISE-Step-by-Step.html

Autor: Sigi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage schrieb:
> ich möchte für Demonstrationszwecke ein Logikgatter(AND mit 2 Inputs)
> mit meinem FPGA(Altera DE2-115)über die GPIOs ansteuern.

Du willst also einen Chip wie z.B. 74LSxyz ansteuern und
sein Verhalten beobachten?

Zuerst solltest du deinen Code abändern, so das
auch etwas interesantes passiert:
if cen = '1' then
  case state is
    S1: i1 <= '1'; i2 <= '1'; state <= S2;
    S2: i1 <= '0'; i2 <= '0'; state <= S1;
  end case;
end if;

cen (nennt man ClockEnable) wird jetzt in einem zweiten
Prozess gesteuert:
counter <= counter + 1;
cen <= '0';
if counter = MAX then
  counter <= 0;
  cen <= '1';
end if;

(mit signal counter: integer range 0 to MAX := 0)
MAX muss hinreichend gross gewählt werden.

Autor: Carl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>> Als Simulator kann ich GHDL empfehlen
Lothar schrieb:
>Der ISE-Simulator reicht da schon aus und ist dank der eingebauten
>Automatik nur ein paar Mausklicks weit weg:
Beim Ise-Simulator steht bei der Lizenz "limited".

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Carl schrieb:
> Beim Ise-Simulator steht bei der Lizenz "limited".
Ja, aber das ist nicht schlimm, weil die Einschränkungen (wie z.B. 
Multi-Language-Simualtion usw.) für VHDL-Anfänger nicht relevant sind.

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja, aber das ist nicht schlimm, weil die Einschränkungen
Achso. Ich dachte das "limited" bezieht sich auf eine zeitlich begrenzte 
Nutzungsdauer. Vor einiger Zeit hatte ich Lattice-Diamond installiert. 
Das meldet sich jetzt mit "Lizenz abgelaufen".

Autor: Tobias B. (Firma: www.elpra.de) (ttobsen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Carl schrieb:
> Vor einiger Zeit hatte ich Lattice-Diamond installiert.
> Das meldet sich jetzt mit "Lizenz abgelaufen".

Das sollte sich beheben lassen indem du einfach eine neues Lizenz File 
anforderst und gegen das alte austauschst.

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Carl schrieb:
> Das meldet sich jetzt mit "Lizenz abgelaufen".
Geh zu Lattice und 2 Minuten später hast du eine Neue...

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Geh zu Lattice und 2 Minuten später hast du eine Neue...

Ja, dass kann ich bestimmt machen ... falls ich das Passwort noch finde.
Insgesamt ist das aber schon ärgerlich. Wenn ich meinen Computer 
anmache, soll die Entwicklungsumgebung funktionieren. Wenn Lattice 
irgendwann dicht machen würde, säße man auf dem Trockenen und kann 
nichts mehr reparieren.
Deshalb mag ich solches Verhalten.

Autor: Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Carl schrieb:
> Beim Ise-Simulator steht bei der Lizenz "limited".

Nein, die Tabelle ist mit "ISE Design Features Table" beschriftet, und 
zwar für die Produktvariante "Webpack".

Wieso soll der TE überhaupt ISE verwenden, wenn er doch ein Altera/Intel 
FPGA hat? Gibt es bei Quartus keinen Simulator?

Autor: Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Carl schrieb:
>>Geh zu Lattice und 2 Minuten später hast du eine Neue...
>
> Ja, dass kann ich bestimmt machen ... falls ich das Passwort noch finde.

Das ist aber Dein Problem und nicht das von Lattice. Üblicherweise kann 
man sich aber ein neues Passwort generieren und zuschicken lassen.

> Insgesamt ist das aber schon ärgerlich. Wenn ich meinen Computer
> anmache, soll die Entwicklungsumgebung funktionieren. Wenn Lattice
> irgendwann dicht machen würde, säße man auf dem Trockenen und kann
> nichts mehr reparieren.

Dann musst Du eben entweder eine Node-Locked-Lizenz für Deinen Rechner 
(vorzugsweise VM, die man separat sichern kann) erwerben oder einen 
eigenen, lokalen Lizenzserver betreiben.

Mir wäre es grundsätzlich auch lieber, auf solche Lizenzen zu setzen, 
aber manchmal überwiegen eben die Vorteile des beim Hersteller oder 
Lieferanten befindlichen Lizenzservers. Altium Designer nutze ich 
üblicherweise an drei verschiedenen Orten (und gelegentlich auch auf 
einem Notebook), so dass es sich schon aus Kostengründen verbietet, 
hierfür separate Lizenzen zu erwerben. Manche Hersteller kennen solche 
Probleme und erlauben mehrere Installationen ihrer Software mit einer 
gemeinsamen Lizenz, z.B. Ultraedit bzw. UE Studio.

> Deshalb mag ich solches Verhalten.

?

Autor: Tobias B. (Firma: www.elpra.de) (ttobsen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas S. schrieb:
> oder einen
> eigenen, lokalen Lizenzserver betreiben.

Aber auch auf dem Flexnet Lizenzserver wird es irgendwann mal nicht mehr 
funktionieren, dass die Lizenz ausgecheckt werden kann und er sich eine 
neue besorgen muss.

Die Node-Locked Geschichte ist ja auch nichts anderes als ein lokaler 
Lizenzserver mit einem Lizenz File dass an die MAC Adresse gebunden ist. 
Wenn das Lizenz File ein Ablaufdatum hat, ist es doch egal ob das ein 
externer Server ist oder nicht. Oder sehe ich da was falsch?

Autor: Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias B. schrieb:
> Die Node-Locked Geschichte ist ja auch nichts anderes als ein lokaler
> Lizenzserver mit einem Lizenz File dass an die MAC Adresse gebunden ist.

... oder an ein anderes Merkmal des Rechners, z.B. Festplatten-ID, 
Seriennummer, oder einen Hardware-Lizenzschniepel.

> Wenn das Lizenz File ein Ablaufdatum hat, ist es doch egal ob das ein
> externer Server ist oder nicht. Oder sehe ich da was falsch?

Der Ablauf der Lizenz ist ein sehr genau bestimmbares zukünftiges 
Ereignis. Wenn man eine Lizenz(datei) ohne Ablauf haben will, bieten 
fast alle Hersteller so etwas auch an, mit allen Vor- und Nachteilen.

Ein anderes Szenario ist jedoch der aus Kundensicht nicht vorhersehbare 
Ausfall des externen Lizenzservers, und zwar aus einem der folgenden 
Gründe:

- (kurzzeitiger) technischer Ausfall/Defekt
- Inkompatibilität bei Upgrades
- organisatorische Gründe (freiwillige Abschaltung)
- regulatorische Gründe (Abschaltung auf Grund behördlicher oder
  gerichtlicher Anordnung)
- Einstellung des Geschäftsbetriebs, z.B. auf Grund von Insolvenz

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könntet ihr die Lizenzgeschichte möglicherweise in einem anderen Thread 
diskutieren?

Autor: Tobias B. (Firma: www.elpra.de) (ttobsen)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Andreas S. schrieb:
> Tobias B. schrieb:
>> Die Node-Locked Geschichte ist ja auch nichts anderes als ein lokaler
>> Lizenzserver mit einem Lizenz File dass an die MAC Adresse gebunden ist.
>
> ... oder an ein anderes Merkmal des Rechners, z.B. Festplatten-ID,
> Seriennummer, oder einen Hardware-Lizenzschniepel.
>
>> Wenn das Lizenz File ein Ablaufdatum hat, ist es doch egal ob das ein
>> externer Server ist oder nicht. Oder sehe ich da was falsch?
>
> Der Ablauf der Lizenz ist ein sehr genau bestimmbares zukünftiges
> Ereignis. Wenn man eine Lizenz(datei) ohne Ablauf haben will, bieten
> fast alle Hersteller so etwas auch an, mit allen Vor- und Nachteilen.
>
> ... Schnipp Schnapp

Ich verstehe schon was ein Lizenserver macht, was seine Vorteile sind, 
usw. Benutze ich schliesslich selbst fuer Modelsim. Mir ging es um die 
eher konkret um die Lattice Geschichte, weil da bekommt man genau solch 
eine Flexnet Nodelocked Lizenz, gebunden an die MAC Adresse (der Server 
wird mit Diamond ausgeliefert). Bezogen auf diese Aussage:

Andreas S. schrieb:
> Dann musst Du eben entweder eine Node-Locked-Lizenz für Deinen Rechner
> (vorzugsweise VM, die man separat sichern kann) erwerben oder einen
> eigenen, lokalen Lizenzserver betreiben.

haette ich nun gesagt, dass man in beiden Faellen eine Lizenz erwerben 
muss, welche sicherstellt, dass eben nicht nach einer Zeit X um ist, 
allein auf einen Lizenzserver umzustellen ist zu wenig.

Jetzt verstehe ich aber auch, dass es wohl genauso gemeint ist, nur 
nicht ganz optimal formuliert ist. Da ich jetzt auch nicht der fitteste 
mit der Flexnet Geschichte bin, hatte ich gedacht, dass da noch eine 
Bildungsluecke ist.

Lothar M. schrieb:
> Könntet ihr die Lizenzgeschichte möglicherweise in einem anderen Thread
> diskutieren?

Joa, jetzt. Oben hast du dich selbst zu dem Lizenzthema geaeussert und 
wirklich viel gibt der Thread auch nicht her. Seit Post 4 wird es 
Offtopic, und du diskutierst fleissig mit. ;-)

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sigi schrieb:
> Du willst also einen Chip wie z.B. 74LSxyz ansteuern und
> sein Verhalten beobachten?



Genau. Ich hätte mein Vorhaben in meinem ersten Beitrag besser 
definieren sollen. Ich möchte ein Logikgatter-IC extern ansteuern(also 
über die GPIOs des FPGA-Boards). Dabei handelt es sich um ein 74HC08 von 
NXP. Ich möchte es auf dessen Funktion testen bzw. das Verhalten 
beobachten.


Schlumpf schrieb:

> Wieso setzt du zwei mal I1 auf 1?

Ich habe mich vertippt, es sind I1 und I2. Dies sind beide Inputs des 
externen Logikgatters, welche über die GPIOs laufen.
Q ist der Output des Logikgatters und soll eingelesen werden.

Schlumpf schrieb:
> Welche Signale gehen auf das AND?

Lothar M. schrieb:
> Ich sehe da kein Logikgatter.

Das AND ist ein externes Logikgatter in Form eines 74HC08 .

Weltbester FPGA-Pongo schrieb im Beitrag #5843071:
> Warum sollte er das sein? Du wirst die Eingänge mal ändern müssen. Was
> genau soll das "demonstriert" werden?

Ich möchte die Funktion des externen Logikgatter überprüfen, also ob es 
funktionsfähig ist oder nicht.

Viele Grüße

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du schreibst, dass Q immer Low ist, obwohl du an I1 und I2 High anlegst.
Da du aber die beiden Inputs in deiner FSM nie zurück setzt, müssen die 
dauerhaft auf High stehen und Q somit auch.

Entweder ist dein AND kaputt oder du dein Code ist nicht der, den du 
tatsächlich verwendest oder deine FSM startet mangels Reset nicht bei 
S1.

1. Schritt: messe an den Pins, was tatsächlich anliegt.

2. Schritt: beschreibe das Reset Verhalten.

3. Schritt: synchronisiere Q mit Clk ein.
So wie du es beschrieben hast, kann es zu ungewolltem Verhalten kommen, 
da die logischen Pfade von Q an die Register des Zustandszählers 
unterschiedlich lang sind und somit nicht sicher gestellt ist, dass bei 
der Taktflanke die Information für den nächsten Zustand konsistent an 
allen Registern anliegt.

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Gedankengang ist folgender: Wenn ich I1 und I2 auf 1 setzte und 
direkt danach in S_2 Q1 auslese, ist es möglich, dass das 
Gatterdelay(externes Gatter!) größer ist als die Zeit die das FPGA 
benötigt um die Pins auf 1 zu setzten und Q auszulesen?
Denn dann wäre Q ja noch auf 0 oder nicht?

Schlumpf schrieb:
> 3. Schritt: synchronisiere Q mit Clk ein.
> So wie du es beschrieben hast, kann es zu ungewolltem Verhalten kommen,
> da die logischen Pfade von Q an die Register des Zustandszählers
> unterschiedlich lang sind und somit nicht sicher gestellt ist, dass bei
> der Taktflanke die Information für den nächsten Zustand konsistent an
> allen Registern anliegt.

Wie kann ich dies tun?

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage schrieb:
> Denn dann wäre Q ja noch auf 0 oder nicht?

Denkbar.
Wie schnell ist dein Takt?

Frage schrieb:
> Wie kann ich dies tun?

Schritt 1 und 2 schon erledigt?

Autor: Achim S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage schrieb:
> Denn dann wäre Q ja noch auf 0 oder nicht?

Kommt darauf an. Hast du die Signale I1 und I2 bei ihrer Deklaration auf 
0 initialisiert? Dann "startet" auch Q auf 0. Wenn du den Startwert von 
I1 und I2 nicht festgelegt hast, dann ist es nicht ohne weiteres 
vorherzusagen, mit welchen Pegeln die beiden Signale starten.

Und ja: es kann sein, dass dein FPGA die States schneller durchläuft, 
als das externe Gatter schaltet. Aber das lässt sich leicht ändern. Der 
Übergang von einem State zum nächsten braucht genau einen Taktzyklus. Du 
musst nur deinen Takt "clock" langsam genug wählen. Dann haben I1 und I2 
genug Zeit, um am externen Gatter anzukommen. Und das externe Gatter hat 
genug Zeit, um umzuschalten.

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sigi schrieb:
> if cen = '1' then
>   case state is
>     S1: i1 <= '1'; i2 <= '1'; state <= S2;
>     S2: i1 <= '0'; i2 <= '0'; state <= S1;
>   end case;
> end if;

Jetzt würden I1 und I2 doch auf 1 gesetzt werden und direkt danach 
wieder auf 0. Aber wenn ich noch Q auslesen will, benötige ich doch eine 
Verzögerung die mit der Verzögerung des externen Gatters übereinstimmt, 
oder denke ich falsch?
Im Datenblatt 
(https://assets.nexperia.com/documents/data-sheet/74HC_HCT08.pdf) stehen 
auf Seite 6 die Verzögerungen, also Übergangszeit und propagation delay. 
Muss ich diese nicht berücksichtigen?

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achim S. schrieb:
> Du musst nur deinen Takt "clock" langsam genug wählen. Dann haben I1 und
> I2 genug Zeit, um am externen Gatter anzukommen. Und das externe Gatter
> hat genug Zeit, um umzuschalten.

Oder Waitstates einfügen zwischen S1 und S2.
Also einen oder mehrere zusätzliche(n) State(s), wo nichts gemacht wird.

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schlumpf schrieb:
> Wie schnell ist dein Takt?

In meinem SDC steht folgendes:
create_clock -period 20 [get_ports clock]
derive_pll_clocks

=> also 50MHz.

Schlumpf schrieb:
> Schritt 1 und 2 schon erledigt?

Ja. Q1 wird auch auf 1 gesetzt, aber es scheint so, dass die Abfrage 
durch die FSM noch davor vonstatten geht.

Achim S. schrieb:
> Kommt darauf an. Hast du die Signale I1 und I2 bei ihrer Deklaration auf
> 0 initialisiert? Dann "startet" auch Q auf 0. Wenn du den Startwert von
> I1 und I2 nicht festgelegt hast, dann ist es nicht ohne weiteres
> vorherzusagen, mit welchen Pegeln die beiden Signale starten.

Ja, habe ich gemacht. Der Ausgang wird nach dem starten des Desgins auch 
auf 1 gesetzt.

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schlumpf schrieb:
> Oder Waitstates einfügen zwischen S1 und S2.
> Also einen oder mehrere zusätzliche(n) State(s), wo nichts gemacht wird.

Was wäre den sinnvoller? Muss ich um den Takt zu senken einfach eine 
größere -period im SDC angeben.

Autor: Schlumpf (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Frage schrieb:
> also 50MHz.

Wären dann 20ns.
Altera FPGAs sind an den Pins recht lahmarschig..

Frage schrieb:
> Was wäre den sinnvoller? Muss ich um den Takt zu senken einfach eine
> größere -period im SDC angeben.

Ich würde nen Waitstate einbauen.
Das ist schnell erledigt.

Ansonsten musst die PLL umkonfigurieren.
Das geht nicht über das SDC.

Autor: Schlumpf (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Grad mal das Datenblatt vom 74HC08 angeschaut..

Bau gleich mal zwei Waitstates ein : )

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schlumpf schrieb:
> Grad mal das Datenblatt vom 74HC08 angeschaut..
>
> Bau gleich mal zwei Waitstates ein : )

Okay. Müssen die noch irgendwas können außer:(z.B. einen Counter 
beinhalten)
when S_WAIT =>
state <= READY;

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie bitte?

Autor: FPGA zum Spass (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schlumpf schrieb:
> Frage schrieb:
>> also 50MHz.
>
> Wären dann 20ns.
> Altera FPGAs sind an den Pins recht lahmarschig..

Zusammenhang?
Du kannst über die Pins des Cyclone4 problemlos >>100 Mhz rausgeben und 
das noch ganz ohne DDR oder ähnliche Spielchen.


Mein Vorschlag für das DE2-115 bei dem gegebenen Problem:

- die Schalter SW0 und SW1 gehen direkt auf die GPIO Pins der Eingänge 
des 74HC08.
- Der GPIO Pin des Ausgangs des 74HC08 geht direkt auf eine der LEDs

Fertig. Kein Takt und nix.
So kannst du alle 4 Zustände live probieren.

Wenn du die Verzögerung messen willst geht das auch, ist aber wohl 
(noch) nicht dein Ziel?

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schlumpf schrieb:
> Also einen oder mehrere zusätzliche(n) State(s), wo nichts gemacht wird.

Schlumpf schrieb:
> Wie bitte?

Also ich nehme an, dass in diesen States nichts gemacht werden soll.
Also

when S_WAIT =>
state <= READY;

Autor: Schlumpf (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
FPGA zum Spass schrieb im Beitrag #5844088:
> Zusammenhang

Die Zeit von den Register I1 und I2 bis zu den Pins des AND ist nicht 
null.
Ebenso nicht die Zeit vom Ausgang des AND bis zu den Registern des 
Statecounters.
Diese Zeiten addieren sich zu Zeit des AND und die Summe dieser Zeiten 
muss kleiner 1/50MHz sein.

Frage schrieb:
> Also ich nehme an, dass in diesen States nichts gemacht werden soll.

Ja, Aber warum du vom Waitstate direkt die FSM 'beenden' willst, 
verstehe ich nicht

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schlumpf schrieb:
> Ja, Aber warum du vom Waitstate direkt die FSM 'beenden' willst,
> verstehe ich nicht

Das war nur ein Beispiel.
Besseres Beispiel:

when S_WAIT =>
state <= S_3;

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FPGA zum Spass schrieb im Beitrag #5844088:
> Wenn du die Verzögerung messen willst geht das auch, ist aber wohl
> (noch) nicht dein Ziel?

Nein. Mein Ziel ist es, einen Taster zu betätigen. Anschließend soll das 
externe Gatter auf dessen Funktion getestet werden und mir durch die 
LEDs eine Rückmeldung geben.

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage schrieb:
> Anschließend soll das
> externe Gatter auf dessen Funktion getestet werden und mir durch die
> LEDs eine Rückmeldung geben.


Also nicht das Gatter sondern das FPGA soll mir diese Rückmeldung geben.

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage schrieb:
> Das war nur ein Beispiel.
> Besseres Beispiel:

Ach so..
Ja, so sieht ein Waitstate aus.
Man wartet eben einen Takt lang und tut in der Zeit nichts

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich  bekomme beim kompilieren jedoch noch eine kritische Warnung:

Critical Warning (332168): The following clock transfers have no clock
                           uncertainty assignment. For more accurate 
results,
                           apply clock uncertainty assignments or use 
the
                           derive_clock_uncertainty command.
Critical Warning (332169): From clock (Rise) to clock (Rise) (setup and 
hold)

Bei Intel
(https://www.intel.com/content/www/us/en/programmable/support/support-resources/knowledge-base/solutions/rd01282014_301.html)
steht man könne diese ignorieren. Soll ich das tun?

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ignorieren..
Das ist jetzt erst mal egal

Autor: FPGA zum Spass (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist immer noch nicht klar wofür der Takt in diesem Beispiel gut sein 
soll, geschweige denn die FSM.

Geht es dir jetzt um die FSM oder um den Test des externen Bausteins?

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage schrieb:
> Mein Ziel ist es, einen Taster zu betätigen. Anschließend soll das
> externe Gatter auf dessen Funktion getestet werden und mir durch die
> LEDs eine Rückmeldung geben.
Der Taster soll also einen automatischen Ablauf starten, der dann 
Testmuster an den externen Prüfling anlegt und prüft, ob der eine UND 
Funktion aufweist? Dann musst du die restlichen Kombinationen 00, 01 und 
10 ja auch prüfen. Und dann kannst du an den 4 LEDs auch gleich 
anzeigen, ob da statt des AND eine andere Funktionalität OR, NOR, NAND, 
XOR, XNOR angeschlossen ist.
Die ersten 3 LEDs könnten dann die Funktion anzeigen, und die vierte 
eine Negation.

Zeig doch einfach mal den Originaltext dieser netten Hausaufgabe...

: Bearbeitet durch Moderator
Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Der Taster soll also einen automatischen Ablauf starten, der dann
> Testmuster an den externen Prüfling anlegt und prüft, ob der eine UND
> Funktion aufweist? Dann musst du die restlichen Kombinationen 00, 01 und
> 10 ja auch prüfen. Und dann kannst du an den 4 LEDs auch gleich
> anzeigen, ob da statt des AND eine andere Funktionalität OR, NOR, NAND,
> XOR, XNOR angeschlossen ist.
> Die ersten 3 LEDs könnten dann die Funktion anzeigen, und die vierte
> eine Negation.

Genau das ist mein Ziel. Ich wollte aber erstmal mit einem AND anfangen 
und den Ausgang auslesen bzw. Die Eingänge beschalten und wenn alles 
klappt den code erweitern.


FPGA zum Spass schrieb im Beitrag #5844281:
> Geht es dir jetzt um die FSM oder um den Test des externen Bausteins?

Ich denke eine FSM ist die einfachste Methode für dieses Vorhaben.

Lothar M. schrieb:
> Zeig doch einfach mal den Originaltext dieser netten Hausaufgabe...

Ich habe mir diese Aufgabe selbst überlegt, wenn du das meinst. Oder 
bezieht sich deine Aussage darauf, dass ich den gesamten code hier 
reinstellen soll?

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Frage schrieb:
> Lothar M. schrieb:
>> Der Taster soll also einen automatischen Ablauf starten...
> Genau das ist mein Ziel.
Ich hab das mal als kleine Fingerübung zur Frühstückspause gemacht und 
vier Prüflinge an den Test gehängt. Der Starttaster wird von der 
Testbench "betätigt", dann im start_sr einsynchronisiert, darauf eine 
Flankenerkennung gemacht und die FSM gestartet, die die 4 Testmuster 
anlegt, diese anschließend auswertet und das das Ergebnis auf den LEDs 
anzeigt. Die Leds sind so definiert:
           LED : out  STD_LOGIC_VECTOR (3 downto 0) := "1111"; -- LED3 = invertiert, LED2 = AND, LED1 = OR, LED0 = XOR

Das darf der nächste Praktikant dann auch machen...  ;-)

: Bearbeitet durch Moderator
Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hoppla, sehe gerade: Quellcode zu den Screenshots vergessen... ;-)

: Bearbeitet durch Moderator

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.