(C) by T.IZUMI, Sep.2025 - 無断複製・再配布を禁ず。リンクは歓迎。
Ver. 2025.11.2.a
論理回路 基礎演習 課題
Vivado IP Integrator による回路図設計
ディジタル回路を構成する基本要素は AND, OR, NOT などの論理ゲートであり、
さらにフリップフロップなどの記憶素子を加えて順序回路となる。
ここではそれら論理素子をつないで論理回路を設計し、動作確認をする。
現在ではゲートレベルの回路図により設計することはあまりない。
本演習は論理回路とその動作の理解のための基礎的な学習用課題である。
学習項目
- Vivado IP Integrator による論理回路の設計
- 回路シミュレーション検証
- FPGA ボードによる実機動作確認
前提とする学習項目
ターゲットボード
ボードの見分け方:
表面にZ7と書いていないのが旧ZYBO。
発光ダイオードLD4,LD5とコネクタJ14が搭載されているのが Z7-20。
発光ダイオードLD4だけでLD5とコネクタJ14が搭載されていないのが Z7-10。
リビジョン記号(Rev.)は裏面バーコードシールの傍に記載。
開発環境
- Xilinx(AMD) Vivado 2025.1
- Xilinx(AMD) Vitis IDE 2025.1
演習用ファイル
発展
この課題終了後にどうぞ。
0. 概要
単純な論理回路を設計し、FPGAボードにてその動作を確認する。
目次
- 1. プロジェクトの生成と設定
- 2. IP Integrator による回路図設計
- 3. シミュレーション
- 4. ロジックのコンパイル
- 5. 実機動作確認
- 6. 理解のために
以下、特に指定の無い項目は規定値(デフォルト値、最初から入っている値)を設定する。
1. プロジェクトの生成と設定
- Vivado を起動する。既存のプロジェクトが開いていたら閉じる。
1-1. プロジェクト生成
- [File]→[Project]→[New]して New Project Wizard を起動する。
- プロジェクト名と場所を次のように設定する。
| Project name: | logicgates |
| Project location: | 例 C:/home/t-izumi |
※Vivado はフォルダ階層が深いとトラブルを起こす。
できるだけ浅いフォルダを用意するか、
subst で課題を実行するフォルダにドライブ文字を割り当てておくとよい。
- プロジェクトタイプを「RTL Project」に設定する。
ここでは「Do not specify sources at this time」にチェックする。
- タブで[Boards] を指定し Zybo または Zybo Z7-20, Zybo Z7-10 を探して選択。
(Rev.は多少ちがっても大丈夫なようだ。)
(注意:選択して行がブルーになった状態で[Next]すること。
Zybo が見つからないならボード定義ファイルをインストールしてVivadoを起動しなおす。
https://reference.digilentinc.com/vivado:boardfiles )
- Finish
1-2. 画面の確認
- [Flow Navigator] (B) で、大まかに何をするか指定する。
- (C)で、各種設定、操作指示、ファイル編集、などを行う。
- (D)で、ログや状況の確認を行う。
- 見たい画面が行方不明なときのチェックリスト
- それぞれの領域のタブで切り替える
- [Flow Navigator] (B) で対象手順を選択
- (E)対象のファイル、モジュール、信号などを選択
- (D)で対象のオブジェクトを選択
- (A)メインメニューの Window で選択
1-3. IP(ライブラリ)の登録
ゲートレベルの回路図設計を行うための、IP(ライブラリ)を登録する。
- 左側 [Flow Navigagtor] ウィンドウ (B) 内
[PROJECT MANAGER] の [IP Catalog] を選択する。
- メインウィンドウ(E) の [IP Catalog] タブを選ぶ。
- [Vivado Repository] を左クリックして選択し、
右クリック→[Add Repository]する。
配布演習ファイル内の ip_repo フォルダを選択[Select]する。
例: C:/home/t-izumi/logicgates/ip_repo
- リストの User Repository/UserIP の下に and2, buf, dff などのモジュールが登録されていることを確認する。
1-4. ソースファイルの登録
- (A)メインメニュー [File]→[Add Sources]を選択する。
- (*) Add or create constraints を選択する。
- +を押下、Add Files を実行、
Zybo.xdc (ZYBO Z7 の場合は Zybo-Z7.xdc)を登録する。
- もう一度+を押下、Create Files を実行、
debug.xdc という名前のファイルを作成し、Finish する。
- 同様に、上端メインメニュー [File]→[Add Sources]を選択する。
- (*) Add or create design sources を選択する。
- +を押下、Add Files を実行、
Zybo_top.v を登録し、Finishする。
- 同様に、上端メインメニュー [File]→[Add Sources]を選択する。
- (*) Add or create simulation sources を選択する。
- +を押下、Add Files を実行、
LogicGates_sim.v を登録し、Finishする。
- (C)ウィンドウで Sources タブを選ぶ。
- Design Sources の中に
Zybo_top があり、トップ(太字)になっていることを確認する。(トップになっていなければ右クリックして [Set as Top] する。)
- Simulation Sources の中に
top があることを確認する。右クリックして [Set as Top] する。
- Constraints の中に
Zybo.xdc, debug.xdc があることを確認する。debug.xdc を右クリックして [Set as Target Constraint File] する。
- それぞれのモジュールやファイルをダブルクリックすると
(E)ウィンドウにファイルが表示される。
内容を確認する。
2. IP Integrator による回路図設計
2-1. Block Design の生成と登録
- [Flow Navigator] (B) → [IP Integrator] → [Create Block Design] を実行する。
- 「Design name =
LogicGates」 として生成する。
- Block Design のウィンドウ群が現れる。
2-2. 外部入出力ポートの作成
- [Diagram] ウィンドウ(E)の下地を右クリックし、Create Port を実行する。
Port name: ld0 、
Direction: Output 、
Type: Other 、
[ ] Create vector: なし
とする。
- 同様に次のポートを作成する。
| name | direction | type |
ld0,ld1,ld2,ld3 | Output | Other |
btn0,btn1,btn2,btn3 | Input | Other |
sw0,sw1,sw3,sw4 | Input | Other |
- クロック信号のポートを作成する。
Port name: clk 、
Direction: Input 、
Type: Clock 、
[ ] Create vector: なし、
Frequency (MHz): 1
とする。
※このサンプルでは動作を目視するためにクロックを1Hz程度まで遅くして供給している。が、ここではツールの制約により1MHzとしている。
2-3. 論理回路の設計
- Diagram ウィンドウ(E)の上側+ボタンを押下して rizm_and2 を追加する。
- 入力Aを sw0 に、入力Bを sw1 に、出力Oを ld0 に接続する。
- 同様にORゲート, NOTゲートも置いて接続する。
| ゲート | 入力接続先 | 出力接続先 |
| AND | sw0,sw1 | ld0 |
| OR | sw0,sw1 | ld1 |
| NOT | sw2 | ld2 |
- さらにXORとD-FFを加えて、下図のように回路を作成する。
- ゲートや配線をクリックして、
[Block Properties] ウィンドウ(Dのあたり)で
オブジェクト名を確認しておく。
例:XORゲートの名前は
rizm_xor2_0、
その出力の配線の名前はrizm_xor2_0_O、など。
2-4. IP Integrator のノウハウ
-
オブジェクトの名前を変更することができる。わかりやすい名前をつけるとよい。
オブジェクトをクリックして、[Block Properties] ウィンドウ(Dのあたり)の
Name: で変更する。
- オブジェクトをクリックする位置に注意。
オブジェクト全体なのか、
オブジェクト内のポートなのか、
ポート内の個々のビットなのか、
その接続端子なのか…、
それによって挙動・結果がかわる。
配線するときは、
端子を左クリックしてから引きずって接続先の端子につなげる。
このとき、マウスカーソルが指からペンになる。
- 図のレイアウトが崩れてきたら、自動調整できる。
[Diagram] ウィンドウ(E)の上の
や
を試してみよう。
手動調整するならマウスのドラッグ&ドロップで移動できる。
2-5. システム生成
- ウィンドウ(E)上部 [Diagram] タブを開く。
- Diagram 下地で右クリック、Validate Design を実行する。
- 何か問題があったら警告が出るので対処する。
- [Flow Navigator] (B) → [IP Integrator] → [Generate Block Design] を実行する。
- [Flow Navigator] (B) → [Project Manager] を選択する。
- [Souces] (C) → [Design Sources] の [LogicGates] を展開し、
設計結果が組み込まれていることを確認する。
3. シミュレーション
- [Flow Navigator] (B) → [SIMULATION] → [Run Simulation] を左クリックし、
[Run Behavioral Simulation] を実行する。
- 信号波形の表示を確認する。
主ウインドウ(E) のタブで波形表示を選べる。
上部の
ボタンなどを使って
表示を調整できる。
- ここで用いるシミュレーション用テストベンチでは、乱数で入力値を生成している。入力に対して適切な出力になっていることを確認する。
- シミュレーションのログを確認する。下側ウインドウ(F) → [Tcl Console] タブの中で右端のスクロールバーで確認できる。
4. ロジックのコンパイル
- [Flow Navigator] (B) → [SYNTHESIS] → [Run Syntehsis] を実行する。
- [Flow Navigator] (B) → [IMPLEMENTATION] → [Run Implementation] を実行する。
- [Flow Navigator] (B) → [PROGRAM AND DEBUG] → [Generate Bitstream] を実行する。
- 終了を待ち 「View Reports」 で結果を確認する。
- ここでは、多少の(コンパイルを中断しない程度の) Warning や Violation は無視して進める。
- Vivado で最初に設定した Project の下(例
C:/home/t-izumi/logicgates/logicgates.runs/impl_1)に Zybo_top.bit というファイルが生成されたことを確認する。
5. 実機動作確認
5-1. ボードの接続
- ZYBO ボードの JP5 を JTAG 側に挿す。
- ZYBO ボードの PROG UART に micro USB ケーブルを接続。電源投入。ドライバ類の認識を確認する。
5-2. 回路の書き込み
- [Flow Navigator] (B) → [Open Hardware Manager] で実機管理画面を開く。
- 主ウインドウ(E) → [Open Target] → [Auto Connect] でボードに接続する。
- 主ウインドウ(E) → [Program Device] でボードに回路を書き込む。
- 「Bitstream file:」に生成したビットストリームを指定し、[Program] する。
5-3. 実行
- ボード上のスイッチやボタンを操作し、LEDの点滅を確認する。
回路図を見ながら、動作を理解すること。
- SW0,SW1 の AND が LD0 に出力されるか?
- SW0,SW1 の OR が LD1 に出力されるか?
- SW2 の NOT が LD2 に出力されるか?
- およそ1秒ごとに LD3 と SW3 の XOR が LD3 に出力されるか?
6. 理解のために
99. その他
N.A.
泉 知論
@
立命館大学
理工学部
電子情報工学科
その他の講義&演習資料はこちら