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
: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');
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
... 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.
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.
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
Welcher std_logic_vector soll denn rauskommen? Nur einer? Dann wäre der Rest überflüssig. Oder alle nacheinander? Dann brauchst Du einen Mux mit Zähler oder eine FSM. Rick
Jörg wrote: > ... > when vector /= (others => '0') .. > ... > > kann nicht funktionieren Stimmt, ist mir danach auch aufgefallen. Und dann habe ich mich auch daran erinnert dass es schon einen Artikel zu dem Thema gibt: [[VHDL schnipsel or vectorbits]]
Hallo Rick, es soll nur einer rauskommen. Also alle std_logic_vector´s in einem Array generischer Grösse Oder verknüpfen. Bis dann
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.