クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

デジタル設計の基礎

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

仮想マシンラボ読了目安 13分コマンド10個

チップは作る前に書き表される

スマートフォンのチップには、何十億ものスイッチが入っています。それを1つずつ描く人はいません。技術者は回路をハードウェア記述言語で文章として書き、プログラムがその文章を実行して、何かを作るずっと前に、チップがどう動くかを確かめます。

このレッスンが終わると

メモ

Verilog で書いた小さな回路をシミュレーションし、出てくる表と波形を読める。

キーワード

  • モジュール:入力と出力を持つ1つの回路。
  • テストベンチ:別のモジュールを動かして、出てきたものを表示するモジュール。
  • クロック:一定のリズムで上がり下がりする信号。
  • 波形:時間とともに信号がどう変わるか。
  • シミュレーション:書き表したものをコンピューターで実行すること。

ウォームアップ:すでに知っていること

メモ

頭の中で答えましょう。1. 2進数で 1 + 1 はいくつですか。2. AND ゲートに1を2つ入れると何が出ますか。3. ビットとは何ですか。1つ目の答えはすぐに使います。

はじめる前に

メモ

このレッスンの上のバーにある ラボを開始 を押します。このラボは、あなた専用の Ubuntu マシン まるごとなので、コンテナより起動に少し時間がかかります。各 実行 ボタンは、そのコマンドをマシンのターミナルに、同じセッションで順番に入力します。マシンがまだ起動中と表示されたら、数秒待ってからもう一度押します。様子を見たり自分で入力したりするには、バーの ターミナルを開く を押します。

回路は短い文章である

あなたのファイルはフォルダー hdl にあります。最初のコマンドでそこに入り、次のコマンドで half_adder.v を表示します。半加算器は2つのビットを足します。入力 a と b、出力2つを持つ、1つのモジュールです。sum は a ^ b で XOR、carry は a & b で AND です。

コマンド
cd hdl

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
cat half_adder.v

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

テストベンチが動かして表を表示する

道具は Icarus Verilog です。iverilog は回路とテストベンチを1つのプログラムにコンパイルし、うまくいけば何も表示しません。vvp はそのプログラムを実行します。テストベンチは4通りの入力をすべて試し、真理値表を表示します。1 1 の行は carry が 1、sum が 0 で、これは2進数の 10 なので、1 + 1 = 2 です。

コマンド
iverilog -o /tmp/half half_adder.v half_adder_tb.v

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
vvp /tmp/half

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

チェック

ヒント

carry が 1 になる入力はどれですか。答え:a = 1 かつ b = 1 のときだけです。和が1ビットに収まらない行です。

よくある間違い

注意

Verilog のファイルは、Python のスクリプトのように1行ずつ実行されると考える人が多くいます。そうではありません。モジュールは、すべてが同じ瞬間に存在する部品を書き表したもので、assign の行は、いつも入力に従う1本の配線です。手順の一覧ではなく、図として読みましょう。

クロックと波形

counter.v は4ビットのカウンターで、clk が上がるたびに q が1ずつ増え、rst で 0 に戻ります。テストベンチはクロックを作り、すべての信号を VCD ファイル out/counter.vcd に記録します。2つ目の実行は、112 時間単位たったあとの q、つまり 10 を表示します。3つ目はファイルを文字にします。信号ごとに1行、5 時間単位ごとに1列で、# は 1、_ は 0 です。rst が高い間 q は 0 のままで、そのあと clk が上がるたびに1ずつ増えます。dut.q は、カウンターの内側にある同じ信号です。

コマンド
iverilog -o /tmp/counter counter.v counter_tb.v

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
vvp /tmp/counter

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
vcd2txt out/counter.vcd 5

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

チェック

ヒント

q が 0 から 10 になるまでに、clk は何回上がりましたか。答え:10 回です。数える1歩ごとに1回です。

同じ回路を VHDL で

VHDL はもう1つのよく使われる言語です。GHDL は3つの手順で実行します。ghdl -a はファイルを解析して確かめます。ghdl -e はテストベンチをエラボレートして、プログラムを作ります。ghdl -r はそれを実行し、テストベンチが同じ真理値表の4行、a、b、carry、sum を報告します。

コマンド
ghdl -a half_adder.vhd half_adder_tb.vhd

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
ghdl -e half_adder_tb

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
ghdl -r half_adder_tb

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

最後のチェック

ヒント

前に戻らずに答えましょう。1. テストベンチは何をしますか。2. vvp は何をしますか。3. GHDL の3つの手順は何ですか。4. 信号がいつ変わるかを示すものは何ですか。答え:モジュールを動かして、出てきたものを表示する。コンパイルしたシミュレーションを実行する。解析、エラボレート、実行。波形。では、ホームフォルダーの README.md を、ターミナルで cat ~/README.md として開きましょう。全加算器とカウンターは、あなたが書きます。

先生へ

ヒント

このレッスンは、ラボで進めるレッスンの小さな例です。ステップと実行ボタンがレッスンで、ラボは生徒それぞれのコピーです。VM ラボで行い、生徒はそれぞれ自分の Ubuntu マシンを持ち、シミュレーターが入っています。実行ボタンはそのターミナルに入力して、表示された結果を見せます。学習のポイント:1. モジュールは入力と出力を持つ回路である。2. テストベンチがそれを動かして真理値表を表示する。3. クロックが回路を1歩ずつ変え、波形がそれを見せる。よくある間違い:Verilog を順番どおりの手順として読むこと。準備するもの:ラボとブラウザー。ヒント:vvp の前に、4行の出力をクラスに予想させましょう。ラボ自体には、隠したテストベンチで3つの設計を採点するチェックがあります。レッスンは自分のモジュールにコピーして変更するか、レッスンビルダーの ラボ メニューでゼロから作れます。

このラボとソースについて: デジタル設計のラボ:Verilog、VHDL、yosys を 1 台の専用 Ubuntu VM で

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。