狠狠撸

狠狠撸Share a Scribd company logo
小型安価なFPGAボード
と任意波形発生器
2021年9月12日
@uchan_nos
FPGAとは
?Field:現場で
?Programmable:プログラム可能な
?Gate:論理回路の
?Array:集まり
?論理回路を書き換えられるICチップ
?通常のICは工場で回路が作られ、後から
変更できない
?FPGAで任意の波形を生成できる装置
を作るのが今日のテーマ
FPGAボード「Tang Nano」
を使った任意波形発生器
目次
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
目次
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
論理回路とは
?デジタル信号を扱う回路
?通常、0=0V、1=電源電圧、として扱う
?「組み合わせ回路」と「順序回路」に大別
1(入力) 2(入力) 3(出力)
0 0 0
0 1 0
1 0 0
1 1 1
2入力ANDの真理値表
2入力ANDに「1,0」を入力する回路
組み合わせ回路
?入力から出力がすぐ決まる回路
?入力が変化するとすぐに出力が変化する
?=情報を記憶しない
?例1:ゲート素子
?右図
?例2:加算器
?あとで
2入力AND
2入力OR
NOT
ゲート素子の回路図記号
すぐに出力が変化するといっても、
現実には遅延がある。
TC74HC04APの場合:tpd=6ns
入力
出力
tpd tpd
頭の体操:XORをAND,OR,NOTで作る
?XOR:eXclusive OR
?排他的論理和
?基本は論理和
?ただし、入力が両方とも1なら出力は0
?排他的
?クイズ:XORを、AND、OR、NOTだけ
を使って実現してみよう
1(入力) 2(入力) 3(出力)
0 0 0
0 1 1
1 0 1
1 1 0
XORの真理値表
クイズの答え
?基本はOR
?入力が両方1のとき、出力が0→AND+NOT
?上記は1つの例。他にも多くの実現方法がある
OR
AND
AND
NOT
NAND
=
半加算器
?整数の加算を行う組み合わせ回路
?2つの整数A、Bを入力すると
?A+Bが出力される回路
?1ビット半加算器
?1ビット整数同士を加算
?出力は2ビット
?加算結果
?キャリー(繰り上がり信号)
?XORとANDで構成してみよう
A
入力
B
入力
X
加算結果
C
キャリー
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
1ビット半加算器の真理値表
半加算器
入力A
入力B
X=A+B
C
クイズの答え
?XORを使うととても簡単!
XOR
AND
A
入力
B
入力
X
加算結果
C
キャリー
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
1ビット半加算器の真理値表
全加算器
?複数ビットの加算をしたい
?2桁目以降は、下の桁からの繰り上
がりも加算する必要がある
→全加算器
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
1ビット全加算器
の真理値表
全加算器
A
B
X=A+B+C
C’
1 1 0 1
+ 0 1 1 1
---------
1 0 1 0 0
2つの入力0と1の他に
繰り上がり桁をも
足さねばならない
C
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
1ビット全加算器の真理値表
全加算器は組み合わせ回路
?入力A、B、Cが変化すると
?少しの遅延をもって出力X、Cが変化する
信号が
入力が変化すると
伝播していく
目次
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
順序回路
?記憶を持つ論理回路
?基本要素は「フリップフロップ」
?RS型フリップフロップ
?SET=出力Qを1にする
?RESET=出力Qを0にする
?順序回路の出力を入力に帰還する
ことで記憶を実現
SET RST Q
0 0 保持
0 1 0
1 0 1
1 1 禁止
RS型フリップフロップ
の真理値表
RS型フリップフロップのタイミングチャート
D型フリップフロップ
?別名「レジスタ」
?SRAMを構成する基本単位
?CPUの記憶を実現する部品
DATA CLK Q
0 0→1 0
1 0→1 1
X 1→0 保持
真理値表
D型フリップフロップの動作
?初期状態:CLK=0、DATA=0とする
1 0
1
1
1/0
0/1
0
1
0
1
0
0
D型フリップフロップの動作
?CLK=0のままで、DATAを1にしたとき
?Qは変化しない
1 0
1
1
1/0
0/1
1
0
1
0
1
0
D型フリップフロップの動作
?DATA=0、Q=1のとき、CLKを0→1にする
1 0
1
1
1
0
0
1
0
1
0
0 0 1
1
0
1
0
1
Q:1→0
1
D型フリップフロップの動作
?DATA=1、Q=1のとき、CLKを0→1にする
1 0
1
1
1
0
1
0
1
0
1
0 0 1
0
1
1
1
0
Q:1→1
(変化なし)
D型フリップフロップのまとめ
?CLKの立ち上がりエッジでDATAを
取り込み、Qから出力
?それ以外の期間ではQを保持
DATA CLK Q
0 0→1 0
1 0→1 1
X 1→0 保持
真理値表
T型フリップフロップ
?Tの立ち上がりエッジでQが反転
T
Q
Q
T Q
0 保持
0→1 ~Q
1 保持
真理値表
バイナリカウンタ
?T型FFを直列に並べるとクロックを数えられる
Texas Instruments
SN54HC4040, SN74HC4040
データシート (Rev. D)
より
目次
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
FPGAは論理回路を組み替え可能
?論理回路を組み替える?
?こんな感じで配線をする?
?→LUT(ルックアップテーブル)で論理回路を実現する
?LUT=メモリで実現した真理値表
?真理値表で任意の組み合わせ回路を表せる
?右図はXORを実現するLUT
A0 A1 出力
0 0 0
0 1 1
1 0 1
1 1 0
LUTの具体的な構成
?一般には4入力1出力のLUT
?16ビットのSRAM
?左図
http://www.kumikomi.net/archives
/2009/04/fpgalsifpga.php
?「図1 ルックアップ?テーブルの
仕組み」
?真理値表をLUTで表現
?2入力マルチプレクサで選択
配線の組み替え
?FPGAの基本構成要素
=LE(ロジックエレメント)
?LUTとD-FFから構成されてい
るらしい
?LE間は、任意方向に信号を伝
えられる「パス?トランジス
タ」で構成されているらしい
?左図
https://www.macnica.co.jp/bu
siness/semiconductor/articles
/intel/133387/
LUT D
Q
C
CLK
ロジックエレメント = LUT + FF
ロジックエレメント間の配線
目次
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
任意波形発生器……の前に発振器
?無安定マルチバイブレータ
?コンデンサと抵抗で決まるCR時定数を利用した発振器
OUT
V-
V+
任意波形発生器
?単純な発振回路では単純な波形し
か作れない
?矩形波や三角波、正弦波とか
?右図のような任意の波形を作るに
はどうすれば良いだろうか
?メモリに波形データを記録し、
DACで再生すれば良さそう!
メモリ
カウンタ
アドレス
DAC
波形
データ
アナログ
出力
任意波形発生器の原理
?カウンタ:
クロックを数え、アドレス
を生成する
?メモリ:
波形データを出力する
?8ビット出力なら0~255
?DAC(D/A変換器):
波形データ(数値)を電圧
に変換する
?0→0[V]
?n→3.3*n/256[V]
0
2
4
252
254
252
……
6
4
2
……
メモリ
0x00
0x01
0x02
0x7e
0x7f
0x80
0xfd
0xfe
0xff
カウンタ
クロック
DAC
今回作った装置
Tang Nanoを使った
任意波形発生器 波形の測定結果
目次
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
DAC(Digital to analog converter)
?左図はラダー抵抗回路方式のDAC
?256段階で、0~(255/256)×VDDを出せる
?出力のオペアンプは、単なるバッファ
?増幅率1倍=入力と同じ電圧を出力する
?2種類の抵抗器だけで作れる
?コンデンサを使ってないので周波数が高くても
動きそう
?344kHzのsin波は余裕ぽい
0
1
2
3
5
6
4
7
注)実際に制作した回路では9ビットのラダー抵抗回路になっています
ラダー抵抗DACの動作1
128=0b10000000を入力したときを考える
合成抵抗値の計算
OUT=1/2×VDD=2.5V
最終的な等価回路
次々と計算すると……
ラダー抵抗DACの動作2
1=0b00000001を入力したときを考える
最終的に OUT=0.01953V = 1/256×VDD
合成抵抗を計算する
まずこの点の
電圧を求めたい
1.6667V
1.6667V
0.8334V
0.8334V
0.4169V
次々に
電圧を求める
目次
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
任意波形発生器の出力を確認する
?任意波形発生器の出力を確認したい
?→DACの電圧を見れば良い
?DACの電圧を見る2つの方法
オシロスコープで波形を見る
LEDの明るさを変えて可視化する
↑今回はこっち
LEDの明るさは電流に比例
?LEDは、電流??と明るさがほぼ比例
?電流??は電圧??に比例しない
?DAC出力電圧に電流??を比例させたい
3mm赤色LED OSR5JA3Z74Aデータシートより
??:順方向電流
??:順方向電圧
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/
目次
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
FPGAを使う前に
検討していた回路
SRAMへ波形
データを書き込む
カウンタ
SRAM
PICマイコン
DAC
SRAM
?単品のSRAMが安く売られている
?アドレスを入力し、8ビットや16ビットずつ読
み書きできる
?SRM2B256SLMX55
?256kbitのSRAMで、1個30円ほど
?アドレス幅15ビット
?データ幅8ビット
?SRAMに波形データを記録し、再生する
カウンタ(アドレス生成)
?CLKの立ち下がりエッジでインクリメントされる
カウンタ
?12個のT型フリップフロップ回路から構成される
?T型フリップフロップ:クロックにより出力が反転
内部等価回路
SN54HC4040, SN74HC4040 12-BIT ASYNCHRONOUS BINARY COUNTERS より引用
FPGAを選んだ理由1
?カウンタが秋月でディスコン(discontinue)
?最近終売した模様
?右図はGoogle
のキャッシュから
FPGAを選んだ理由2
?SRAMの動作速度が遅い
?SRM2B256SLMX55のデータシートより
?5.5V時のアクセスタイム=55ns
?18.2MHzでしか読み出せない
FPGAを選んだ理由3
?安価なFPGAを教えてもらった
?安価なのに、カウンタとSRAMを両方とも代替可能
?安価なのに、動作周波数が個別部品で組むより速い
?検証の結果、カウンタ、SRAMとも、120MHzで動作した
?FPGAはいつか学びたいと思っていた
目次
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
?おまけ:今回作成した回路の性能測定
どこまで高い周波数を出せるか1
?FPGA内蔵クロックで
120MHzまで出せる
?120MHzでsin波を再生
→120MHz/360≒333kHz
が理論値
?左図は101分周
(≒1.2MHz)で再生
?ほぼ正確な波形
?周波数も計算通り
?実測3.4kHz
どこまで高い周波数を出せるか2
?左図は21分周
(≒5.7MHz)で再生
?実測16.4kHz
?信号が少し歪んだ
?黄ch1:オペアンプ出力
?青ch3:DAC_OUT
どこまで高い周波数を出せるか3
?左図は11分周
(≒11MHz)で再生
?ただの三角波
?実測31.3kHz
?青ch3=DAC_OUTは歪ん
でいない
→オペアンプの影響
?オペアンプの性能が足り
ず、出力が入力の変化に
追いつかない
どこまで高い周波数を出せるか4
?左図は6分周(20MHz)
で再生
?DAC_OUTの動作周波数
には問題がなさそう
?スパイクが出てるのは謎
どこまで高い周波数を出せるか5
?左図は最速(120MHz)
で再生
?依然としてDAC_OUTは
正確なsin波
?出力周波数は実測で
344kHz
?謎スパイクも消えた
今回作成した回路の性能
?DAC_OUTは理論値344kHzまで出せた
?オーディオの実験なら20kHz程度まで出せれば十分な実用性
?オペアンプの性能がネック
?汎用品だから仕方ない
?高性能(かつ高価)なオペアンプを使うと改善できるだろう
?sin波1周あたり360分割して出力したので理論値は
120MHz / 360 = 333kHz
?もっと細かく分割すれば、滑らかなsin波になる
?1周を6000分割すれば 120MHz / 6000 = 20kHz
?逆に、もっと粗くてよいなら、高速な信号が出せる
発表おしまい
?論理回路入門
?組み合わせ回路
?順序回路
?FPGAの仕組み
?任意波形発生器
?原理
?ラダー抵抗回路
?LED電流制御回路
?FPGAを選択した理由
?おまけ:どこまで高速な信号を出せるか実験
次回予告
?次回(日付未定)の電子回路勉強会では、FPGAを使った任意波形
発生器の製作演習をやろうと思います
?内容(予定)
?FPGAボード(Tang Nano)、ブレッドボード、各種部品を使い、任意波
形発生器を組み立てる
?Verilogプログラムをビルドし、Tang Nanoに書き込んで動作させる
?演習に必要な部品の頒布を企画しました
?connpassに申し込みフォームのURLがあります
?9/13締め切りなのでお早めに
?締め切り後、数日以内に確認の連絡をしますので返信してください

More Related Content

小型安価な贵笔骋础ボードの绍介と任意波形発生器