直接形と転置形

[] [] []


1個ずつシフトインされるN個のデータに対する演算も、データが全部そろってから計算する直接形RTL記述としてはわかりやすいが、部分的な演算結果をシフトしていく転置形の方が組み合わせ回路が多段にならないので高速動作する

(1) 直接形(direct)

(2) 転置形(transpose)

1) FIRフィルタ

入力にフィルタ係数cnをかけて和をとるには fn(x,y) = cn * x + y

dout[i] = c0 * din[i] + c1 * din[i+1] + c2 * din[i+2]

2) 文字列マッチ検出

入力が文字列 {c0,c1,c2} に一致したら1を立てるには fn(x,y) = (x==cn ) & y

dout[i] = (c0==din[i]) & (c1==din[i+1]) & (c2==din[i+2])

3) 最大値

入力のうち最大のものを出力するには fn(x,y) = (x>y)? x : y

dout[i] = max(din[i],din[i+1],din[i+2])

ただし、間にFFを挟めば直接形でも転置形でも同じくらい高速動作する。このときはFF数が少なてすむ方を選べばよい。

(1) パイプライン化した直接形(direct)

(2) パイプライン化した転置形(transpose)

◇◇

入力を出力へ直結すると、Linear Feedback Shift Register (LFSR)の直接形と転置形が得られる。

生成多項式を

g(x) = g[N] xN + g[N-1] xN-1 + ... + g[1] x + g[0]

  ここで g[N]=g[0]=1  g[*]=0,1

とすると次図のようになる。ただしXOR(+)は係数g[i]=1の所だけにつく。

(1) フィボナッチLFSR

(2) ガロアLFSR

両者においてd[N-1:0]の値は同じシーケンスにならないが、doutは、初期値d[N-1:0]=0...01から始めれば同じシーケンスになる

ちなみに、なぜフィボナッチとガロアの名前がついているのかはわからない。


[] [] []