ハードウェア 技術

Verilog-Aで作るミニツール: マルチ電源ブロック

2021年10月3日

Verilog-Aはモデリング言語ですが、シミュレーションの時のちょっとした信号変換モジュールを作成するのにも活用できます。この記事では、ミニツールの作成として、Verilog-Aを用いた回路設計に便利な「マルチ電源ブロック」を紹介します。

QucsStudioを用いたVerilog-Aモデルの利用方法については、次の記事を参考にして下さい。

無料で使えるQucsStudioでVerilog-Aを試す

概要

電子回路を組んでいると、複数の電源を用意したいことがあります。主回路の電源であったり、バイアス源であったり、と複数の電圧源を回路で使うのが当たり前です。

こういった電源は電圧源素子を複数配置することで実現します。電気回路シミュレータは、電圧源素子があらかじめ用意されているので、そういった素子を複数配置するだけで、簡単に作成することはできます。

ですが、回路図エディタで回路を構成する場合、この電圧源の配置は、回路図上の面積を占めることになるで、好ましくない時があります。しかも、回路図エディタで何回もブロックを変更することになるので、使い勝手が悪い時もしばしばあります。

そこでマルチ電源ブロックとして、1つの回路素子があると回路図エディタを経由して回路設計をしている時には便利です。条件分岐も入らない単純な回路なので、Verilog-Aでそういったマルチ電源回路を組んでみることにします。

仕様

マルチ電源回路はパラメータを受け取って、そのパラメータに応じて、対応するポートの電圧を制御する方法としましょう。また、基準電位をグラウンドポートで与える様に設計します。組み込み型の電圧源も正極と負極があるので、負極はグラウンドポートして全ポート共通にする、というのが、全体としても整合性が取れるでしょう。

Verilog-Aはその特徴から、非常にポート数の拡張は非常に容易です。今回は出力ポート数4として設計してみることにしました。

今回のマルチ電圧源は電流については電流については動作保証をしない物とします。ポートから流れ出た電流をグラウンドノードから吸い上げる、というのが正しい動作という考えもありますが、今回はあくまでも理想的な電圧を作ることに集中しています。

実装

上記をVerilog-Aで記述すると、以下の様になります。

`include "disciplines.vams"
`include "constants.vams"

// Module name becomes name of the model file names.
module mvoltage_source (out1,out2,out3,out4, gnd_port);
inout out1,out2,out3,out4, gnd_port;
electrical out1,out2,out3,out4, gnd_port;

`define attr(txt) (*txt*)
parameter real v1=0 from [-inf:inf] `attr(info="output voltage level at out1" unit="V");
parameter real v2=0 from [-inf:inf] `attr(info="output voltage level at out2" unit="V");
parameter real v3=0 from [-inf:inf] `attr(info="output voltage level at out3" unit="V");
parameter real v4=0 from [-inf:inf] `attr(info="output voltage level at out4" unit="V");
analog begin
V(out1,gnd_port)<+ v1;
V(out2,gnd_port)<+ v2;
V(out3,gnd_port)<+ v3;
V(out4,gnd_port)<+ v4;
end
endmodule

評価結果

上記モジュールを評価するのは時間軸評価で十分ですが、DC解析も見てみましょう。QucsStudioで実装して、実行結果を確認することにします。

ベンチと実行結果を以下に示します。パラメータはポート1が1V、ポート2が2V、ポート3が3V、ポート4が4Vといった具合に設定しています。QucsStudioの実行上の制限により、複数のシミュレーションが同時には走らせられない様なので、二つあるシミュレーションの一方をdeactiveして無効化することで、実行してみました。

上記に示すように、出力が設定通りに実現できていることが分かります。今回のシミュレーションでは示していませんが、グラウンドノードの所に10Vの電圧をかけると、基準となる電圧が上がるため、出力が全体的に10V持ちあがることも確認できます。また、もしグラウンドノードにsin波を入れれば、基準がsinで揺れるので、出力もsinで揺れることになります。

終わりに

今回はVerilog-Aを利用した単純なツールの作成を実例として紹介しました。

Spiceの標準機能だけでマルチ電源を実現するのは難しいことではありませんが、回路図の大きさなどを踏まえると少し面倒なことがあります。今回はVerilog-Aを用いることで、短いソースコードで簡潔に、マルチ電源を表現することが出来ました。

こういった工夫で回路図が見やすくなったりします。今回の記事を自前のIP構築の参考にして下さい。

-ハードウェア, 技術
-

© 2022 もぐもぐアカデミー