2017-11-10 2 views
0

Ich verstehe den folgenden Code wird nicht kompilieren, aber gibt es etwas Ähnliches, kompiliert?Wie erstellt man Bit-Bereiche mit Begriffen als Logik definiert

logic [7:0] complete_set, partial_set; 
logic [2:0] msb_bit, lsb_bit; 

always_comb complete_set = <driven by a logic equation>; 
always_comb msb_bit = <driven by a logic equation>; 
always_comb lsb_bit = <driven by a logic equation>; 

always_comb partial_set[msb_bit:lsb_bit] = complete_set[msb_bit:lsb_bit]; 
+0

Was Sie fragen, ist nicht kombinatorische Logik, bis Sie angeben, was die Werte der Bits außerhalb der msb/lsb-Bereich sein sollten. –

+0

Es gibt keine vcs-Syntax, um es in einer Operation zu tun, Sie würden eine Schleife benötigen und sie Bit für Bit zuweisen. Und es ist ein Latch, kein Kamm, weil Sie möglicherweise nicht alle Bits im selben Simulationszyklus zuweisen. – Serge

Antwort

0

Sie könnten einige bitweise Entscheidungen wie diese treffen. Ich habe nur angenommen, dass du die anderen Bits auf Null setzen willst, aber du kannst es auch so einstellen, dass es egal ist (1'bx).

for(i = 0; i < 8; i = i + 1) begin 
    partial_set[i] = (i < lsb_bit) || (i > msb_bit) ? 1'b0 : complete_set[i]; 
end 
0

Angenommen, Sie die unbestimmten Bits wollen 0 sein, können Sie dies in einer Zeile tun:

always_comb partial_set = complete_set & (2**(msb_bit+1-lsb_bit)-1)<<lsb_bit; 

Aber ich denke, eine for Schleife viel einleuchtender wäre für jemand anderes

zu verstehen
always_comb begin 
     partial_set = '0; // or whatever the unspecified bits should be 
     for(int ii = lsb_bit; ii <= msb_bit; ii++) 
      partial_set[ii] = complete_set[ii] 
    end 
Verwandte Themen