====== FPGAモドキ(PIC+C言語) ======
===== 概要 =====
FPGA(Field-Programmable Gate Array)は、現場(Field)で、書き換え可能(programmable)な、LSI(論理ゲート(Gate)が、格子(Array)状に並んでいるセミカスタムLSI)と言われる物で、製品出荷後でも再設計が可能なため、製品の機能追加や修正をスムーズに行うことができます。
{{:imgpaste:202004:htmikan-20200429-145743.png}}
最近のFPGAの開発ツールでは、FPGAに実装する論理処理を、ANSI準拠のC言語で記述可能とすることにより、ソフトウェア・エンジニアでできるアルゴリズム的な方法でFPGA 設計が行えるようになっています。
今回は、FPGAの雰囲気を味わうために、PICとC言語を使って、簡単なロジック回路(簡易シミュレーション)を実現してみました。
<仕様>
* PIC12F682上に、NOT回路2個と、D-FlipFlop回路1個を実装する。
* NOT回路2個と外付けの抵抗およびコンデンサによる発振回路
* D-FlipFlop回路による1/2分周回路
===== 動作原理 =====
NOT回路2個とD-FlipFlop回路1個をPIC上に実装し、それらを組み合わせることにより、発振回路と分周回路を実現しました。
===== 動作原理(ハードウェア) =====
◎NOT回路2個による発振回路
* PIC12F683内部で、NOT回路2個を論理処理を行い、外付けの抵抗とコンデンサを接続し発振させます。
◎D-FlipFlop回路1個による分周回路
* PIC12F683内部で、D-FlipFlop回路1個を論理処理を行い、発振回路の出力を1/2に分周します。
===== 動作原理(ソフトウェア) =====
◎NOT回路2個
* 入力ピンと出力ピンを設定し、入力ピンの状態(“1"or“0")を反転させた結果を出力ピンに出力します。
◎D-FlipFlop回路1個による分周回路
* 入力ピンと出力ピンを設定し、入力ピンの状態が“0"→“1"に立ち上がった時に、出力ピンを反転させます。
===== 回路図 =====
{{:imgpaste:202004:htmikan-20200429-145956.png}}
===== ソースコード =====
//**********************************************************************
/*
【PIC+C言語によるFPGAモドキ】
*/
//**********************************************************************
#define INPUT1 GPIO.B5
#define INPUT2 GPIO.B4
#define INPUT3 GPIO.B3
#define OUTPUT1 GPIO.B0
#define OUTPUT2 GPIO.B1
#define OUTPUT3 GPIO.B2
//**********************************************************************
extern void main();
extern void init();
extern void NOT1();
extern void NOT2();
extern void D_FLIP_FLOP();
//**********************************************************************
void main()
{
init();
while (1) {
NOT1();
NOT2();
D_FLIP_FLOP();
}
}
//**********************************************************************
void NOT1()
{
OUTPUT1 = ~INPUT1;
}
//**********************************************************************
void NOT2()
{
OUTPUT2 = ~INPUT2;
}
//**********************************************************************
char INPUT3_OLD = 0;
//
void D_FLIP_FLOP()
{
if ((INPUT3_OLD == 0) && (INPUT3 == 1)) {
OUTPUT3 = ~OUTPUT3;
}
INPUT3_OLD = INPUT3;
}
//**********************************************************************
void init()
{
OSCCON = 0b11100000;
CMCON0 = 0b00000111;
ANSEL = 0b00000000;
TRISIO = 0b00111000;
}
//**********************************************************************
===== 動作確認 =====
{{:imgpaste:202004:htmikan-20200429-150100.png?500}}
左側:外付けコンデンサが、0.01uFの時の各波形です。(上側=OUTPUT-1、下側=OUTPUT-2)
右側:外付けコンデンサが、0.001uFの時の各波形です。
{{:imgpaste:202004:htmikan-20200429-150123.png}}{{:imgpaste:202004:htmikan-20200429-150128.png}}
左側:外付けコンデンサが、0.1uFの時の各波形です。
{{:imgpaste:202004:htmikan-20200429-150146.png}}
如何ですか?
PICとFPGAを組み合わせることにより、更に高度な回路を容易に構築することが出来ますね^_^
このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]]
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]]