FPGA

20Q3.02A

高位合成で加速するアクセラレータ開発 (2) ~ 高位合成と C ベース設計 1章

すべての現象は他のものに依存して名前を与えられたことによって生じ、存在しているダライ・ラマ十四世 「空の智慧、科学のこころ (集英社新書)」より(共著 : 茂木健一郎) 高位合成と C ベース設計 ~はじめに 皆さん、はじめまして。Xilinx で FPGA を含む HW/SW の高位設計およびツールフローを担当している、黒田と申します。今回 Xilinx からの第3期ブログ連載 (全5回) の3回分を使い、対象がエンベか?/サーバーか?にかかわらず、高位合成 (High-Leve...
20Q3.07A

FPGA で作る暗号は危険? (1)

はじめに みなさんはじめまして。本コースを担当するゴフェルテックの川西です。ゴフェルテックは FPGA を使用して暗号を安全に実装する方法を岡山大学と共同で研究開発しています。 ここで注意して頂きたいのは「安全な暗号」の研究ではなく「暗号を安全に実装する方法」を研究しているところです。いまひとつピンとこないかと思いますが、実は FPGA に暗号機能を搭載するとき、十分に注意を払わないと「サイドチャネル攻撃」と呼ばれる攻撃に対して脆弱な暗号機能になってしまい、暗号で最も重要な暗号鍵を...
20Q3.06B

FPGA と予測不可能性と乱数 (1)

愛知工業大学の藤枝です。今期は2つのコースを担当することになりました。 普段は FPGA を使って何か面白いことをしたいと思って研究を進めているのですが、縁あってここ数年ほど、 FPGA の素子を使った 真性乱数生成器 (TRNG; True Random Number Generator) の設計法やその応用について研究しています。このコースでは、そもそも乱数って何?というところから、TRNG に求められる要件、また FPGA 向けのいくつかの TRNG の設計について、ACRi ブロ...
20Q3.05B

FPGA を用いた「組合せ問題」の高速計算 (1)

この連載では、 FPGA の応用事例として、「組合せ問題」を高速に解く試みについて触れていきます。 FPGA のアプリケーションとしては、画像処理や深層学習 (いわゆるAI) などが有名ですが、組合せ問題を FPGA で高速に解こうという試みは FPGA 研究の比較的早い時期 (90年代末) に起こり、今日に至っています。 この連載では、組合せ問題の定義や用途、組合せ問題を解くためのアルゴリズム、その FPGA を用いた高速化に関して、実装例などを交えて紹介します。なお、初回は FPGA...
20Q3.04A

そもそも「FPGA」って何なんですか? (1)

皆さん、こんにちは。ACRi ブログ第3期の第4コースを担当する飯田です。 このコースでは、タイトル通り「そもそもFPGA って何」という謎に迫っていきます。何となく判っているような、いないような FPGA の不思議にこたえていければと思っています。 例えば、FPGA ってどうやって生まれてきたのかとか、どうして配置配線に時間がかかるのかとか、結局、CPU や GPU と何が違うのかとか、FPGA にまつわる話をしていきます。 このコースは、高校生から大学1年生ぐらいでも理解...
20Q3.03B

FPGA の高速シリアルトランシーバ (1)

このコースでは、最近の高性能 FPGA にはほぼもれなく搭載されている高速シリアルトランシーバを使ったシリアルリンクについて紹介していきたいと思います。高速シリアルトランシーバは PCI Express や Ethernet, USB のような標準インタフェイスを FPGA に実装する際にも用いられますし、FPGA どうしを直結するための専用のプロトコルも各 FPGA ベンダから提供されており、広く応用されています。多くの場合、これらは IP コアによってブラックボックス化されていて、設計者が...
20Q3.02A

高位合成で加速するアクセラレータ開発 (1) ~ ACRi ルームで体験してみよう

この記事では、ACRi ルーム と PYNQ で、高位合成を使った FPGA 開発フローを「超」お手軽に体験してみましょう。C と Python しか出てきませんので FPGA 初心者の方もご安心ください。
20Q2.10B

NNgenとFPGAで作るニューラルネットワーク・アクセラレータ (5)

前回までは、学習済みモデルから、VGG-11 専用のハードウェアを構築したりしました。 第5回 (最終回) では、NNgen を活用するために、NNgen で利用可能な演算や入力の紹介をします。加算、減算、畳み込みといった基本的な演算から、Extern と呼ばれる CPU 上のソフトウェアと連携を可能にする特殊なものまで、いろいろあります。 データの入力 (placeholder, variable, constant) 演算の前に、データや重みを入力するインタフェースをみて...
20Q2.09B

MIG を使って DRAM メモリを動かそう (4)

この記事では、前回まで解説してきた MIG ベースの DRAM コントローラのテストプログラムと先端の RISC-V ソフトプロセッサへの応用を説明していきます。 ソースコード: テストプログラム:  ソフトプロセッサ: Wizard ベースのクロック生成スクリプト: 説明では、現時点 (2020年8月) ACRi ルームで使用可能な Vivado 2019.2 を使用します。ターゲットの FPGA ボードは Arty A7-35T です。 テストプログラムと RI...
20Q2.10B

NNgenとFPGAで作るニューラルネットワーク・アクセラレータ (4)

本コースの第3回目と第4回目では、NNgen とニューラルネットワーク・フレームワーク Pytorch を用いて、学習済みのモデルを SoC 型の FPGA の Ultra96-V2 上で動かしてみます。 今回の第4回は、PYNQ と Jupyter を用いて、Ultra96 上で、第3回で開発した VGG-11 専用回路を実際の FPGA システム上で動かします。 Ultra96 向け PYNQ の構築 まず、Ultra96 向けの PYNQ のリポジトリの Release...
20Q2.08A

新しいコンピューティング・システムとしての FPGA (5) ~ 独自シェル “AFUshell”

本コースでは、複数の FPGA を用いた計算機システムの構成と、私達が研究開発が行っているカスタム・コンピューティング・システムについて紹介していきます。 第5回では、FPGA をカスタム・コンピューティング・システムとして利用するために開発を行っている、我々の独自シェル "AFUShell" について解説していきます。 先日、クラスタの名称が、"ESSPER: Elastic and Scalable System for high-PErformance Reconfigura...
20Q2.07A

非同期式回路と FPGA 〜「作ってみる編」(5)

みなさん、こんにちは。いよいよこのコースも最終回となりました。今回は、第3回で考えた例題回路の非同期式回路を実際に FPGA 上に実装します。 また、正しく動作する実装を得るために、Vivado の静的タイミング解析機能 (以後、STA エンジンと言うこともあります) をどのように非同期式回路に適用するか、という点について考えていきたいと思います。 FPGA への実装 (2) 例題回路の復習 まず、例題回路の復習です。回路の構成は下記のようになっていました。 ...
20Q2.01A

FPGA で始めるエッジディープラーニング (10)

みなさんこんにちは。この記事は ACRi ブログの Deep Learning コースの第10回目です。 最終回となるこの回では、より大規模なネットワークに対して推論を行う際に問題となる計算量の増加をどのように解決すべきか、一般的に使用されている方針を述べていきます。 演算コストの低下手法 まずは演算コスト自体を低下する方法について述べていきます。 量子化 量子化は、通常 fp32 で構成される重みやアクティベーション (各層の入出力) のビットを減らすことです。...
20Q2.05A

ホームサービスロボットにおける FPGA の応用例 (5): ORB-SLAMのFPGA実装

ORB-SLAM とは ホームサービスロボットや自動運転車が、家や工場内を自律移動する技術が活発に研究、開発されています。自律移動するには、家具や壁の配置を認識(地図作成)し、自分がどこにいるかを把握(自己位置推定)しなければなりません。これを同時に行うのが SLAM (Simultaneous Localization and Mapping) です。 SLAM には使用するセンサなどによっていくつか種類があります。主に LiDAR やステレオカメラ、単眼カメラなどが使われますが、 O...
20Q2.04B

Synthesijer と高位合成ツールの作り方 (5)

こんにちは。この「Synthesijer と高位合成ツールの作り方」のシリーズでは、全5回を通じて Synthesijer をベースに FPGA 向けの簡単な高位合成処理系を作る方法を紹介していきます。例は Java ですが、お気に入りの言語向けの処理系を開発する足がかりとして利用できるように紹介できればと思ってます。 前回は、Synthesijer における内部情報の変形処理として並列化とチェイニングの様子を紹介しました。最終回となる今回は、高位合成による高速化の効果を楽しめるパイプラ...
20Q2.03B

広がり続ける FPGA の応用と人工知能への活用 (5)

前回は高いスループット、超低遅延と低消費電力を同時に実現する Vitis AI について解説しました。さらに FPGA を使用して画像認識をおこなうまでのフローを ACRi ルームの環境を使用してひととおり体験しました。シリーズ最終回となる今回は FPGA を取り巻く環境、最新テクノロジーそして将来への展望について概観し、本シリーズを総括したいと思います。 広がる FPGA の応用分野 これまで4回にわたり FPGA を使用することによってどのような効果が得られるか、そしてその技術...
20Q2.02A

IP の世界からこんにちは (5)

IP インテグレータを用いた回路やシステムの設計について学ぶコースも、いよいよ今回が最終回です。前回は、文字送信回路の IP コアを MicroBlaze と組み合わせるための IP コアを作成し、これらを含むブロック図からシステムを合成しました。今回は、このシステムの上で動作するソフトウェアを記述し、動作確認を行います。 なお,今回の内容は基本的に Vivado/Vitis 2019.2 を対象に記述しています。2019.1 以前の Vivado では、こうした FPGA 上の組込みプ...
20Q2.01A

FPGA で始めるエッジディープラーニング (9)

みなさんこんにちは。この記事は ACRi ブログの Deep Learning コースの第9回目です。 前回までの記事で、推論カーネルのタスク並列性・ループ並列性を順に抽出してきました。この記事では、推論カーネルのデータ並列性を抽出していきます。 データ並列性 データ並列性は処理対象となるデータ間の並列性を示します。 以下のコードは単純なベクトルの加算処理ですが、c の計算と c の計算の間には依存がないため同時に計算することができます。この並列性がデータ並列性となりま...
20Q2.10B

NNgen と FPGA で作るニューラルネットワーク・アクセラレータ (3)

本コースの第3回目と第4回目では、NNgen とニューラルネットワーク・フレームワーク Pytorch を用いて、学習済みのモデルを SoC 型の FPGA の Ultra96-V2 上で動かしてみます。 今回の第3回では、学習済みモデルから FPGA のビットストリームを生成するところまで進めます。 環境構築 まずは、第1回ブログと同様に、NNgen を実行する環境を構築します。 Ubuntu 18.04.4 LTSmacOS 10.15.6 でも大丈夫です。Pyth...
20Q2.08A

新しいコンピューティング・システムとしての FPGA (4) ~ ソフトウェアブリッジドデータ転送

本コースでは、複数の FPGA を用いた計算機システムの構成と、私達が研究開発が行っているカスタム・コンピューティング・システムについて紹介していきます。 第4回では、FPGA を搭載したヘテロジニアスシステム上で、ソフトウェアのみで自由にデータ転送を行える機能、「ソフトウェアブリッジドデータ転送」機能を紹介します。 ソフトウェアブリッジドデータ転送 (SBDT データ転送) 紹介するソフトウェアブリッジドデータ転送 (SBDT データ転送) の目的は、FPGA 搭載ヘテロジ...
タイトルとURLをコピーしました