Forum: FPGA, VHDL & Co. if mit others


von J. Z. (zennehoy)


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

von Jörn (Gast)


Lesenswert?

Hallo Zen,

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

GRuß Jörn

von J. Z. (zennehoy)


Lesenswert?

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

von FPGA-User (Gast)


Lesenswert?

vorschlag :

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

...

if mysig = ALL_ONES then

...

von Jörn (Gast)


Lesenswert?

Quartus macht aus dem
1
process(mysig,data2)
2
begin
3
  dataout<=(others=>'0');
4
5
  if (unsigned(not mysig)=0) then
6
   dataout<=data2;
7
  end if;
8
9
end process;

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

Gruß Jörn

von J. Z. (zennehoy)


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

von FPGA-User (Gast)


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 ?

von seek (Gast)


Lesenswert?

Hallo,

wenn du kein zusätzliches Signal willst:

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

gruss seek

von J. Z. (zennehoy)


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

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.