うちの職場ではFPGAの開発も行っている。
FPGA開発の立ち位置って意外と難しいんだよね。
この職場の仕事は 回路設計 と ファームウェア開発 の2つに分類される。
プリント基板に作る回路の設計は言うまでもなく回路設計、
マイコンのソフトウェアの開発は言うまでもなくファームウェア開発である。
では、FPGAは? というとこの両方の要素があるから複雑なのだ。
FPGAはデジタル回路を作るLSI、だからFPGAの中身を作り込むのは回路設計だという考えはなり立つ。
一方で、FPGAとマイコンはプログラムして動かすという点では似ている。プリント基板ができてからも中身を書き換えることはできる。
開発手法もマイコンでは Cなどのプログラミング言語、FPGAでは Verilogなどのハードウェア記述言語に従い、ソースコードを記述することで作る。
作り込む対象がソフトウェアか回路かというのは大きな違いなのだが、一見すると似ている。
高専専攻科時代、周りに論理回路をやっている人はけっこういたのだが、ソフトウェア寄りの人が多かった。
そんなこともあって、論理回路とソフトウェアを混同してはいけない、ということを各所から聞くことが多かった。
記述方法こそプログラムを書くようにHDLを記述するという方法だけど、
あくまでも作り込んでできるものは回路であり、回路としての挙動を意識して作らないといけないと。そんなことがたびたび言われていたのだ。
回路記述はソフトウェアほど自由度はないから回路で実現できるような記述をしないといけない。
ソフトウェアではクロック単位でタイミングを考えることはないが、デジタル回路設計では重要である。
そういうことをうるさく言われなければならないほどに、ソフトウェアに近接したところで論理回路設計をやっていたのである。
僕はそうでもなかったけど、これまでソフトウェア開発に力を入れてきた人が論理回路設計をやることも多かったから。
ところが、どうも今いる職場では、回路設計の立場からFPGA開発をやっている人がけっこう多いみたいね。
作り込む対象は回路なので、それは全く正しいのだが、意外だった。
さっきも書いたように、これまで周りにはソフトウェアをやりながら論理回路設計をする人が多かったのだ。
世の中そんな人ばかりかと思いきや、実はそうでもないのだ。
どっちが向いてるんでしょうね?
今は回路寄りの技術者と一緒にFPGA開発をやってるんだけど、回路のことをよく意識しながら設計しているのは間違えなく長所だ。
ちょうど今はタイミングの設計とかいろいろ教えてもらってる。これが難しいのだがよく考慮した設計されているのだ。
一方で短所は、ソースコードの見通しがなにかと悪いことである。
特にソースコードの再利用性、保守性の悪さには苦しめられている。どっちかというと過去にこれを担当していた技術者が悪いのだが。
コウモリは獣か鳥か? という話があるが、FPGA開発の位置づけもそれに類する話である。
回路設計の一部として管理するのが好都合なら、回路設計に分類するし、
ファームウェア開発の一部として管理するのが好都合なら、ファームウェア開発に分類しているというのが本当の答えだ。
一方で、技術者の気の持ちようというのは、その人がこれまでやってきた経験によるんだろうなと。
そういうことを最近実感している。