水曜日, 2月 06, 2008

リダクション演算子

Verilog HDLのリダクション演算子。

それほど頻繁に使うわけではないけれでも便利なもの。

たとえば次のように書くと(dataは複数ビットのバス)。

  1. assign all_on = &data; // AND  
  2.   
  3. assign bit_on = |data; // OR  
  4.   
  5. assign parity = ^data; // XOR  

all_onはdataの全てのビットが1の場合のみ1。

bit_onはdataのいずれかのビットが1でれば1。全てのビットが0の場合のみ0。

parityはdata中に奇数個の1がある場合は1。偶数個の1があある場合は0となる。

つまりそれぞれこんな感じ

  1. all_on = data[0];  
  2. for (i=1; i < DATA_WIDTH; i=i+1)   
  3.   all_on = all_on & data[i];    
  4.   
  5. bit_on = data[0];   
  6. for (i=1; i < DATA_WIDTH; i=i+1)   
  7.   bit_on = bit_on | data[i];    
  8.   
  9. parity = data[0];   
  10. for (i=1; i < DATA_WIDTH; i=i+1)   
  11.   parity = parity ^ data[i];  

ビット幅を気にする必要がないので楽ですよね。

0 件のコメント: