プログラミングと言うのは、挙動制御を行う為の手段ですが、物理的に機械を動かすときにアルゴリズムが決まってる場合、回路のそのパターンを登録して 【 物理的に実行する 】 といのがプログラムの始まりなので、カラクリやオルゴールのようなパターン制御を個別の構造物に単独で導入するような仕組みの物もプログラムになります。こうしたものは紀元前から存在するのですが、こうした挙動を制御する為には、理科や算数の延長線上にある知識が必要になります。

 

 電気も存在しない時代に歯車だけで動く特殊な機材が見つかっていますし、アンティークでもそう言った物が存在している訳ですが、小学校で比率や分数などを学びますが、この 【 分数 】 や 【 対比 】 を数値のアルゴリズムとして使った物がカラクリやオートマタになります。

 

 回路のパターン制御をする場合、複数の処理を実装しようと思うと、切り替え機が必要になります。つまり、 【 セレクター 】 が必要になるので、自転車のギアの変更のように回路に連動しているギアを変える必要が出てきます。そうすると、挙動の周期を変えるだけでも物理的に動かす事になりますし、違う挙動をしようと思うと、別の回路を設ける事になります。回路の場合、

 

 

のように動きますが、歯車の場合、そのまま嚙合わせるとNOT回路になるので、同じシャフト上に配置するか、自転車のようにプリー機構を用意すると、同じ挙動にすることができます。この時の変数の変化をギア比で調整する事になりますが、シャフトに同じ歯車を二つ用意してプリー機構と同じ歯数の歯車をかみ合わせた物を繋ぐと辺巣の伝達と、NOT回路を組む事が出来るのですが、この構造を個別に分けて、二つのシャフトに対してシャフトの駆動用のギアを用意しておいて、歯車の入れ替えで、この二つを切り替えれるようにした場合、

 

 

のようなトグルスイッチのような構造の物を作ることができます。

 

 歯車の制御の場合、カムシャフトやクランク機構を入れることで、パターンで動作するようにできますが、この構造はカムの形状で動作が変わります。歯車の制御だとそう言った物になりますが、この時にシャフトに実装されているクランクとカムの構造がプログラムに該当します。

 

 これがオンとオフの状態をアナログで動かすような仕組みになっているので、なだらかに推移させることや反射的に動かす事もできるのですが、

 

 

のようにデコーダーを盛った構造と同じ処理をがそれに該当します。

 

 

のようにパターンを用意しておいて、それを実行すると、実装した条件で動きますが、この場合だと、スイッチをオンにすると、

 

 

のようにパターンが実行されます。カム・クランク機構は入れ替えるという概念がないので、実装したら一つのパターンのみになりますが、構造物に、ギアの変更が出来る仕様を用意しておけば、ギミックの可動範囲内で、挙動を変える事ができます。この場合、画像のような切り替え機構を用意した物になりますが、

 

 

のように違うパターンに伝達するような仕組みを作ると、

 

 

のように異なる結果になります。こうした切り替え機を用意した場合、実装した機材の仕様に準じて出来る事が変わってくるのですが、電気を使うようになってからは、アナログ回路を用いた処理になります。

 

 パターンが単一の場合だと、

 

■ 電飾の実験                     

 

のような感じになりますが、

 

 

のようにパターンをセレクターで制御する場合、シフトレジスター回路を用意すれば、信号を自由に切り替える事が出来るようになります。制御系が簡素だとパターンを入れ替えるだけで挙動を変更できるので、

 

■ シフトレジスターによるパターンの切り替え  

 

のようなパターン切り替えができます。電気信号で考えると、デコーダーを通すと、並列回路の選択が出来るので、挙動を変更する事が出来るので、分岐させた分だけ複雑な処理を実装できることになりますが、挙動をパターンで制御する事ができます。このように、

 

  【 事前にパターンを用意しておけば、その切り替えで出力時の

    パターンの切り替えが出来る 】

 

のもプログラムになりますが、これがオルゴールやジャッカード織機や手廻し式のパイプオルガンなどと同じようなパターンを用意委しておいてそれを入れ替える事で異なる処理を行う事ができます。

 

 機材を動かす場合、機材を用意してそれに準じた動作を実装する事が必要になりますが、この場合、デバイスの構造が必要になります。つまり、 【 アクチュエーター部分は事前に用意する必要がある 】 訳です。

 

 その為、このアクチュエーターが全く異なる構造物だと、アクチュエーター自体を用意する事になります。つまり、4つのサーボモーターで運用する場合でもアクチュエーターが、航空ドローンと4輪駆動の陸上ドローンでは挙動が全く違うので、サーボモーターの制御で動作するというプログラムによる制御によっては同じですが、【 そもそもヘリコプターと車と言う全く違う構造物が同じものとして扱えるわけがない 】 ので、アクチュエーター部分が異なると、挙動が異なるので、構造の異なるアクチュエーターが存在する場合には、複数のデバイスを用意する必要があります。これは、MbotとDJI Teroをプログラムで制御する場合、プログラミング言語を用いると、自動制御が可能になりますが、平面軸と垂直軸の回転だけの移動の自由度の存在する物と、6DoFの制御が大前提になっているデバイスだと制御系統も違ってきますし実装するデバイスも違いますから、制御用のコントローラーとその制御用のプログラミング言語が同じでも、全く違う物を用いる事になります。

 

 その為、プログラムと言うのは、実行する機材で異なる物を使用する事になりますが、これが 【 アーキテクチャ依存 】 になります。つまり、制御する物が航空と陸路では違いますし、海上と水中でも異なります。このように、 【 何を目的としたデバイスなのか? 】 で用意する物が異なる訳です。

 

 プログラミング教育では、Mbotを使ったカリキュラムがありますが、ここで使用しているのは、先程描いたように平面の軸移動と垂直の軸鑑定に移動が固定されたデバイスになります。この情報を旋回と前進と後退の条件に落とし込むと、2つのモーターの回転制御をするか、ラジコンのようにサーボの移動角度を決めておいて、特定の角度を±で変更するようにして、前輪か後輪の角度を変える(と言うか、市販車で後輪の角度が変わる乗り物があると、運転しにくいことこの上ないので、前輪をヨーで制御しています。)事でハンドルを回すと進行方向が変わるようになっていますが、進行方向を変えると、モーターが直結されたタイヤの角度を変える必要がないので、この条件だと、サーボをつ使うことになりますが、回転軸と方向指定に割り当てる事ができます。

 

 平面の移動を考えても、こうした様々な構造が考えられるわけですが、航空ドローンと比較すると、制御がしやすく、水上のようにプールに行かないと運用できない上に水没リスクがある物と比較すると、教室内で使いやすいという点もあって、こうした陸上ドローんを用いた学習が用意されています。水中の場合、沈んだままになる事もあるので、まともに動くという条件と、制御の条件が少ないという点でこうした物が使用されているわけです。

 

 この陸上のガジェットの制御をする場合、mbotなどのようにセンサーとアクチュエーター部分が完成していて、センサーから変数(関数の引数)を得て、それを元に制御用の関数の記述によって、戻り値を使って制御をするような構造であっても、動かしてみると意外と思ったようにいかない場合が多いと思います。これは、 【 制御とはそう言う物 】 だからですが、CNCのような制御方法の実践をしてみても、試行錯誤が必要になります。これは、 【 運動エネルギーと環境において存在する物理法則が存在する上で、体積と質量のあるものをサーボの制御で行っている 】 ためです。その為、 【 コードで挙動を調整する 】 と言う作業をロボットを使ったカリキュラムでは体験する事になります。

 

 その為、電気工作も体験している人も小学校で入るかもしれませんが、そう言った 【 センサーやアクチュエーター部分の構築 】 をする作業がなくても、意外とうまくいきません。つまり、ロボットの授業と言うのは、この二つが正しく動く条件下での体験という事になります。

 

 プログラムを組む場合ですが、大学で制御工学を学ぶと、時空間上の制御における 【 時間と言う係数 : t 】 が存在しなくなるのですが、ラプラス空間を使うとしても、高校の学力があった方がいいので、中学生だと難しいかもしれませんが、【 時空間上の4軸の座標制御で成立している挙動の制御をラプラス空間と言う存在しない空間に置き換えて考えることで、簡素な数式で考える事が出来るようになる 】ので、制御工学では、少しアプローチが異なります。当然、現実世界に戻す場合には逆の計算で戻す必要がありますが、制御を行う場合のアプローチでは、実在しない数値を用います。実在しない数値と言うと、中学校で登場する 【 負の数 】 もありますが、代数学を代表するものとして存在している、高校の数学で登場する【 虚数 : i 】 などもその一つです。つまり、利便性が高いので、高校の数学では、虚数iを使った物 (二乗して-1になる数値なので、実在する事が不可能な数値になります。その為、虚数とは中学校までの数学で学んできた数列上に存在しない数値になります。これは、 【 かずのせん 】 の延長線上である 【 負の数を含む数列 】 においても同様で、数列と言う条件を用いた場合、微分や積分をしても虚数の座標は存在しません。と言うのも、中学校担うと負の数は二乗すると正の数になるので、二乗して負の数となるような条件が存在しません。その為、基礎を学んだうえでなければ、虚数の使い方が解りませんし、使うと数式が崩壊するので、虚数と言う概念は中学校までの基礎固めをした後に高校で学習する事になります。と言っても数学Iでは、既に学んだ内容をさらに掘り下げて学習する事になるので、基礎固めと言うのは、数学Iを学ぶ上では必要になります。) を用いる事になりますが、数学では利便性から同一の結果が導き出せる便利な実在しない物を用いた計算が存在します。

 

 高校のカリキュラムでも制御工学やラプラス空間は出てきませんから、高校までの知識で制御をしようと思うと、現実世界の制御系である【 時空間ベースの考え方 】 になるのですが、この場合、運動エネルギーの推移の制御なので、幾何ベクトルを用いて制御をすることになります。ベクトルに数値が登場するのは、高校の数学からなので、中学校までだと、

 

   運動の法則性(運動方程式)

   幾何ベクトル(向きと長さ)

 

を学習します。これが流体力学の応力をや抗力を考える時にも登場しますし、三角関数の単位円の応用で、ベクトルは平面空間上に配置でき、グラフの座標を力として考えた場合、平面的な座標を示すベクトルは数値と向きを用いて算出できるようになりますから、中学校のベクトルと言うのは、高校の物理でも使用しますし、数学だと、グラフ上で扱う物として登場します。ゲームやグラフィックの場合、ベクトルは向きと力なので、これを 【 行列 】 を用いて処理することもできますから、動くものを扱うときにはベクトルを使うことになります。

 

 中学校の理科だとベクトルは 

 

  【 力は大きさだけではなく、指向性があるので、力を表現する

    時には、 ”大きさ” と ”向き”  が存在する】

 

という事を学ぶわけですが、これが合成や分解をすることが出来る事も学習します。中学校の学習だと、ロボットの動きと言うのは、サーボーターによる動きですから、mbotを使った場合、進行方向の変化をベクトルで示す事とその理解はしやすいと思いますし、旋回した時には回転軸があるので、Mbotに遠心力が働いている事も確認できると思います。また、大きく曲がる場合、旋回をするための回転軸が別の場所にあり、半径を持った円上を動くことになりますが、このカーブを曲がる時にも中心から半径を持った状態で回転しているので、Mbotを外に移動させるように働く遠心力が発生します。その為、中学校の理科で学ぶ自然現象はロボットを動かした時にも存在しているので、どうすれば、その状態になるのか?を考えてプログラムを組む事も可能なので、中学校だと、運動方程式も含めて制御を考えることもできます。

 

 そうすると、理科の教科のカリキュラム路ロボットを使ったプログラミング教育を用いて学習し、その運動法則を体験することもできるわけですが、知識があると、制御の方法も変わってきます。

 

 小学校だと、運動法則が恒等式で存在し、推移を変数や係数の代入によってグラフ上に示す事が出来る事は学んでいませんから、

 

【 動かすという条件だと、何が原因でそうなっているのか? 】

 

を考える事になります。この場合、制御方法は増減になりますから、その時に 

 

【 過剰や不足と言う条件をどうすれば解決できるだろうか? 】

 

と考える事になります。移動をする場合、距離の超過が発生した場合、後の微分、積分でも登場する、【 時間 】【 距離 】【 速度 】の関係性と計算方法を用いて考える事になります。

 

【 距離は、速度に時間をかけ合わせた物 】

 

ですから、 

 

【 距離の制御をしようと思った場合、時間加速度を変えれば

   調整できる 】                             

 

という事になります。ただし、停止と言う概念は、中学校の理科を学んだ後だと、 【 加速が付いているので止まらない 】 という事を学習していますから、 【 ブレーキで止めるしかない 】 という事を運動方程式を用いて学習します。サーボモーターの回転だけで動いている物を止める場合、ブレーキシステムは存在しませんから、この場合のブレーキと言うのは、 【 モーターの停止 】 になります。その為、

 

   速度の制御

   持続時間の制御

   運動の停止

 

の3つで制御をすることを考える事になります。この時に、何をするのかで、運動の発生と速度なども変わってくるので、意図した条件になるには、どう言ったプログラムの構築が最適なのか?を考える事になります。

 

 このようにデバイスが同じでも、学んでいるカリキュラムの内容が異なると、使用できる知識の量に差が出るので、 【 事前に発生しうる問題の理解度 】 に差が出ます。と言っても、自転車に乗った場合に車両を止める場合にはブレーキをかけますが、これは運動方程式を学習しなくても知っている内容ですが、 【 物理現象には法則があるので、加速には法則性が存在しており、その法則は簡素な数式で示す事が出来る 】 という事を中学校で学びます。その為、小学校の理科で体験する 【 電気の通るものとそうでない物の違い 】 などは中学校では、 【 導体 】 と 【 絶縁体 】 と言う材質属性があり、電気を通さないものはどこまでも通さないことを学習します。高校に入ると、電気工作でも使うような半導体を学びますから、 【 材質特性 】 における理解を深める事ができます。中学校の理科では、

 

   なぜ、ガラスとサンドペーパーの上では球体の

     転がり方が違うのか?

 

と言う内容もそうですが、電池と豆電球を使った実験の時に出てくると思われる

 

   なぜ、電気が通る物体とそうでない物体が存在

     するのか?

 

と言う事の答えを知ることができます。そして、そこには法則や特性がある為、そうなっていることも知ることができますし、電気を使った場合には、そこに推移が存在するので、電池から電気を流した場合に、その電気をコントロールする事が出来ることも学習できます。その為、小学校の実験の時に 【 なぜ、そうなるのだろうか? 】 という疑問は中学校の理科で掘り下げて学習するので解決しますし、中学校の理科で、 【 なぜそうなるの? 】 と思った物の仕組みは高校の理科や数学で答えを体系も含めて学習できます。

 

 プログラムを組む時には、 【 現在の知識 】 でどうにかするしかないので、 【 学んできた内容 】 で対応するしかありません。その為、何かを作る時には 【 知識も構造物を作るための部品になる 】 ので、思考を行い構造物を設計する上では、かなり重要なパーツになります。また、工場で量産している訳ではありませんし、コストをかけて購入することもできませんから、時間をかけて身に着ける必要があります。

 

 構造物を考える場合、ロボットやドローンをプログラムで動かすときのように、センサーとアクチュエーターが完成している状態で何かをする場合がありますが、この場合、 【 挙動制御 】 と言う時空間王の座標変動を物理法則に基づき運動エネルギーによって制御をしている訳ですが、ソフトウェアを作る場合も入力デバイスと言うセンサーの役割をする電子接点を使い、表示機材と言うアクチュエーターを用いて、その表示のコントロールをするプログラムを書いて、入力に対するレスポンスとして、表示のコントロールをしている訳です。

 

 ソフトウェアを使う場合、【 入力用デバイス 】 と 【 表示機材 】が必要になりますが、これも、デバイスですから、関数に対して変数として入力した物を処理して、戻り値で洗馬椅子の制御を行います。この条件は、ドローンと同じですが、この入力がセンサーではなく、入力用のデバイスと言う電子接点などを用いたデバイスで、出力機材が発光体という事になります。つまり、小学校3年生で出てきた電池とスイッチと乾電池の構造物が接点と発光体の関係性になりますが、この発光体の数が300万~800万個ある状態で、その場所に変調によって色を変えた状態で色彩の指定をしたものを制御している状態が表示という事になります。現在は8Kのパネル物あるので、約3,318万個の発行パターンの制御をする処理を行う事で表示を行っている訳ですが、これを初期のオーロラビジョンのように発光体で行うと現実味がないので、その制御をする適正なハードウェアを用意する事になります。液晶パネルと言うモジュールを位置から開発する場合だと、回路を組む必要が出てきます。

 

 その為、コントローラーとなるコンピューターのような物が存在し、それを用いて入出力を制御するという状態になっています。この構造が現在では、低コストで体験できるようになっており、ワンボードマイコンとブレッドボードとパーツの組み合わせで作る事が出来るようになっています。

 

 

バイスの制御                   

 

 前述のように、構造物はプログラムで制御できるのですが、文字列によるコードの存在しない時代は、パンチカードによる二値の判定でデータを使うという手法になっており、その後、1バイトのデータを基準に制御する制御が行われるようになります。

 

 現在もこうしたデータを扱ってはいますが、ローレベルでの処理をしなくてもいいような作りになっており、アプリケーションの起動もMS-DOSの時代のように 【 コマンドで実行 】 という恐ろしい状態ではなくなっています。Linuxも20世紀だとコマンドの実行でしたから、ストレージデバイスは常に接続されている物ではなく、/mountコマンドを使うようになっていました。市販のLinuxを購入するとマニュアルが付いてくるのですが、 【 CDドライブを使う場合 】 に 【 /mountコマンド 】 が出てくる状態でした。現在のデスクトップ版はそうなっていませんが、CUI環境だと、クリックの概念が存在しないので、コマンドで制御をすることになります。その為、

 

【 CDドライブを使う方法 】

 

  mount -t iso9660 <isoイメージファイル> <マウント場所>

 

のような内容が書かれている時代もありましたが、こんな感じでコマンドを使う事も少ないはずです。プログラムを書いたり、PowerShellやバッチファイルを使ったり、コンパイラをインストールした状態で、環境変数の指定をして、コンパイルを行う以外だとコマンドを打つことはないと思いますし、コマンドプロンプトを使う事もなさそうですが、これが普通だった時代もあります。

 

 とは言っても、このコマンドを見てもらうと、英数字で文字列として意味が通じるような物になっていますから、まかり間違っても、特定のアドレスに対してデータを送るためにレジスタの指定を行ってコマンドを打ち込んでいる訳ではありません。ちなみに、1970年代のワンボードマイコンはそんな感じですから、時代によって状況は変わっています。

 

 その為、現在のプログラミングでは、高級言語やScratchなどで挙動の制御が出来る物も登場していますが、コントローラーを用いて設計した物を動作させるような仕様になっています。

 

 この時に、電気工作を制御(センサーとアクチュエーターの制御)するのに特化したワンボードマイコンや、機能を制限したOSを実装した端末のシングルボードコンピューターを用いる事になります。学習目的でこう言った製品を見ていると、いろいろな物があり、NVIDIAのJETSONのように少し方向性が違う物もありますが、似たようなカテゴリーの製品に 【 FPGA評価ボード 】 と言う物が存在します。これは、前述の2つとは異なる面白い特性を持った製品になります。

 

 

F PGA                          

 

 FPGAは、トランジスタがアレイになった構造になりますが、プログラムで回路を組み替えて運用する事ができます。

 

 FPGAもLSIなんですが、通常のLSIはマイクラでサバイバルモードでプレイしている時のレッドストーン回路のように固定された状態で回路が組み上がっています。これは電気工作でもそうですし、CPUにも構造が存在するので、至極当然な内容と言えます。

 

 FPGAは少し特殊な構造になっており、通常のLSIのように内部の回路が物理的に固定配線されている訳ではなく、

 

 【 外部メモリに格納された回路構成データ(Configuration Data)が

   電源投入後にFPGA内部にロードされてはじめて機能する 】 

 

仕組みになっています。

 

 その為、 

 

【 プログラムでLSIの構造を変更できる特殊な仕様の構造物 】

 

となっています。CPUとFPGAが共存する環境も存在するので、あくまでも基礎分野が大きき変わるわけではない(この辺りは、量子コンピューターでも同様のことが言えますから基礎的なテクノロジーは知っておく必要があります。)ので、そう言った物も存在するという考え方でいいかなと思います。

 

 FPGA関連でいうと、

 

   Intel、ASIC開発企業の買収発表。FPGAとのシナジー

    見越す  【 PCWatch 】

    https://pc.watch.impress.co.jp/docs/news/1132864.html

 

 

   インテル、FPGAプロバイダーのOmnitekを買収

     https://japan.zdnet.com/article/35135859/

 

 

 

   AMDがXilinxを買収へ、IntelのAltera買収に追いつく

     【 日経 X TECH 】

 

 

のようにFPGAメーカー関連のニュースも過去に出ていましたが、このFPGAは低コストで作れるので、サンプルやプロトタイプを作るのに優れているので使用しやすいという利点もあります。

 

 FPGAはC言語でプログラミングが可能でコンパイルをして使用できますが、専用コンパイラを使った場合、中間コードとしてHDL (Hardware Description Language) を出力します。その為、FPGAを使う場合には、HDLを用いて制御する事になります。

 

 これが回路の状態を示すものになるのですが、これをネットリストという中間コードに変換しているのですが、この時に、

 

   ピン配置

   マトリックススイッチ

   メモリリソース

   その他ハードウェアマクロ

 

との対応付けを行います。この処理を 【 インプリメーション 】 と呼びます。

 

 このネットリストに変換する際にライブラリやリンクに相当する処理も行われているで、実際には、ソースコードのビルドに近い処理が行われているのですが、この処理のことを 【 論理合成 】 と言います。

 

 CPUはノイマン型コンピューターの仕様なので設計が決まっていますが、プログラムはCPUで処理を行います。プログラミング教育で学ぶのもノイマン型コンピューターですから、この分野になりますが、FPGAの場合、対象は 【 LUT(Look Up Table) 】 になります。個人的にはLUTと聞くと、動画制作後に使用する対象の媒体に合わせて指定する色の情報の指定をする物が思い浮かびますが、LUTと言う構造体の制御をするプログラムを使用して動作させます。

 

 

■ LUT(Look Up Table)               

 

    FPGの回路構成を決める時にプログラミングをする対象が

    LUTです。

 

    LUTとは、無数の小さなメモリーと配線を担うスイッチにに

    なります。

 

 

 FPGAでは、LUTでどんな論理演算を行い、スイッチを銅接続するのかを指定します。

 

 CPUとFPGAでは演算の方法が異なり、CPUでは、ALU (Arithmetic Logic Unit)を用いて演算を行っています。これが1~数個存在し、1システムクロック(1回の演算をALUで行う時間)が4~5GHzと高速になっています。

 

 FPGAは数万~数十万の演算器を持っていますが、500~800MHzとかなり遅いです。

 

 並列処理をすると、速度は上がりますが、得手不得手があるので、CPUの方が得意な分野とFPGAの方が得意な分野が存在しているので、得意分野でアクセラレーターとして使うと速度向上が見込めるものと言えます。

 

 処理におけるアルゴリズムはプログラムで行う為、回路で考える必要はないのですが、並列化をして高速なアルゴリズムを作ると、

 

   画像処理

   パターンマッチング

   データ圧縮・展開

   暗号化・複合化

 

などが高速に行えるようになります。とは言っても、FPGAを使う場合、PCと接続して使用する場合には、何かしらのバスでデータの転送をする必要がありますから、オンボードで組み込んだとしても自作PCでも発生する 【 I/Oのボトルネック 】 によって性能が頭打ちになる場合があります。これは以前書きましたが、古いアーキテクチャを使うほど、パーツの性能がテクノロジーのレベルの違いによって相当低くなっているので、仮に動いたとしても速度が出ない場合があります。とは言っても、データの読み書きをする場合でも、CPUに近いL1キャッシュと物理メモリー領域のようにメモリーコントローラー経由で遠い場所にあるメインメモリーにアクセスするのでは相当巨大な速度差が出てしまうのですが、データを扱うときにボトルネックが発生しないような設計が必要になります。ちなみに、FPGAとはフィールド。プログラマブル・ゲート・アレイの略になります。

 

 このように、FPGAでは、コードの記述によって集積回路の構造を設計し、それを実装して動かす事が出来る仕様の物になっていますから、回路の構造をFPGAを設計するハードウェア記述言語によって指定する事が出来る仕様になっています。

 

 IntelがASIC関連企業の買収をしたという記事について触れましたが、ASICと言うのは、機能が決まった特注の集積になります。こうしたものは、初期投資が恐ろしく高いのですが、木俣内容に特化した物を作ることができます。プロトタイプをASICで作る事もできますが、時間とコストがかかるので、FPGAを用いてコストとサイズと時間をできるだけ短くして運用するという選択も存在しています。とは言っても、延々とFPGAで物を作っていると、AISCで行った方が安価になる時期が来るのですが、このサイクルで切り替えることもできますが、AISCと比較した場合に長寿命でありサイクルが長いという利点もあります。

 

 ちなみに、世界初のFPGAとして市場に登場した製品は、1985年にザイリンクスが開発したXC2064になります。

 

 ログラミング                    

 

 プログラミングを行う場合、基本的にはハードウェアの制御になりますが、ワンボードマイコンやシングルボードコンピューターでの制御はデバイス制御用のプログラムをノイマン型コンピューターで行っている状態になります。また、PCのソフトウェアの制御も同様の処理を行っていますが、プログラムで制御する物の基本は 【 回路 】 になりますが、FPGAのように 【 電子回路の構造をコーディングで指定する 】事もできるようになっています。