Xilinx ISE、EDIF、そしてLisp!
今日はニッチな所でblog書く。
素人がSICPの4章で驚くのは、なんといっても入力された文字列がいつの間にかListになっていること。最初の一歩の面倒なところを(read)一発で変換できているのが凄い。もしかして、(read)でEDIF読み込めない?と思ってやってみた履歴。
まず、準備としてISE環境でのedifの作り方。ngc2edifコマンドを使う。昔作ったshallotで試してみる。こういうとき、一つでも自分で作った回路があると便利だ。ISEで合成しngcまで作る。その後にこのコマンド。
> ngc2edif shallot.ngc
で、shallot.ndfが作られる。拡張子はndfだけど中身は立派なedif。テキストエディタで見てみよう。
やっていく過程で、びっくりするような低レベルなバグ発見。Verilogの中で普通に<=と=が混在している。クオータスの合成ツールって、ブロッキングとノンブロッキング代入の混在を見逃すのか?→後で書く or 誰か書いて(web 2.0的他力本願)
どきどきしながら、今できたファイルを読み込む。
(define input-port
(open-input-file "d:/home/study/SICP/edif/shallot.ndf"))
(define shallot-edf (read input-port))
で、変数 shallot-edfに作ったままのedifが入っている!Wikipediaによると、「これは見かけはプログラム言語LISPに似ている。」との事だが、似ているんじゃない、S式そのものだ。
後は、適当にアクセスの手続きを用意する。
;;edifのバージョンを取得
(define edif-version
(lambda (edif)
(edif-scan 'edifVersion (edif-inner-list edif))))
::edfiのStatusを取得
(define edif-Status
(lambda (edif)
(edif-scan 'status (edif-inner-list edif))))
;;edifのレベルを取得
(define edif-Level
(lambda (edif)
(edif-scan 'edifLevel (edif-inner-list edif))))
;;検索失敗の試験
(define edif-fail
(lambda (edif)
(edif-scan 'edifFail (edif-inner-list edif))))
(define edif-inner-list
(lambda (edif)
(cdr (cdr shallot-edf))))
(define edif-tag
(lambda (parameter)
(car parameter)))
(define edif-scan
(lambda (keyword edif-list)
(if (null? edif-list)
'fail
(let ((parameter (car edif-list)))
(if (eq? keyword (edif-tag parameter))
parameter
(edif-scan keyword (cdr edif-list)))))))
gaucheで実行
(edif-version shallot-edf)
gosh> (edifVersion 2 0 0)
(edif-Level shallot-edf)
gosh> (edifLevel 0)
(edif-Status shallot-edf)
gosh> (status (written (timestamp 2007 9 5 11 29 49) (program "Xilinx ngc2edif" (version "J.33")) (author "Xilinx. Inc ") (comment "This EDIF netlist is to be used within supported synthesis tools") (comment "for determining resource/timing estimates of the design component") (comment "represented by this netlist.") (comment "Command line: shallot.ngc ")))
キタコレ!
5分くらいでここまで出来たぜ。
普通に読めるということは、頑張れば修正もできるし、新しく書けるって事だ。1からedif作ってHDLを経由しない俺様合成ツールを作るもよし、内部ノード引き出しツールを作ってもよし、FPGAシミュレータ作ってもよし。広がれ妄想!
The comments to this entry are closed.
Comments