FPGAの部屋

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ご利用ください。 http://marsee101.web.fc2.com/index.html

2010年07月

Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路4(Verilogコーディング中)”の続き

CMOSカメラ・ディスプレイ回路のコーディングも終了し、OV7640のモデルをVerilogで作ったので、シミュレーションを行っている。DDR2 SDRAMのモデルはいつものMicron社のモデルを使用している。Veritakでシミュレーションを行っている。
VeritakのScope Tree Viewダイアログを見ると、テストベンチ(CamDispCntrler_DDR2_tb.v) の下に、CMOSカメラ・ディスプレイ回路(CamDispCntrler_DDR2.v) とCMOSカメラのモデル(OV7670) 、DDR2 SDRAMのモデル(MT47H16M16_inst) が入っているのが見えると思う。
7fd463a9.png


シミュレーションしているところを下図に示す。
a53cc997.png


今はシミュレーションで接続されていない信号を修正したりしている段階だ。この回路のシミュレーションは面倒だ。
DDR2 SDRAMは133.33MHz, 7.5nsec で動作していて、CMOSカメラの1フレームは16.7msec とタイムスケールが違いすぎるのが問題だと思う。かなり長くシミュレーションする必要がある。
まだ、Camere ControllerがDDR2 SDRAMにデータを書いていないので、VGA_Display_Controllerで受け取るデータはXになってしまう。
もしくはモデルを修正して、なるべく早くデータを書き込める用に修正するかな?検討してみよう。

XilinxのダウンロードページにISE Design Suite 12.2が出ています。アップデートではなく、フルインストールみたいです。Alteraと同じようになったんですね。 (勘違い、以前からそうでしたね。)まだ、ダウンロードしていませんが、後でダウンロードしてみようと思います。
34a76c6d.jpg


(追加)
ダウンロードしました。インストール中です。
インストール終了して、起動してみましたが、Application VersionがM.63cになっている(ISE12.1はM.53d)のが、新しいですが、ISE12.1と変わらない外観です。インプリメントしてみた結果も変化がありません。(Spartan-3Aで小さい回路ですが)
PlanAheadも外観は変わらないです。今のところ違いがわかりませんが、Partial Reconfiguration に対応しているはずですよね?そのうちに、機能を確かめてみたいと思います。
もしかして、ModelSim XEⅢは無くなってしまったのでしょうか?Xilinxのデザインツールのページそのキャッシュ。キャッシュの右真ん中のロジックデザインツールにリアル タイムのオンチップ検証 ModelSim Xilinx Edition-III (MXE-III) の項目があったのですが、現在のページにはないです。
(また追記)
12.1用のModelSim XEⅢはここにありました12.2用はまだ出ていないだけなのかもしれません。マイナーアップデートの時には、出ないそうです。
#でも、ModelSim XEのライブラリ・アップデートはあっても良い気がしますが?今後に期待します。

(2010/07/29:追記)
astrayさんに教えていただいたのですが、今日Xilinx社のダウンロードのページにModelSim XEのライブラリが追加されていました。astaryさん、ありがとうございました。

いやー、暑い夏ですね。。。日曜日にエアコンなしで過ごしていたら、マジにクラクラして熱中症になりそうになりました。室温は約36度でした。皆さんはいかがお過ごしですか?暑いのでご注意ください

さて、Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路もインプリメンテーション用のVerilogファイルは書き終えて、一応、XSTで論理合成はできるようになった。(熱中症になりそうになりながらも頑張りました)
40c57491.png


次はシミュレーション用のテストベンチを作成している。DDR2 SDRAMのモデルと以前作成してあったCMOSカメラのモデルを一部修正して使う予定だ。
私は、Notepad++を2つのビューにして左を見ながら右のビューを書いている。下の図のような感じでテストベンチを作っている。
0aa196ce.png


もっと便利にテストベンチを作れないかと思う。Project Navigatorからテストベンチをつくるとテンプレートを作ってくれるが、いまいち自分のスタイルではないので、簡易的には利用するが、どうもテストベンチを書くときは自分で書いてしまう。やはりSystemVerilogに移行したいが、XSTは対応していないな。。。

昨日、アマゾンに注文してあったFILCO Majestouchテンキーレス メカニカルキーボードUSB&PS2両対応 日本語91キー・かな印字あり Nキーロールオーバー 独CherryMX茶軸スイッチ ブラック FKBN91M/JBが届きました。
職場では、東プレ NG0100 REALFORCE91Uを使っています。最初はこの東プレのキーボードをアマゾンで注文したのですが、14,800円で買おうとすると、かなり待たされました。それで、キャンセルして、キーが軽いと評判がよく、しかも在庫のあるMajestouchの茶軸を注文しました。(キーがとても軽いのが好みです)
昨日来たのですが、東プレよりもカチャカチャ音はうるさい気がしますが、キーも軽く、こっちの方が好みかもしれません。REALFORCE91Uは可変荷重ですし、全部押し下げて使っていると少し重い気がします。長く入力していると人差し指と中指が特に疲れます。茶軸はみんな同じ軽さなので良い感じです。クリック感は余りありません。茶軸はクリック感があると説明にも書いてありましたが、余り感じません。クリック感はあまりすきじゃないので、とても気に入りました。買って良かったです。
60fb4556.jpg

ChipScope ProのVIOを使う1”と”ChipScope ProのVIOを使う2”で、ChipScopeのVIOを使って、アドレスを入力してデータをChipScope Analyzer上に表示する方法を書いた。
今回は、ChipScopeのVIOをtclスクリプトから制御して、プログラムでアドレスを連続に入力しながら、出力されたデータをファイルに書き出す方法を書こうと思う。使用したISEのバージョンは12.1。

今回、参照したマニュアルや文献は、最初に、”ChipScope Pro 12.1 ソフトウェアおよびコア ユーザー ガイド (英語版)"の171ページ、”ChipScope Engine Tcl Interface”と”ChipScope Engine Tcl interface”。日本語の情報は検索で出てこなかった。このブログがChipScope ProのVIOをtclで使う方法の最初の日本語の情報かも?

さて、tclスクリプトでのVIOを使うサンプルが、ISE12.1のインストールフォルダのXilinx\12.1\ISE_DS\ISE\cse\tcl の下にある。csevio_example1.tcl がそれだ。これを、ユーザーガイドに書いてあるように、コマンド・プロンプトから下のコマンドを入力すると起動できる。(Platform Cable USBなどのUSB接続のダウンロード・ケーブルの場合)

<XILINX_ISE_INSTALL>\bin\nt\xtclsh csevio_example1.tcl -usb


起動すると、FPGAのVIOのいろいろな情報が表示される。
このサンプルを元に、”ChipScope ProのVIOを使う1”と”ChipScope ProのVIOを使う2”で、使用したサンプルで、VIOでアドレスを回路に出力して、データを連続的に取得して、ファイルに書き出す。作るデータ・ファイルは、a.txt, h.txt, v.txt, d.txt。csevio_example1.tcl を参考にして、csevio_example1.tcl を書き換えて作ってあるため、全部を載せることは出来ない。
下に、書き換えたあたりのソースを示す(あくまでイメージとしてみてください。全ソースではないです)。

proc scanDevice {handle deviceIndex} {
...
    global str_a
    global str_h
    global str_v
    global str_d
...
    if {$deviceIndex == 0 } {
        # scanDeviceの前にa, h, v, dのデータを格納するファイルをオープンする
        set file_a [open a.txt w]
        set file_h [open h.txt w]
        set file_v [open v.txt w]
        set file_d [open d.txt w]
        
        set VIOSyncInputLimit 0x7f
        
        for {set VIOSyncInputVal 0} {$VIOSyncInputVal <= $VIOSyncInputLimit} {incr VIOSyncInputVal} {
...
            }
            puts $file_a $str_a
            puts $file_h $str_h
            puts $file_v $str_v
            puts $file_d $str_d
        }
            
        #file closed
        puts "File Closed"
        close $file_a
        close $file_h
        close $file_v
        close $file_d
    } else {
...
proc scanVIOCore { handle coreRef } {
    csevio_define_bus $handle $coreRef "status" $CSEVIO_SYNC_INPUT [list 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75]
    
    if {[lindex $coreRef 2] == 0} { # coreIndex
        csevio_define_bus $handle $coreRef "address" $CSEVIO_SYNC_OUTPUT [list 0 1 2 3 4 5 6]
        set str [format "%.2x" $VIOSyncInputVal]
        set outputTclArray(address) $str
        puts "outputTclArray(address) = $str"
        csevio_write_values $handle $coreRef outputTclArray
        after 100
    }
    csevio_read_values $handle $coreRef inputTclArray
    set str $inputTclArray(status.value)
    puts "VIOSyncInputVal = $VIOSyncInputVal"
    if {[lindex $coreRef 2] == 0} { # coreIndex    
        set str_a $str
    } elseif {[lindex $coreRef 2] == 1} { # coreIndex
        set str_h $str
    } elseif {[lindex $coreRef 2] == 2} { # coreIndex
        set str_v $str
    } elseif {[lindex $coreRef 2] == 3} { # coreIndex
        set str_d $str
    }
...


下に、このtclスクリプトを起動した時の表示を示す。
a38c729d.png


これで、a.txt, h.txt, v.txt, d.txtにデータが書き込まれた。ちなみにh.txtの最初の10行を下に示す。

021160A6D8191B84B5B
003B600E40022980A1F
0011C00348007780197
0008A001A4002B80092
0005A000F8001C8003E
00052000D800128002D
000420008C000D0002D
0001600034000400021
0000000008000080000
0000C00024000100005


ChipScopeのVIOをtclスクリプトから制御して、プログラムでアドレスを連続に入力しながら、出力されたデータをファイルに書き出すことができた。これで、いろいろとデータを便利に取得することができると思う。
#どうだろうか?情報が少なくて、1週間悩んだ、取って置きの情報を開示した(つもり)。もし使っていらっしゃる方がいらしたら、情報交換しましょう。と言うか、教えてください。

↑このページのトップヘ