ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

今日の進捗

長門パイプラインシステムがとりあえず動くようになった。

(add-load-path "../../src/" :relative)
(use npsv)

; initialize
(npsv-initialize! "npsv_top")

; instancation
(define inp (make-inmem-from-file "./setting/inmem.scm"))
(define sinrom (make-rom-from-file "./setting/sin.scm"))
(define outp (make-outmem-from-file  "./setting/outmem.scm"))

; wire connection
(connect inp sinrom)
(connect sinrom outp)

; output
(make-all-rtl "./output/rtl")
(make-initialize-file inp)
(make-top-testbench "./output/tb")
(make-dataflow)

こんな感じでschemeを書くとVerilogを出してくれる。

データフロー図では、データ入力用のメモリと、ROM引きのsin関数、データ出力用のメモリが接続されている。データ入力用のメモリとROMのアドレスが直結できないので変換のモジュールが自動的に入る。

f:id:natsutan:20151129155516p:plain

入力メモリに-4~+4までの値を入れて、sinを求めた結果

f:id:natsutan:20151129155823j:plain

それっぽい。

モジュール間のプロトコルは単純で、データの有効なときはvoがH、処理が終わったらfoがHになる。これを順番に渡していくと、最後のメモリに値が書き終わったときに、最後のfoがHで終了通知になる。

後は、加算とか行列計算とかのモジュールを必要な分だけ作っていけば、複雑な計算で必要な精度の試行錯誤が楽にできそう。