20Q4.04A

BRAM 達人への道 (2) FIFO に使ってみる-同期型

本連載は今回から、BRAM を用いたアプリケーションの一つとして、FIFO を扱うことにします。 はじめに FIFO は First In First Out の略で、最初に書き込まれたデータが最初に読み出せる→データが書き込んだ順に読み出せる記憶機能、と考えることができます。何らかのデータを扱うアプリケーションにおいては、非常に便利な構成要素で、その記憶素子として BRAM を使うととても便利です。FIFO の記憶容量として RAMB36 が大きすぎてもったいない場合もありますが...
20Q4.03A

FPGA 使え、って社長に言われた。さぁ、どうする? (2)

前回までのお話  FPGA 事業部の立ち上げに伴い課長に昇進。うれしくもあるが FPGA について余り知らない Y 君。FPGA についてネットで調べると「わからないことはわからない」ということがわかったぐらい。ならば、餅は餅屋。FPGA に関する知識と希望を求めて、大学時代の研究室を訪れることにした。(前回の話はこちら) FPGA は神チップ? Y 君:FPGA について誤解がある、というお話ですが一体何が誤解なのでしょうか。 先生:ん~、やっぱり、次回までの宿題、に...
20Q4.02B

FPGA を対象とした非同期式回路の設計 (2)

皆さんこんにちは。今回は、設計の対象となる回路モデルを紹介していきたいと思います。今回は、前回紹介したFPGA を対象とした非同期式回路の設計 (1) で取り上げた制御回路モデルを用いますので、まだ読んでない方はそちらを先に読んでいただければと思います。 対象モデル (同期式回路) 最終的に設計した後、どのくらいの性能になるのかを確認するために、今回は同期式回路の設計から始めていきます。図1は、対象となる回路モデルです。算術演算を5段パイプラインで実現しています。 ...
20Q4.01A

Vitis を用いたアクセラレータの開発 (2) Vitis Target Platform HW 構築編

前回の「Vitis とは?」の記事で、Vitis の Tool について紹介しました。2回目となる今回は Vivado 2019.2 を利用して Vitis Target Platform の作成「Hardware 編の Flow」をご紹介します。 HW Component Tool Flow まずは前回の復習ですが、Vitis での Acceleration Application の Tool Flow は以下の図のよう4つの Step があります。 今回は上図の...
20Q4.04A

BRAM 達人への道 (1) 構造と基本的な使い方

FPGA を用いて AI のアクセラレーションのような高度な処理を行うことが当たり前の時代になりました。しかし、FPGA を利用する全てのエンジニアがそうしたアプリケーションに携わっているわけではなく、初心者、初級者レベルのエンジニアが多数おられるということも事実ではないかと思います。 この記事では、現場レベルで使えるちょっとした工夫や考え方のヒントを紹介し、初級者のレベルアップや、現場の方々の手助けにつながればと考えています。 はじめに 題材としては、FPGA の基本要素と...
20Q4.03A

FPGA 使え、って社長に言われた。さぁ、どうする? (1)

 Y 君は大学を卒業し、1 回の転職を経て、とある通信系中堅企業の開発事業部で日々エンジニアとして働いている。そんな Y 君を襲った出来事を通して FPGA について見ていきましょう。 FPGA 事業部の立ち上げ。でも、ちょっと待てよ。  誰に感化されたのか、社長の年頭挨拶は冒頭より「次の時代は FPGA」、そして終わりには「新規事業部をこの春より立ち上げる」だった。同僚と自分の机に戻る道すがら社長に呼ばれた Y 君。社長室で受けた内示は、4月より FPGA 事業部の課長、とのこと...
20Q4.02B

FPGA を対象とした非同期式回路の設計 (1)

皆さん、こんにちは。これから5回にかけて、FPGA に非同期式回路を実現するための方法を解説していきたいと思います。以前、こちらのブログでも紹介があった「非同期式回路と FPGA ~ 作ってみる編」(1) から (5) と被るところもありますので、ご了承いただきたいと思います。 内容を理解する上で、「非同期式回路と FPGA ~ 作ってみる編」を先に見ておいた方が良いです。あまり冗長にしないためにも、今回は非同期式回路とはどういったものかなどの説明は割愛させていただこうと思います。以下に...
20Q4.01A

Vitis を用いたアクセラレータの開発 (1) Vitisとは?

はじめまして。 AVNET 仲見です。ここでは XILINX 社が Release している統合開発環境の Vitis という Tool の概要、構築するための Flow についてご紹介いたします。 XILINX 社の Tool はどんなものがあるの? まずはじめに、XILINX 社が現在 Release している Tool について Hardware、Software のそれぞれの開発では以下が用意されています。 Hardware 開発 Vivado Design S...
20Q3.02A

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

高位合成と Alveo を使い、ビジネスとして成立するレベルのアクセラレータを短期間で開発するために、開発フロー全体の中に C ベース設計をどう位置付ければいいのか、考えていきます。
20Q3.07A

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

みなさんこんにちは。本シリーズ「FPGA で作る暗号は危険 ?」では、FPGA 内で暗号機能を実現する方法とその危険性を解説しています。今回は前回取り上げた公開鍵暗号に対するサイドチャネル攻撃を解説します。また、本シリーズの最終回になりますので、暗号以外も含めたセキュリティについても少し紹介します。 公開鍵暗号に対するサイドチャネル攻撃 第3回で紹介した AES 暗号に対するサイドチャネル攻撃と異なり、公開鍵暗号に対するサイドチャネル攻撃は簡単かつ短時間で行うことができる危険な攻撃...
20Q3.06B

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

FPGA 向けの真性乱数生成器 (TRNG) の設計法に関するコースも今回が最終回です.今回も、SR ラッチを禁止状態から保持状態へと移行させた時の挙動 (メタスタビリティ) を利用した TRNG を扱います。前回と異なるのは、最終的な出力ではなくメタスタビリティが解消されるまでの時間 (発振の回数) に注目する点です。 なお、この記事で紹介する TC-TERO (Three-path Configurable TERO) 型 TRNG に関する論文 は、FPGA 関連の世界最大級の国...
20Q3.05B

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

前回は、最大クリーク問題専用 Dist アルゴリズムの FPGA 実装について述べました。 今回は、実装と性能評価の結果、および、このハードウェアの改良すべき点について述べ、連載を締めくくりたいと思います。 性能評価 実装結果 実装には、台湾の TUL 社製の XIL-ACCEL-RD-KU115 ボードを使用しました 。このボードには、Xilinx 社の Kintex Ultrascale KU115 が搭載されています。4096頂点、400万 エッジのグラフを処理可...
20Q3.04A

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

前回までの説明で FPGA (小人さん) を動かすための仕組みについて大雑把な話をしてきました。小人さんは流れ作業で仕事をするので、データフローのような記述をするとちゃんと変換できます。しかし、プログラム言語からハードウェア記述言語に変換する高位合成ツールは、少し難しいことをしていました。さらに、配置配線ツールは時間が掛かります。さて、最終回である今回は、これまであいまいにしてきた小人さんの正体に迫っていきたいと思います。 CPU はなぜプログラムを実行できる? 第一回でも説明しま...
20Q3.03B

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

この連載もついに最終回です。前回は Xilinx の Transceiver Wizard で Aurora 64B/66B から送られてくる初期化シーケンスを受信するところまで見てきました。今回は初期化シーケンスを最後まで進め、データを送受信するところまでシミュレーションしてみます。 今回はデータの送信機能は実装せず、Xilinx のコアからのデータを受信するだけにとどめますが、入出力インタフェイスやクロック周りなどをしっかり実装すれば合成可能な実装に応用することもできます。前回の記事...
20Q3.01B

AXI でプロセッサとつながる IP コアを作る (5)

AXI を使ってプロセッサと連携する回路の設計例について説明するコースも、いよいよ最終回となりました。今回は、前回作成したインタフェース変換回路を使い、専用計算回路 (コプロセッサ) の一例としてステンシル計算コプロセッサを作成し、C 言語によるソフトウェア実装と性能を比較してみます。 なお、第4回~第5回で使用する回路の SystemVerilog 記述は、GitHub からダウンロードできるようにしています。今回は、主に stencil/hdl/stencil_opt.sv を取り上...
20Q3.07A

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

みなさんこんにちは。本シリーズ「FPGA で作る暗号は危険 ?」では、FPGA 内で暗号機能を実現する方法とその危険性を解説していきます。 前回までは共通鍵暗号 (AES 暗号) を中心に FPGA への実装方法やサイドチャネル攻撃について解説しました。今回からは公開鍵暗号について触れていきます。 ただし、公開鍵暗号については具体的な暗号の実装方法というよりも効率的な処理を行うために欠かせない処理を解説していきます。 今回の記事は数式が多い内容になりますが、決して難しい数学ではない...
20Q3.06B

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

FPGA 向けの真性乱数生成器 (TRNG) の設計法に関するコースの第4回です.今回は、SR ラッチを禁止状態から保持状態へと移行させた時の挙動 (メタスタビリティ) を用いた TRNG の構成と、その改良について紹介します。 なお、この記事の最後に紹介するラッチ-ラッチ構造 (Latch-latch composition) に関する論文 は、電子情報通信学会の Electronics Express (ELEX) 論文誌に掲載されています。オープンアクセスの電子ジャーナルなので、...
20Q3.05B

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

前回は、Parital MaxSAT の発見的解法である Dist アルゴリズムの FPGA 実装にあたっての難点を挙げ、アプリケーションを最大クリーク問題に特化することでそれらを回避できることを述べました。 今回は、その FPGA 実装について述べていきます。 全体像 まず、前回示した最大クリーク問題専用 Dist アルゴリズムを図 1 に再掲します。 図1 最大クリーク問題に特化した Dist アルゴリズム 次に、データを保持するためのテーブル類を図 2 に示...
20Q3.04A

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

前回は、FPGA での処理は「いつ」「なにを」「どうする」だけではなく、「だれが」と「どこで」が必要という話をしました。また、言い換えれば、CPU はデータに対して処理を変えていくのに対し、FPGA は処理の連なりを作り、それにデータを流していきます。第4回では、この「処理の連なり」を作る方法について考えていきます。 いきなり登場、データフローグラフ! ここで現実の FPGA の世界とこれまでの回で説明してきた概念的な「小人さんの世界」との関係を対応付けしておきます。少し専門的な用...
20Q3.03B

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

早いもので、この連載もいよいよ後半です。前回はちょっとディープな内容になってしまいましたが、今回はいよいよ Xilinx の Aurora 64B/66B コアと接続して通信する回路を作ってみます。前回あたりの記事は流し読み程度の理解でも大丈夫なように書いていきたいと思いますので、お付き合いいただければ幸いです。 まずは Aurora 64B/66B の仕様から Aurora 64B/66B に関する公式のドキュメントは Xilinx のウェブサイトの IP コア関係資料の、Aur...
タイトルとURLをコピーしました