それほど頻繁に使うわけではないけれでも便利なもの。
たとえば次のように書くと(dataは複数ビットのバス)。
- assign all_on = &data; // AND
- assign bit_on = |data; // OR
- assign parity = ^data; // XOR
all_onはdataの全てのビットが1の場合のみ1。
bit_onはdataのいずれかのビットが1でれば1。全てのビットが0の場合のみ0。
parityはdata中に奇数個の1がある場合は1。偶数個の1があある場合は0となる。
つまりそれぞれこんな感じ
- all_on = data[0];
- for (i=1; i < DATA_WIDTH; i=i+1)
- all_on = all_on & data[i];
- bit_on = data[0];
- for (i=1; i < DATA_WIDTH; i=i+1)
- bit_on = bit_on | data[i];
- parity = data[0];
- for (i=1; i < DATA_WIDTH; i=i+1)
- parity = parity ^ data[i];
ビット幅を気にする必要がないので楽ですよね。
0 件のコメント:
コメントを投稿