AIの片隅で(27) Googleの生成AI、GeminiにBCDデコーダを設計してもらう

Joseph Halfmoon

生成AIしてますか?頭の固い年寄はサッパリなので練習中です。今回はGoogle GeminiにBCDデコーダを設計してもらいました。標準ロジック 74HC42 相当の動作をする回路を想定。前回のバイナリカウンタは生成されたVerilogソースそのままでシミュレーションOKでしたが、今回は多少変更が必要でした。

AIの片隅で 投稿順index

※最近、使えるようになったGoogle様の生成AI、Gemini(無料プランだけれども)を使ってコードを生成してもらっています。

BCDデコーダ

BCDデコーダは、BCD(バイナリ・コーデッド・デシマル、2進化10進数)をデコードするものです。7セグメントLEDを駆動するときに「7セグ」タイプのBCDデコーダが使用されることが多いです。その辺の事情をGoogle Gemini様はお見通しみたいで、何も言わずにBCDデコーダを作ってとお願いすると7セグ用のVerilogソースを生成してくれました。まあ、7セグ用の回路を修正しても目論見の回路は直ぐできるのだけれど。

今回は、標準のロジックIC

74HC42

と同等のデコーダを作製したいと思います。別シリーズでチップセレクト信号の生成に使っていたりするもの。BCD-to-decimalデコーダね。なお、また別なシリーズで、手作業で作成したVerilogソースをFPGA(Xilinx Spartan7)上に実装して動作確認までしてます。今回はGeminiに作成してもらったVerilogソースを前回同様Xilinx Vivado環境でシミュレーションして動作確認したいとおもいます。

プロンプトへの入力

今回はこんな感じっす。

Verilogを使って、10進BCDデコーダを設計して

何も指定しないと7セグ用のデコーダを生成しようとするみたい。そこであえて「10進」と指定してみましたぜ。4ビット入力と書こうかとも思ったのですが、Gemini様がBCDの「1桁」は4ビットだと分かっていらっしゃるみたいだったので省略。

最初に生成された結果が「ぱっと見もっともな感じがするけど、いただけないやつ」だったので、今回は3案だしてもらいました。結果はこんな感じ。

    • 第1案、いただけない感じだったので却下。
    • 第2案、OKな感じだったので、本体ソースはこれを採用。
    • 第3案、第一案の焼き直し的なヤツなので却下。ただし、第3案にはテストベンチ相当のモジュールが別途生成されていたのでテストベンチ部分はこれを流用。

なお、いただけない感じとかOKな感じとかは個人の感想ですが、多分いただけない感じのやつは思ったような動作しないデス。

Vivado環境でシミュレーションを試みた結果
    • 問題点、キーワード

第2案の回路構成自体は良さげ(当方の意図に近い)だったのですが、ソース冒頭にエラーが含まれてました。こんな感じ。sourceError

モジュールの出力信号名に output とか名前をつけているのがエラーの原因でした。Vivadoのエディタがエラーを見つけて上記のように理由も提示してくれるので、変更はお楽。ううむ、案1、案2ではフツーに使えるお名前が信号名につけられていたのに、案2だけキーワード含んでました。帯に短し襷に長しってことかい。ここは output を cs (チップセレクトのつもり)とお名前変更。修正後のソースが以下に(緑のマーカ部が修正したところ。)

sourceFixed

    • テストベンチ・ファイルとの整合性

第2案のソースを第3案のテストベンチと組み合わせようとしています。Gemini様のソースは案の中では整合性がとれているお名前みたい。しかし案をまたぐ整合性はないようなので、信号名の変更は必須でした。それに、第2案のモジュール本体ソースに手修正を入れてしまってもいます。結局、テストベンチ部分にも修正が必要。テストベンチのソース先頭部分はこんな感じ(緑のマーカ部が修正したところ。)tbFixed

    • シミュレーション結果

Vivado付属のシミュレータで実行した結果が以下に。SimResults

BCDをデコードしておるね。ただ74HC42はローアクティブ、Gemini様の結果はハイアクティブ。そこは言ってなかったな。。。

AIの片隅で(26) Googleの生成AI、Geminiにバイナリカウンタを作ってもらう へ戻る

AIの片隅で(28) Googleの生成AI、Gemini、エミッタ接地増幅回路を設計して へ進む