CPLD/FPGAのページ Version 1.0

 ※このページはあくまで個人的な趣味によって書かれており、著者は全ての内容について、いかなる責任も負いません。

 このページは、CPLD/FPGAを使った製作事例を紹介しています。


 ●重要なお知らせ●

  1.QuartusU(アルテラの開発環境)のバージョンについて

    アルテラはインテルに吸収されました。
    ここで紹介している旧アルテラのCPLD(MAX3000やMAXU)は、インテルのQuartusU(最新バージョン)ではサポートされていませんので、
    使用するためには、QuartusU(バージョン13.0)をインストールする必要があります。
    QuartusU(バージョン13.0)は、インテルのHPではなく、アルテラのHPから無料でダウンロードできます。
    言うまでもありませんが、QuartusU(バージョン13.0)は、Windows10で問題なく動作します。

    なお、今のパソコンには、ダウンロードケーブルで使用しているパラレルポート(プリンタポート)は、おそらくついていないと思われますし、
    下記のパラレルポート用のダウンロードケーブルはWindows10パソコンではサポートもされていないようです。
    もし、お金をかけないでインテル(アルテラ)のCPLDやFPGAを使うのであれば、このHPの下記に写真を載せていますが、
    USBにつながる低価格な「USB Blaster」がお勧めです。
    私は、非正規品の「USB Blaster」をアマゾンで600円程度で購入しましたが、Windows10パソコンで問題なく使えています。
    使い方は簡単で、「Byte Blaster」とはコネクタのピンの配置が同じなので、コネクタを差し替えるだけで使っています。

 
デバイスとQuartusUのバージョン(アルテラ社の資料より抜粋)
使用するデバイスをサポートするバージョンのQuartusUをインストールする必要があります


USB Blaster

  2.Xilinx ISE Version 14.7(ザイリンクスの開発環境)について

    ザイリンクス社はADM社と合併しました。
    例えばザイリンクス社の最新の開発環境Vivadoは、7シリーズ以降のデバイスにしか対応していないようですが、ISEデザインツールで
    古いデバイスを使用する事ができます。このツールは、Windows10に対応しています。
    このツールは、Virtual BOX上で動作しますが、このアプリケーションはVMwareと干渉するようで、Xilinx ISEを使用すると、
    VMwareがIPを取れなくなる(ネットワークにつながらなくなる)という事象が起こりました。
    この原因は、VMwareのネットワークアダプタのブリッジが自動設定の時、Virtual BOXを見てしまうことが原因のようですが、
    VMwareのブリッジの設定が必要になりました。
    簡単な設定変更ですが、VMwareも使用している人は注意したほうがいいと思います。
    また、このインストーラーは、Cドライブのなるべく直下に置かないと起動しないようです。

    なお、秋月電子で販売しているJTAG−HS2は、FPGAにしか対応していない(CPLDの書き込みはできない)らしいので注意が必要です。


  3.ADM3202のコンデンサの接続について

    このHPのADM3202を使った回路図では、ADM3202の2ピンにつながっている0.1μFのコンデンサをGndにつないで
    実験していますが(図a)、ADM3202のデータシートでは、このコンデンサはVccにつなぐようになっています(図b)。
    実験では、このようなつなぎ方でもICのチャージポンプは正常に動作していますが、データシートでは(図b)のように記述され
    ているので、データシートの通りに(図b)のようにしたほうがいいと思います。

 






CPLDを使用すると、CPUよりはるかに高速な処理を行なうことができます。

一般に入手しやすいFPGAやCPLDには、ザイリンクス社や、アルテラ社のものがあります。
FPGAは、CPUさえ作れてしまうほどの規模のものも多いのですが、外部にコンフィグレーションROMが必要になる等、
CPLDより多少扱いにくくなります。

CPLDやダウンロードケーブルは、秋葉原の 千石電子や、 マルツパーツ 若松通商 秋月電子 等で購入する事が出来ます。


CPLDの取り扱い例


FPGAの取り扱い例 
※FPGAを使うには、他にコンフィグレーションROMの購入も必要です(千石電子やマルツパーツ館で500〜1000円程度)


若松通商での取り扱い例



代表的な形状
PLCCパッケージは、PLCCソケットが使用できます




CPLDの開発環境

CPLDの開発には、HDL言語(VHDL,Verilog−HDL等)を使用するのが一般的です。
開発に必要なものは、ダウンロードケーブルくらいです。
開発ツールは、多くの場合、メーカーより無償で提供されています。


 ○ザイリンクス社のCPLDの開発環境 ※注意)古い情報です。

    ・パソコン(必要なスペックは、ザイリンクス社のHPを参照) 
      ※下記のダウンロードケーブルを使用する場合は、パラレルポート(一般にプリンターをつなぐ25ピンのコネクタ)
      が付いている必要があります 
    ・ダウンロードケーブル(ザイリンクス社や千石電子で1万数千円で購入できますが、自作もできます)
      ※自作する場合、制作費は2000円程度です(回路図は下記を参照)。
    ・WebPACK ISE(ザイリンクス社から提供されている多機能な開発ツール)
      ザイリンクス社のホームページ ※http://www.xilinx.co.jp/ から無償でダウンロードできますが、このツールは
      数Gバイトの大きさがあります。(DVDに収まらないくらいの大きさがあります)
    ・マニュアル
      ザイリンクス社のホームページから無償でダウンロードできます。

ザイリンクス社のダウンロードケーブル(ザイリンクス社のホームページより抜粋)

上記のダウンロードケーブルを自作してみた


 ○アルテラ社のCPLDの開発環境 ※注意)古い情報です。

    ・パソコン(必要なスペックは、アルテラ社のHPを参照) 
      ※下記のダウンロードケーブルを使用する場合は、パラレルポート(一般にプリンターをつなぐ25ピンのコネクタ)
      が付いている必要があります 
    ・ダウンロードケーブル(アルテラ社や千石電子で1万数千円で購入できますが、自作もできます)
      ※自作した場合は2000円程度です(回路図は下記を参照)。
    ・QuartusU Web Edition(アルテラ社から提供されている多機能な開発ツール)等
      アルテラ社のホームページ ※http://www.altera.co.jp/ から無償でダウンロードできる。
      下記のライターを自作する場合は、ドライバーソフトのインストールも必要です(ドライバーはQuartusUのフォルダにあります)。
    ・マニュアル
      アルテラ社のホームページから無償でダウンロードできます。

アルテラ社のダウンロードケーブル(アルテラ社のホームページより抜粋)

ダウンロードケーブルのピンの説明(アルテラ社のホームページより抜粋)


上記のダウンロードケーブルを自作してみた
ただし、出力コネクタは、ザイリンク社の接続コードと互換性を持たせるために同じ並びにしてあります


Windows10パソコンでALTERAのCPLDやFPGAを使う場合は、安価なUSB Blasterを使うといいと思います。
このツールは、USBポートにつなぐもので、AMAZONでは、600〜2000円程度で購入できます。
私の環境では、Windows10+QuartusU(バージョン13.0)+USB Blasterという組み合わせで、
アルテラのCPLD,FPGAとも正常に書き込みできていました。


上記のUSB Blasterは、Windows10パソコンでは、ドライバーのインストールに工夫が必要な場合があるようですが、
私のWindows10パソコンでは、「設定」=>「デバイス」=>「デバイスとプリンタ」=>「↑(ハードウエアとサウンド)」
=>「デバイスマネージャー」でそのままインストールできました。


簡単な実験ですが、Windows10パソコンに、USB−パラレルポート変換ケーブルをつないで、
パラレルポート用のダウンロードケーブル(ByteBlaster)が使えないかどうか調べてみました。
QuartusU(バージョン13.0)には、そもそもWindows10用のByteBlasterのドライバーがありませんし、
十分な調査をしているわけではありませんが、このような使い方はできないようです。


トランジスタ技術「2006年4月」の付録基板

アルテラ社のCPLD(MAXU)/EPM240T100C5 と、ダウンロードケーブル(ByteBlaster互換)を一枚の基板に載せたもので、
開発ツール(QuartusU Web Edition)を含めた必要なものが揃っているので、実験には最適だと思います。
記事も、きわめてわかりやすいと思います。

記事の「ストップウォッチ」を組み立ててみた

※この付録基板を使った製作は、 「おまけのページ」 にあります。





ザイリンクス社のCPLDを使ってみる


「WebPACK ISE」については、解説しているWEBサイトが多いので参考にするといいと思います。
バージョンにより操作方法は異なりますが、参考までに、私の場合、「WebPACK ISE 8.2」 ※H18.10.01現在の最新
では、操作手順は下記の通りです。

「WebPACK ISE 8.2」の操作手順1 

「WebPACK ISE 8.2」の操作手順2 ※上記のプロジェクトとVHDLテンプレート作成部分(操作手順1の@の詳細説明図)
VHDLプログラムを作成したら、それぞれのモジュールに対して、画面から「File」 ==> 「Save」の操作が必要です。

「WebPACK ISE 8.2」の操作手順3 ※上記のアサイン部分(操作手順1のCの詳細説明図)

※現在、このページの開発で使用しているツールは、「WebPACK ISE 10.1」ですが、使い方はほとんど同じです。




ザイリンクス社のXC9500/XC9500XLファミリーを使ってみる


  XC9500ファミリーには、規模により、XC9536、XC9572、XC95108、XC95144、XC95216、XC95288があります。
  このシリーズの中には、5V用以外に、コア電圧が3.3V用のXL、コア電圧が2.5V用のXVもあります。

  CPLDのピンレイアウトは、少し特徴的で、ピン番号は、CPLD上部中央から反時計回りに振られています(PLCCパッケージ)。
  例えば、XC9572-15PC44Cは機能ブロックが4つ、各マクロセルがそれぞれ18個ありますが、形状が44ピン(入出力ピン数は34本)
  しかないので、ピンレイアウトに表記のないマクロセルは外部からは使用する事は出来ません。

  XC9500XLファミリーは、コア電圧が3.3Vですが、すべてのI/Oピンは5VトラレントI/Oになっているので、5VのCMOS信号
  を直接入力する事もできます。
  また、このシリーズは、ユーザーI/Oピン、コア電源(Vccint)、出力電源(Vccio)に電圧を加える順番は規定していないので、
  電源投入順序を考慮する必要はありません。
  5V,3.3Vデバイスが混在する場合、コア電源(Vccint)を3.3V、出力電源(Vccio)を3.3Vにしてやれば、I/Oピンの出力を
  3.3Vにする事ができ、これらの混在するシステム間で互換を保つ事ができますし、
  3.3V、2.5Vデバイスが混在する場合は、コア電源(Vccint)を3.3V、出力電源(Vccio)を2.5Vにしてやれば、I/Oピンの
  出力を2.5Vにする事ができ、これらの混在するシステム間で互換を保つ事ができます。
  通常は、コア電源(Vccint)も、出力電源(Vccio)も3.3Vで使用します。

  このシリーズは、プログラム/消去サイクルが10、000回(データ保持期間:20年)も可能なので、VHDLの学習にも最適
  だと思います。※CPLDのプログラムの書き換え回数は、他のものでは100回位のものが多いです。

XC9500シリーズの種類(ザイリンクス社のマニュアルより一部抜粋) 

XC9500シリーズのピン数(ザイリンクス社のマニュアルより一部抜粋) 

TQFPパッケージ(写真はXC9536)のフリーハンド基板の作成イメージ




ザイリンクス社のXC9572-15PC44Cを使ってみる



 ●実験ボード・タイプ1(XC9572-15PC44C)

   千石電子で600円程度で購入したXC9572-15PC44Cを使って、実験ボードを作ってみました。
  試作したボードは、CPLDに、電源とJTAG端子をつないだもので、コネクタにはCPLDの全てのピンを取り出しています。

写真 

回路図(CPLDに電源とJTAG端子をつけただけだ)  ※PLCCパッケージの場合 

PLCCソケットのレイアウト(裏面より) 


@ルーレットアダプタをつないでみる(1)

PICで使ったルーレットアダプタをつないでみました。
SWを押すとXC9572の機能ブロック(1)のマクロセルにつないだ8個のLEDを光らすものです。
WebPACKが自動的に作成するVHDLのテンプレートに、下記の代入文を追記しただけです。

   LED_A <= IN_SW ;
   LED_B <= IN_SW ;
      ・
      ・
   LED_H <= IN_SW ;

写真 

回路図(上記の回路にLEDをつけただけだ) 

s001001.vhd

プログラムソース(WebPACK用 VHDL言語)




Aルーレットアダプタをつないでみる(2)

上記回路のままで、ボタンを押すとルーレットが回転するようにVHDLを書いてみました。
「おまけのページ」の「アルテラ(CPLD)MAXU」用のサイコロアダプタを、ルーレットに変えて移植したものです。
VHDLは、「アルテラ/MAXU」でも、「ザイリンクス/XC9500」でも、文法はほとんど同じなので、
ピンアサインを変更する程度で、どちらでも使用できます。

回路図(上記と全く同じ回路だ) 

ピンアサイン 

s001002.vhd

プログラムソース(WebPACK用メインプログラム VHDL言語)

s001003.vhd

プログラムソース(WebPACK用カウンタプログラム VHDL言語)

s001004.vhd

プログラムソース(WebPACK用デコーダプログラム VHDL言語)



 ●実験ボード・タイプ2(XC9572-15PC44C)

 上記の実験ボード(実験ボード・タイプ1)に、4桁の7セグメント表示機をつないでみました。

写真 

回路図


@4桁16進カウンタにしてみる

押しボタンスイッチをつけて4桁16進カウンタにしてみました。
SW1を押すと、立ち上がりエッジでカウントし、2〜4桁目は、前桁のQ4の立ち下がりエッジを使って桁上がりします。
このサンプルでは、水晶発振器はつないでいません(水晶発信器をソケットに挿していません)。

写真 

回路図

ピンアサイン

s001011.vhd

プログラムソース(WebPACK用メインプログラム VHDL言語)

s001012.vhd

プログラムソース(WebPACK用16進カウンタ(立下りエッジ)プログラム VHDL言語)

s001013.vhd

プログラムソース(WebPACK用16進カウンタ(立上がりエッジ)プログラム VHDL言語)

s001014.vhd

プログラムソース(WebPACK用デコーダプログラム VHDL言語)


A00.00〜99.99秒ストップウォッチにしてみる

20MHz水晶を200,000分周してストップウォッチにしてみました。
分周比率を変更するだけでよいので、水晶は20MHzにこだわる必要はありません。
CPLDには、CPUのような8ビット型とか、16ビット型とか、そういうものがないので分周器を作るのは簡単です。
サンプルは、SW1を押している間、100分の1秒でカウントし、SW2を押すとゼロクリアされます。

写真 

回路図

ピンアサイン ※上記サンプルと同じです

s001021.vhd

プログラムソース(WebPACK用メインプログラム VHDL言語)

s001022.vhd

プログラムソース(WebPACK用10進カウンタ(立下りエッジ)プログラム VHDL言語)

s001024.vhd

プログラムソース(WebPACK用デコーダプログラム VHDL言語)

s001025.vhd

プログラムソース(WebPACK用水晶の分周プログラム VHDL言語)




ザイリンクス社のXC9536XL-10VQG44Cを使ってみる

  秋月電子で110円で購入できるCPLDを使ってみました。


秋月電子の変換基板に取り付けたイメージ
11ピンのシングルヘッダーソケットは、購入できなかったので、20ピンのソケットを切断して使用しています

1番ピンのマーク
文字の表記が横向きになるように取り付けます

 ●実験ボード・タイプ1(XC9536XL-10VQG44C)

   簡単な実験ボードを作ってみました。
   CPLDに電源とJTAG端子をつないだもので、コネクタにはCPLDの全てのピンを取り出しています。
   TQFPパッケージは、PLCCパッケージとはピンレイアウトが異なるので、注意が必要です。
   このCPLDは、電源電圧が3.3Vです。

写真(表面/ソケットを外したイメージ/裏面) 

回路図 



 @ルーレットアダプタをつないでみる(1)

   基板の確認のため、PICで使ったルーレットアダプタをつないでみました。

   サンプル@は、S1を押すと8個のLEDが点灯するだけのものです。
   S0、S2は使用していないので、S0、S2ボタンを押してはいけません。

   サンプルAは、S1を押す毎に16進でカウントし、8個のLEDがVHDLに登録したパターンで点灯するものです。
   上記のXC9572のサンプルを修正したものです。
   このサンプルでは、プッシュスイッチに何のチャッターリング防止対策もしていないので、スイッチの押し方によっては、
   ルーレットが一度に何ステップも進む事があります。
   S0、S2は使用していないので、S0、S2ボタンを押してはいけません。

   サンプルBは、S2がリセット、S1が内部で8進カウント(ラッチ)、S0を押すとカウント値がルーレットに反映
   されるようにしたもので、PICやAVRと3線でデータ連動するために作ったものです。
   このサンプルも、プッシュスイッチに何のチャッターリング防止対策もしていないので、スイッチの押し方によっては、
   ルーレットが一度に何ステップも進む事があります。

写真

回路図
※電源が3.3Vなので、LEDは赤以外では点灯しません。

ピンアサイン (サンプル@、A)

ピンアサイン (サンプルB)

sample1.vhd

サンプル@ プログラムソース(WebPACK用 VHDL言語)


sample2A.vhd

サンプルA プログラムソース・メイン(WebPACK用 VHDL言語)

sample2B.vhd

サンプルA プログラムソース・16進カウンタ(WebPACK用 VHDL言語)

sample2C.vhd

サンプルA プログラムソース・デコダー(WebPACK用 VHDL言語)


sample3A.vhd

サンプルB プログラムソース・メイン(WebPACK用 VHDL言語)

sample3B.vhd

サンプルB プログラムソース・8進カウンタ(WebPACK用 VHDL言語)

sample3C.vhd

サンプルB プログラムソース・デコダー(WebPACK用 VHDL言語)





 Aルーレットアダプタをつないでみる(2)

   上記のサンプルBを使って、PICとデータ連動してみました。
   ハイパーターミナルから1〜8の文字を入力すると、CPLDに連動され、該当するLEDが点灯します。
   PICについての詳細は、「PIC奮闘記」を参照してください。
   

写真

ハイパーターミナルのイメージ

ハイパーターミナルの設定

回路図
※電源が3.3Vなので、LEDは赤以外では点灯しません。

ピンアサイン ※上記のサンプルBと同じです

sampleA.vhd

プログラムソース・メイン XC9536XL用(WebPACK用 VHDL言語)  ※上記のサンプルBと同じです

sampleB.vhd

プログラムソース・8進カウンタ XC9536XL用(WebPACK用 VHDL言語)  ※上記のサンプルBと同じです

sampleC.vhd

プログラムソース・デコダー XC9536XL用(WebPACK用 VHDL言語)  ※上記のサンプルBと同じです

samplePIC.asm

プログラムソース PIC12F1822用(MPLAB MPASM アセンブラ言語)



 B電子サイコロにしてみる

   PIC12F1822は、「Reference Clock Module」機能が内蔵されているので、3.3V用の高速オシレータとして使用できます。
   水晶ほど精度は高くありませんが、3.3Vのオシレータは、5V用のものほど入手しやすくはないので、価格がオシレータより安い
   8ピンPICは、こういう用途にも向いているかも知れません。
   この機能の詳細は、「PIC奮闘記」を参照してください。
   
   このサンプルは、TTLが一般的だった昭和の昔に流行った電子サイコロを、VHDL言語に置き換えただけのものです。
   PIC12F1822は、3.3V/32MHzのオシレータとして使っているだけです。
   このサンプルは、PICを高速オシレータとして使った事例ですが、
   電子サイコロとして使うだけなら、クロックは32MHzにする必要などなく、PICのプログラミングでもっと遅くしたほうが(数百Hz程度)
   プッシュスイッチの性能的には、使いやすいと思います。
   電源をつなぐと全LEDが点灯し、S1ボタンを押すと、表示が止まって1〜6の何れかのサイコロの目が表示されます。

写真

回路図
※電源が3.3Vなので、LEDは赤以外では点灯しません。

ピンアサイン

sampleA.vhd

プログラムソース・メイン XC9536XL用(WebPACK用 VHDL言語)

sampleB.vhd

プログラムソース・6進カウンタ XC9536XL用(WebPACK用 VHDL言語)

sampleC.vhd

プログラムソース・デコダー XC9536XL用(WebPACK用 VHDL言語)

samplePIC.asm

プログラムソース PIC12F1822用(MPLAB MPASM アセンブラ言語)










ザイリンクス社のXC9536XL-10PC44Cを使ってみる




写真

写真2

回路図  ※PLCCパッケージの場合


  ※このCPLD(XC9536XL)を使った事例は、 「PIC奮闘記のページ」 にあります。









ザイリンクス社のXC9536-15VQ44Cを使ってみる




写真

回路図  ※VQFPパッケージの場合

工事中











アルテラ社のCPLDを使ってみる


「Quartus II」については、書籍やWEBサイト、トラ技等で詳しく解説しているので参考にするといいと思います。
バージョンにより操作方法は異なりますが、参考までに、私の使っている「Quartus II 8.1 Web Edition」では、操作手順は下記の通りです。


「Quartus II 8.1」の操作手順1 プロジェクトの作成 


「Quartus II 8.1」の操作手順2 VHDLプログラムの作成 

トップのエンティティ名は、プロジェクトの作成で入力した名前と一致している必要があるので、他のプロジェクトで使っているVHDLを
コピーして使う場合は、コピーしたVHDLソース上のトップのエンティティ名は修正しないとコンパイルエラーになります。


「Quartus II 8.1」の操作手順3 ピンアサイン


「Quartus II 8.1」の操作手順4 自作ケーブル(ByteBlaster MV)による書き込み

※自作ケーブルを使用するためには、事前にドライバーをインストールしておく必要があります
ドライバーは、「Quartus II 8.1」をインストールしたフォルダにあります。
・・・\ALTERA\81\quartus\drivers\win2000\win2000.inf  ※Windows2000/WindowsXP用を
「サウンド、ビデオ、およびゲームコントローラ」を指定してインストールします。
ドライバーのインストールについては、パソコンの動作が不安定になる可能性がありますので、
必ず、書籍やWebサイトで解説されているインストール方法を参照して下さい。




アルテラ社のMAXシリーズを使ってみる


MAXシリーズの種類(アルテラ社のホームページより一部抜粋) 




  アルテラ社のMAX3000Aシリーズを使ってみる


MAX3064Aの写真

秋月電子の変換ボードに取り付けたイメージ

MAX3064ATC44のピン配列
TQFPパッケージの場合です。PLCCパッケージではピン配列が異なります


     ●実験ボード・タイプ1(EPM3064ATC44-10)

        MAX3064Aを使った簡単な実験ボードを作ってみました。
        MAX3000Aファミリーは、数百円程度から購入できますし、ザイリンクス社のXC9500XLファミリー同様、VHDLの学習や、
        趣味の分野にも最適だと思います。

        I/Oピンの出力は、−25〜+25mAなので、いくつものLEDを同時に点灯するような使い方をしないのなら、抵抗を通して
        直接LEDをつなぐ事もできます。
        MAX3000Aファミリーは電源電圧が3.3Vですが、5VトラレントI/Oになっているので、5Vロジックの入力が可能です。
        また、VCCIOの電圧を2.5Vに設定する事でも、3.3Vや2.5Vデバイスが混在する環境でも使用する事ができますが、
        通常は、VCCIOは3.3Vで使用します。※注)下記の表を参照
        デバイスのスピードは、グレードにより異なりますが、使用した−10(最も遅いスピードグレード)でも100MHz程度は期待でき
        そうです。※注)下記の表はCPLDのスピードとは関係ありません。

MAX3000Aシリーズのマニュアルより抜粋

写真(表面/ソケットを外したイメージ/裏面) 

回路図 



 @ルーレットアダプタをつないでみる(その1)

   基板の確認のため、PICで使ったルーレットアダプタをつないでみました。

   サンプル@は、SW1を押すと8個のLEDが点灯するだけのものです。
   SW2は使用していないので、SW2ボタンを押してはいけません。

   サンプルAは、SW1を押すと8個のLEDが回転するものです。
   このサンプルでは何のチャターリング対策もしていないので、ボタンの押し方によっては、ルーレットが何ステップも進む事があります。
   SW2は使用していないので、SW2ボタンを押してはいけません。

   サンプルBは、SW1、SW2を2入力の論理回路(INVERT、AND、OR、NAND、NOR、XOR、XNOR)に入力して、該当するLEDを点灯する
   もので、入力パターンにより点灯するLEDが変化します。
   このサンプルは、SW1とSW2を使用します。

   サンプルCは、SW1、SW2を使ったフリップフロップ回路で、TTL論理ICが一般的に使われていた昔は、2接点のマイクロスイッチと組み
   合わせてチャッターリング防止で一般的に使われていたものです。
   (当時の回路はGND入力だったので、入力のインバータはありませんでしたが)。
   追加でLED_2〜4はSW1、LED_5〜7はSW2が押されると点灯するようにしてあります。
   このサンプルは、SW1とSW2を使用します。

写真、回路図
※電源が3.3Vなので、LEDは赤以外では点灯しません。

74HC245APのイメージ

ピンアサイン (サンプル@、サンプルA)

ピンアサイン (サンプルB、サンプルC)

サンプルBのイメージ図

サンプルCのイメージ図

sample1.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語)



sample2a.vhd

サンプルA プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語)  ※メイン

sample2b.vhd

サンプルA プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語)  ※8進BCDカウンター部

sample2c.vhd

サンプルA プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語)  ※BCDデコーダー部



sample3.vhd

サンプルB プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語)



sample4.vhd

サンプルC プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語)






 Aルーレットアダプタをつないでみる(その2)

   実験ボードを修正して、プッシュスイッチを3個にしたものです。

   サンプル@は、シフトレジスタを使って、3線でCPUからデータの連動をする事を想定したものです。
   データ(SW1)でデータビット(1か0)を指定し、クロック(SW2)ボタンを押すと、クロックの立ち上がりでデータビットが
   読み込まれ、シフトしてデータが設定されていきます。
   モードボタン(SW3)を押すと、読み込まれたデータが出力されます。
   リセットボタンはないので、データビット数以上のクロックを与える必要があります。

写真、回路図
上記サンプルに、SW3を追加しただけです。
電源が3.3Vなので、LEDは赤以外では点灯しません。

ピンアサイン (サンプル@)

sample1a.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語)  ※メイン

sample1b.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語)  ※シフトレジスター部




 BSIN波を発生させてみる

   R−2R型のDAコンバータをつないでSIN波を発生させてみました。

   サンプル@は、CPLDに8ビット200ステップのSINデータを設定して、200進カウンタと組み合わせたものです。
   入力されたクロックの200分の1の周波数のSIN波を出力します。
   クロックは3.3Vなら何でもよいのですが、このサンプルでは、12F1822を使ったオシレータでテストしています。
   このオシレーターの詳細は、 「PIC奮闘記 第三章」で取り上げています。
   クロックは100MHz程度まで(500KHzのSIN波が出力される)可能な筈なのですが、実際には、おそらく安価で3.3Vレール
   TOレール単電源に対応できるOPアンプや、DAコンバータの制約、その他で、周波数が高くなると波形が崩れてきます。 

   SIN波のデータは、これを手計算で作成するのは大変なので、簡単なツールを作っておくと便利です。
   紹介するほどのプログラムでもないのですが、私の場合は、CYGWINで動作するC言語プログラムで、この類のデータはファイル
   まで自動作成しています。※サンプルA
   例えば、VHDLプログラムのデータ数を100に変更する場合は、このツールの「PI_MAX_DATA」を50に変更して実行すれば、
   「work.dat」というファイル名で、データ部分を自動作成するので、これをエディターで開いてVHDLプログラムにコピーすれば、
   SIN波データ部分の記述は完了します。
   CYGWINの詳細は、 「(別室)Cygwinのページ」で取り上げています。

写真、回路図

オシロスコープによる出力波形のイメージ

ピンアサイン  

SIN波データの作成ツール
プログラムを実行すると、「work.dat」というファイル名でデータファイルが作成される

sample1.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語)

GEN_SIN.c

サンプルA SIN波データの作成ツール Cygwin用(C言語)



 
 



 Cプログラマブルオシレータ(153[Hz]〜20[MHz])にしてみる

   PIC(12F1822)をつないで、プログラマブルなオシレータにしてみました。
   水晶をCPLDで分周しているので、CPUで作った場合に比べて、高精度(6桁精度)で周波数が高い(20MHz)のものが
   容易に作れます。

   サンプル@は、パソコンのハイパーターミナルから周波数(153〜20000000[Hz])を入力してスペースキーを押すと、
   PICで分周回数を計算して3線でCPLDに送信し、CPLDが40MHzの水晶発振モジュールの出力を分周して指定された
   周波数を出力するものです。

   水晶発振モジュールは、3.3V用のものが購入できればいいのですが、私は40MHzは5V用のものしか購入できなかったので、
   HT7750A(秋月電子で5個200円)を使って、電源に必要な5Vは、3.3Vから作り出しています。
   このCPLDの入力は5Vトラレント入力なので、水晶発振モジュールの5V波形は、CPLDにそのまま入力できます。
   MAX3064Aのマクロセル数が64と小さめなので、分周カウンタは18ビットにしてありますが、例えば、MAX3128Aや
   MAXU等の大きなものを使えば、このビット数を増やしてより低い周波数を出力できるようにしたり、プログラマブルなSIN波を
   出力するような使い方にする事もできます。
   このような修正をした場合でも、PIC側のプログラムは、入力下限周波数のチェック「PI_OUTMIN」を変更する程度で、ほとんど
   そのまま使用できます。
   PIC12F1822については、 「PIC奮闘記 第一章 8ビットPICを使ってみる」で取り上げています。

   このサンプルは、MAX3064Aのマクロセル数を100%使い切っているので、QuartusUのバージョンによっては、ビルド
   できないかも知れません。

写真、回路図

ハイパーターミナルのイメージ(このツールの使い方)
出力する周波数(153〜20000000)を入力して「スペースキー」を押すと、指定された周波数が出力されます

オシロスコープによる出力波形のイメージ

ピンアサイン  

ハイパーターミナルの設定

sample1a.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語) メイン

sample1b.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語) 分周回路

sample1c.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語) マイコンデータの連動

sample1.c

サンプル@ プログラムソース PIC12F1822用(MPLAB HI-TECH(Version9.83) C言語プログラム)
・水晶発振モジュールの周波数を変更した場合は、プログラム中の「PI_OSC」を変更する事で対応できますが、
ハイパーターミナルから入力できる周波数の下限を設定している「PI_OUTMIN」の変更も必要です。







 Dダイナミック点灯方式・4桁7セグメントLED表示器にしてみる

   7セグメントLED表示器を4個つないで、4桁の表示器にしてみました。
   このCPLDでは、4桁7セグメントLEDをそのまま点灯するにはピン数が不足するので、ダイナミック点灯方式にしてあります。
   電源は、7セグメントLED用の5Vと、MAX3064用の3.3Vが必要になるので、5Vから三端子レギュレタを通して3.3Vを作り出して
   います。 
   74HC245を使ったのは、秋月電子で5個200円で購入できるからで、双方向性が必要なわけではありません。
   このICを使った場合、DIR(1ピン)の電圧を間違えると、入力と出力が逆向きになり、CPLD側に5Vが出力されて、MAX3064Aが
   壊れる可能性があります。   

   サンプル@は、4桁の10進カウンタで、S3を押すと、1/100秒でカウントを開始し、S4を押すとカウント値がゼロにリセットされます。
   PIC12F1822は、8MHzの水晶を分周して、3.3V、1KHzのオシレータとして使っているだけです。
   この「表示アダプタ」、及び「PIC12F1822オシレータ」の詳細は、 「PIC奮闘記 第三章」で取り上げています。

写真、回路図

ピンアサイン

PIC12F1822オシレータのモード設定
このサンプルでは、S0:OFF,S1:ONにして、1KHzのオシレータとして使用します

sample1a.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語) メイン

sample1b.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語) 10進カウンタ

sample1c.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語) 8進カウンタ

sample1dvhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語) 7セグデコーダ

sample1e.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語) 8ビットデコーダ

sample1f.vhd

サンプル@ プログラムソース MAX3064A用(QuartusU 8.1用 VHDL言語) クロック分周器

pic1.asm

サンプル@ プログラムソース MPLAB用 PIC12F1822用 アセンブラ言語(MPLAB/MPASM)








  アルテラ社のMAXUシリーズを使ってみる


     ●実験ボード・タイプ1(EPM240T100C5)

        トランジスタ技術誌のMAXUボードが何枚かあるので、実験ボードにしてみました。
        MAXU本体以外の周辺回路は不要なので、オプションパーツは取り付けていません。
        MAXUは、安価で高性能ですが、多ピンQFPパッケージなので、これを手作業でハンダ付けしてボードを作るのは、
        なかなか根気がいる作業だと思います。
        そういう意味では、このボードは実験で重宝するものだと思います。

        注意)このMAXUの入力電圧範囲は、−0.5[V]〜+4.0[V] です。トレラント入力ではありません。
        5[V]の入力をする場合は、クランプダイオードと、外部抵抗等の対応が必要になります。 

ピン配列

写真

回路図
JTAG回路、コンデンサは回路図から省略しています
オプションの水晶発振器や電源レギュレタは、取り付けていません







 @プログラマブルオシレータ(2[Hz]〜20[MHz])にしてみる

   MAX3064Aで作ったオシレータを、MAXUでも作ってみました。
   このCPLDは、マクロセル数がMAX3064Aの3倍程度あるので、ビット数を増やして出力レンジを2[Hz]〜20[MHz]
   に拡張していますが、それでも使用しているトータルロジックエレメント数は、全体の33パーセント程度しか使っていません。

   機能は、MAX3064Aのサンプルと同じで、パソコンのハイパーターミナルから周波数(2〜20000000[Hz])を入力して
   スペースキーを押すと、PICで分周回数を計算して3線でCPLDに送信し、CPLDが40MHzの水晶発振モジュールの出力を
   分周して指定された周波数を出力します。

   MAXUは、5Vトラレント入力ではないので、水晶発振モジュールの5V出力を、過去に秋月電子で購入した74VHC244Fで
   3.3Vに変換してCPLDに入力しています。
   74VHC244Fにこだわる理由はないのですが、電源電圧(3.3V)より高い電圧(5V)を入力するので、VHCシリーズ等
   しか使用できません(HCシリーズを使うと、ICが壊れてしまいます)。

   このサンプルは、水晶を分周しているだけなので、周波数の精度は高いのですが、実験では、時々、誤った周波数を出力する
   事があります。
   このような場合、ハイパーターミナルから出力する周波数を再度入力する必要があります。

   PIC12F1822については、 「PIC奮闘記 第一章 8ビットPICを使ってみる」で取り上げています。

写真、回路図

ハイパーターミナルのイメージ(このツールの使い方)
出力する周波数(2〜20000000)を入力して「スペースキー」を押すと、指定された周波数が出力されます

オシロスコープによる出力波形のイメージ

ピンアサイン  

ハイパーターミナルの設定

sample1a.vhd

サンプル@ プログラムソース MAXU EPM240T100C5用(QuartusU 8.1用 VHDL言語) メイン

sample1b.vhd

サンプル@ プログラムソース MAXU EPM240T100C5用(QuartusU 8.1用 VHDL言語) 分周回路

sample1c.vhd

サンプル@ プログラムソース MAXU EPM240T100C5用(QuartusU 8.1用 VHDL言語) マイコンデータの連動

sample1.c

サンプル@ プログラムソース PIC12F1822用(MPLAB HI-TECH(Version9.83) C言語プログラム)



 Aプログラマブルオシレータ(1[Hz]〜100[KHz]/SIN波)にしてみる

   SIN波を出力するプログラマブルオシレータにしてみました。
   ハイパーターミナルから周波数(1[Hz]〜100[KHz])を入力すると、指定した周波数のSIN波を出力します。
   VHDLプログラムは、0.001[Hz]までの出力ができるように作ってありますが、そんな周期のSIN波の用途もないので、
   PICのプログラムが1[Hz]までしか入力できるようになっていません。
   SIN波の精度は、8ビット(0〜255)、200分割にしてあります。
   SIN波データは、上記、MAX3064Aで紹介したCYGWINのプログラムで作ったものです。
   74VHC244Fは、電源電圧(3.3V)より高い電圧(5V)を入力するので、VHCシリーズ等しか使用できません。
   HCシリーズを使うと、ICが壊れてしまいます。

   このサンプルは、水晶を分周しているだけなので、周波数の精度は高いのですが、実験では、時々、誤った周波数を出力する
   事があります。
   このような場合、ハイパーターミナルから出力する周波数を再度入力する必要があります。

写真、回路図

ハイパーターミナルのイメージ(このツールの使い方)
出力する周波数(1〜100000)を入力して「スペースキー」を押すと、指定された周波数が出力されます

オシロスコープによる出力波形のイメージ

ピンアサイン  

ハイパーターミナルの設定


sample1a.vhd

サンプル@ プログラムソース MAXU EPM240T100C5用(QuartusU 8.1用 VHDL言語) メイン

sample1b.vhd

サンプル@ プログラムソース MAXU EPM240T100C5用(QuartusU 8.1用 VHDL言語) 分周回路

sample1c.vhd

サンプル@ プログラムソース MAXU EPM240T100C5用(QuartusU 8.1用 VHDL言語) マイコンデータの連動

sample1.c

サンプル@ プログラムソース PIC12F1822用(MPLAB HI-TECH(Version9.83) C言語プログラム)







  アルテラ社のMAX7000シリーズを使ってみる


      MAX7000ファミリーには、コア電圧が2.5V用のB、コア電圧が3.3V用のA(AE)、コア電圧が5V用のSシリーズがあります。

      MAX7000Aシリーズでは、MultiVolt I/Oインターフェース機能がサポートされていて、供給電圧の異なるシステムとインタフェース
      することができます。
      Vccint(コア電源)に3.3Vを供給し、Vccio(出力電源)に3.3Vまたは2.5Vの何れかを供給する事で、5V、3.3V、2.5Vの混在する
      システム間でも、互換を保つ事ができます。※下記の表を参照
      通常は、Vccint、Vccioは3.3Vで使用します。
      また、各I/Oピンに対してオープン・ドレイン(オープン・コレクタと同等)出力のオプションを選択する事もできます。
      スピードグレードは、−4〜−12程度まであり、この数値が小さいほど、高速のデバイスになっています。

MAX7000Aシリーズのマニュアルより抜粋

     ●実験ボード・タイプ1(EPM7064AETC44-10N)


ピン配列





   ただいま、準備中  












FPGAを使ってみる

  アルテラ社のCycloneUシリーズを使ってみる

     ●実験ボード・タイプ1(EP2C5T144)

        FPGAボードがAMAZONで5000円程度と格安で購入できるので使ってみました。
        このFPGAは古いタイプのFPGAで、最新のインテルの開発ツールではサポートされていませんが、R4.10.1現在でも
        AMAZONで「altera fpga cyslonell ep2c5t144」のキーワードで見つけることができます。
        
        私の購入したボードは、初期状態ではLチカプログラムが書き込まれていて、5Vの電源をつなぐと、D2、D4、D5のLEDが
        1秒間隔で点滅するするようになっていました。
        また、アマゾンのレビューで指摘している人がいましたが、このプログラムを書き換える場合は、R1, R2, R9, R10のゼロオーム抵抗は
        外しておかないと、基板にダメージを与える可能性があります。

ボードの写真

DCジャックには5Vを供給します
※ボードの回路図より抜粋

アマゾンのレビューで指摘されている人がいましたが、
回路図を見ると、基板上のR1, R2, R9, R10のゼロオーム抵抗は外しておいた方が良さそうです。
※ボードの回路図より抜粋

LED、スイッチ、オシレータ、コネクタ周辺回路
※ボードの回路図より抜粋


@LEDの点灯動作確認サンプル

  基板上の押しボタンスイッチを押すと、基板上の3つのLEDが点灯する簡単なサンプルを作ってみました。
  (サンプル@)
  このサンプルは、ボードに追加回路は不要です。
  プログラムソース中のエンティティ名は、プロジェクトの作成で入力した名前と一致していないとコンパイルエラーになるので
  注意が必要です。
  なお、上記で説明しているCPLDと同じ方法でFPGAに直接プログラムを書き込んだ場合、電源を切ると内容は消えてしまいます。
  内容を保存する場合は、JICプログラミングで基板上のEPROMに書き込む必要があります。
  この方法は、ここでは省略しますが、FPGAにプログラムを書き込む方法とほとんど同じです。また、追加で必要なものもありません。
  (このような簡単な動作確認プログラムをEPROMに書き込む必要はないとは思いますが。)

  サンプルAは、ボード上の2つのLED(D2、D4)が1秒周期で交互に点滅を繰り返すもので、このサンプルも追加回路は不要です。
  ボード上の50MHzのオシレータを入力にして、これを分周しているものです。
  LED(D5)は、使用していません。
  

写真
このサンプルは、ボードにUSB Blasterをつなぐだけです。
電源はUSB Blasterから供給されるので、必ずしもDCジャックに5Vを供給する必要はありません。
USB Blasterの下にあるスイッチを押すと、3つのLEDが点灯します。

サンプル@のピンアサイン (QuartusU 13.0)
仮コンパイルしてアサイン画面を開くと 図の青色の部分が表示されます。
赤色の部分をクリックするとプルダウン画面になるので、PIN番号を選択します。

sample1.vhd

サンプル@ プログラムソース CycloneU(EP2C5T144)用(QuartusU 13.0用 VHDL言語)


サンプルAのピンアサイン (QuartusU 13.0)
入力をPIN_17(50MHzのオシレータ)に変更しています

sample2.vhd

サンプルA プログラムソース CycloneU(EP2C5T144)用(QuartusU 13.0用 VHDL言語)





  ラティス社のMachXO2(LCMXO2−256HC−4TG100C)を使ってみる


  

写真

     ●実験ボード・タイプ1(LCMX02-256HC-4TG100C)

 

          ただいま準備中!!!!! 

 







PICのページへ戻る

ボタンを押すと、PICのページに飛びます。

メニューに戻る

ボタンを押すと、メニューのページに飛びます。






問い合わせ先(代表者)E_MAIL BYP03364@nifty.ne.jp

 ※ウイルス感染防止のため、容量の大きなもの、添付ファイルのあるもの、テキスト形式以外のメールは
全て削除されます。
 また、個々の質問については、お答えできません。