投稿者「miyo」のアーカイブ

ジグソーモデルな計算のHW実装,ことはじめ

ジグソーモデルは中野先生が提案された,ジグソーパズルを利用したメタモルフィズムの計算機構,です.

計算の途中の状態をジグソーパズルのピースに見立て,入力と時々の状態に対してうまく当てはまるようにピースを並べていけば計算が終わるという楽しい計算機構です.データの与えられ方によっては並列に計算できたり,入力が中途半端に与えられた状態でもできる部分から計算できたり,という特徴があります.

2013年のプログラミングシンポジウムで話を聞いたときに,HDLで書いてハードウェア化してみるのもいいかなーと思いながらも,なんとなく2016年の今日までそのままに…

とりあえずは最初の例題くらいは実装しておこうと,ふと試してみました.

続きを読む

シンプルなSynthesijer.Scalaの始め方(1)

activator(sbt)を使ったシンプルなSynthesijer.Scalaの始め方について紹介します.EclipseでScalaプラグインを使って開発する場合には,Synthesijer.Scalaを使ってみる(Eclipse編)も参照してください.

その前に

SynthesijerはJavaプログラム”を”同様な振る舞いをするVHDL/Verilog HDLに変換しますが,Synthesijer.ScalaはScala”で”RTLモジュール(最終的にはVHDLあるいはVerilog HDLで出力)を組み立てるツールです.クロックレベルでの制御,同時並行処理を記述できます.

準備

続きを読む

FPGAマガジンNo.11掲載記事のサンプル一式

FPGAマガジン No.11に掲載していただいた”Synthesijerを使ったFPGA上でのグラフィックス・プログラミング”という記事に使ったサンプル一式をアーカイブにまとめました.執筆当時くらいから,HDLライブラリのポート宣言方法などが変更になったため多少掲載コードと異なっています.

fpgamagazin10_demo.zip

サンプルでは,HDMI出力部分をXilinx XAPP495で紹介されているコードを利用していますので,手元で合成する場合には,あらかじめXAPP495関連リソースをダウンロードしておく必要があります.

ちなみに,グラフィクスの事例としては,

が,とても楽しく仕上げられています.

Synthesijer.Scalaでソーティングネットワークを書いてみる

※ kick,busyのクロック遅延が気に入らなかったので若干回路を変更しました(8/19)

ネットワークの構成は,もっともシンプルな構成のひとつである,最大の要素を一番下に落としていくというタイプの実装です. ソーティングネットワーク(Wikipedia)で”バブルソートにあたる”と紹介されているもの,です.

構成要素の実装からはじめて,ネットワークの組み立て部分を紹介していきます.最後にコードの全容を掲載しています.

プリミティブ

ネットワークを構成するプリミティブは,2つの入力を受け取り,小さいほうを上に,大きいほうを下に出力する,というコンポーネントです.

Synthesijer.Scalaで書くとこんな感じです.

// プリミティブを生成するメソッド
// a, bはハードウェア世界の演算要素のインスタンス
def prim_net(a:ExprItem, b:ExprItem):(ExprItem, ExprItem) = {
  val s0, s1 = signal(32) // 新しいsignal(ハードウェア世界の変数)を生成する
  s0 := ?(a > b, b, a) // S0には小さい方を接続
  s1 := ?(a > b, a, b) // S1には大きい方を接続
  return (s0, s1)
}

signal(32)で32bitの信号(VHDLでいうsignal,Verilog HDLでいうwireかreg)をつくり,それぞれに比較器の出力を接続しています.メソッド自体の返り値は,ソート結果が格納された信号インスタンスのペアです.

続きを読む

Synthesijer@高位合成友の会

たばたさんと共同で主催させてもらった,高位合成友の会でSynthesijerについて発表させていただきました.

たばたさんのneon light compiler,高前田先生@NAISTのPyCoRAMの話も大変面白く開発意欲がかき立てられた一日になりました.

さて,スライドでも紹介した演算のチェイニングを早くリリースできるよう実装すすめないと.