elechobby:picdic:pic12f683:39

文書の過去の版を表示しています。


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

fpga.c
//********************************************************************** 
/*
  【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を組み合わせることにより、更に高度な回路を容易に構築することが出来ますね!^_^!

著作権表示 copyright notice

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details
  • elechobby/picdic/pic12f683/39.1588321042.txt.gz
  • 最終更新: 2025/10/17 14:27
  • (外部編集)