4

Python では、次のように偶数ビットまたは奇数ビットを選択できます。

>>> bits = ['a','b','c','d'];
>>> bits[0::2]
['a', 'c']
>>> bits[1::2]
['b', 'd']

Verilog でこれを行うことができれば、式を展開して手動で行う必要がなくなるため、非常に実用的です。拡張 (つまり{a[0], a[2]}{a[1], a[3]}) すると、それ以外の方法でパラメータ化されたワイヤ セットでは明らかに機能しません。

4

2 に答える 2

2

あなたが与えたPythonの例のように、VerilogまたはSystemVerilogにビットスライスを行うメカニズムはありません。つまり、ビット間に 2 のステップを指定することはできません。

これはforループで行うことができ、自分の答えのように生成ブロックにある必要はありません。

あなたの答えからの変更された例:

always @(*) begin
   for (int i = 0; i < FLOORS; i++) begin
      RELEVANT[i] <= FLOOR_REQUEST[i*2+FORWARD];
   end
end

FLOORSが定数である限り、これは正常に合成されるはずです。

于 2012-12-22T03:16:01.713 に答える
1

これは、生成ブロックで実行できます。例:

wire [FLOORS-1:0] RELEVANT;

genvar i;
generate
    for (i=0; i<FLOORS; i=i+1) begin
        assign RELEVANT[i] = FLOOR_REQUEST[i*2+FORWARD];
    end
endgenerate
  • FLOORSは出力ワイヤの幅です (入力ワイヤの幅の半分)。
  • RELEVANT結果です。
  • FORWARD偶数/奇数セレクター (0 または 1) です。
  • FLOOR_REQUESTが入力です。
于 2012-12-22T01:08:29.860 に答える