🐶

【初心者】ネットリストと記述レベルってなに?【FPGA入門】

2022/04/23に公開

普段は YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。
YouTubeのvideoIDが不正ですhttps://www.youtube.com/channel/UCbCHn_q5MUAz5ZDNA-wKsug


Created by NekoAllergy

はじめに

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

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

分かること

  • ネットリストって?
  • 記述レベルってなに?

今回のゴール

FPGA エンジニアが使う、 ↓ の文を理解できることが、今回のゴールです。

👨‍💻 「RTL で HDL を書き、それをゲートレベルに論理合成することで展開されたネットリストを、FPGA へ書き込むぞぉ。」

専門用語と略語だらけで、めちゃくちゃ分かりづらいです。
しかし、今回の説明を理解できれば、何が言いたいのかは、なんとなく伝わるはずです。

誰に向けて?

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

https://zenn.dev/nekoallergy/articles/5b0677796ba6a1
https://zenn.dev/nekoallergy/articles/fpga-basic-01

ネットリストって?

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

ねこアレルギーの AI
普段は YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。
YouTubeのvideoIDが不正ですhttps://www.youtube.com/channel/UCbCHn_q5MUAz5ZDNA-wKsug





Created by NekoAllergy

Discussion