ブックマーク / ryuz.hatenablog.com (13)

  • FPGAプログラミングとは - Ryuz's tech blog

    はじめに 今更と言うところはあるのですが、FPGAプログラミングを知らない人に説明する機会も増えてきたので少し記事にしておきます。 FPGA とは 昔電子工作したときに撮影した写真が出てきたので張っておきますが、いわゆるこんなやつです。 こんなやつです タイプはいろいろあって、小さいものから大きなものまで。写真のように裏にI/Oピンなどの端子が並んでいるBGAタイプのものもあれば、周りにピンが生えているQFPタイプなどいろいろありますが、まあ見た目はCPUなどと同じで、中に入っている半導体シリコンがパッケージに収まっています。 とはいえ実際に使う時は、例えば私なんかは下記などをよく使うわけですが、パソコンのCPU同様に、冷却機構に隠れて直接は見えなかったりすることもあります(剝き出しで使う事も多いですが)。なのでとにかく電気的が端子がいっぱい出ているものという事だけ知っておいてください。

    FPGAプログラミングとは - Ryuz's tech blog
    zu2
    zu2 2024/10/01
  • FPGAは1命令を繰り返すVLIWプロセッサ? - Ryuz's tech blog

    ちょっとしたジョーク的な駄文ですが、ふと思いついたのでメモしておきます。 こちらで少し、RTLプログラミングを普通の逐次処理型のプログラミングモデルと比較したりしていましたが、ふと「 FPGA って実はとてもたくさんの命令をパッキングした、たった1命令を繰り返し実行している VLEW(Very Long Instruction Word)プロセッサと言えるのでは?」 と思いいたってブログにしている次第です。 今時の FPGA は、内部に FF も LUT も 何万個も持っており、DSPやDRAMだって数百とか数千持っていたりしますが、すべてクロックに合わせて毎サイクルプログラムされた通りに計算を行います。 なので、 レジスタはFF数が足りる限り任意長のものを好きな数だけ定義できる(r0~r31までの汎用レジスタなんてケチなことは言わない) 演算リソースが足りる限り何千という命令を一度に実行

    FPGAは1命令を繰り返すVLIWプロセッサ? - Ryuz's tech blog
    zu2
    zu2 2024/10/01
  • GPGPUのメモリアーキテクチャついて考えてみる - Ryuz's tech blog

    GDDR について もともとGPGPUGPUであり、GPUはグラフィックスボードであります。 グラフィックスボードは、DVIとかHDMIとかDisplayPort を備え、60fps などで毎フレーム画像を生成&出力するものですが、そうするとゲームなどではその fps に対して、例えば 60fps であれば 16.6ms の時間で読みだせる分量だけのテクスチャなどを絵作りに使えることになります。昨今ではマルチパスレンダリングも当たり前に行われていますので、1枚の絵を作るためにメモリ上での描画作業は何度も繰り返されます。 つまり1枚の絵を、より高精細で複雑にしようとするととにもかくにも大量のバス帯域が無いとはじまりません。 逆に、1フレーム時間で読みだせない容量があっても、それは別のシーンの描画の為の準備的なデータを置いておくことにしか使えませんので、やはり容量より帯域が優先されがちです。

    GPGPUのメモリアーキテクチャついて考えてみる - Ryuz's tech blog
    zu2
    zu2 2024/10/01
  • 非ノイマン型について再考してみる - Ryuz's tech blog

    はじめに なんとなくお散歩中に考えていたことを先ほどとめどなく X にツイートしていたのですが、少しまとめておきたく、久々にブログに書いておこうと思います。 私が今Xの固定ツイートにしている下記のデモ試作のアーキテクチャを題材に、非ノイマン型についての話が少し書ければと思います。 www.youtube.com 以前に書いたこちらのブログ記事とも関連してきます。 今のアーキテクチャとノイマン型の比較 FPGAでの実装をタイミングチャートでみる 今回の題材の実際のFPGAへの実装と、大雑把な時系列での処理は下記のようになります。 FPGAでの実装 使っている IMX219 イメージセンサの MIPI-CSI は 1,824 Mbps で RAW10 を読みだすので、182.4MHz 以上で毎サイクル1ピクセルずつを演算できるだけのスループットを持てば処理できます。 したがってデータの帯域とし

    非ノイマン型について再考してみる - Ryuz's tech blog
    zu2
    zu2 2024/10/01
  • RISC-Vもどきのバレルプロセッサ作ってみた - Ryuz's tech blog

    はじめに だいぶ前に、RISC-V もどきの最小セットを作って遊んでいましたが、今回はその延長でもう少し遊んでみました。 動機としては レジスタファイルの構成に LUTRAM や BlockRAM を使うのだから、レジスタ32個だけじゃもったいない 複数スレッド動かすならパイプラインストール気にせずにパイプライン深くして周波数上げちゃえ という話で、分岐予測の類の工夫は何もないまま、やみくもにパイプラインだけ深くするお馬鹿実装となっています。 例によって割り込みも無ければ、乗算器も除算器もない RV32I のコンパイラが流用できる最小セットになっています。 元々組み込みでコントローラとして使う分には、割り込みや例外は基的にコンテキストスイッチの為にあるので、レジスタをスレッド数や割り込みハンドラの数だけ持って、ハードウェアスレッドをやるなら不要じゃないかという大胆な割り切りもあります。

    RISC-Vもどきのバレルプロセッサ作ってみた - Ryuz's tech blog
    zu2
    zu2 2024/10/01
  • 1bit計算機についての妄想 - Ryuz's tech blog

    はじめに 先日、Youtube でこんな動画を見かけて、そのなかで加算器などの演算器がいくつか出てきました。 youtu.be 計算機黎明期の演算資源が貴重だった時代のお話と思いますが、今のテクノロジーでやろうとしたらどうなるんだろう? という妄想をしてみたいと思います。 回路構成の想像 動画に出てくる構成は非同期かもしれませんが、今FPGAで再現するなら恐らくこんな感じじゃないかと想像しています。 回路の想像図 データがLSBファースト(つまりリトルエンディアン)で 1bit づつ送られてくれば、毎サイクル2進数の一桁ずつ計算して、繰り上がりもキャリーとして計算していけば計算できますね。 この回路は例えば現代の 64bit 加算器に比べて、キャリールックアヘッドなどの機構が不要な事を考えると、恐らく1/64 の規模で構成可能ですし、クロック周波数もかなり上げやすいんじゃないかと思います。

    1bit計算機についての妄想 - Ryuz's tech blog
    zu2
    zu2 2024/09/27
  • クロスバースイッチの規模考察 - Ryuz's tech blog

    はじめに 今日は、最近のプロセッサをウォッチしている中での素人の妄想を書いてみます。 プロセッサの性能と規模の法則としてポラックの法則というものがあります。 これは簡単に言うとプロセッサの性能を2倍、3倍、4倍にするには、プロセッサに適用するトランジスタの数を4倍、9倍、16倍に増やしていかないといけないというものです。 半導体の微細化が進んでムーアの法則でプロセッサに使えるトランジスタ数が増えていっても、プロセッサがさほど高性能化しないことをよく表している法則に思います。 ポラックの法則はまだシングルプロセッサが周波数競争をしていた時代からあった法則ですが、現在の周波数が頭打ちして並列度を上げていくしかない状況においてもある程度理にかなった法則な気がしています。 この要因の1つにNが増えたときに対角線がNの二乗で増えていくという、安直な話が深く関連しているのではないかと考えてみました。

    クロスバースイッチの規模考察 - Ryuz's tech blog
    zu2
    zu2 2024/09/27
  • SIMD/SIMTとMIMDと - Ryuz's tech blog

    はじめに 先日Rustのイテレータでの処理順序関連してこんな記事を書きました。 加えて最近少し Elixir を調べていて、Enum, Stream, Flow などの処理を興味深く見ております。 そこで、ALU(arithmetic Logic Unit)視点から見た2種類の計算機のデータ処理パターンを再考しておきたいと思います。 今回、少し大胆ですが、SIMD(Single Instruction Multiple Data)とSIMT(Single Instruction Multiple Thread)は複数のALUが同時に同じ演算を実装するという点で同じカテゴリとし、別々の計算を行うものとしてMIMD(Multiple Instruction Multiple Data)を置いておきます。 SIMD/SIMT は複数のALUに対して命令デコーダが共通ですので少ないハードウェアリソ

    SIMD/SIMTとMIMDと - Ryuz's tech blog
    zu2
    zu2 2024/09/27
  • データ並列とパイプライン並列 - Ryuz's tech blog

    はじめに FPGAなどでデータ処理をする場合、その並列性を活かして高性能な処理をするという事はしばし求められることです。 その際にしばし使われるデータ並列とパイプライン並列を整理しておきたいと思います。 データ並列と言うと、AVX-2 のような SIMD(Single Instruction Multiple Data) や GPGPU のような SIMT(Single Instruction Multiple Threads) などでお馴染みかと思います。 一方でパイプライン並列は Verilog など RTL言語で FPGA等を開発する方々と違い、C言語などでプログラミングする方々にはあまりなじみが無い可能性もあるかと思います。 そこで少し具体例を元にこれらを見直してみたいと思います。 少し具体的な例を考えてみる 当にこんな処理を行う事があるかどうかは一旦置いておいて、画像データに対

    データ並列とパイプライン並列 - Ryuz's tech blog
    zu2
    zu2 2024/09/27
  • FPGAでのレジスタファイル - Ryuz's tech blog

    はじめに だいぶ以前、最小限の RISC-V 命令だけ実装して遊んだときに下記のようなレジスタファイルを作りました。 後でいろいろパラメータ変えて計測しようと思いつつ完全に忘れていたので思い出したように実験です。 https://github.com/ryuz/jelly/blob/master/rtl/v2/jfive/jelly2_register_file.sv 下記が RISC-V 命令そのままの 書き込み1ポート/読み出し2ポートのレジスタファイルを構成したものです。 書き込み1ポート/読み込み2ポート 32bit×32 基的には Xilinx の RAM32X1D を活用する方向で作成しており、書き込みと読み出しのアドレスが同じ場合に新しい値を読むようにするなどのロジックを加えています。基的に LUTRAM がうまく活用できています。 これを拡張したら何が起こるのか備忘録程

    FPGAでのレジスタファイル - Ryuz's tech blog
    zu2
    zu2 2024/09/27
  • MN-Coreを素人考察してみる - Ryuz's tech blog

    はじめに 先般 MN-Ccore Challenge なるものが開催され、私もスキマ時間に気分転換的にちょこちょこ挑戦していたのですが(業関係者への言い訳)、とても面白いアーキテクチャだなと思いました(順位はまあその力及ばず微妙な感じでしたが)。 普段 FPGAプログラミングが多い私ですが、いろいろ新しい観点で脳に刺激を頂きました。 今更私なんかが考察する余地もない気はしますが、折角なのでプログラミングではなく、プロセッサアーキの方を少しだけ感想程度に記録しておければと思います。 いろいろ資料も公式に公開されていますし、コンテストも終わったようなので(実は終了日を勘違いしていました)、安心してあれこれと自分用の勉強の教材にして楽しませて頂きたいなと思います。 なお、ほんとに素人考察なので、あんまりマサカリは投げないでおいてあげてください(言い訳)。 どんな構成なのか 最初に「ソフトウェア

    MN-Coreを素人考察してみる - Ryuz's tech blog
    zu2
    zu2 2024/09/27
  • Verilog の演算時の幅拡張でしくじった話 - Ryuz's tech blog

    なにが起きたのか 下記のようなシーンで何やら Verilator が Operator NOT expects 5 bits on the LHS, but LHS's VARREF 'b' generates 4 bits. というワーニングを出してきた。 logic [3:0] a; logic [3:0] b; logic [4:0] c; assign c = a + ~b; 4bit同士の加算を5bit に入れるので何の問題も無かろうと思っていたら、問題ありありだったという話です。 どういうことか 下記のようなコードだと少しわかりやすいかと思います。 logic [3:0] a = '0; logic [3:0] b = '1; logic [4:0] c; initial begin c = a + ~b; $display("a + ~b : 0x%x", a + ~b);

    Verilog の演算時の幅拡張でしくじった話 - Ryuz's tech blog
    zu2
    zu2 2024/05/23
  • 回路図のお供に Pandas 便利そう - Ryuz's tech blog

    データプロセッシングのアクセラレータ―としてではなく、IoTデバイスとしてFPGAを使ったことのある方は Excel でピン配置表を作って VLOOKUP 関数で頑張った経験がある方も多いのではないでしょうか?(古い人だけかもしれんないですが)。 FPGAはマイコンと違って、プログラムから操作できるピンが圧倒的に上に、ピンごとに用途が決まっているわけではなく汎用性が極めて高いため、表で管理しないとやってられなくなります。 また、興味の範囲が FPGA に収まり切れずに KiCAD なんかで基板を作り始めちゃう人は、いろんな部品のデータシートとにらめっこしながら、こちらもピン配置表を作りつつ部品のライブラリを作ったりしていることでしょう。 回路図はネットリストになりますので、ネットリストを Python とかのスクリプトで解析して、ピン配置表を作るなんてことも出来てしまいます。 で、話は F

    回路図のお供に Pandas 便利そう - Ryuz's tech blog
    zu2
    zu2 2023/01/20
  • 1