2016-10-16 (日) 09:08:35

FPGAの利点

FPGAを使う上での利点をまとめてみました。

更新履歴

  • 2011-09-19 新規
  • 2011-09-30 「結構電流が取り出せる」追記

ピンの配置が自由

電源ピン、JTAGピン等の一部のピンを除いて、ピン配置は自由です。

このため、回路設計、基板製作では、載せる部品、基板デザインを優先した設計ができます。

ピンは1ビットから生成できるので、例えばマイコンでは必ず8ビット、16ビットくくりでアクセスしなければならない、または他の7ビット、15ビットは捨てていたのが、制限がなくなります。

例1 連続したビットを使いたい

cpu1.png

CPUでは、ピン位置、機能、番号が決まっています。

そのため、左図のポート50〜57で連続8ビットで使いたい(アートワークしたい)とき、ポート10〜12を迂回する処理をしなければなりません。


fpga1.png

FPGAでは、電源ピン等の一部を除き、ピン配置は自由に行うことができます。

そのため、部品配置の自由度、アートワークの簡便化を図ることができます。

例2 配線を交差させず接続したい

flooreplan1.png

回路図を描画した後、例えば図のように、配線が左右入れ子になっているとき、この配線を入れ替えることで、基板の配線は非常に簡単になります。


flooreplan2.png

このようなことがFPGAでは可能になります。

例3 部品の位置を合理化させたい

uart1.png

たとえば、UARTが使いたいときは、図のように、決められたピンを使う必要があります。


uart2.png

そのため、必然的に部品配置もマイコンのピンアサインありきで行われ、変えようがないのである意味楽な部分もありました。


FPGAではピンアサインは基本的に自由ですので、先にどう部品を配置したいかを決める必要があります*1

uart3.png

左図のように、どこに部品配置を行うかを決めます。

記述したとおりの回路が生成される

入力を出力に反映させる、簡単な処理を考えます。

CPUのメインプログラムでは

int main(void)
{
  OUTPUT_PORT = INPUT_PORT;
}

以上の記述になりますが、実際は、リセット処理が入ります。

FPGAはこの場合、接続記述だけなので、

module top(
  input mclock,
  input [7:0] in,
  output [7:0] out
);

  always @(posedge mclock) begin
    out <= in;
  end
endmodule

以上の記述になります。

並列動作が可能

同様に、複数の入力を出力に反映させる処理を考えます。

CPUでは

int main(void)
{
  OUTPUT_PORT1 = INPUT_PORT1;
  OUTPUT_PORT2 = INPUT_PORT2;
}

以上のように、PORT1の処理とPORT2の処理で、時間差が生じてしまいます。

FPGAでは

module top(
  input mclock,
  input [7:0] in1,
  input [7:0] in2,
  output [7:0] out1,
  output [7:0] out2
);

  always @(posedge mclock) begin
    out1 <= in1;
    out2 <= in2;
  end
endmodule

以上の記述になります。

この場合、

always @(posedge mclock) begin
  〜〜〜
end

の中が、mclockの立ち上がりエッジ(posedge)で駆動します。

囲まれている、

out1 <= in1;
out2 <= in2;

がすべて同時に動きます。

高速に処理を行うことができる

CPUでは、1処理に対し数クロックを要します*2

たとえば1ビットの信号をI/Oから読んで、シフトする処理を考えます。

CPUだと「読み込み」「ビットシフト」の2命令が必要です。それぞれの命令で「フェッチ」「命令デコード」「実行」の3クロック必要なので、合計6クロック経過します。

一方FPGAでは1クロックで読み込みと、シフトを完了します。

module 1bit_shift(
  input mclock,
  input mreset,
  input in,
  output reg [7:0] out
  );

  always @(posedge mclock) begin
    if (~mreset) begin
      out <= 8'h00;
    end else begin
      out <= {out[6:0], in};
    end
  end

endmodule

ビット配置が自由

CPUでは信号を入出力する単位は、CPUアーキテクチャに依存します(8ビット、16ビット、32ビット等)。

そのため、特定の1ビット信号を操作するとき、以下のような操作が必要です(PORTの1ビット目を1にする例)。

int main(void)
{
  int temp;
  temp = PORT;
  temp |= 0x01;
  PORT = temp;
}

FPGAでは、信号と信号の幅を自由に定義できます。

module output(
  output [7:0] out1,
  output [3:0] out2,
  output       out3
  );

  assign out1 = 8'h12
  assign out2 = 4'he
  assign out3 = 1'b1
endmodule

CPUを構成できる

順序処理、OSの搭載、従来の開発手法を用いたいときなどでCPUが必要なときでも、FPGAは内部にCPUを構成することができます。

多品種少量生産が可能

マイコンでもプログラムの変更、バリエーションによって違う動きをさせることができますが、ハードウェア機能の変更までは行えません。

例えば、UARTポートが5つ必要、I2Cバスがほしい、タイマが10コほしい、というのが挙げられます。

これらをソフトウェアで実現しようとすると、CPU処理を多く必要とし効率の悪いものとなってしまいます。

結構電流が取り出せる

マイコンとFPGAで、それぞれI/O電流がどれだけ取り出せるか調べました。

マイコン(H8/3694)FPGA(MachXO2)
HIGH出力2mA24mA
LOW出力20mA24mA

H8/3694データシート

01.png

MachXO2データシート

03.png

マイコンは、データシートより、LOW出力で合計80mAなので、8ビットのLEDを並べた場合、1個あがり10mAが限度となります。

FPGAは、データシートより、LOW出力、HIGH出力関係なく、設定により24mA流すことができます。

ただし、データシートに以下の記述があり、

4. The average DC current drawn by I/Os between GND connections, or between the last GND in an I/O bank and the end of an I/O bank, as

shown in the logic signal connections table shall not exceed n * 8mA. Where n is the number of I/Os between bank GND connections or

between the last GND in a bank and the end of a bank.

GNDで挟まれたピンで流せる電流の合計値は、挟まれたピン数×8mAとなります。

よって以下のように、デバイス合計では856mA流せることになります。この場合発熱の検討が必要です。

https://picasaweb.google.com/lh/photo/NuwJu0wRsUUUrlhiAt1EMtMTjNZETYmyPJy0liipFm0?feat=directlink

ピンの場所を工夫することにより、10mAのLEDを68点繋げることができます。

https://picasaweb.google.com/lh/photo/3cwiRGey3bAuKFCpSpFW39MTjNZETYmyPJy0liipFm0?feat=directlink

関連書籍

この記事は役に立ちましたか?

選択肢 投票
役に立った 13  
役に立たなかった 3  
コレジャナイ! 6  
  • 試しに押してみました。 -- 商品開発部? 2011-10-20 (木) 08:37:59

(画像の文字列を入力して下さい)

*1 高速I/O、差動信号等利用できるピンに制限がある場合はその部分の配置を優先しますが、ここでは割愛します
*2 インターフェース2011年7月号を試すに詳しく書く予定

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-10-16 (日) 09:08:35 (189d)