![]() |
29 |
Cmod A7の利用 (8) |
![]() |
レベルダイアグラム
前稿のレベルダイアグラムを変数を用いて書き直したものが図705.1です。これに従いデータ変換器をBSVで開発します。ただし、前稿ではVRの開始角と使用角度範囲を105°, 90°と仮決めしましたが、試行錯誤で変更することを見越してパラメータ化したRTLとします。

- VRの全角度は300°
- VRの使用角はパラメータ化し、開始角a[°]、範囲b[°]
- VRの全角度の際のADC入力電圧はLTSpiceの結果より、0.2~0.94[V]
これらより、使用電圧は開始角の値をVa、終了角の値をVa+bとして、
- VL=0.2, VH=0.94
- Vrange=VH−VL=0.74
- Va=Vrange300a+VL
- Va+b=Vrange300(a+b)+VL
次にAD変換後のデータDは入力全範囲0~1[V]を4096分割する。開始角の値をDa、終了角の値をDa+bとして
- Da=4096Va=4096Vrange300a+4096VL=10.1a+819.2
- Da+b=4096Va+b=10.1(a+b)+819.2
- Drange=10.1b
一方、y座標の制約は以下のとおりであり、上限ytopと下限ybottomの値でクリッピングが必要。
- ybottom=44, ytop=186
- yrange=ytop−ybottom=142
これらからy座標を求めると、ADCのデータをDとすれば、
- y=yrangeDrange(D−Da)+ybottom=14210.1bD−142ba−142⋅819.210.1b+44=224.9b≪4D−142ba−11514b+44=225D−2272a−184216b≪4+44
y式中のシフトは固定小数点演算を行うために分母分子を16倍しているものです。さらに最小値Da、最大値Da+bで入力ADCデータのクリッピングを行います。
- Da=10.1a+819.2=(162a+13107)≫4
- Da+b=10.1(a+b)+819.2=(162(a+b)+13107)≫4
以上より、完成したBSVコードは以下のとおりです。
これをVivadoに配置した図は以下のとおりで単なる組み合わせ回路です。

このモジュールをダブルクリックすると以下のパラメータ設定画面が表示されます。aとbがすでに設定されているのは、残念ながらbsvにデフォルト値の設定が無いのですが、生成されたverilogのパラメータ文を修正したものです。verilogを10進で修正したため、vivadoでも10進表示となっています。
