【初心者】ネットリストと記述レベルってなに?【FPGA入門】
普段は YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。
YouTubeのvideoIDが不正です
Created by NekoAllergy
はじめに
FPGA を使うことで、自分だけの IC を作ることができます。今回は、FPGA で回路設計をする際に使う、HDL について解説します。
「厳密さ」よりも、「分かりやすさ」を重視しています。ご了承ください。
分かること
- ネットリストって?
- 記述レベルってなに?
今回のゴール
FPGA エンジニアが使う、 ↓ の文を理解できることが、今回のゴールです。
👨💻 「RTL で HDL を書き、それをゲートレベルに論理合成することで展開されたネットリストを、FPGA へ書き込むぞぉ。」
専門用語と略語だらけで、めちゃくちゃ分かりづらいです。
しかし、今回の説明を理解できれば、何が言いたいのかは、なんとなく伝わるはずです。
誰に向けて?
FPGA についてあまり詳しくない方を想定して書きました。
今回の内容は、下記の記事を見てからの方が、理解が深まります。
ネットリストって?
FPGA 内の電子回路(ハードウェア)の構成は、HDL というコードを使って書くことができます。
ネットリストとは、回路ブロックの接続関係を示したコードのことです。HDL を変換することで、ネットリストを作ることができます。
HDL をネットリストに変換することを、「論理合成」とよびます。わかりにくいですね。
最終的に FPGA に書き込むのは、HDL のプログラムファイルではなく、このネットリストです。
記述レベルってやつが 3 つに分かれている
HDL を書くときには 「記述レベル」 という分け方が存在します。ただの分類方法です。
HDL を書くことで、プログラムを記述するように、回路を組むことができます。とっても便利。そして、最終的には、自分で作った回路を IC に書き込みます。
このとき、物理的な IC の構造に対して、プログラム(回路情報)の書き方が、どれくらい具体的かによって 3 つのレベルに分かれます。
最終的に書き込むネットリストは、3.ゲートレベルというレベルにあたります。記述レベルは、プログラムの「書き方」であり、回路を作るときの「考え方」でもあります。分けて考えた方が、分かりやすいよねーってことです。
この記述レベルについて、普段意識することは少ないです。ただ、このような 3 つの分類があることを理解しておくと、開発をスムーズに進めることができます。これを機に抑えておきましょう。
順番に解説します。
1. 動作レベル(behaivioral level)
動作レベルとは、もっとも抽象的な書き方です。普通のプログラミング言語でプログラムを書く際は、全てこのレベルで書いています。
たとえば、Python や JavaScript など、一般的なプログラミング言語でコードを書く時、実際の IC の電子の動きを意識することありますか? あまり無いでしょう。私は無いです。
「メインメモリから CPU のレジスタへデータを移して、ALU で加算して、8 ビットシフトさせて、、fewi%’#ain 4%U(0#、、、、」って動きは、いちいち気にしません。
「動作レベル」とは、そんな事気にしないレベルでコードを書くことを指します。気にしなくても問題なく動かせるように作られてるってことです。便利ですね。
さて、FPGA を使って IC の設計をする時は、IC の中を動く電子の動きを、「いちばん具体的な動き」と表します。最も詳しい動きってことです。
それに対して、動作レベルでは電子の動きなんか考えなくていいです。つまり、見方によっては「一番雑な書き方」「もっとも抽象的な書き方」と言えます。物理的な要請を無視するので、どのような記述をしてもかまわないのが、動作レベルの特徴です。
3. ゲートレベル(gate level)
先にゲートレベルの説明をします。
ゲートレベルとは、もっとも物理的な回路に近い書き方のことです。動作レベルと真逆の考え方、書き方です。電子回路の構造に 1 対 1 で対応しているので、人間が見て内容や動きを理解するのは難しいです。
さっき説明した「ネットリスト」は、このゲートレベルに当たります。ゲートレベルで書かれたデータをネットリストと呼び、それが最終的に FPGA へ書き込むデータとなります。
2. レジスタ転送レベル(Register Transfer Level:RTL)
レジスタ転送レベルとは、動作レベルとゲートレベルの中間にある書き方です。略して、RTL と呼ばれるのが一般的です。
私たちが HDL を使って書くのは、このレベルにあたります。
何度も言いますが、最終的に必要なのは「ネットリスト」です。RTL を論理合成することで、ネットリストに変換することができます。「ネットリストへ展開する」と言います。
また、RTL とはなにか?について難しく説明すると、「クロックに対するレジスタの振る舞いを記述したもの」と表現されることがあります。言い方が難しいので、理解できなくても OK です。
RTL は、「微妙に具体的な部分もあるし、微妙に抽象的な部分もある」 というレベルだと理解すれば OK です。とりあえず、私たちが書く HDL はこの RTL というレベルだということも、おさえておきましょう。
つまり?
さて、これまでの内容を踏まえると、FPGA エンジニアは次の様なことを言います。
👨💻 「RTL で HDL を書き、それをゲートレベルに論理合成することで展開されたネットリストを、FPGA へ書き込むぞぉ。」
専門用語と略語だらけで、めちゃくちゃ分かりづらいです。
しかし、これまでの説明を理解できれば、何が言いたいのかは、なんとなく伝わるはずです。
今回のまとめ
今回は以上です。興味を持たれた方は、ぜひもっと調べて見てください 🐱
機械学習をもっと詳しく
ねこアレルギーの AI
普段は YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。
YouTubeのvideoIDが不正です
Created by NekoAllergy
Discussion