FPGAモドキ(PIC+C言語)

概要

FPGA(Field-Programmable Gate Array)は、現場(Field)で、書き換え可能(programmable)な、LSI(論理 ゲート(Gate)が、格子(Array)状に並んでいるセミカスタムLSI)と言われる物で、製品出荷後でも再設計が可能 なため、製品の機能追加や修正をスムーズに行うことができます。

最近の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”に立ち上がった時に、出力ピンを反転させます。

回路図

ソースコード

//********************************************************************** /* 【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; } //**********************************************************************

動作確認

左側:外付けコンデンサが、0.01uFの時の各波形です。(上側=OUTPUT-1、下側=OUTPUT-2) 右側:外付けコンデンサが、0.001uFの時の各波形です。 左側:外付けコンデンサが、0.1uFの時の各波形です。 如何ですか?

PICとFPGAを組み合わせることにより、更に高度な回路を容易に構築することが出来ますね!!

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細 This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details