小型安価なFPGAボードの紹介と任意波形発生器

1.7K Views

September 20, 21

スライド概要

論理回路を自由に作成できる FPGA という装置に焦点を当てます。小型で安価な Tang Nano という FPGA ボードを使って、uchan が作成中の任意波形発生器を題材に、その原理と FPGA での実装を説明しようと思います。FPGA の開発って実際どんな感じなの?と興味のある方に参考になると思います。

論理回路の基本から説明しますので、論理回路って何、という方でも楽しんでいただけると思います。

profile-image

サイボウズ・ラボ株式会社で教育向けのOSやCPU、コンパイラなどの研究開発をしています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

小型安価なFPGAボード と任意波形発生器 2021年9月12日 @uchan_nos

2.

FPGAとは Field:現場で Programmable:プログラム可能な Gate:論理回路の Array:集まり 論理回路を書き換えられるICチップ  通常のICは工場で回路が作られ、後から 変更できない FPGAで任意の波形を生成できる装置 を作るのが今日のテーマ FPGAボード「Tang Nano」 を使った任意波形発生器

3.

目次 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由

4.

目次 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由

5.

論理回路とは デジタル信号を扱う回路 通常、0=0V、1=電源電圧、として扱う 「組み合わせ回路」と「順序回路」に大別 2入力ANDに「1,0」を入力する回路 2入力ANDの真理値表 1(入力) 2(入力) 3(出力) 0 0 0 0 1 0 1 0 0 1 1 1

6.

組み合わせ回路 入力から出力がすぐ決まる回路  入力が変化するとすぐに出力が変化する =情報を記憶しない 2入力AND 例1:ゲート素子  右図 例2:加算器  あとで すぐに出力が変化するといっても、 現実には遅延がある。 TC74HC04APの場合:tpd=6ns 入力 出力 2入力OR NOT ゲート素子の回路図記号 tpd tpd

7.

頭の体操:XORをAND,OR,NOTで作る XOR:eXclusive OR  排他的論理和 基本は論理和 ただし、入力が両方とも1なら出力は0  排他的 クイズ:XORを、AND、OR、NOTだけ を使って実現してみよう XORの真理値表 1(入力) 2(入力) 3(出力) 0 0 0 0 1 1 1 0 1 1 1 0

8.

クイズの答え OR AND = AND NOT NAND 基本はOR 入力が両方1のとき、出力が0→AND+NOT 上記は1つの例。他にも多くの実現方法がある

9.

半加算器 整数の加算を行う組み合わせ回路  2つの整数A、Bを入力すると  A+Bが出力される回路 1ビット半加算器  1ビット整数同士を加算 入力A X=A+B 半加算器 入力B C 1ビット半加算器の真理値表 出力は2ビット  加算結果  キャリー(繰り上がり信号) A 入力 B 入力 X 加算結果 C キャリー 0 0 0 0 XORとANDで構成してみよう 0 1 1 0 1 0 1 0 1 1 0 1

10.

クイズの答え 1ビット半加算器の真理値表 XOR AND XORを使うととても簡単! A 入力 B 入力 X 加算結果 C キャリー 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1

11.

全加算器 複数ビットの加算をしたい 2桁目以降は、下の桁からの繰り上 がりも加算する必要がある →全加算器 1 1 0 1 + 0 1 1 1 --------1 0 1 0 0 2つの入力0と1の他に 繰り上がり桁をも 足さねばならない A B C 1ビット全加算器 の真理値表 X=A+B+C 全加算器 C’ A B C X C’ 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1

12.

1ビット全加算器の構成 1ビット全加算器の真理値表 A B C X C’ 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1

13.

全加算器は組み合わせ回路 入力A、B、Cが変化すると 少しの遅延をもって出力X、Cが変化する 入力が変化すると 信号が 伝播していく

14.

目次 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由

15.

順序回路 記憶を持つ論理回路 基本要素は「フリップフロップ」 RS型フリップフロップ の真理値表 SET RST Q RS型フリップフロップ 0 0 保持 SET=出力Qを1にする 0 1 0 1 0 1 1 1 禁止 RESET=出力Qを0にする 順序回路の出力を入力に帰還する ことで記憶を実現 RS型フリップフロップのタイミングチャート

16.

D型フリップフロップ 別名「レジスタ」 SRAMを構成する基本単位 CPUの記憶を実現する部品 真理値表 DATA CLK Q 0 0→1 0 1 0→1 1 X 1→0 保持

17.

D型フリップフロップの動作 初期状態:CLK=0、DATA=0とする 0 1 0 0 1 0 1 1/0 1 0 1 0/1

18.

D型フリップフロップの動作 CLK=0のままで、DATAを1にしたとき  Qは変化しない 1 0 1 0 1 1 1 1/0 0 0 1 0/1

19.

D型フリップフロップの動作 DATA=0、Q=1のとき、CLKを0→1にする 0 1 0 1 0 1 1 0 0 1 1 0 1 0 1 1 0 0 1 Q:1→0

20.

D型フリップフロップの動作 DATA=1、Q=1のとき、CLKを0→1にする 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 Q:1→1 (変化なし)

21.

D型フリップフロップのまとめ CLKの立ち上がりエッジでDATAを 取り込み、Qから出力 それ以外の期間ではQを保持 真理値表 DATA CLK Q 0 0→1 0 1 0→1 1 X 1→0 保持

22.

T型フリップフロップ Tの立ち上がりエッジでQが反転 真理値表 Q T Q T Q 0 保持 0→1 ~Q 1 保持

23.

バイナリカウンタ T型FFを直列に並べるとクロックを数えられる Texas Instruments SN54HC4040, SN74HC4040 データシート (Rev. D) より

24.

目次 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由

25.

FPGAは論理回路を組み替え可能 論理回路を組み替える?  こんな感じで配線をする? →LUT(ルックアップテーブル)で論理回路を実現する  LUT=メモリで実現した真理値表 A0 A1  真理値表で任意の組み合わせ回路を表せる 0 0  右図はXORを実現するLUT 出力 0 0 1 1 1 0 1 1 1 0

26.

LUTの具体的な構成 一般には4入力1出力のLUT  16ビットのSRAM  左図 http://www.kumikomi.net/archives /2009/04/fpgalsifpga.php  「図1 ルックアップ・テーブルの 仕組み」 真理値表をLUTで表現 2入力マルチプレクサで選択

27.

配線の組み替え LUT CLK FPGAの基本構成要素 D Q C ロジックエレメント = LUT + FF =LE(ロジックエレメント) LUTとD-FFから構成されてい るらしい LE間は、任意方向に信号を伝 えられる「パス・トランジス タ」で構成されているらしい  左図 https://www.macnica.co.jp/bu siness/semiconductor/articles /intel/133387/ ロジックエレメント間の配線

28.

目次 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由

29.

任意波形発生器……の前に発振器 無安定マルチバイブレータ コンデンサと抵抗で決まるCR時定数を利用した発振器 V- OUT V+

30.

任意波形発生器 単純な発振回路では単純な波形し か作れない  矩形波や三角波、正弦波とか 右図のような任意の波形を作るに はどうすれば良いだろうか メモリに波形データを記録し、 DACで再生すれば良さそう! カウンタ アドレス メモリ 波形 データ DAC アナログ 出力

31.

任意波形発生器の原理 カウンタ 0x00 0 0x01 2 0x02 4 …… クロック 0x7e 252 0x7f 254 0x80 252 …… 0xfd 6 0xfe 4 0xff 2 メモリ カウンタ: DAC クロックを数え、アドレス を生成する メモリ: 波形データを出力する  8ビット出力なら0~255 DAC(D/A変換器): 波形データ(数値)を電圧 に変換する  0→0[V]  n→3.3*n/256[V]

32.

今回作った装置 Tang Nanoを使った 任意波形発生器 波形の測定結果

33.

目次 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由

34.

DAC(Digital to analog converter) 左図はラダー抵抗回路方式のDAC 256段階で、0~(255/256)×VDDを出せる 7 6 5 4 出力のオペアンプは、単なるバッファ  増幅率1倍=入力と同じ電圧を出力する 3 2 2種類の抵抗器だけで作れる 1 コンデンサを使ってないので周波数が高くても 0 動きそう  344kHzのsin波は余裕ぽい 注)実際に制作した回路では9ビットのラダー抵抗回路になっています

35.

ラダー抵抗DACの動作1 128=0b10000000を入力したときを考える 最終的な等価回路 OUT=1/2×VDD=2.5V 合成抵抗値の計算 次々と計算すると……

36.

ラダー抵抗DACの動作2 1=0b00000001を入力したときを考える 0.8334V 1.6667V 1.6667V 次々に 電圧を求める 0.4169V 0.8334V まずこの点の 電圧を求めたい 合成抵抗を計算する 最終的に OUT=0.01953V = 1/256×VDD

37.

目次 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由

38.

任意波形発生器の出力を確認する 任意波形発生器の出力を確認したい →DACの電圧を見れば良い DACの電圧を見る2つの方法 オシロスコープで波形を見る LEDの明るさを変えて可視化する ↑今回はこっち

39.

LEDの明るさは電流に比例 LEDは、電流𝐼𝐹 と明るさがほぼ比例 電流𝐼𝐹 は電圧𝑉𝐹 に比例しない DAC出力電圧に電流𝐼𝐹 を比例させたい 3mm赤色LED OSR5JA3Z74Aデータシートより 𝐼𝐹 :順方向電流 𝑉𝐹 :順方向電圧

40.

LED電流制御回路 DAC出力電圧(DAC_OUT)に D1の電流を比例させたい オペアンプを用いた電流制御 LED_C点の電圧 1.0 𝑉𝐿𝐸𝐷_𝐶 = 𝑉𝐴𝑇𝑇𝐸𝑁 = 𝑉𝐷𝐴𝐶_𝑂𝑈𝑇 10.1 D1の電流 𝑉𝐿𝐸𝐷_𝐶 𝑉𝐷𝐴𝐶_𝑂𝑈𝑇 𝐼𝐷1 = = 330 10.1 × 330 𝐼𝐷1 が𝑉𝐷𝐴𝐶_𝑂𝑈𝑇 に比例! 詳しくは https://elchika.com/article/61fdb513-4e57-4df4-9aa3-07dfc8685c9f/

41.

目次 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由

42.

PICマイコン SRAM SRAMへ波形 データを書き込む カウンタ FPGAを使う前に 検討していた回路 DAC

43.

SRAM 単品のSRAMが安く売られている アドレスを入力し、8ビットや16ビットずつ読 み書きできる SRM2B256SLMX55  256kbitのSRAMで、1個30円ほど  アドレス幅15ビット  データ幅8ビット SRAMに波形データを記録し、再生する

44.

カウンタ(アドレス生成) CLKの立ち下がりエッジでインクリメントされる カウンタ 12個のT型フリップフロップ回路から構成される  T型フリップフロップ:クロックにより出力が反転 内部等価回路 SN54HC4040, SN74HC4040 12-BIT ASYNCHRONOUS BINARY COUNTERS より引用

45.

FPGAを選んだ理由1 カウンタが秋月でディスコン(discontinue) 最近終売した模様 右図はGoogle のキャッシュから

46.

FPGAを選んだ理由2 SRAMの動作速度が遅い SRM2B256SLMX55のデータシートより 5.5V時のアクセスタイム=55ns  18.2MHzでしか読み出せない

47.

FPGAを選んだ理由3 安価なFPGAを教えてもらった 安価なのに、カウンタとSRAMを両方とも代替可能 安価なのに、動作周波数が個別部品で組むより速い  検証の結果、カウンタ、SRAMとも、120MHzで動作した FPGAはいつか学びたいと思っていた

48.

目次 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由 おまけ:今回作成した回路の性能測定

49.

どこまで高い周波数を出せるか1 FPGA内蔵クロックで 120MHzまで出せる 120MHzでsin波を再生 →120MHz/360≒333kHz が理論値 左図は101分周 (≒1.2MHz)で再生 ほぼ正確な波形 周波数も計算通り  実測3.4kHz

50.

どこまで高い周波数を出せるか2 左図は21分周 (≒5.7MHz)で再生 実測16.4kHz 信号が少し歪んだ  黄ch1:オペアンプ出力  青ch3:DAC_OUT

51.

どこまで高い周波数を出せるか3 左図は11分周 (≒11MHz)で再生 ただの三角波 実測31.3kHz 青ch3=DAC_OUTは歪ん でいない →オペアンプの影響 オペアンプの性能が足り ず、出力が入力の変化に 追いつかない

52.

どこまで高い周波数を出せるか4 左図は6分周(20MHz) で再生 DAC_OUTの動作周波数 には問題がなさそう スパイクが出てるのは謎

53.

どこまで高い周波数を出せるか5 左図は最速(120MHz) で再生 依然としてDAC_OUTは 正確なsin波 出力周波数は実測で 344kHz 謎スパイクも消えた

54.

今回作成した回路の性能 DAC_OUTは理論値344kHzまで出せた  オーディオの実験なら20kHz程度まで出せれば十分な実用性 オペアンプの性能がネック  汎用品だから仕方ない  高性能(かつ高価)なオペアンプを使うと改善できるだろう sin波1周あたり360分割して出力したので理論値は 120MHz / 360 = 333kHz もっと細かく分割すれば、滑らかなsin波になる  1周を6000分割すれば 120MHz / 6000 = 20kHz 逆に、もっと粗くてよいなら、高速な信号が出せる

55.

発表おしまい 論理回路入門  組み合わせ回路  順序回路  FPGAの仕組み 任意波形発生器  原理  ラダー抵抗回路  LED電流制御回路 FPGAを選択した理由 おまけ:どこまで高速な信号を出せるか実験

56.

次回予告 次回(日付未定)の電子回路勉強会では、FPGAを使った任意波形 発生器の製作演習をやろうと思います 内容(予定)  FPGAボード(Tang Nano)、ブレッドボード、各種部品を使い、任意波 形発生器を組み立てる  Verilogプログラムをビルドし、Tang Nanoに書き込んで動作させる 演習に必要な部品の頒布を企画しました  connpassに申し込みフォームのURLがあります  9/13締め切りなのでお早めに  締め切り後、数日以内に確認の連絡をしますので返信してください