Verilog入門

Verilogとは

ハードウェア記述言語の一種。
正式にはVerilog-HDL(Hardware Description Language)と呼ぶ。
もとはシミュレーション用の言語だったが、回路設計もできるようになった。
CやPascalの構造に近いため、とっつきやすい(そうだ)。
他のメジャーなHDLとしてVHDLが挙げられる。

最近はLSIの微細化・高集積化に伴い、記述量が増大している。
Verilog2001やSystemVerilog?はVerilog(95)よりももっと抽象的に書けるので
記述量が減る。(例えば, Verilog2001のgenerate文) C言語から回路を記述できる高位合成ツール(System-C, Bach-C, Hendel-C, Cyber-Cとか)もあるが, Verilogをやっておけば少なくとも数年間は需要があると思う。 筆者の私見では, 高位合成ツールが普及してもVerilogは無くならないと思う。 Cが普及した今でもアセンブラが無くならないように。

Verilogは元がシミュレーション用とあってか、検証も強い。

この入門は?

もとはゼミの学生さんの教材用として作りました。
なんというか…初心者向けのサイトや本がなかなかみつからなくて。
私は以下の順で教えようと思っています。

  1. まず文法を必要なものだけサラッと教える(ソースを読むため)
  2. 設計法(セオリー)をおしえる
  3. とにかくverilogを書かせて体で覚えさせる
  4. 慣れてきたら検証もさせる
  5. 一通り身についたら細部を教える(C言語から本格的な回路を設計する方法)

一般のverilog本は

  • 文法リファレンス
  • 設計法(これは少ない)
  • 回路集

に分類されると思います。とくに文法リファレンス→回路集という流れが多いような…。
肝心の設計法について述べている本が少ない気がします。
(現場で教えるべきなのでしょうか?)
この入門ではこれらを体系的にまとめようと思ってます。

言語を習得するにはとにかく書くことが必要と思ってます。
応用編では色々回路を作ってみましたので、自分で動作させて楽しんでください(^^)

なお、この入門では以下の知識があるとスムーズに進むと思います。

  • 論理回路の知識(AND,ORやフリップフロップなど)
  • C言語の知識
  • 電子回路の知識

このページはリンクフリーです。使えると思ったら教材にしていただいてもかまいません。 一言いっていただければ、さらにサンプルがありますから提供できると思います。 (Xilinx版も用意してます) またバグや改善点があれば教えていただけるととても嬉しいです。 連絡を頂ければ、最新のバージョンやバグ等をお知らせします。

連絡先 hirokinakahara at hotmail.com (at を @に変えてください)

用意するもの

  • PC (Windows 7, Vista, XP, 筆者は7を使っています)
  • 評価ボード(Altera(Terasic)社のDE0ボード(DE2でも多分大丈夫)が望ましい。一応、Xilinx社のSpartan-3Eスタータキット, Spartan-3Aスタータキット版も一応作っておきました)
  • 気合(^^;)

FPGA評価ボード

FPGA単体では単なる石なので、電源や周辺回路を一緒に乗せた評価ボードを使います。 シミュレーションだけでもVerilog-HDLは学習できますが、やはりハードウェアが直接動くのは楽しいものです。

  • Altera社FPGAボード(Terasic社提供のオフィシャルボード)
    DE0_overview.jpg DE0_board.jpg

(左)DE0ボード。アカデミック価格で約8000円。
(右)ボードはとてもコンパクト!A6サイズ位かな。

  • Xilinx社FPGAボード(DIGILENT社提供のオフィシャルボード)
    spartan3_boards.jpg

(左)Spartan3Eボード。
(右)Spartan3Aボード。若干配置が異なりますが、この入門で使うLED,スライドスイッチ,押しボタン,クロック等は同じです。

Altera DE0ボードを用いたVerilog入門

うちの研究室で開催しているVerilog-HDL講習会の資料を元に再構成しています。
PDFで公開していますので、自由に使って下さい。配布するときや使用するときは一言連絡頂けると
誤りや最新のバージョンについてお知らせできます。
【準備】Altera Quartus II version 13.0のインストールを行って下さい。 Quartus II version 13.0 Webエディションを想定しています。同梱されるModelSim?-Altera版もインストールして下さい。断りが無い限り、Windows7とXPで動作確認しています(Vistaはわかりません。人柱求む)。

  • FPGAボードの型番の確認とFPGA合成フローの簡単な説明。 fileDE0_tutorial_1.pdf
    FPGAには様々な型番があり、設計ツールで適切な選択をしなければ動作しません。ここでは、Cyclone IIIを例にして型番の読み方を学びます。次に、ユーザが記述したVerilog-HDLがどのようにしてFPGAに合成されるのかを学びます。
  • 2入力AND回路をFPGA上に実現する fileDE0_tutorial_2.pdf
    まずは簡単な回路を実現してみましょう。とはいえ、合成ツールを使いこなすのはとても大変です。
  • Verilogの基礎と論理シミュレーション fileDE0_tutorial_3.pdf
    全加算器を例としてVerilogの基礎的な作法を学習します。
    記述したVerilogが仕様に一致するかを確認するためにシミュレーションを行い検証します。このチュートリアルではMenter Graphics社のModelSim? (Altera版)を使い、設計した全加算器の検証を行います。
  • 組合せ回路記述 fileDE0_tutorial_4.pdf
    前回設計した全加算器を「インスタンス化」という方法で3ビット加算器に拡張します。また、モジュールの記述法、ビット幅の記述法について学びます。
  • 組合せ回路記述(続)fileDE0_tutorial_5.pdf
    信号選択回路(マルチプレクサ)を例として、論理式記述・条件演算子記述・Function文(if文とcase文)による記述を学びます。
  • 順序回路記述(1) fileDE0_tutorial_6.pdf
    4ビットカウンタを例として、順序回路の記述の基礎を学習します。4ビットカウンタを改造してLEDを動かしてみましょう。
  • 順序回路記述(2) fileDE0_tutorial_7.pdf
    状態遷移図から順序回路を記述する方法を学習します。3進カウンタを作ります。次に、暗号鍵入力機械を作ってみましょう。
  • 順序回路記述(3) fileDE0_tutorial_8.pdf
    状態遷移図から順序回路を記述する方法を学習します。ここは大事なところなので、繰り返し行います。 乗算器を順序回路を用いて記述する方法を通して順序回路の設計法を学習します。
  • 順序回路記述(4) fileDE0_tutorial_9.pdf
    DE0のCD-ROMに入っているDE0_Defaultの一部を作ってみます。 様々なクロック生成回路の設計方法を身につけましょう。
  • ルーレットを作ってみよう(作成中) fileDE0_tutorial_10.pdf
    たまにはゲームでも。ルーレット作成を通して、複数の状態遷移図を使った設計を学習します。
  • PS/2キーボード受信回路の設計 fileDE0_tutorial_11.pdf
    キーボード制御器を作り、タイミングの調整方法と順序回路の設計法を学習します。 このチュートリアルではPS2キーボードが必要です。
  • RS232C受信回路の設計 fileDE0_tutorial_12.pdf
    組み込み機器でよく使われている非同期シリアル通信の一種であるRS232C回路を学習します。まずは受信回路を設計してみましょう。このチュートリアルではUSB-RS232C変換回路(またはシリアルポート)とDE0ボードにシリアルポートをハンダ付けする必要があります。
  • RS232C送信回路の設計 fileDE0_tutorial_13.pdf
    今度はRS232C送信回路を設計しましょう。とはいえ、受信回路よりも設計は楽です。
  • FPGA内蔵メモリ(M9K)の使用方法 fileDE0_tutorial_14.pdf
    Altera社FPGA内蔵のメモリ(M9K)を使う方法を学習します。このメモリは色々使えますので、使いこなせるようにしましょう。
  • 組込みプロセッサNios IIを使ってみよう(ハードウェア編) fileDE0_tutorial_15_1.pdf
    Altera社FPGA用の組込みプロセッサである Nios II/e のハードウェア設定と生成方法を学習します。Qsysを使ってNiosII/eを含むプロセッサシステムを作成する方法を学習しましょう。また, DE0ボードに付属しているSDRAMを使う方法も学習します。
    このチュートリアルはAltera社University Programで提供されているIPコアを使用しますので、資料に従って予めインストールしておいてください。
  • 組込みプロセッサNios IIを使ってみよう(ソフトウェア編) fileDE0_tutorial_15_2.pdf
    前回設計して生成したプロセッサを含むシステムをソフトウェアで制御しましょう。Nios IIからLEDやRS232Cコアを直接叩いてハードウェア制御を学習します。Nios II EDS というツールをつかいましょう。



Xilinx Spartan3E,3Aスタータキットを用いたVerilog入門

うちの研究室で開催しているVerilog-HDL講習会の資料を元に再構成しています。
PDFで公開していますので、自由に使って下さい。配布するときや使用するときは一言連絡頂けると
誤りや最新のバージョンについてお知らせできます。
(商用レベルにはほど遠いですが、商用は自重してくださいね…)

  • Xilinx ISE Design Suiteのインストール filespartan3E3A_tutorial_install.pdf
    まずは設計ツールをインストールします。ライセンスの設定が必要ですので、Xilinx社のアカウントも取得します。
  • FPGAボードの型番の確認とFPGA合成フローの簡単な説明。 filespartan3E_3A_tutorial_1.pdf
    FPGAには様々な型番があり、設計ツールで適切な選択をしなければ動作しません。ここでは、Spartan3E(または3A)評価ボードを例にして型番の読み方を学びます。次に、ユーザが記述したVerilog-HDLがどのようにしてFPGAに合成されるのかを学びます。
  • 2入力AND回路をFPGA上に実現する filespartan3E_3A_tutorial_2.pdf
    まずは簡単な回路を実現してみましょう。とはいえ、合成ツールを使いこなすのはとても大変です。
  • Verilogの基礎と論理シミュレーション filespartan3E_3A_tutorial_3.pdf
    全加算器を例としてVerilogの基礎的な作法を学習します。
    記述したVerilogが仕様に一致するかを確認するためにシミュレーションを行い検証します。このチュートリアルではXilinx社純正のISimを使い、設計した全加算器の検証を行います。
  • 組合せ回路記述 filespartan3E_3A_tutorial_4.pdf
    前回設計した全加算器を「インスタンス化」という方法で3ビット加算器に拡張します。また、モジュールの記述法、ビット幅の記述法について学びます。
  • 組合せ回路記述(続)filespartan3E_3A_tutorial_5.pdf
    信号選択回路(マルチプレクサ)を例として、論理式記述・条件演算子記述・Function文(if文とcase文)による記述を学びます。
  • 順序回路記述(1) filespartan3E_3A_tutorial_6.pdf
    4ビットカウンタを例として、順序回路の記述の基礎を学習します。4ビットカウンタを改造してLEDを動かしてみましょう。
  • 順序回路記述(2) filespartan3E_3A_tutorial_7.pdf
    状態遷移図から順序回路を記述する方法を学習します。暗号マシーンを作ってみましょう。
  • 順序回路記述(3) filespartan3E_3A_tutorial_8.pdf
    状態遷移図から順序回路を記述する方法を学習します。ここは大事なところなので、繰り返し行います。 乗算器を順序回路を用いて記述する方法を通して順序回路の設計法を学習します。
  • 実践編(1) filespartan3E_3A_tutorial_9.pdf
    Xilinx社のCORE Generatorを使う方法を学習します。ブロックRAM(BRAM)を使ってみましょう。
  • 実践編(2)(作成中) filespartan3E_3A_tutorial_10.pdf
    キーボード制御器を作り、タイミングの調整方法と順序回路の設計法を学習します。 このチュートリアルではPS2キーボードが必要です。

Altera DE0 FPGA評価ボードを用いたVerilog入門

(昔作ったもの。現在は使っていません)

  1. Quartus IIのインストール
    1. Alteraアカウントの作成とQuartus IIのダウンロード
    2. Quartus IIのインストールとオプション設定
  2. DE0ボードを使った初めてのVerilog
    1. Quartus IIのプロジェクトの作成【Altera DE0】
    2. 論理合成と配置配線【Altera DE0】
    3. USB Blasterの設定
    4. 設計データのダウンロード【Altera DE0】
  3. 組合せ回路編【Altera DE0】
    1. 論理演算【Altera DE0】
    2. ビット幅の指定【Altera DE0】
    3. 算術演算【Altera DE0】
    4. 数値の指定【Altera DE0】
    5. 条件演算子【Altera DE0】
    6. function文(1)【Altera DE0】
    7. function文(2)【Altera DE0】
    8. モジュールとwire【Altera DE0】
  4. 順序回路編【Altera DE0】
    1. 順序回路と組合せ回路の違い【Altera DE0】
    2. reg宣言を使った簡単な順序回路【Altera DE0】
    3. 状態遷移図から回路を設計する【Altera DE0】
    4. ムーア型にするべきか?ミーリ型にするべきか?【Altera DE0】
    5. たまには同期式リセットのことも思い出してあげてください【Altera DE0】
    6. 順序回路は組合せ回路を記述できる!?【Altera DE0】
  5. 設計検証編【Altera DE0】(執筆中)
    1. ModelSim-Altera Starter Editionのインストール
    2. 組合せ回路の検証~AND演算器?
    3. 組合せ回路の検証~加算器?
    4. 順序回路の検証~カウンタ?
    5. テストベンチの記述?
  6. 応用編【Altera DE0】(執筆中)

Xilinx FPGA評価ボードを用いたVerilog入門

(昔つくったもの。現在は使っていません。)

参考文献

100,100 森岡 澄夫 著「HDLによる高性能ディジタル回路設計」

副題が「ソフトウェア感覚を離れてハードウェアを意識する」とあるように ソフトウェア→ハードウェアへの設計法を意識して書かれた本。 Verilogの文法を習得したらこの本にとりかかるといい。 回路設計法について書かれた数少ない良書。

ちなみに、著者はPicコンパチのVerilogソースを公開されてまして、 私も利用させて頂きました。

book002.jpg 笹尾 勤 著「論理設計:スイッチング回路理論」

ディジタル回路設計の分野において必須となる理論を体系的に書かれた良書。 数学的基礎、ブール代数、組合せ回路、順序回路はもちろんのこと、 論理関数の諸性質、多値入力2値出力、関数分解などプロが読んでも勉強になる。 初心者には難しい部分もあるが、演習問題を解くことで理解が進むと思われる。

著者のページ(http://www.lsi-cad.com/sasao/index-j.html)に演習問題の回答が置いています。 (ちなみに、私も回答の一部を作成しましたので利用してください^^;)

book003.jpg Steve Kilts 著「Advanced FPGA Design: Architecture, Implementation, and Optimization」

英語なのでとっつきにくいが、内容は豊富。 FPGAの設計におけるノウハウ本。 そのため現場の設計者向けだが、勉強できることは多い。

book004.jpg Peter Minns, Lan Elliott 著「FSM Based Digital Design using Verilog HDL」

こちらもFSMに基づく回路設計法について書かれた本。 ただしこちらは英語なので、多少とっつきにくい(中身は初心者向け)。 Verilogソースを実際に動作させながら読んでいくとかなり力がつく。 身近にFPGAボードを習得した人がいれば、かなり勉強がはかどると思う。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-05 (月) 08:56:43 (1423d)