HalfbandUpsampler::<COEFFICIENT_SET>
複数channelのframe vectorを1個のMACでTDM処理する2x halfband upsampler。
sampleはQ4.23、係数はQ1.17。module境界はQ4.23で統一し、±1.0の信号を±8.0の範囲で扱う。
出力もQ4.23のまま。補間によって+/-1.0を超える場合もある。
入力はQ4.23上で+/-1.0以内(Q1.23相当)であることを前提とする。even phaseの係数の絶対値和は約1.346なので、
出力は最大+/-1.35程度、pair_sum(対称tapの和)は最大+/-2.7程度になり、どちらもQ4.23(±8)の範囲に収まる。
この前提を外れる入力(Q4.23上で±4.0を超える両端)ではpair_sumが27bitでwrapし、乗算前に破損するため、
producer側で入力が+/-1.0以内に収まることを保証すること。
入力frameはinput_valid && input_readyで受理し、処理中はinput_readyをLowにする。
出力はeven phase、odd phaseの順にchannel vectorを1回ずつ出力する。
output_validとoutput_samplesは1クロックの出力レジスタを経由する。各出力は対応する状態に入ってから
1クロック後に現れ、ちょうど1クロックの間保持される。2x upsamplerのため入力frame 1つにつき
even/oddの2出力frameを2クロック連続のburstとして出力するので、output_validは2クロック連続でHighになる。
historyはSRAM推論のためresetで初期化しない。起動直後の内容は不定であり、最初のHISTORY_LENGTH frame分の出力には不定値が含まれる。ストリームが進めば即座に実データへ置き換わるため、 消費側は起動過渡の値を要求しないこと。 historyは循環アドレス方式(書き込み位置のみが前進し、タップkは書き込み位置からk前の位置にある)で、 left/rightの2タップを同時に読むため同じ内容を2コピー持つ。書き込みは入力受理後に1 channelずつ行う。 MACはSRAMの同期読み出し(登録アドレス、1clkレイテンシ)をprefetchパイプラインで吸収し、 1 pair/cycleを維持する。SRAMの書き込みと読み出しは別状態で行うためread-during-writeは発生しない。
係数はfull tap列ではなく、halfbandの対称pair係数を実装した
HalfbandCoefficientSet packageから受け取る。MAC自体はchannelと係数pairの
両方向へ時分割共有する。
COEFFICIENT_SETは係数set prototypeHalfbandCoefficientSetを実装したpackageで、デフォルトはHalfband103Q1_17。
Tap数が少ないHalfband39Q1_17も用意している。tap数が少ないと周波数特性は悪化するが、MACの処理時間は短くなる。
Generic Parameters
| COEFFICIENT_SET | HalfbandCoefficientSet |
|---|
Parameters
| CHANNELS | u8 | channel数。1つのMACでTDM処理する。ステレオを想定して2をデフォルトとする。 |
|---|
Ports
| clk | input | clock | system clock |
|---|---|---|---|
| rst | input | reset | reset |
| input_valid | input | bbool | input frame vector valid |
| input_ready | output | bbool | input frame vector ready |
| input_samples | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 input_port [CHANNELS] | Q4.23 input frame vector |
| output_valid | output | bbool | output vector valid |
| output_samples | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port [CHANNELS] | Q4.23 output frame vector |