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...
20Q3.02A

高位合成で加速するアクセラレータ開発 (4) ~ HLS によるシストリックアレイの実装

はじめに このコースでは、高位合成を活用したアクセラレータ開発に関して、その考え方やフローを、事例を交えながら解説していきます。今回は、浮動小数点行列の積を計算するシストリックアレイの実装を紹介します。 まずは行列積についておさらいします。行列 A、B を1024行、1024列の行列とします。 行列 A、B の行列積を C とします。C も1024行、1024列の行列です。C のそれぞれの要素は A の行ベクトルと B の列ベクトルの内積となり、次の式で表され...
20Q3.01B

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

この記事は、AXI を使ってプロセッサと連携する回路の設計例について説明するコースの第4回です。今回からは、いよいよフル機能の AXI を扱っていきます……が、必ずしもその機能の全てを使うわけではありません。そのため、今回はまず AXI のインタフェースをより少ない種類の信号で制御する、インタフェース変換回路を設計してみます。 なお、第4回~第5回で使用する回路の SystemVerilog 記述は、GitHub からダウンロードできるようにしています。今回取り上げる回路記述に対応するフ...
20Q3.07A

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

みなさんこんにちは。本シリーズ「 FPGA で作る暗号は危険 ? 」では、FPGA で暗号機能を実現する方法とその危険性を解説しています。 前回は共通鍵暗号として最も使用されている AES 暗号について、その動作と FPGA に実装する方法を解説しました。AES 暗号はデータの置換と排他的論理和 (XOR) のみで実現することができるので、処理を把握すれば FPGA 内に機能を実装することは比較的簡単です。 しかし、安易に FPGA に暗号機能を実装してしまうと「サイドチャネル攻撃...
20Q3.06B

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

FPGA 向けの真性乱数生成器 (TRNG) の設計法に関するコースの第3回です。今回は、前回に COSO 型、PLL 型の TRNG として紹介した、コヒーレントサンプリングを用いた TRNG やその利用のコツについて詳しく説明します。 なお、この記事で紹介する PLL 型の TRNG を Xilinx 社の最近の FPGA で扱う方法 についての詳細は、記事公開月の月末 (2020年11月) に開催される、日本発の計算機・ネットワーク関連の国際会議である CANDAR の PDAA...
20Q3.05B

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

前回は、MaxSAT の一種である Partial MaxSAT の定義、最大クリーク問題の Partial MaxSAT への変換、局所探索法に基づく Parital MaxSAT の発見的解法である Dist アルゴリズムについて述べました。 今回は、Dist の FPGA 実装に当たっての難点と、それを回避するためにどのようにアルゴリズムの簡略化を行ったかについて説明します。 Dist アルゴリズム 図1に、Dist アルゴリズムの全体像を再掲します (ステップ5 〜 ...
20Q3.04A

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

前回、FPGA は小人さんを流れ作業で働かせるという話をしました。第3回では、この「働かせる」という部分を掘り下げていきたいと思います。働かせるための指示書である CPU のプログラムとFPGA のそれがどう違うのかに迫っていきたいと思います。 CPU のプログラムって何? プログラムとは何でしょうか? 一般的には、やるべきことの順番を示したものですね。例えば、運動会のプログラムでは、1.入場行進、2.開会式、3.ラジオ体操、という具合です。コンピュータのプログラムも基本的に...
20Q3.03B

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

前回の記事では Vivado で Aurora 64B/66B コアを生成し、シミュレーションで動かしてみましたが、中身はブラックボックスでした。外からわかるのは、 シリアルトランシーバから信号が出始めるまでは時間がかかる (約4.5µs)リンクが確立されるまではさらに時間がかかる (約19µs)データを送受信するパラレルインタフェイスは、シリアルリンクのラインレートのクロックを分周したものになっている といったことです。もちろん、Aurora 64B/66B コアを使ってデータを...
20Q3.02A

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

目次 2. アーキテクチャの検討 2-1. FPGA 優位のデザインパターンと典型問題 ■ 高性能アーキテクチャの鉄則 ■ タスク “内” の並列性と課題 ■ タスク “間” の並列性と課題 ■ HLS-C で表現できないケース 2-2. 実装品質の限界まで求められるケースも 2-3. そもそもハードウェア化すべきなのか? Coffee Break. 最終形は 「ML+X」 over 「AIE+PL」 かも?...
20Q3.01B

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

この記事は、AXI を使ってプロセッサと連携する回路の設計例について説明するコースの第3回です。前回は、AXI-Lite で制御や少量のデータのやりとりを行うインタフェース回路について説明しました。今回は、AXI-Stream でテストパターンの動画像を生成する IP コアを作成し、これらを既存の IP コアと組み合わせて、HDMI 接続のディスプレイにテストパターンを表示させるシステムを構築します。 今回示すシステムは HDMI を扱うため、残念ながらその動作を ACRi ルームの検証...
タイトルとURLをコピーしました