はじめに
先日、goolgeが支援するオープンなPDKについて記事を書きました。
参考半導体設計経験者がGoogleが支援するSkywaterのIC PDKを俯瞰する
続きを見る
その流れで、電子回路の設計環境を構築しているので、Qucsのインストール方法について、ご紹介します。厳密には、Skywaterのフリーのテープアウトツールとしてはngspiceが指定されている様なので、Qucsは使うべきではなさそうですが、回路図エディタとしては使えそうなのと、簡単な受動回路設計には便利そうなので、今回ご紹介しておきます。また、最後に他のSpice系との連携を踏まえて、調査した結果を共有します。
なぜQucsか?
回路シミュレータといえば、フリーなものでも、伝統的で最も有名なSpice3f5がありますし、その流れを継承したngspiceもあります。勿論、有償な物であれば、SynopsysのHSpice、CadenceのSpectre/MMSIMと多くの物がリリースされています。
その中、なぜQucsなのかといえば、以下の理由に寄ります。
- 有償のツールは数百万円のオーダーからなので、個人では手が届かないし、そもそもオーバースペック
- Spice3f5は流石に古すぎる
という所です。
ngspiceとはかなり迷いましたが、
- Qucsは回路図エディタも含めて、統合環境になっている
- Qucsからngspiceの呼び出しが出来る
- QucsはVHDL/Verilogとの連携の可能性がある
ということで、「保守的なngspice」対「先進的なQucs」という対比になり、今回はQucsを採用してみました。
とは言え、課題がないわけではなく、はじめに説明した通り、SkywaterのPDKはngspice想定なので、この設計環境構築の一環にはならないのです。ただ、Qucsからngspiceをkickする系の方が、回路図エディタについて悩む必要がない、という観点において、優れているとも思っていて、まずはそういった系を目指している所でもあります。
Qucsのダウンロードとインストール方法
Qucsのダウンロードは以下のサイトから実施してください。
- Quite universal circuit simulator (公式サイト): http://qucs.sourceforge.net/
ダウンロード手順は以下の通りです:
- 公式サイトにアクセスし、「download」タブをクリック
- ソースかバイナリをダウンロードするのですが、分からなければ、「Official Qucs packages」から該当するものを選択。
※自分はWindowsなので、「Qucs portable for Windows」を選択 - SOURCEFORGEのページに飛ぶので、「Download Latest Version」と表示されている緑色をクリック
※執筆段階では、「qucs-0.0.19-win32-mingw482-asco-freehdl-adms.zip」が最新だった様子 - ダウンロードして来たzipをどこかに回答する。スペースの含まれないパスが望ましいです。
- 展開すれば、Qucsのインストール自体は終了です。お疲れ様でした。
Qucsの初期設定と起動方法
Qucsを使い始める前に、簡単に初期設定しないといけないかもしれません。Qucsの起動シーケンスは少し特殊で、バッチ経由でGUIまでを起動するようになっています。これはLinux流儀ともいえる起動方法なので、Windowsしか知らない方はなじみがないかもしれません。
この起動するときに実行するべき「qucs.bat」ですが、中に設定値が書かれている、というのも特徴になります。ですから、別のプログラムと連携を取る場合には、このファイルを編集すると連携を取ることが可能な様です(他ツール未インストールのため未確認)。
なお、現在連携が取れるプログラムとしては、
- MinGW:Windows用Linuxソースコンパイル環境ともいうべきコンパイラ・ツール群
- FreeHDL:VHDLシミュレータ
- Icarus Verilog:Verilog シミュレータ
があり、設定値に書かれている様です。必要に応じてパスを確認して下さい。
設定が正しければ、qucs.batをダブルクリックで起動すれば、以下の画面が立ち上がるはずです。
これでインストールと起動確認は完了です。
Qucsの使い方
Qucsの使い勝手は、既存のツールでいうと、Keysightの「Advanced Design System (ADS)」に似ていますし、それを目指して開発されているような印象があります。
ざっと簡単な使い方を見ていきましょう。
回路図の作成・入力
Qucsのシミュレーションは回路図の入力から始まります。まずは、部品からコンデンサとインダクタと抵抗を配置して、RLC直列共振回路を組んでみましょうか。
- 「Main Dock」内の「lumped components」を選択。その中の「抵抗(US)」「コンデンサ」「インダクタ」を選択し、シートに配置します。抵抗は二種類ありますが、形状が違うだけなので、どちらでもOKです(今回はギザギザ型を使いました)。
- 「sources」から「電圧パルス」を選択
- 「メニュー:挿入」から「ワイア」を選択して、結線。
- 同様に「メニュー:挿入」から「グラウンドを挿入」を選択して配置。
これが入力出来たら、回路図を保存してください(「メニュー:ファイル」から「保存」)。適当な名前で保存してもらえれば良いのですが、今回は「test.sch」としておきました。
ダブルクリックすればパラメータを変更できますが、今回はテストなので、初期値のまま行ってみましょう。
解析準備
解析の準備として以下を実施します。
- ノード名の割り当て:各配線(ノード)に名称を割り当てること
- 保存データの指定:保存したいデータを指定すること
まず、ノード名が付いていないと話がしづらいだけでなく、シミュレータに指示も与えられなかったりします。ですので、必要なノード名には名前を付けましょう。
また、保存データはプローブボックスを置いておかないと保存されな仕様の様です。伝統的なspiceシミュレータではprobe分により、保存データを指定したり、オプションで全保存が出来てたりしましたが、基本的に「保存したいものをプローブボックスで観測する」というスタイルな様子。
ですので、以上を実施したのが以下です。ノード名もvinとoutという形で命名しました。「メニュー:挿入」から「ワイアラベル」で挿入できます。
時間軸解析(transient解析)
それではシミュレーションをしてみましょう。
最初の解析は基礎中の基礎である、時間軸解析をやってみましょう。解析の挿入は「Main Dock」の中から「simulations」を選択すれば、使用可能なシミュレーション一覧が出てきます。この辺りもADSと同じ設計思想ですね。
ここでは時間軸解析がしたいので「トランジェント解析」をシートに配置しましょう。ただ、シミュレーション時間は少し短いので、伸ばしてみましょう。「10ms」あれば十分でしょうか?ダブルクリックして、「10ms」に変更します。また、時間軸の粒度も「0.1ms」粒度に変更します。
準備が出来たら、「メニュー:シミュレーション」の「シミュレート」でシミュレーションを実行します。実行が正常に完了すると「データディスプレイ」という画面になるので、そこにグラフ類を配置して、結果を確認することが出来ます。
定数はデフォルト値のままなので、振幅は非常に小さいですが、パルス信号が入って、LC共振している様子が確認しています。Rは50オームしかついていないので、殆ど効いていませんが、時間が経てば、信号は減衰方向に向かうでしょう。
その他の解析方法
その他の解析方法として、DC解析、AC解析、SP解析といったあって欲しい解析方法から、ハーモニックバランスまで一応準備されています。また、パラメータ最適化も出来る様になっているみたいです。
このあたりの解析方法は、時間軸解析ほど単純ではないので、今回は説明を割愛しますが、一通り、設計に使えそうな感じです。
もし本格的に使い方を確認したいのであれば、以下のページを参考にしてもよいでしょう。少し古いですが、十分活用できるはずです。
Quicsのネットリスト連携
最後にQucsのネットリスト連携について、まとめておきます。
ネットリストについては、「書き出し」と「読み込み」がないと設計の時は困ってしまいます。というのも、デバイスモデルなどは、Qucs用というより、Spice用で作成するので、それをQucsにインポートしないといけないわけですが、GUIベースのQucsではどうしてもそういった作業にあたり、作業量が大きくなる傾向にあります。
ですから、テキストベースである程度作業が出来ないと、実務上は結構シンドイことになるのです。勿論、趣味でやるだけなら、許容範囲であるともいえますが、出来れば面倒は避けたいもので、そういった意味でもネットリストとの親和性というのは非常に気になってきます。
Qucsのチュートリアルに「SpiceのネットリストをQucsでシミュレーションする方法」として、pdfが公開されています。それによると、「QUCSCONV」というSpiceフォーマットからQucsフォーマットにネットリストを変換するプログラムを用意しているとのこと。この方法を使えば、SkywaterのPDKもインポートが出来るかもしれません。
モデルの精度などの問題もあり、安易にこういった手法に頼るわけには行かないのですが、今後検討して行きたいと思います。
おわりに
今回は、Qucsという電子回路シミュレータを紹介しました。
Spiceは広く使われていますが、内部実装的にはかなり古くなっていますし、解析エンジンも少し力不足な所があります。そういった点で、以前からQucsには注目していたのですが、ADSを目指した形で、割といい感じに実装されていそうに見えたので、今回紹介しました。回路図エディタとセットで統合環境になっているので、そういった意味では非常に魅力的なツールだという印象です。特に伝送線路モデルが豊富に用意されているというのも、ADSと同じで非常に良いのではないでしょうか?
ただ、ngspiceの方は、より高い頻度で更新されているので、開発コミュニティの活発具合は少し気になる所です。MOSなどのアクティブな回路や制度が必要な設計ではngspice、気軽に回したいのはQucsという形で棲み分けするのが良さそうにも思えます。特にQucsはngspiceも呼び出せますから。
今後、どの程度Qucsを触るかは実は未定ですが、使える様であれば、積極的に使って行きたいと思っています。