Generisches oder

Gast #889549
Lesenswert?

Wie bilde ich ein generisches Oder ?
Es existiert ein "std_logic_vector(0 bis Ende)" wobei "Ende" generisch 
festgelegt wird. Nun möchte ich eine '1' erhalten wenn ein einzelnes Bit 
des Vektors auf '1' gesetzt ist.
Geht es vielleicht auch mit "when" oder nur mit einer for-Schleife ?

ausgang <= '1' when vector ???????

Danke
Gast #889562
Lesenswert?

:HDLParsers:3236 - "E:/Programmieren/VHDL/EDA Design/Xilinx ISE
   Projekte/Enigma/Enigma.vhd" Line 176. Can not determine the "others" 
values
   in aggregate. (LRM 7.3.2.2)

Ist kein Array. Heisst nur so.

signal error_array : std_logic_vector(0 to number_of_rotors_array - 1) 
:= (others => '0');
Gast #889771
Lesenswert?

Geht es vielleicht so:
1
constant zero_array_c : std_logic_vector(0 to number_of_rotors_array - 1) := (others => '0'); 
2

3
signal error_array : std_logic_vector(0 to number_of_rotors_array - 1) := (others => '0');
4

5
...
6

7
when error_array /= zero_array_c?

Rick
Gast #889794
Lesenswert?

...
when vector /= (others => '0') ..
...

kann nicht funktionieren, denn sonst müsste Typ von (others => '0')
aus dem Operator /= abgeleitet werden, der den Typ wiederum aus vector
ableitet, das funktioniert aber nur bei Zuweisungen. In VHDL müssen
aber Typen vorab bekannt sein, (others => '0') ist typlos und wird
erst bei Zuweisung (nicht bei Vergleichen) typisiert.
Gast #889824
Lesenswert?

Stimmt, geht.
Und lustig geht es weiter.
Alternativ könnte man auch ein wiredOr als Auflösungsfunktion verwenden.
So oder so ähnlich.

-- function wired_or (inputs: bit_vector) return bit is
    -- constant float_value: bit := '0';
  -- begin
    -- if inputs'length = 0 then -- keine treiber aktiv
      -- return float_value;
    -- else
      -- for i in inputs'range loop
        -- if inputs(i) = '1' then
          -- return '1';
        -- end if;
      -- end loop;
      -- return '0';
    -- end if;
  -- end function wired_or;

  -- subtype bus_bit is wired_or bit;
  -- signal a : bus_bit;

Aber wann nimmt man ein logisches Oder und wann ein Wired-Or ?
Zusammenschalten oder verknoten ?

Entweder es geht und wir wissen nicht warum.
Oder es geht nicht und wir wissen warum.
Gast #889831
Lesenswert?

Fragt sich nur, wie "knote" ich jetzt die Datenausgabe zusammen ?
Wie gesagt, die Anzahl der rotoren ist generisch.

type array_of_std_logic_vector is array (0 to number_of_rotors_array-1) 
of std_logic_vector(0 to data_width_array-1);
signal data_out_array       : array_of_std_logic_vector;

Es soll nur ein std_logic_vector herauskommen.

data_out : out std_logic_vector(0 to data_width - 1) := (others => '0');

Geht wohl nur über einen Prozeß ?
So einfach mit when lässt sich das wohl nicht verdrahten ?

Na da habe ich mir ja was feines als Übungsaufgabe ausgesucht

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren