2012年3月25日日曜日

SPIコントローラの作成 2

RTL作成が一応完了したのでMicronのデバイスモデルを使ってSimulationを始めた。
RTLはspi_reg と spi_io の2 モジュール構成に分けた。 spi_ioが実際の通信を行うモジュールで、
spi_reg はCPUが読み書きするレジスタモジュールだ。
そのレジスタ仕様と各モジュールのRTLを以下に示す。




以下はSimulationの様子

N25QモデルにRDID (Read Identification) Commandを発行してみたところ。
ターミナル画面にモデルが出力したログとspiモジュールが受信したデータ(波形のr_rxd)が
一致しており、転送はうまく行っている。


以下はReadコマンド(Standard SPI)の場合


以下はDOFR (Dual Output Fast Read)とDIOFR(Dual Input/Output Fast Read)の場合
DOFRはリードデータ転送のみがDual (2線)で行われるのに対して、
DIOFRはリードアドレス転送もDualで行われるので若干時間が短縮できる。


以下はQOFR(Quad Output Fast Read)とQIOFR(Quad Input/Output Fast Read)の場合
ターミナル画面のほうでERRORが出ているがこれは、QIOFRの場合はDummy clock cycleを10
以上の設定にしなければならないのだが8のままにしているためだ。


以下はStandard SPIからQOFRまでを通しで実行した場合


動作的には問題なさそうなので、実機検証に移行しようかな。

2012年3月18日日曜日

SPIコントローラの作成 1

LX9 MicroBoardやAtlysでも使われているSPI Flash ROM(N25Q128)用のSPIコントローラの作成だが、この1週間程はN25Q128のデータシート読みをしていたのと、体調が今一だったため設計自体はあまり進められなかったが、なんとか土曜日からRTLのコーディングに着手した。 RTLはまず、Standard SPI, Dual I/O SPI, Quad I/O SPIモードを持つLowレベルのSPIコントローラの作成から行うことにした。 現状は以下のような感じになっている。 spi_ck部等はまだ概念的な記述だ。最終的にはODDRにするかも知れない。

2012年3月11日日曜日

FPGAの学習教材

YoutubeにはFPGA関連のVideoも多数投稿されていて、玉石混合といった感じだが、そのなかで有益そうなものを見つけた。

インドにNPTEL (National Programme on Technology Enhanced Larning) という組織があるようで日本でいうと放送大学に近いのかな? そこの講義ビデオが多数Youtubeに登録されていて、その中にはFPGAやVLSIデザインに関するものもある。内容はまさに大学の講義そのものといった感じでビデオ1本の時間は50分程度だ。 講義は英語で行われている。インドの学校のためか、冒頭お経のような音楽が流れてきて思わず脱力しそうになって面白い(ちょっと不謹慎かな。すみません。)
LSIやFPGA等のロジック回路設計・シミュレーション手法についてしっかり学習したい方は、こういうビデオで学習するのもいいと思う。 学校に入ったり留学したりしないでこういう海外の教育機関の講義を無料で受講できるのだから、良い時代になったものだ。

Youtubeに投稿されていてFPGAやSimulationに関するものとしては以下が目に止まった。

Lecture 24 - Simulation of Combinational Circuits
http://www.youtube.com/watch?v=44gv1K44G3c&feature=relmfu

Lecture 25 Simulation of Combinational Circuits and Sequenti
http://www.youtube.com/watch?v=zwFv7y6ubOE&feature=relmfu

Lecture 26 - Analysis of Waveforms Using Modelsim
http://www.youtube.com/watch?v=9DEpnrsM9d0&feature=relmfu

Lecture 27 - Analysis of Waveforms Using Modelsim(Contd)
http://www.youtube.com/watch?v=KZCq_6ixl8k&feature=relmfu

講義ビデオはNPTELのサイトでも公開されていて(ダウンロードまでできるみたいだ)、
上記コースの全シリーズは以下のURLで見ることができる。


VLSI Circuits
http://nptel.iitm.ac.in/video.php?subjectId=117106092

でも、上記URLはインドの方々が優先されるべきだと個人的には思うので、日本人はYoutubeを見るべきかも知れない。




2012年3月6日火曜日

next theme

次のテーマを何にするか考えていたのだが、LX9 MicroBoardやAtlysでも使われているSPI Flash ROM用のSPIコントローラを作ることにした。
このROMは128MBitのN25Q128というデバイスで元々はNumonyx製だが、この会社はMicronに買収されたようで今現在はMicronのサイトからデータシート等を入手できる。また、MicronだけあってVerilogのSimulation Modelも入手できる。

http://www.micron.com/parts/nor-flash/serial-nor-flash/n25q128a11b1240e?source=ps&q=N25Q12

このROMは通常のSPIモード以外にExtended SPI, Dual I/O, Quad I/Oプロトコルに対応していて、クロックは最大108MHzなのでスループットは最大432MB/secにもなるようだ。

かなり高機能なデバイスのようでデータシートは82ページもある。
全てのモードをサポートするつもりは無いが高速に読み書きしたい(要はFPGAデータの更新を短時間に済ませたい)ので、何とかQuad I/Oに対応したコントローラを作ってみたい。
Simulation Modelもあるのでこれも活用しつつ、実機デバッグはLX9 MicroBoardはFunction Generatorで使ってしまったので、久しぶりにDigilentのAtlysボードでやろうと思っている。

2012年3月2日金曜日

FT232RのBit Bang Mode

FT232RというUSB-UART変換ICがある。このICにはBit Bang Modeという機能があって、UART用の端子がGPIO的制御が可能になる。  FT232Rを搭載したUSB-UART変換基板は秋月電子やマルツパーツ等色んなところで売られていて私もSparkfunのFTDI Basicを1つ持っている。 また、Internetで検索するとBit Bang Modeを利用したJTAG プログラマの情報等も幾つか見ることができる。 私もいつかjwrtでFT232Rを対応してみたいと考えていたのだが、今般、やってみた。

Hardwareは以下のように、FRISKの箱に入れた。




Spartan3E基板で動作確認しているところ


Bit Bang ModeにはAsynchronous ModeとSynchronous Modeがあるが、 プログラムはSynchronous Modeを使っている。 ただし、読み出しはFT_ReadではなくFT_GetBitModeで行っている。 FT_Readが上手く使えればいいのだが、私の使い方ではFT_GetBitModeよりもLatencyが大きくなってしまう。 以下のプログラムでRead Latencyを評価した。



Synchronous ModeはWriteに同期してReadが行われるので、FT_Writeの後にFT_Readを実行して、1バイトのデータがリードできるかを、FT_SetTimeoutsのタイムアウト値を変えながら見てみた。
リードのタイムアウト値が1msecの場合は以下のようになった。


少しずつ増やしてみたが、結局70msecでまともにリードできた。


ということは、つまり、FT_Readを使った場合少なくともRead Latencyは70msecを要するということだと思う。 FT_232Rは256深度のRX Buffer(FIFO)を持っているので、FT_Readを256個単位で実行するようにすれば、1個あたりのLatencyは小さくできるかも知れない。ただし、リードがライトと同期すること、そして、JTAGのTCKの波形をライトで作るので意味のあるリードデータは半分の128個になるので、良くて0.5msec位だろう。 また、jwrtの構造上、最大16bit分しかまとめ書きできないので、Latencyは4msec位にしかならないだろう。これに対してGetBitModeのLatencyは3msec程度でリードできているので、FT_GetBitModeを使うことにした。
しかし、何か腑に落ちないんだよねー。
もちっと高速にリード出来てもいい気がするんだよなー。

以下はSpartan3E 250Eに書き込んでみたところ。
な、なんと763secもかかっている。


以下はROM(xcf02s)に書き込んでみたところ。
1718sec!!


ちなみに、以下はプリンタポートにつなぐタイプの自作JTAGプログラマでXCF02Sに書き込んだ場合だ。


両者の比較
体積はおよそ30分の1、
性能は100分の1。。。だぁ~~ orz


という訳でFT232Rを使いこなすためには、もっと修行が必要なようだ。
でも、今はFT232Hというデバイスも出ているので、FT232Rで頑張るよりも
そっちを使った方が楽かも知れない。

TE0720 No.4 (BNN-PYNQを動かしてみる 2)

TE0720でBNN-PYNQを動かすことが出来た。 以下は前回に続いてBNN-PYNQが動くまでの記録。 gdb (GNU debugger)で例外が出る原因を調べてみた。 例外が発生しているのはシェアードライブラリ(python_hw-cnv-pynq.so)の中であ...