Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
B
b3exp
Manage
Activity
Members
Plan
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
2021
b3exp
Wiki
FPGAAbyss
Changes
Page history
New page
Templates
Clone repository
Update FPGAAbyss
authored
2 years ago
by
Toru Koizumi
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
FPGAAbyss.md
+4
-4
4 additions, 4 deletions
FPGAAbyss.md
with
4 additions
and
4 deletions
FPGAAbyss.md
View page @
da9102cc
...
...
@@ -6,9 +6,9 @@ FPGAの詳しい中身
つまり、以下のような組み合わせ論理回路はFPGAと相性が良いです(トップレベルの箇条書きは一般論で、ぶら下げている箇条書きは実験で使うFPGAのシリーズに特有の話です)。
*
一つのLUTに入るような論理回路
*
6
入力以内の、任意の1bit出力論理回路
*
入力
が6bit
以内の、任意の1bit出力論理回路
*
特に、4:1のセレクタ(4入力+選択信号が2bit)が6入力LUT一つで実現できることを覚えておくと便利
*
5
入力以内の、任意の2bit出力論理回路
*
入力
が5bit
以内の、任意の2bit出力論理回路
*
二進法で表された二数の加減算および大小比較演算[^4]
*
LUTでちょっとした論理演算をした後、その結果を加算器に通す場合(スライス内で完結するので高速)
*
LUTでnotを取ることで、減算ができる
...
...
@@ -26,7 +26,7 @@ FPGAの詳しい中身
とりあえず、FPGAの場合になぜ効率が悪いのかを書いておきます(トップレベルの箇条書きは一般論で、ぶら下げている箇条書きは実験で使うFPGAのシリーズに特有の話です)。
*
多数の入力を持つ複雑な論理回路[^6]
*
9
入力以上[^7]になると論理回路の複雑さが資源消費量に影響し、最悪の場合指数的に大きくなっていく
*
入力
が9bit
以上[^7]になると論理回路の複雑さが資源消費量に影響し、最悪の場合指数的に大きくなっていく
*
大量にある入力の中から、一つを選択する論理回路
*
レジスタファイルをフリップフロップで作ろうとしたり、データメモリを分散RAMで作ろうとした場合など
*
素直に
[
分散RAMやブロックRAM
](
FPGARAM
)
を使おう
...
...
@@ -45,4 +45,4 @@ FPGAの詳しい中身
[
^4
]:
4bit加算器の最上位のキャリー出力は、隣のブロック(スライス二つまとまりのことをブロックと呼ぶ)の4bit加算器のキャリー入力に専用線でつながっているので、4bitを超える幅の加算器もかなり高速に動作する。実質的に加算器専用回路が内蔵されていると言える。
[
^5
]:
例えば、32bit整数のすべてのビットが0かどうかは、0xffffffffを足して繰り上がるかで判定できる。このように、出力が1bitの論理関数のうち非常に特殊(だが頻出)なものは「キャリーが出力されるか」といった形で加算器のみを使って合成可能である。数ビットの結果をまとめたものを加算器の入力とすればさらに効率が上がる。
[
^6
]:
パリティの計算(全ビットの排他的論理和を取って1bitにまとめる)、といったものは多段のLUTに自明に分割できる単純な論理回路である。一方、Leading
zeros count(上位何ビットが連続して0かを数える)、といったものは多段のLUTへの分解(中間計算結果に何を取るべきか)が自明ではない複雑な論理回路であり、ヒント無しで合成すると非常に大きな回路が生成されてしまう。
[
^7
]:
一応、
8
入力までの任意の論理関数は一スライスで実現可能であるが、Vivadoはそれを最終手段とみなしているようである。一スライスに四つある6入力LUTの出力をスライス内にある二段のセレクタで選択することで8入力LUTを実現するのだが、たった1bitの出力に一スライス使うのは非常にもったいない。多くの場合、Vivadoはそういった論理関数を二段のLUTに分割する。一段目のLUT出力を他の場所で再利用できれば合計の消費LUT数を減らせるからである。一段目のLUT出力はかなり自由に選べるので、ほとんどの場合、うまく選べば他の場所で再利用できる形にできる。
[
^7
]:
一応、入力
が8bit
までの任意の論理関数は一スライスで実現可能であるが、Vivadoはそれを最終手段とみなしているようである。一スライスに四つある6入力LUTの出力をスライス内にある二段のセレクタで選択することで8入力LUTを実現するのだが、たった1bitの出力に一スライス使うのは非常にもったいない。多くの場合、Vivadoはそういった論理関数を二段のLUTに分割する。一段目のLUT出力を他の場所で再利用できれば合計の消費LUT数を減らせるからである。一段目のLUT出力はかなり自由に選べるので、ほとんどの場合、うまく選べば他の場所で再利用できる形にできる。
This diff is collapsed.
Click to expand it.