🐶

【初心者】HDLってなに?【FPGA入門】

2022/04/22に公開約3,700字

普段は YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。

https://www.youtube.com/channel/UCbCHn_q5MUAz5ZDNA-wKsug


Created by NekoAllergy

はじめに

FPGA を使うことで、自分だけの IC を作ることができます。今回は、FPGA で回路設計をする際に使う、HDL について解説します。

「厳密さ」よりも、「分かりやすさ」を重視しています。ご了承ください。

分かること

  • FPGA と HDL ってなに?
  • プログラミング言語と違うの?
  • ネットリストって?

誰に向けて?

FPGA についてあまり詳しくない方を想定して書きました。
今回の内容は、下記の記事を見てからの方が、理解が深まります。

https://zenn.dev/nekoallergy/articles/5b0677796ba6a1

まず、FPGA ってなに?

FPGA とは、プログラムすることによって、中の回路構成が変えられる IC です。CPU などの普通の IC は、後から回路構成を変えることはできません。しかし、FPGA を使うことで、中のハードウェア(電子回路)を自分で自由に設計することができます。すごい。

たとえるなら、CPU は中身が書き込まれた「教科書」、FPGA は自由に書き込める「ノート」のようなものです。どちらも工場で作られて、印刷という工程がありますが、ノートには中身の印刷がされません。

そのため、ユーザーが書きこむ内容によってノートは、メモ帳にも教科書にも変わることができます。FPGA はノートのように、書き方によっては CPU にも GPU にもメモリにもなることができる、とても優秀な IC です。便利。

詳しくはこちら

コードを使って回路が書けるよ

FPGA 内の電子回路(ハードウェア)の構成は、ハードウェア記述言語を使って書くことができます。ハードウェア記述言語は、Hardware Description Language の頭文字をとって、HDL(エイチ ディー エル)と略されます。

初めはプログラミング言語と思ったら OK ですが、プログラミング言語とハードウェア記述言語は全く違うものなので、注意してください。

HDL は 2 種類ある。2 種類しかない。

HDL は、VHDL と VerilogHDL の 2 種類が使えます。Python とか Javascript などプログラミング言語に種類があるのと同じです。ハードウェア既述言語(HDL)では、基本的にこの 2 つしかありません。

  • VHDL :ブイ エイチ ディー エル
  • VerilogHDL :ヴェリログ エイチ ディー エル

どちらを使っても、FPGA 上にハードウェアを作ることができます。この 2 つに優劣はあまりないので、どちらを使うかは好みです。

プログラミング言語とは違うよ

HDL の考え方は、普通のプログラミング言語とかなり違っています。if 文や for 文などは HDL にもあるので、書き方については似ている点もところどころあります。しかし、そもそもの考え方が違うので、プログラミング経験者でも、理解するのに時間がかかります。

個人的には、高級言語(C 言語など)と、低級言語(機械語など)の間くらいの難しさだと思っています。慣れれば早いし楽しいです。自分だけのオリジナル IC が作れます。

プログラミング言語とハードウェア記述言語(HDL)は、そもそも目的が違います。

最終的な目的は、

  • プログラミング言語 :理想通りに動いてくれるプログラムを書くこと。
  • ハードウェア記述言語(HDL) :想像通りの動きをしてくれる電子回路を作ること。


そして、いちばん大きな違いは、

  • プログラミング言語:上から順に処理されていく
  • ハードウェア記述言語(HDL):全部が同時に処理される

ここが一番のポイントです。プログラミング経験者は、かなり頭が混乱します。全部同時なので、いろんなことを同時に考えなければいけません。たいへん。

ネットリストって?

ネットリストとは、回路ブロックの接続関係を示したコードのことです。HDL を変換することで、ネットリストを作ることができます。

HDL をネットリストに変換することを、「論理合成」とよびます。わかりにくいですね。最終的に FPGA に書き込むのは、HDL のプログラムファイルではなく、このネットリストです。

FPGA 回路設計の流れ

HDL を使った FPGA 回路設計の流れは、ざっくり下記のような感じです。

  1. どんな回路にするか考える
  2. HDL を書いて回路を設計する
  3. シミュレーションをして HDL で書いたとおりに動くか確認する
  4. ネットリストを FPGA に書き込んで、実機でいい感じに動けば OK

HDL の最終的な目標は、想像通りの動きをしてくれる電子回路を作ることです。一般的なプログラミング言語は、CPU で処理するので、PC 内で完結します。一方で HDL は、FPGA という IC に書き込みをするので、PC に加えて実機(FPGA そのもの)が必要になります。

FPGA キットは Amazon とかで買えます。PC 内でシミュレーションをすることもできます。HDL で書いた内容が、FPGA 内でどのように動くかを、FPGA に書き込む前に確認することが一般的です。

今回のまとめ

今回は以上です。興味を持たれた方は、ぜひもっと調べて見てください 🐱

機械学習をもっと詳しく

ねこアレルギーのAI

ねこアレルギーの AI
普段は YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。

https://www.youtube.com/channel/UCbCHn_q5MUAz5ZDNA-wKsug





Created by NekoAllergy

Discussion

ログインするとコメントできます