manahiyoの気まぐれ

備忘録を兼ねたブログです。

ChatGPTでLED点滅のVHDLコードを生成してシミュレーションしてみた

はじめに

前回も軽く同じようなことをやっていますが、中途半端でしたので、今回は改めてコンパイル及びシミュレーションまで通して、ChatGPTの実力を見てみました。

GPT-3.5で試してみる

まずは無料で使えるGPT-3.5でやってみます。

英語のほうが良い結果が得られるようなので、プロンプトは英語で行いました。

VHDLコードを書かせてみる

次のプロンプトでコードを書かせてみます。

Please write me the VHDL code for blinking led. The interval is 0.5s and clock is 10MHz.

結果

IEEEの宣言がないところが気になりますが、そのくらいは自分で足します。

ただ、コンパイルして気が付きましたが、LEDの信号がエンティティの出力になっているのに内部で直接参照しているのでエラーになります。

VHDLのテストベンチを書かせてみる

次のプロンプトを使いました。

Please write me the code for testing that code.

結果

雰囲気はいいのですが、waitの時間が明らかにおかしいです。

assertとかを使っているので、やる気は感じられます。

とはいえ、残念ながら新人並みのレベルのようです。

GPT-4で試してみる

GPT-3.5ではいまいちな結果となったので、GPT-4でどのくらい改善されるか、期待されます。使用するプロンプトは同じです。

VHDLコードを書かせてみた結果

おっ今回は宣言もちゃんとついてきました。

インターバルの値も定数宣言しているところなど、パワーアップが感じられます。

VIVADOでコンパイルも通りました。

VHDLのテストベンチを書かせてみる

こちらは先ほどのようにassertなどはないですが、とりあえず実行できそうです。ちなみにassertで値のチェックを追加してと指示すれば、やってくれました。

VIVADOでシミュレーションを実行した結果がこちら、LEDが一定間隔で反転していますのでぱっとみよさそうですが・・・あれ、インターバルが0.5sで指定したはずが、0.05sになっているようです。

 

間違いを指摘して修正を依頼してみる

ここは素直に指摘してみましょう。

I run the simulation that testbench. But the interval seems to be 0.05s instead of 0.5s. Can you correct it?

回答

やるね、ChatGPT。正しい修正をしてきました。

修正後がこちら。ちゃんと0.5sで反転してます。

 

ChatGPTにTCLコマンドを聞くのも役立ちそう

ついてなのでシミュレーションを5s実行するコマンドを聞いてみました。

Please tell me the TCL command to simulate for 5 seconds in VIVADO.

こちらについては残念ながら一発では正しい回答は得られず。

とはいえエラーなどを指摘した結果、下記の正しいコマンドを提示してきました。

感想

コストがかかるのが難ですが、GPT4は明らかにレベルが上がっています。

今後もいろいろ試してみたいところです。