www.mikrocontroller.net

Forum: FPGA, VHDL & Co. if mit others


Autor: J. Z. (zennehoy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich hab da ein Problem, naehmlich wie sich folgendes realisieren
laesst:

constant len: integer := 8;
...
signal mysig: std_logic_vector(len-1 downto 0);
...
if(mysig=(others=>'1')) then   -- Hier liegt das Problem!
  ...
end if;

Kann man das loesen, ohne ein weiteres "1"-Signal zu machen?
Vielen Dank!
Zen

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zen,

wie wäre es das mysig Signal zu invertieren und auf 0 zu vergleichen?

GRuß Jörn

Autor: J. Z. (zennehoy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prima Idee!
Wie invertiert man eigentlich ein Signal?
Ansonsten geht ja auch ein Vergleich mit (2**len)-1.
Danke fuer den Tipp!
Zen

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vorschlag :

constant ALL_ONES : std_logic_vector(mysig'RANGE) := (others=>'1');

...

if mysig = ALL_ONES then

...

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Quartus macht aus dem
process(mysig,data2)
begin
  dataout<=(others=>'0');

  if (unsigned(not mysig)=0) then
   dataout<=data2;
  end if;

end process;

8x einen 2zu1 Multiplexer, die zwischen '0' und dem ensprechenden Bit
von Data2 umschalten.

Gruß Jörn

Autor: J. Z. (zennehoy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Zen ;) "Wie invertiert man eigentlich ein Signal?"
Ok, da hab ich was geschrieben ohne erst zu ueberlegen...

@FPGA-USER "constant ALL_ONES"
Ja, so habe ich es auch zuerst geloest, suchte aber eigentlich eine
Loesung ohne zusaetzliches Signal.

@Jörn "unsigned(not mysig)=0"
Genau das suchte ich!

Danke fuer die Flut von Antworten!
Zen

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Zen
wenn der Compiler nicht ganz blöd ist, wird er aus ALL_ONES
eine Konstante machen, d.h. genau dasselbe wie

if (mysig=(others=>'1'))

wenn das funktionieren würde. Also kein zusätzliches Signal
oder stört Dich die zus. Zeile VHDL ?

Autor: seek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn du kein zusätzliches Signal willst:

  if mysig = CONV_STD_LOGIC_VECTOR(2**len-1,len) then

gruss seek

Autor: J. Z. (zennehoy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@FPGA-User: "oder stört Dich die zus. Zeile VHDL ?"
Nun, etwas schon, und ich wollte halt wissen ob das nicht auch ohne
geht. Das bei der Synthese immer das Gleiche rauskommt ist klar, es
ging nur darum den Code moeglichst simple zu halten,
Zen

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.