デジタル設計のラボ:Verilog、VHDL、yosys を 1 台の専用 Ubuntu VM で

このラボでは、生徒 1 人ひとりにデジタル設計者の道具を、1 台の Ubuntu VM の中で渡します。Icarus Verilog と GHDL が Verilog と VHDL で書いた回路をシミュレーションし、yosys が設計を論理ゲートに変えます。生徒は回路を書き、テストベンチで動かし、真理値表や波形を読み、隠したテストベンチで採点される設計を完成させます。

生徒のパソコンには何も入れる必要がなく、ボードもいりません。道具は本物の iverilog、vvp、ghdl、yosys で、Ubuntu のアーカイブから入ります。デスクトップの波形ビューアーはないので、波形は vcd2txt で文字として読むか、vcd2svg で絵にして、ラボのポート 8000 で開きます。

生徒が学ぶこと

回路をどう書き、どう確かめるかを学びます。半加算器は用意されていて、全加算器を Verilog で書き、もう一度 VHDL で書くので、同じ回路を 2 つの言語で見られます。カウンターでは、クロックが何をするかを見ます。信号を VCD ファイルに記録し、文字の行として読みます。そのあと、イネーブルと同期リセット付きの 4 ビットカウンターを完成させ、yosys が作るゲートの数を数えます。フリップフロップは 1 ビットを覚え、ラッチは誤りだと分かります。

5 つのパート

1 つ目は Verilog の組み合わせ回路です。半加算器の真理値表を読み、全加算器を書きます。2 つ目はクロックと波形です。用意されたカウンター、その VCD ファイル、vcd2txt と vcd2svg を使います。3 つ目は同じ全加算器を VHDL で書き、GHDL の 3 つの手順、解析、エラボレート、実行を踏みます。4 つ目はイネーブルとリセット付きのカウンターを生徒が完成させます。5 つ目は hdl gates で yosys を使い、設計に必要なセルの数を見ます。生徒が編集するものはすべてフォルダー hdl にあり、ホームフォルダーの README.md が何をするかを伝えます。答えは書いてありません。

ブラウザーで動かす

VM ラボは、モジュールのラボ課題として設定し、サンプルはラボのページにあります。マシンは小さく、CPU 1 つ、メモリ 1 GB、ディスク 10 GB です。シミュレーターが使うメモリは数メガバイトです。

  1. ラボを追加する. 担当するモジュールで課題を追加し、Ubuntu VM ラボのカードを選びます。ページには compose ファイルの代わりに、マシンの短い説明が表示されます。
  2. サンプルから始める. ページに、すぐ使えるラボが並びます。Digital design を選びます。サンプルを使うと文章が置き換わりますが、元に戻すで自分の文章に戻せます。
  3. 公開して自分用のコピーを起動する. 公開してから、開始を押します。ラボの setup スクリプトが、VM の初回起動時に Icarus Verilog、GHDL、yosys を Ubuntu のアーカイブから入れ、補助コマンド、作業用ファイル、README を書き込みます。数分かかります。
  4. ターミナルを開く. ターミナルを開き、ホームフォルダーの README.md を読みます。ラボのポート 8000 には、生徒が描いた絵のフォルダーが表示されます。

このラボの基本レッスン

Digital Design Basics は、このラボ(Ubuntu VM)で行う短いレッスンです。導入、「できる」で書いた目標、キーワード、復習の問い、考えごとの確認、よくある間違い、最後の確認があり、各ステップの実行ボタンがコマンドをマシンのターミナルに入力します。生徒は半加算器を読み、シミュレーションして真理値表を読み、カウンターを動かして波形を文字で読み、同じ半加算器を VHDL と GHDL でシミュレーションします。

このレッスンは見て回るだけで、ラボ本来の課題である全加算器とカウンターは生徒に任せるので、答えは出てきません。

採点の仕組み

ラボにはチェックがあります。保存したマシンのコピーで動き、生徒の 3 つのファイル full_adder.v、full_adder.vhd、counter4.v を、生徒が見ることのないテストベンチと一緒にコンパイルします。各テストベンチは基準となるモデルを持ち、設計と比べます。カウンターはクロックの立ち上がりの前後ごとに比べるので、同期していないリセットは見つかります。テストベンチは、チェックが毎回新しく引く数を入れた結果の行を表示するので、設計自身が正しい行を表示することはできません。finish や system を呼ぶ設計は断られます。次に、yosys がラッチなしで設計を読めること、カウンターにフリップフロップがあってセルの数が単純な設計を超えないことが必要です。チェックが表示した最初の行が理由を伝えます。

  1. 配る. 課題と同じようにラボを割り当てます。希望すれば期限も付けられます。生徒ごとに専用の VM が付き、授業のあとも残ります。
  2. チェックを実行する. クラス一覧の生徒の行で、チェックを実行を押します。保存したマシンのコピーを起動し(コピーは保存し直されません)、ラボのチェックスクリプトを root で実行して、合格したか、何を表示したか、いつかを示します。結果は生徒には伝わりません。
  3. 採点する. チェックが表示した最初の行を読みます。隠したチェックで出力が違った、設計がラッチを作った、など、何が正しくないかが書いてあります。足りなければ理由を付けて返します。

GitHub の定義ファイル

このファイルがラボの定義のすべてで、プラットフォームが実行する文章そのものです。大きさ、ポート、setup スクリプト、補助コマンド、作業用ファイル、README、チェックが入っています。コピーして回路やテストベンチを変えれば、もっと長いラボが作れます。

このラボを試す、そして費用

無料の個人アカウントで、このラボの基本レッスンに取り組めます。毎月、ほとんどのレッスンに足りる無料クレジットがあり、カードは要りません。クラスで使う場合、学校は最初の365日間、生徒50人まで無料で、その後は生徒1人あたりの年額です。すべてのラボが含まれ、教職員は無料です。

よくある質問

ラボにライセンスやボードは必要ですか。
いいえ。Icarus Verilog、GHDL、yosys はオープンソースで、Ubuntu のアーカイブにあります。生徒の VM の起動時に入るので、私たちが配布するものはありません。配置や配線はしないので、ボードもいりません。
なぜ波形を文字で読むのですか。
図で見るビューアーにはデスクトップが必要ですが、ターミナルの VM にはありません。ラボは VCD ファイルを vcd2txt で文字の行として読み、vcd2svg で絵にします。Ubuntu 26.04 の GHDL は GCC バックエンドで、テストベンチをプログラムにコンパイルするので、ghdl -e はファイルの隣に実行ファイルを書きます。
生徒は何かを壊すことがありますか。
壊せるのは自分のコピーだけです。アカウントのない訪問者のマシンが届くのは Ubuntu のアーカイブだけで、ファイルを壊したら hdl reset で配ったときの状態に戻せます。
実際の生徒の VM で試しましたか。
setup、レッスンのコマンド、チェックと、チェックをだます各方法は、VM の代わりの本物の Ubuntu 26.04 コンテナで、arm64 のマシン上で実行しました。起動した生徒の VM でポート 8000 の絵を systemd のユニットから出すところと、生徒のマシンの amd64 パッケージは、授業の前に一度試すことをお勧めします。