mikrocontroller.net

Forum: FPGA, VHDL & Co. Warum std_logic statt std_ulogic?


Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

in den meisten Fällen ist es ja gar nicht erwünscht mehrere Treiber an 
einem Signal zu haben, std_ulogic wäre also sicherer, weil man in diesem 
Fall gleich eine Fehlermeldung bekommt. Warum verwenden fast alle 
trotzdem std_logic? Gewohnheit/Kompatibilität zu kaputten Synthesetools?

Gruß
Andreas

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, also nur wegen Kompatibilität zu kaputten Synthesetools. Danke.

Autor: ope (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Warum verwenden fast alle trotzdem std_logic? Gewohnheit/Kompatibilität zu
> kaputten Synthesetools?

m.E. weil es verdammt viele benutzen (dann muss es ja richtig sein) und 
es keine Compiler Errors zB. in Modelsim gibt - eben nur in der 
Simulation einige 'X'; sprich Bequemlichkeit. Wenn man damit aber nichts 
anfangen kann und die 'X' Zustände in non-Bus Systemen ignoriert (da man 
mit std_logic simuliert), wird der CPLD/FPGA eben warm ...

Viele Grüße
Olaf

Autor: Johnsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> weil es verdammt viele benutzen (dann muss es ja richtig sein)
Und wenn alle anderen von der Brücke springen ... (eh schon wissen).

Wenn ich nicht mehrere Treiber auf ein Signal haben will, dann nehm ich 
std_ulogic. Folglich gibt's dann nur in der Top-Level Entity für 
bidirektionale Signale std_logic. Aktuelle Synthesetools haben damit 
kein Problem!

Autor: Randy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade festgestellt dass beim Webpack 8.1 ein
signal<=signal+1;
nur geht wenn es ein std_logic_vector ist, mit std_ulogic gehts nicht. 
Steckt da was dahinter, oder ist das eher ein Bug?

Randy

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hängt wohl eher damit zusammen, daß Du die arithmetischen Funktionen 
aus den package std_logic_unsigned oder std_logic_signed verwendest.
Diese sind mit einem Parameter vom Type std_logic_vector definiert.

Man sollte aber sowieso nicht mit std_logic_vectoren rechnen, besser das 
package numeric_std und die Typen unsigned und signed verwenden.

Klaus

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Basieren die Typen signed/unsigned nicht wiederum auf std_logic_vector 
(ohne u)?

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Typen signed und unsigned aus numeric_std basieren auf std_logic 
(ohne vector, ohne u).

Autor: Frager (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da blicke noch einer durch ...

Wenn ich jetzt das numeric package verwende, wie definiere ich dann mein 
internen ports auf den niederem Ebenen?  Mit std_logic_vector oder doch 
mit "u" ?

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die Ports verwendet man ab besten std_(u)logic oder 
std_(u)logic_vector, für die interne Berechnung unsigned/signed.
In der Architecture wird dann das innere Signal an das äusere 
zugewiesen, mit einem Cast, so ähnlich wie im folgenden.

entity foo is
   port {
        ..
        fff : out std_logic_vector(..),
        ..
   }
end entity;

architecture foo_arch of foo is
  signal ffu : unsigned(fff'range);
begin
   ...
   ..
   fff <= std_logic_vector(ffu);
end foo_arch;


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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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