SystemVerilog '(| a[x:0)' - was macht das '|'?

OP #5739589
Lesenswert?
• ▲
▼
ich versuche gerade, mir auf eine SystemVerilog-Quelle einen Reim zu 
machen. Da taucht folgendes Konstrukt auf, aus dem ich nicht so recht 
schlau werde:
1
a[ 'h6] = (| o[7:0]) ? b : c;

Der Fragezeichen-Operator rechts ist klar, aber was bedeutet der 
'|'-Operator in der Klammer?

(a ist ein zweidimensionales Array
1
logic [NUM_BITS-1:0] a[15:0];
)

Weiß das jemand aus der Hüfte? Danke.
OP #5739751
Lesenswert?
• ▲
▼
Samuel C. schrieb:
> Kurze Recherche sagt, dass dieser Operator ein OR über alle gegebenen
> Bits macht.

Vielen Dank - demnach wäre das o.g. Statement gleichbedeutend mit den 
VHDL-Zeilen:
1
function or_reduce(vec : std_ulogic_vector) return std_ulogic is
2
    variable res : std_ulogic := '0';
3
begin
4
    for i in vec'range loop res := res or vec(i); end loop;
5
    return res;
6
end function or_reduce;
7

8
a(16#6#) <= b when ?? or_reduce(o) else c;
Persönliche Seite #5741405
Lesenswert?
• ▲
▼
Markus F. schrieb:

> Vielen Dank - demnach wäre das o.g. Statement gleichbedeutend mit den
> VHDL-Zeilen: [...]

Nicht ganz. Wie Du ja am Anfang bereits angemerkt hast, handelt es sich 
um ein zweidimensionales object. Bist Du eigentlich sicher, dass das 
genau so im Quelltext steht? Du hast im Beispiel nämlich eine ungepackte 
Dimension (hinter dem Signalnamen). In dem Kontext is ein reduction 
operator meines Wissens nach nicht legal.
Persönliche Seite #5742593
Lesenswert?
• ▲
▼
Gepackte dimensionen haben ein definiertes Abbild im Speicher. Kann man 
auch praktisch in einer unit verwenden.
1
bit [3:0][7:0] fourbytes;
2
bit [31:0] oneint;
3

4
initial begin
5
    oneint = 32'h8000_0000;
6
    fourbytes = oneint;
7
    $display(fourbytes[3][7]); // prints '1'
8
end
Ungepackte Dimensionen verwendet man daher eher für "lose" 
zusammenhängende Daten.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.