Forum: FPGA, VHDL & Co. Aldec Active-HDL 9.3 und Lattice FPGA: GSR nutzen


von Janis E. (janis_e)


Lesenswert?

Hallo,

ich verwende die Active HDL Version 9.3, die bei Lattice Diamond 3.2 
mitgeliefert wird.

Um mein Verilog Toplevel-Modul in einem sauberen Zustand starten zu 
lassen, möchte ich den GSR nutzen 
(http://www.latticesemi.com/~/media/Documents/UserManuals/EI/HowtouseGSRPURandTSALL.PDF?document_id=31408).

Soweit ich es verstehe, kann ich also mit
1
module mymodule(clk);
2
  input clk;
3
  wire reset;
4
  GSR GSR_INST (.GSR (reset));
5
  always @(posedge clk or negedge reset) begin
6
     if(!reset) begin
7
        //reset Anweisungen
8
     end
9
     else begin
10
       //normaler Takt
11
     end
12
  end
13
endmodule

den Reset Fall, der bei jedem (FPGA-) Start initiiert wird, in 
synthetisierbarer Form verwenden, richtig?

Wenn ich nun eine Simulation über den Simulationsassistenten starte, 
wird zwar kein Fehler erzeugt, aber die Reset Leitung bleibt immer auf 
'z'.

Mache ich etwas falsch?

Danke im Voraus!

von Lattice User (Gast)


Lesenswert?

Janis E. schrieb:
> Hallo,
>
> ich verwende die Active HDL Version 9.3, die bei Lattice Diamond 3.2
> mitgeliefert wird.
>
> Um mein Verilog Toplevel-Modul in einem sauberen Zustand starten zu
> lassen, möchte ich den GSR nutzen
> 
(http://www.latticesemi.com/~/media/Documents/UserManuals/EI/HowtouseGSRPURandTSALL.PDF?document_id=31408).
>
> Soweit ich es verstehe, kann ich also mit
>
>
1
> module mymodule(clk);
2
>   input clk;
3
>   wire reset;
4
>   GSR GSR_INST (.GSR (reset));
5
>   always @(posedge clk or negedge reset) begin
6
>      if(!reset) begin
7
>         //reset Anweisungen
8
>      end
9
>      else begin
10
>        //normaler Takt
11
>      end
12
>   end
13
> endmodule
14
>
>
> den Reset Fall, der bei jedem (FPGA-) Start initiiert wird, in
> synthetisierbarer Form verwenden, richtig?
>
> Wenn ich nun eine Simulation über den Simulationsassistenten starte,
> wird zwar kein Fehler erzeugt, aber die Reset Leitung bleibt immer auf
> 'z'.
>
> Mache ich etwas falsch?
>

Ja.

Die GSR Komponente macht nicht das was man naiverweise erwartet. Es 
dient nicht nicht dazu das GSR nach der Konfiguration als Signal zur 
Verfügung szu stellen, sondern umgekehrt das GSR Netzwerk gezielt auch 
für ein Benutzerdefiniertes Reset zu nutzen (spart Resourcen). Das ist 
aber nur in Ausnahmefällen nötig, die automatische Auswahl eines 
Benutzer Resets für GSR beim Mappen funktioniert ziemlich gut.

Aber der Simulator weiss davon nichts, d.h. man muss im Toplevel der 
Testbench, sowohl GSR, als auch PUR instanzieren damit die Zuweisung von 
Initwerten funktioniert. Ein Signal muss man nicht zuweisen, es sei denn 
man möchte in der Testbench ein Reset gezielt auslösen können.
1
PUR PUR_INST(1'b1);
2
GSR GSR_INST(1'b1);

von Janis E. (janis_e)


Lesenswert?

Lattice User schrieb:
> Die GSR Komponente macht nicht das was man naiverweise erwartet. Es
> dient nicht nicht dazu das GSR nach der Konfiguration als Signal zur
> Verfügung szu stellen, sondern umgekehrt das GSR Netzwerk gezielt auch
> für ein Benutzerdefiniertes Reset zu nutzen (spart Resourcen).

Danke für die Info, das habe ich dann wirklich falsch verstanden. Wie 
würde ich in meinem Beispiel das Signal denn richtig nutzen?

Lattice User schrieb:
> Aber der Simulator weiss davon nichts, d.h. man muss im Toplevel der
> Testbench, sowohl GSR, als auch PUR instanzieren damit die Zuweisung von
> Initwerten funktioniert.

Und was ist mit dem FPGA? Wird da das Signal am Anfang automatisch 
ausgelöst? (So wenigstens habe ich es verstande, aber ich fand die 
Formulierungen in der TN etwas mißverständlich, gerade was PUR angeht).

von Janis E. (janis_e)


Lesenswert?

Also es funktioniert jetzt, in dem ich mir einfach die Tatsache zunutze 
mache, dass beim GSR alle Register mit "0" initialisiert werden. Das 
prüfe ich bei positiver Taktflanke in meinem Toplevel Modul, und 
reagiere entsprechend (und setze das Register dann auf "1"). Die Frage 
ist halt, ob dies "the way to go" ist, oder man nicht doch irgendwie 
direkt an das Signal kommt.

von Duke Scarring (Gast)


Lesenswert?

Janis E. schrieb:
> Also es funktioniert jetzt
Das ist ja schön, aber mir ist immer nocht nicht klar geworden, was Du 
eigentlich genau machen willst.

Ich habe das GSR in meinem bishergen (FPGA-)Leben noch nicht benötigt.

Duke

von Janis E. (janis_e)


Lesenswert?

Duke Scarring schrieb:
> aber mir ist immer nocht nicht klar geworden, was Du
> eigentlich genau machen willst.

Ich verwende den Mico8 Softcore, und der hat einen Reseteingang (bzw. 
das generierte Modul samt Bus & Peripherie). Naiv gedachte habe ich mir 
überlegt, dass ich das ja auch nutzen muss, und daher - analog zum 
Takteingang - auch irgendwo her ein Resetsignal bekommen muss.

Habe ich das falsch verstanden? Muss einfach einfach nur sicherstellen, 
dass das Resetsignal während des Betriebs auf High gehalten wird (active 
low)?

von Duke Scarring (Gast)


Lesenswert?

Janis E. schrieb:
> Mico8 Softcore
Ah, ok.

Ich lege solche 'ungenutzten' Reset-Eingänge entweder auf festen Pegel, 
oder baue ein kleines Schieberegister, was nach dem Einschalten bzw. der 
Konfiguration den Reset-Eingang für ein paar Takte aktiviert.

Aber eigentlich sollte ein fester Pegel ('1' bei active-low) völlig 
ausreichend sein.

Das FPGA sorgt ja (dank GSR) automatisch dafür, die FF's erst dann 
losrennen zu lassen, wenn die Konfiguration durchgelaufen ist.

Duke

von Janis E. (janis_e)


Lesenswert?

super, danke!

von Lattice User (Gast)


Lesenswert?

Duke Scarring schrieb:
>
> Aber eigentlich sollte ein fester Pegel ('1' bei active-low) völlig
> ausreichend sein.

Da wäre ich mir nicht so sicher. Wenn z.B. in den Resetanweisungen ein 
FF auf 1 initialisiert wird und dieses wegem dem konstant inaktiven 
Reset wegoptimiert word, ist es sicher nicht im Sinne des Anwenders.

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.