教材名 ABELによる回路設計手法
教材名2
教材ID 146
教材作成者名 中澤 直樹
教材作成日 1997-09-01
改訂情報
ジャンル名 高度教材
分野名 電気・電子系
業種名 コンピュータ制御機器製造業
職務名 電子回路設計
職務構成名 PLD・FPGA回路設計
区分名 教材
職業名 電気技術者
指導案
  1. 使用教材、資材一覧

<印刷物>

テキスト

代表的なS-PLDのロジックダイヤグラムのコピー(データブックより)

練習問題・設計実習 回答例

(以上、10人分)

<機器・資材など>

ABEL-EDU 及び ABEL-EDU10セットパック

フロッピーディスク (10枚)

パソコン(11台)(講師のデモ用1台を含む)

ファンクションジェネレータ(5台)

PLDライタ(1~2台)

周波数カウンタ教材(5台)

BNCケーブル(5本)

PLD(各10個程度)

(Lattice社GAL22V10B相当品、ALTERA社EP910相当品)

講師用PC画面の表示装置(プロジェクタ等)

  1. 訓練前準備項目
    1. 印刷物: 原稿から印刷製本
    2. パソコン:c:\abel60\userというディレクトリを作成しておき、そこへテキストに記載された各例題のソースファイルと練習問題のソースファイルをコピーしておく。
    3. ファンクションジェネレータ:出力の波形を方形波、周波数を数百kHz程度、オフセットの調整により振幅を0-5Vに設定。

      板書などで、受講者に対してファンクションジェネレータのつまみを動かさないように指示しておくこと。

    4. 周波数カウンタ教材

      ファンクションジェネレータと周波数カウンタ教材をBNCケーブルで接続、動作確認をしておく。

【第1日】

[15分]

  • 挨拶・自己紹介・諸注意
  • コース内容の概要を説明
  • (受講者が少ない場合は、プログラマブルデバイスについての経験の有無

    担当している業務の内容などについて簡単に確認する。

    この情報に基づいて、説明方法等を考慮する。)

[1時間15分]

テキスト1ページ

  • 本講座の概要を説明する。

    <補足>

    「同期設計などPLD設計の基本を学ぶ」としたが、このテキストの中で特に同期設計については文章としては触れていない。

    ただ、現実に使用されている大多数のPLDは同期設計しか許されないので、テキストで紹介するプログラムを見ると自然と同期回路で考えることが身に付くと思う。

    ここで特に知っておいていただきたいことは、

    • クロックにゲートをはさむ
    • レジスタ(FF)の出力で、別のレジスタのクロックをたたく
    • レジスタの出力で非同期のリセットをかける

    など非同期の回路設計の考え方は捨ててしまってかまわないということ。

  • ABEL-HDLの概要を説明する。

    <補足>

    HDLと一般に呼ばれる言語としては

    • VHDL
    • Verilog-HDL

    がある。

    VHDLはもともとアメリカの国防省がLSIの仕様を記述するために作った言語。文法的にはかなり厳格(特に型)。

    プログラム言語に例えるとパスカルのイメージ。

    VerilogはアメリカCadenceDesignSystemsが開発したシミュレーション用の言語がルーツ。VHDLより少し前から論理合成も可能になっていたことから、特ににASIC開発用には資産やツールが豊富。文法的にはVHDLよりはラフ。

    プログラム言語に例えるとC言語のイメージ。

    ASICの開発用言語としては、VHDLとVerilogが当分共存すると今は言われている(数年前はVHDLが圧倒的に使われると言われていた)。

    この2つの言語はプログラマブルデバイス向けの言語としても、FPGAなどの大規模な設計に多用されるようになってきているし、小規模なデバイスへの論理合成が可能なツールも出てきている。

    一方、PLD開発用の言語として

    • ABEL-HDL
    • AHDL
    • その他(LOG/IC、PALASM、CUPLなど)

    やEDAツールの中に回路図からの設計が可能なものがる。

    この中でAHDLはALTERA社の開発ツール(MAX+PLUS2)専用の言語。

    ABELは汎用のPLDサポートソフトとしては最も売れている。ABELを作ったDATAI/O社では、PLD用言語としてはABEL-HDLは事実上の業界標準だと言っている。売る側の言葉なので、セールス・トークの側面はもちろんあるが…。

    (なお、98年にDATAI/OはABELを含む全SYNARIO製品とその部門をMINC社へ渡している。このため日本でも販売ルートの一部変更があった。)

    事実上の業界標準か?はともかくとして、現実にABEL-HDLという言語は、各社PLDデバイスメーカーが、自社デバイス専用開発ツールのサポートする言語として数多く採用されているし、

    (Xilinx社のFoundationシリーズ

    VANTIS社のMACH-Synario

    Lattice社のISP Synarioシリーズ

    Atmel社のAtmel-ABEL、Atmel-Synario

    など、

    この他、Philips社は独自の言語として名前を付けてはいるが、

    ABEL-HDLベースの言語を使っている。)

    また、汎用の開発ツールでも、ABEL-HDLは本家のMINC社以外にも数社がサポートする言語となっている。

    これは、VHDL、Verilog-HDLを除けば、ABEL-HDLは最も使用されている言語であることを裏付けている。

    さて、ABEL-HDLはこの様にメジャーなPLD開発用の言語だが、もともとSPLDをブール代数の論理式を書くイメージでソースを作る、論理式記述の言語がベースとなっており、後に高級な記述もサポートされてきている。

    このことから、ABEL-HDLはデバイスに少々踏み込んでクロックやコントロール信号などを必ず意識しながらプログラムを書くことが要求される。その意味でVHDL、Verilog-HDLと比較すると抽象度の低い言語といえるが、逆にPLDの中身を思った通りにプログラムするには適した言語といえる。

    プログラム言語に例えればABEL-HDLはアセンブリ言語のイメージである。

    このため中・小規模のCPLDやSPLDのプログラミング言語としては、今後とも寿命があるのではないかと思う。

テキスト2ページ

  • PLDとはを説明する。

    <補足1:SPLDの構造>

    SPLDのロジックダイヤグラムを用いてSPLDの基本的な構造を説明

    (私は構造が簡単なので、PAL16L8で説明しています。その際、16L8はもはや新規設計では使用されないこと念押しします。)

    1. 入力信号は差動バッファのような回路に接続されている。

      これは、普通のバッファとインバーティングバッファであること。

    2. 1の出力はロジックダイヤグラムの縦線に接続されている。

      つまり縦線は隣り合うもの同士が、ある入力(あるいは出力)信号の

      正論理と負論理の信号となっていること。

    3. 小さなANDの図記号に接続される横線があること。

    これは実際には下図の様にダイオードによるワイヤードORが実現されていること。

    FETのスイッチがONされていると、その縦線がLOWに落ちたとき横線もLOWに落ちる、入出力負論理のワイヤードORであるが、これは論理の見方を変えれば(ド・モルガン)、入出力正論理のワーヤードANDである。つまりFETのスイッチがON/OFFをプログラムすることで、

    このプログラマブルANDの機能を決めることができる。

    FETのスイッチがON/OFFデータはJEDECフォーマットと呼ばれる標準フォーマットがあり、JEDECフォーマットの生成はサポートソフト(このセミナーではABEL)の仕事となる。

    (初期のPLDはFETの代わりにヒューズが用いられていた。)

このプログラマブルANDの出力は多入力のORに接続されている。

ブール代数の式の型に加法標準型(他にも様々な呼び方がある…)と呼ばれる「信号」と「信号の否定」だけのANDをとった項(=積項)をORでむすぶ式の型がある。

全てのコンビネーション回路(組み合わせ論理回路)は必ずこの加法標準型の論理式に変換できることになっている。

逆にいえば、加法標準型が実現できるハードウェアがあれば全てのコンビネーション回路が実現できるわけで、SPLDの中身は正にANDをとってORをとる加法標準型のハードを実現している。

また、順序回路はコンビネーション回路+レジスタで実現できるので、順序回路を作るにはORの先がレジスタに接続されていればよい。SPLDの多くはレジスタとしてDFFを準備しており、ORの出力がD入力に接続可能になっている。

ただし制限もある。1つは入力出力の信号の数(ピンの数)であり、もう1つはORの入力の数(=積項数)である。

入出力のピン数が足りていても、複雑な論理になると積項数不足でパンクすることがあり得る。

<補足2:CPLDとFPGAの構造>

本セミナーでは扱わないが、CPLDとFPGAの構造について簡単に説明する。

(板書などで、CPLDとFPGAの構造を示しておきます。)

CPLDについて下記のことを説明する。

  • CPLDはSPLDに相当するブロックが複数あり、相互にプログラマブルな配線によって接続されていること。
  • PLDブロックの段数によって遅延時間が簡単に予測できることからFPGAと異なり小規模であれば遅延シミュレータを必要としないこと。
  • 各メーカーが独自な構造を持つCPLDを作っており、個々に特徴があること(2、3例を取り上げて説明)。

FPGAについて下記のことを説明する。

  • PLDの1個のマクロセルかあるいはそれ以下の規模のセルが多数あり、各セルを接続するプログラマブルな配線部より構成されること。
  • CPLDと異なり配線部のレイアウトにより遅延時間が大きく異なることから、設計にはシミュレータが欠かせないこと。
  • SRAM方式とワンタイムとに大別されるが、集積度でSRAM、速度でワンタイムといった住み分けがあること。

テキスト2ページ

  • PLDのメリットを説明する。

    <補足1:実装密度の向上について>

    SPLDと74シリーズなどの汎用ICと比較すると、MSIクラス(死語?)の汎用IC(デコーダ、エンコーダ、カウンタなど)2~3個が1個のSPLDに収まる。

    CPLDはSPLD2,3個~数十個(メーカによっては百個以上)程度が1個のCPLDに収まる。

    FPGAでは、SPLD10個程度~百個以上が1個に収まる。

<補足2:設計・開発期間の短縮について>

汎用ICを用いた回路設計と比較すると2つの効果がある。

1汎用ICを用いた設計では、論理設計が終了し回路図を作成した後にパターン設計に入る。

プログラマブルデバイスを用いる場合、デバイスに入る論理の見積りがしっかりできれば、パターン設計と論理設計(デバイスの中身の部分)をパラに進行できるので、設計時間の短縮につながる。

ただし、CPLDやFPGAではピン指定をツールに任せた方が、そのデバイスの能力を十分に使える場合がある。つまりパターン設計者にプログラマブルデバイスのピン配置を任せると、デバイスの能力を削る結果になる場合があるので、注意が必要。

2プログラマブルデバイスを用いる場合、論理的なバグが発生してもデバイスのプログラムを変更するだけで済む場合がある。

汎用ICだけの設計では、論理的なバグの修正=パターン変更、となるので、修正には多くの時間と費用を費やすこととなる。

<補足3:回路の高速化について>

‘98年現在SPLDで最も高速なデバイスは遅延時間3.5ns(max)が存在する。これは単純な値の比較だけでなく、SPLD1段の論理で、ゲート2~3段分を実現できるケースもあることを考えると十分な高速性があるといえる。

余談になるが、SPLDはCPLDやFPGAと比較すると集積度は劣るが、構成が単純な分、常に一歩高速なデバイスが手に入る。

上記の3.5n品はCPLDではアナウンスはされているものの、現時点(98年)での入手は出来ない。

<補足4:在庫管理の簡素化について>

汎用ICのように全ての品種をそろえておく必要がない、ということ。

規模と速度で、いくつかの品種を在庫しておけばよい。

余談だが、後発のメーカーがリリースする新しいデバイスは、これまでにない特徴を持って発売されるので、機能的には魅力的なケースが多い。しかし、シェアを奪えないとリリースが中止となることもあるので、それなりのリスクがあることをユーザーは覚悟する必要がある。

[15分]休憩

[1時間15分]

テキスト3~15ページ

  • 受講者全員に、テキスト3~7ページの操作に従って、テキスト8ページのABEL-HDLのソースファイルを入力してもらう。

    ここでは、ソースの説明は行わない。ツールとしてのABELの操作について、テキストに沿って実習してもらう。

    (受講者の数が多い場合はソースを準備しておいた方が良いかも知れません。)

  • テキスト9ページ、Compile Logicを実行し、エラーが発生した受講者にはソースの修正を行う。

    テキスト9ページの各処理の内容を簡単に説明。

    Reduced Equationsはファイルの中も簡単に説明する。

    また、Reduced Equationsでは積和型に展開された論理圧縮後の式が確認出来るので、高級な記述も含め積和型以外の記述がどの様に実現されるのか、をデバイスを選定する前に確認できることを説明。

    初心者はReduced Equationsをながめることで、論理式の勉強にもなるし、高級な記述が展開されるイメージをつかむこともできる。

  • テキスト10ページの各処理を簡単に説明。

    Simulate Equations を受講者に実行してもらう。

    特にEquation Simulation Report ではテキスト形式でソースの論理とテストベクターとの確認ができる。

    また、Equation Simulation Waveform では波形の形で確認できる。(ABELはツールとしては波形をエディットする機能は持っていない。表示される波形は、入力信号についてはテストベクターに記述した値、出力信号についてはソースに記述した論理から得られた値、となる。また、ABELのシミュレーション機能は全て論理シミュレーションのみであり、波形でも遅延情報は得られない。ただし、2段以上の論理で出力が得られる回路構成の場合、段数が多いことにより発生する遅延については、波形表示で確認できる。)

    Equation Simulation Waveform での波形表示の操作や、バス表示の操作についても、講師用のPCでデモを行い説明する。 

  • テキスト11ページの操作を受講者に実行してもらう。
  • テキスト12ページ Create Fuse Map を受講者に実行してもらう。 

    Chip Report について中を簡単に説明。

  • テキスト13ページを説明する。
  • テキスト14ページを説明する。

    <補足:PLDのプログラミングについて>

    このセミナーではPLDライタを用いてPLDのプログラミングを行うが、最近PLDライタを用いず、オンボード上でPCからのダウンロードによりプログラムを行うISP(In System Program)という手法が使われるようになってきている。

    CPLDでは現在もISP対応のデバイスは多く、また今後リリースされる多くのデバイスがISP対応になると予想される。

    SPLDでは現在Lattice社のispGAL22V10 、ispGAL22LV10がある。

  • テキスト15ページを説明する。

    ABELのオペレーションについて質問を受け付ける。

    (この実習で入力したABEL-HDLのソースについては、午後に説明を行う)

[1時間]休憩

[1時間15分]

テキスト16~19ページ「例題1」、テキストを説明し下記を補足する。

  • 16ページのプログラム

    EQUATIONS以下の式はそれぞれ、AND、OR、NOT、NANDに相当するもの。また、

    !O2 = C ;    は   O2 = !C;

    !O3 = D0 & D1 ; は
    O3 = !(D0 & D1) ;

    でも同じ。

    各論理演算子の優先順位はブール代数での優先順位と同じ。

  • 17ページ(26行目)

    ISTYPE 'COM' のCOMはコンビネーションのCOM。つまりコンビネーション出力(組み合わせ論理出力)であることを指定する。

    後でレジスタ出力を指定するISTYPE 'REG'を紹介する。 

  • 18ページ(13行目)

    「= の右辺には入力信号名の他に、出力信号が内部の論理にフィードバックされている場合は出力信号名も書くことができます」について、ロジックダイヤグラムを用いて説明する。

  • 18ページ( TEST_VECTORS( ) ) 

    TEST_VECTORS( ) は ( )内に -> の左に入力信号(または入力のセット(後述))、 -> の右にその入力に対して期待される出力信号は出力のセット)並べ、信号・セットが複数の場合は [ ] でくくる。

テキストの通り省略可能だが、規模が大きくなるほどテストベクタの記述は大切。

  • 19ページ

    コメントを入れる場合は " か // を用いる。

    " 以降改行または“までがコメントとなる。

    // 以降改行までがコメントとなる。

テキスト19ページ「練習問題1」、セミナー全体の時間の都合上、すぐにRSフリップフロップについて回答を行う。

  • RSフリップフロップの回答

    まず、ゲートの組み合わせで作るRSフリップフロップ(例えば入門書に数多く登場するNANDゲート2個をたすき掛けに接続したもの)は大規模なデバイスには通常使用しない。

    今回はS-PLDがターゲットなので、紹介する。

    NAND2個で実現されるRSフリップフロップは、様々な形で記述出来るが、下記は1つの例。

    Q = !S # Q & R ;

    NAND2個で実現されるRSフリップフロップの様に、C接点を持つスイッチのチャタリング除去には使用可能。(同期設計には邪魔になるだけなので使わないこと。)

テキスト20~27ページ「例題2-1」、テキストを説明し下記を補足。

  • テキスト21ページ

    実際に半加算器と全加算器カスケードして作る3bit加算器の図を板書。

    下位2bitのキャリーが、加算の結果には不要であることや遅延時間が3段分になることを説明。

  • テキスト22ページ

    新たに登場したABEL-HDLの予約語等については23~25ページに説明されているので、プログラムの概要だけ説明。

    例題2-1のプログラムは3bitの加算機を1段の積和型回路で実現するもの。

  • テキスト24ページ

    加算や減算などの算術演算子について、実際に演算を行うのではなく、その結果を出力するANDとORの論理回路を生成することを強調する。(プログラムしか経験のない人はこのあたりを勘違いすることが多い。)

  • テキスト25ページ(算術演算について)

    セットに対して論理を合成できる算術演算子が + と - だけであることについて補足すると・・

    VHDLでも必ず合成できる算術演算子は + と - だけ。あとはコンパイラにとって乗算をサポートするものと、しないものがある(VHDLはIEEE1076規格とその上位互換のIEEE1164があり、後者対応のコンパイラなら乗算を合成できることになっている)。

    実際、乗算を行うアルゴリズムはいろいろあるようで、一番コンパクト(そのかわり一番遅い)のはシフトと加算を繰り返すもの。この場合レジスタを用意して外部からクロックをたたく必要があり、組み合わせ論理だけでは実現できない。クロックが必要な回路は順序回路だから、積和の論理式だけにはならないので、これが合成されないのは当たり前の話し。

    VHDLコンパイラで乗算を合成させると組み合わせ論理になるが、この場合少し規模は大きくなる。実際サイプレス社の専用ツールでは8×8bitで結果が16bitになる乗算器が128マクロセルのCPLDで実現できた。そのかわり多くの中間ノードを生成し遅延は7段分。

    また、12×12bitで結果が24bitになる乗算器は256マクロセルのCPLDで16段分の遅延で実現できる。

    (もともとVHDLのコンパイラとABELを比較すること自体に無理 があるかもしれないが、)ともかくオートマチックでの乗算器の合成はABELには出来ない。

    しかし、例えば乗算の回路にしろ、回路構成をきめてその通りの回路をデバイスに組み込むにはABELの方が使いやすいように思う。

  • テキスト25ページ(@const、@repeatについて)

    @const、@repeatによって、23ページのテストベクターは、

    [ 0 , 0 ] -> [ 0 ] ;

    [ 0 , 1 ] -> [ 1 ] ;
    左記のような64行分のテストベクター
    [ 0 , 2 ] -> [ 2 ] ;
    を記述をしているのと同じ。
    [ 0 , 3 ] -> [ 3 ] ;
    テストベクターをソース上で簡潔に記述
    ・・(略)
    するのに非常に便利。

    [ 7 , 7 ] -> [ 14 ] ;

また、[ I , J ] -> [ I+J ]; の記述は [@expr I;,@expr J;] -> [@expr I+J;];

と記述する必要があったが、ABEL6では@expr ;は記述しても、記述しなくてもエラーにならない様なので、今回テキストや回答例で紹介するプログラムでは、テストベクタに@expr ;を用いていない。

  • テキスト26ページ

    各受講者にテキストの手順に従いaddeer334.eq1を確認してもらう。

    26ページ最後の出力極性と積項数については、ABELが積項数の少ない方を自動選択するが、後で例題10で極性を指定する方法が紹介される。

  • テキスト27ページ

    22V10と16V8、20V8の積項数についてロジックダイヤグラムを用いて説明する。

テキスト27~29ページ、テキストを説明し下記を補足。

  • テキスト27ページ

    5bit+5bitの加算器を1段の積和型で実現すると76積項必要なことについては、例題2-1のプログラムを変更して、デモを行う。

  • テキスト28、29ページ

    2つのプログラムについて説明。 Equationsの部分の記述は異なるが、全く同じ回路になる。(レポートファイルでも確認できる)

テキスト30ページ「練習問題1」、これも時間の都合上、すぐに回答を行う。

  • 講師用のパソコンでデモ。@carry 3 で圧縮後のファイルを確認すると、OT5 が28積項必要であることがわかる。これではデバイスにフィットできない。

    そこで@carry 2 で再度確認。最大でも12積項になっていることが確認できる。

    また Reduced Equations では OT6 の論理に@carry2がストレートに接続されるだけで無意味に@carry2生成されているが、これはデバイスにフィットさせると、ちゃんと消えてくれる(レポートファイルで確認する。

    (なお、SPLDでは積項数でパンクするとフィットできずエラーになるが、MACH(VANTIS社のCPLD)で試したところ積項数が多いと勝手に中間ノードを生成しフィットさせてしまう)

[15分]休憩

[1時間30分]

テキスト31~37ページ「例題3」、テキストを説明し下記を補足。

  • テキスト31、32ページ

    .OE について、PLDのブロックダイヤグラムを用いて説明。

    22V10などでは1積項だけのプログラマブルな信号になっていること。16V8や20V8では、コンビネーション出力では1積項だけのプログラマブルな信号だが、レジスタ出力にするとOE端子は固定になること。

    出力のセットO の論理式について、一行ごとに説明。

  • テキスト33、34ページ

    Oの論理式について、例題3-1と同じ形に展開されることを説明。

  • テキスト35~37ページ

    when文は、コンピュータのプログラム言語のIF文のような、処理の分岐ではないことを強調する。テキストに書いてあるとおり、when の次に入れる式とthen 以降の論理式の &(論理積)がとられた論理が生成され、 else も記述した場合にはwhen の次に入る式の否定と else 以降の論理式の &(論理積)がとられた論理が生成されることを、例題3-3の式を実際に展開して説明する。また、例題3-4についても同じ形に展開されることを説明。

(個人的な意見だが)例題3-3ではwhen文のネストを紹介したが、when文のネストは多用しない方が良いと思う。ネストにより、一見ソースがシンプルに見えるかも知れないが、そのソースが何を記述したかを追いかけ

るためには、when文の条件式の分配を頭の中で行うことが必要になり、一目で理解しづらくなるように思う。

1日目を通しての質問を受け付ける。

後片付けについての説明を行い、1日目を終了。


【第2日】

[1時間30分]

1日目のおさらいを簡単に行い、質問を受け付ける。

テキスト38ページ「練習問題3」

  • 受講者全員に、テキストに従ってプロジェクトの作成とソースのインポートを行ってもらい、ソースを完成してもらう。

    動作確認は各自シミュレーションのみで行う。

個別に指導を行い、適当な時間で回答を提示、解説する。

回答例には
when (SELECT = = 0) then O = 0; の記述がないが、
  1. の項はブール代数の式から消えてしまうことから解るように、記述しても、記述しなくても同じになることも補足しておく。

練習問題3の下の真理値表の回答については、ハイインピーダンスの条件が2積項になるため、そのままではSPLDにフィットしないことを説明。

出力信号を1つ使った回答例をデモする。

テキスト39~40ページ「例題4」、テキストを説明し下記を補足。

  • アドレスデコーダの考え方と40ページのメモリマップでは上位4bitの信号をデコードするだけで良いことを説明、レポートファイルなどで生成された論理も確認する。
  • 通常(デバイスに余裕があれば、)単にアドレスのデコードだけでなく、コントロール回路の部分なども1チップに組み込むことを補足。

テキスト41ページ「練習問題4」

  • 受講者全員に、テキストに従ってプロジェクトの作成とソースのインポートを行ってもらい、ソースを完成してもらう。

8bitのアドレスデコーダであること、各出力は負論理出力で組んでもらうこと(負論理でテストベクターを記述してあるため)を説明。

動作確認は各自シミュレーションのみで行う。

個別に指導を行い、適当な時間で回答を提示、解説する。

[15分]休憩

[1時間15分]

テキスト42~43ページ「例題5」、テキストを説明し下記を補足。

  • 各信号とCPUとの接続、A7~A4の上位4bitのみのデコードを行っていること、アドレスが30H~3FHでこのポートがアクセスされること、などを説明。

テキスト43ページ「練習問題5」

  • 単純なことなので、問題を読んだらすぐに説明を行う。

    答えは22V10ではピン数不足で、これ以上デコードのために入力を増やすことは出来ない。

    (ピン数不足には28ピンのSPLDがあるが、このような用途でフルデコードする意味はない。)

テキスト44~45ページ「例題6」、テキストを説明し下記を補足。

  • 45ページのソースで ON,OFF = 0,1; と、わざわざマクロを用いているのは、極性の変更に簡単に対応できるようにするため。
  • ここまで紹介した、アッダーやデコーダの様に入出力にある程度法則性があるものは論理式記述が便利だが、この例のように入出力に法則性のない回路の記述には、 truth_table を用いた方がよい。

テキスト46ページ「練習問題6」

  • これは動作することがわかっているので、実習しない。3日目の設計実習の際、希望者がいれば個々におこなってもらう。

テキスト47~48ページ「例題7」、テキストを説明し下記を補足。

  • 各信号とCPUとの接続、A7、A6の上位2bitのみのデコードを行っていること、アドレスが40H~7FHでこのポートがアクセスされること、などを説明。

[1時間]休憩

[1時間15分]

テキスト49ページ「練習問題7」

  • これも問題の説明後、すぐに回答を解説する。

    問題の説明には84C015の出力サイクルのタイムチャートを板書して補足を行う。

    回答としては、pd が12n以上だと h が満足されなくなるので、49ページに紹介したデバイスでは22V10B-15と-25は使えない、ということ。

  • 回答は上記の通りだが、49ページに紹介した各AC特性は大切なので、各々について説明を行う。

    特にこの後でシフトレジスタやカウンタについて紹介するが、その動作周波数が max1 max2 のスペックで、max1 は出力ピンからフィードバックを行った場合、max2 はレジスタから直にフィードバックを行った場合のスペックになる(ブロックダイヤグラムも用いて説明)。通常はレジスタフィードバックにするので、max2 を見る。また、max3 はフィードバックを用いない条件になっているので、シフトレジスタやカウンタを構成した場合はこれは見ない。

テキスト50~52ページ「例題8」、テキストを説明し下記を補足。

  • 50ページ

    シフトレジスタの基本的な構成を板書。動作を説明する。

    板書の回路と比較しながら、50ページのソースを解説。

    22V10へのフィットをデモし、レポートファイルを説明。レポートファイルを読むために必要なドット拡張子について補足する。

    .D はDFFの入力を示す。

    .C は .CLK と同じ。

    .Q は レジスタからのフィードバック信号。

    .PIN (このレポートファイルにはないが・・)は端子からのフィードバック信号。 .Q と .PIN についてPLDのブロックダイヤグラムで説明。

    .Q を明示する場合は、.FB(または.Q)を、.PINを明示する場合PINをソースに記述すれば良い。

    なお、以降テキストで紹介するQフィードバックを明示するために、右辺FBを記述していないが、ABELのバージョン6.2以前では.FBを記述しないとPINフィードバックを選択していた。

    6.4以降は.FBをソースに記述しなくてもQフィードバックを選択してくれる。(6.3では未確認)

  • 51、52ページ

Reset が0(Low)の時にクロックが入ったら出力を全て0にするという論理を記述する件、補足しておく。

テキスト53ページ「練習問題8」

  • 受講者全員に、テキストに従ってプロジェクトの作成とソースのインポートを行ってもらい、ソースを完成してもらう。

    ホールドする方法についてはヒントを与えておく。

    動作確認は各自シミュレーションのみで行う。

    個別に指導を行い、適当な時間で回答を提示、解説する。

テキスト54~55ページ「例題9」、テキストを説明し下記を補足。

  • カウンタの基本的な構成を板書で説明(3bit5進カウンタあたりを例にして、考え方、DFFとゲートでの構成、論理式など)。

    ただし、通常は論理式への変換はABELにまかせ、例題にあるようにセットを用いた抽象的な記述でソースを作ることを説明。

  • 例題9-1、9-2についてレポートファイルで上記のことを確認する。
  • また、単純なバイナリカウンタをDFFで作ると各桁でbit数と同じ数の積項を消耗することを説明。

[15分]休憩

[1時間30分]

テキスト56ページ「練習問題9」

  • 受講者全員に、テキストに従ってプロジェクトの作成とソースのインポートを行ってもらい、ソースを完成してもらう。

    キャリーについては最下位桁を担当するICをつくるのであればレジスタ出力の方が少し速いが、2桁め以降であればコンビネーションにする必要があることを補足。

    ヒントとして下位4bitと上位3bitについては別に考えること、下位4bitは例9-2が参考になることを説明。

    動作確認は各自シミュレーションのみで行う。

    重い課題なので個別指導を徹底して行う。

    適当な時間で回答を提示、解説する。

テキスト57~59ページ「例題10」、テキストを説明し下記を補足。

  • 57ページ

    論理式で同期リセットを行う方法についてはここまで学んだ通り。

    論理式でつくる汎用的な同期プリセットの記述は、プリセット信号の項をORで追加すればよいことを説明。

    22V10の非同期リセットと同期プリセットについてはブロックダイヤグラムを用いて説明。

  • 58ページ

    例題10-2と例題10-3の動作を波形(シミュレーション)で説明。

テキスト59ページ「練習問題10」

回答を提示して、説明。

2日目を通しての質問を受け付ける。

後片付けについての説明を行い、2日目を終了。


【第3日】

[1時間30分]

2日目のおさらいを簡単に行い、質問を受け付ける。

テキスト60~66ページ「例題11」、テキストを説明し下記を補足。

  • 60~62ページ

    ソースから22V10へフィット後、レポートファイルによってステートビットと出力の論理について確認の説明を行う。

  • 63、64ページ

    同様にレポートファイルによってステートの遷移の条件を確認する。

  • 65、66ページ

    レポートファイルを確認し、誤動作によって設定していないステートに陥っても、STARTステートから必ず復帰するようになっていることを説明。

テキスト67ページ「練習問題11」

  • 回答は、各例題の宣言部のビットパターンを変更するのみ。

    実習は行わず、すぐに回答する。

  • ステートマシンのまとめとして、ステートビットの割り当て方法(バイナリ、グレイ・コード、ワンホット、ジョンソン)について簡単に説明する。

テキスト68~70ページ「例題12」

  • PLDの設計にはあまり重要な内容ではないため、文法的な説明のみを簡単に行う。

[15分]休憩

[1時間15分]

テキスト71~74ページ「設計実習」

  • 71ページ

    ブロック図に従って、教材の概要を説明。

  • 74ページ

    回路図を説明。IC1が72ページで紹介される、GATE、HOLD、SIGの各信号を作っていること、IC2は今回の実習では使用しないこと、などを説明。

    特に、IC6、IC4は各自プログラムしボードに実装して動作確認するので、ピン配置と各信号の意味、ICの機能について詳細に説明する。

    また、IC6はここまで紹介した、4ビット出力の例題や練習問題(BCDカウンタなど)について、これに差し替えることで実際に動作確認ができることを説明。

  • 72ページ

    GATE、HOLD、SIGの各信号はクロックに完全に同期していること(従って設計するPLD側で同期化する必要のないこと)、特にSIGは被測定信号(=ファンクションジェネレータの出力信号)のONエッジを検出するクロック1パルス分の微分信号であることを説明。

    クロックの設定は10Mまたは20MHzとすること(例題や練習問題の動作確認には2Hzとすること)を説明。

  • 73ページ

    設計実習1のヒントとして、カウントアップ用と出力用(7seg表示用)のレジスタは別にすること、カウントアップ用のレジスタの値をHOLD=Hの条件で出力用のレジスタにラッチさせること、カウントアップ用のレジスタはGATE=HかつSIG=Lのときカウントアップ、GATE=HかつSIG=Hで保持、GATE=Lで0、と動作すること、キャリーはカウントアップ用のレジスタが9の時にHとなること、などを補足。

    設計実習2のヒントとして、IC4は2桁目なので、カウントアップの条件に下位桁からのキャリー入力(CI 12番ピン)を見る必要があること、上位桁へのキャリー出力は、下位桁からのキャリー入力(CI 12番ピン)がアクティブであることも条件に加える必要があること、などを補足。

    EP910のブロックダイヤグラムを提示して、EP910の機能を説明。

    (なお、アルテラは紫外線消去型のデバイスであるClassicシリーズとMAX5000シリーズは生産中止をアナウンスしているので、新規設計では絶対に用いないこと。)

    今回はソースの雛形は準備していないので、プロジェクトやソースは新たに作成すること、また、今回はプログラミングしたPLDをすぐにボードに実装して動作確認できるので、テストベクターによるシミュレーションは面倒であればやらなくてもよいこと、JEDECファイルが生成できた場合は講師に声をかけること(プログラマの使用方法については、JEDECファイルができた受講生から順に個々に説明する)、ファンクションジェネレータの取り扱い方法、動作確認の際、(HP3312A)ファンクションジェネレータのダイヤルの読みと、教材の表示している周波数に1割程度の差が出るが、教材の表示値の方が実は正確であること(オシロで確認できる)、従って動作確認の際は、“各桁が正常な動作をしているか”を確認すれば よいこと、などを説明。

    午後は大半を実習の時間とするが、課題の内容以外でも自由に取り組んでかまわないことを説明。

[1時間]休憩

[1時間15分]

設計実習1、設計実習2の実習時間。

重い課題なので個別指導を徹底して行う。

(特に初心者では、2つの課題は時間内に終了することは難しいので、設計実習1だけでも動作確認できるよう、指導する)

[15分]休憩

[1時間]

引き続き、設計実習1、設計実習2の実習時間。

[30分]

設計実習1、設計実習2の回答。

設計実習2については、回答例として提示したソース以外に、7SEGへの出力信号をレジスタ出力にして、BCD4bit分を節約することも可能であることを補足。

3日間を通しての質問を受け付ける。

アンケートのお願いと修了書の配布。

後片付けについての説明を行い、終了。


※上記以外の資料(「教材」と「実技関連説明書」など)は、 こちら(ユーザ名=ユーザIDとパスワードが必要です)。
ユーザ名とは会員登録時に発行されたユーザIDを指します。
ユーザ名とパスワードをお持ちでない方は教材作成支援情報メニュー一覧から会員登録を行って下さい。