2017-11-10 3 views
0

私は次のコードはコンパイルされないと理解しますが、コンパイルするのに似たものがありますか?論理として定義された用語でビット範囲を作成する方法

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

あなたが求めているのは、msb/lsbの範囲外のビットの値を指定するまで、組合せ論理ではありません。 –

+0

1回の操作でそれを行うためのvcs構文はありません。ループが必要であり、ビットごとに割り当てる必要があります。同じシミュレーションサイクルですべてのビットを割り当てない可能性があるため、これは櫛ではなくラッチです。 – Serge

答えて

0

このようなビット単位の決定を行うことができます。私はちょうどあなたがゼロに他のビットを設定したいと思っていたが、あなたはまた心配しないように(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

あなたは、不特定のビットが0になりたいと仮定すると、あなたは1行で行うことができます。

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

しかし、私はforループが

を理解するために他の誰かのためにずっとeaserだと思います
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 
関連する問題