FC2カウンター FPGAの部屋 2006年12月

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

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

110000アクセス

Access_110000_061231.png

FPGAの部屋のアクセスカウンタが00110000になりました。初めて自分で切の良い数字をゲットできました。今年はいろいろありましたが、来年は良いことがあるかもしれません。
皆様いろいろありがとうございました。
  1. 2006年12月31日 05:28 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

支那そば一麺豊里店

今日は奥さんが仕事で、子供達は奥さんの実家の餅付きに送っていったので一人で過ごした。
なかなか骨折のリハビリにも行けていないので午前中医者に行ってリハビリしてきた。
お昼には支那そば一麺豊里店に行ってきた。以前一麺本店には行ってなかなか塩ラーメンがおいしかったので、チェーン店の豊里店にも行ってみたかったのだ。ちなみにと豊里店のほうが家に断然近い。
塩ラーメンはというと透明なスープ(当たり前か?)に焦がしにんにくスライス、支那竹、チャーシューの上に水菜の切ったものが載っている。なかなか上品な味で好みである。ただ味は一麺本店のほうが塩辛かった気がした。私は支那そば一麺豊里店の薄味のほうが好きだ。今度は下妻のドラゴンか円屋に行きたい。
  1. 2006年12月30日 22:35 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

日経エレクトロニクスの組み込み速習キットが届いた

nikkei_R8C_061230.jpg

日経エレクトロニクスの組み込み速習キットが12月28日に届きました。
私はマイコンはPSoC以外あまり興味がないのでとりあえず放ってありますが、リアルてタイムOSが載るようになったらやってもいいかな?とも思っています。でも何をさせるかが問題ですね。とりあえずやらせたいことがないです。本誌のトラブルシュートが面白そうなので読んでみようと思っています。
(読んでみましたが本当に初歩的なことで面白くなかったです。)
書くものも書かないといけないしVerilogも勉強したいですが、こういうときは現実逃避してしまうんですよね。

皆さんいつも見ていただいてありがとうございます。来年もどうぞよろしくお願いいたします。来年はVirtex-5も試してみたいと思っています。(基板はありませんが。。。)

  1. 2006年12月30日 11:38 |
  2. マイコン関連
  3. | トラックバック:0
  4. | コメント:4

あるパソコンでのPCIマスタアクセス波形

PCI_Master_Accesss_061228.png

図の波形はXeonプロセッサのパソコンのPCI66MHz,64bitボードからパソコンのメモリへPCIマスタリードしたときのChipscope波形だ。Tの赤い線のところでREQを出し初めている。ピンクの丸のところでSTOPをアサートして5回分リトライしてから緑の丸のところでデータ転送をしている。
レイテンシは約45クロック×15ns=約675nsだ。こんなものなんだろう。このチップセットはリードのレイテンシは長いがバースト時のスループットは大きいようだ。
もう少し説明するとPCIカード側がREQを出してからGNTが来るのを待ちPCIバスがbusyでなくなったらFRAMEをアサートしてリードを始める。IRDYをアサートしてチップセット側からTRDYがアサートされたらリード完了だがSTOPがアサートされたらデータが用意されていないのでデータ転送しないままアクセスを終了する。(この場合は)その後PCIカード側がもう一度REQを出してリトライする。それが5回繰り返されている。その次のアクセスはチップセット(パソコンCPU)からのPCIターゲットアクセスだ。その後のPCIマスタアクセスでFRAMEをアサートしてリードを始めた後IRDYをアサートした時にチップセットがTRDYを返したのでリードが成立してデータが読めている。

ちなみにこれはChipscope Proで波形を観察している。pcix_ad_inとか書いてあるが、まだPCI66MHz,64bitである。
このようにChipscopeは信号をまとめてバスとして16進で表示することもできる。
やり方は信号を複数選択して右クリックし、"Add to Bus"から"New Bus"を選択するとWaveウインドウの左側にバスになって表示される。それをWaveウインドウにドラック&ドロップするとバスとして見ることができる。
Chipscope_bus_061228.png

  1. 2006年12月28日 18:05 |
  2. PCI
  3. | トラックバック:0
  4. | コメント:0

QuartusⅡでのピン割り当ての見方

最近AlteraのFPGAはあまり使っていない。1チップMSXを買ったら使っただろうが買わなかったのでXilinxのみしか使っていない。
今回は諸事情からQuartusⅡを使って見たけどRTL ViewerもXilinxのより洗練されている気がする。使ってみてもいいかなと思っている。
QuartusⅡでのピン割り当ての見方だが、まずはStratixⅡのプロジェクトを作る。
QuartusⅡのFileメニューから"New Project Wizadr..."を選択する。今開いているプロジェクトを閉じても良いか聞いてくるダイアログが開くので”はい(Y)"ボタンをクリック。
Quartus2_1_061226.png

New Project Wizard : Introductionダイアログが開く。”Next>"ボタンをクリック。
Quartus2_2_061226.png

"New Project Wizard: Directory. Name. Top-Level Entry [page 1 of5]"ダイアログが開く。ダイアログの"What is the working directory for this project?"で右の"..."ボタンをクリックしてフォルダを選択する。
Quartus2_3_061226.png

Select Directoryダイアログが開くので、右のアイコンから”新しいフォルダの作成”を選ぶ。QuartusはISEと違ってプロジェクト作ってもフォルダは作ってくれないようなのでフォルダを新しく作る。
Quartus2_4_061226.png

”新しいフォルダ”が出来るので名前を"Stratix2_test"に変更して"Stratix2_test"フォルダをダブルクリックして開く。
Quartus2_5_061226.png

"Stratix2_test"フォルダで”開く”ボタンをクリックすると、"New Project Wizard: Directory. Name. Top-Level Entry [page 1 of5]"ダイアログに戻る。"What is the working directory for this project?"にお目当てのフォルダ名が入っている。
Quartus2_6_061226.png

"What is the name of this project?"にプロジェクト名を入れる。ここでは"stratix2_test"と入れると下のフィールドにも同じ名前が入る。ここは終了なので"Next>"をクリック。
Quartus2_8_061226.png

"New Project Wizard: Add Files [page 2 of 5]"ダイアログが開く。特にHDLのフィアルを指定しなければ"Next>"ボタンをクリック。
Quartus2_9_061226.png

"New Project Wizard: Family & Device Settings [page 3 of 5]"ダイアログが開く。Famliyリストボックスから"Stratix Ⅱ"を選択すると”Available devices"リストにStratix Ⅱデバイスがリストされる。WebエディションなのでEP2S15F672が最大なのでこれを選択し、"Next>"ボタンをクリック。
Quartus2_10_061226.png

"New Project Wizard: EDA Tool Settings [page 4 of 5]"ダイアログが表示される。設定する項目がないので"Next>"をクリック。(本当にQuartusでプロジェクトを作るならば"EDA simulation tool:"にModelSimを設定したほうが良いと思う)
Quartus2_11_061226.png

"New Project Wizard: Summary [page 5 of 5]"ダイアログが開くので"Finish"ボタンをクリック。
Quartus2_12_061226.png

そうするとStratixⅡのプロジェクトが出来る。""Assignments"メニューから"Pins"を選択する。
Quartus2_13_061226.png

そうするとPin PlannerとしてFPGAチップのTop Viewが表示される。
Quartus2_14_061226.png

更に"View"メニューから"Pin Legend Window"を選択する。
Quartus2_15_061226.png

Pin Legendが表示されどのマークがどのピンに対応しているかの対応表が表示される。
Quartus2_16_061226.png

これでAltera社のPin Informationに書いてあるのと同様のFPGAのピン配置表が得られる。ただこれはWebエディションだとインストールされていない大きなFPGAのピン配置表は見られないという欠点がある。
  1. 2006年12月26日 12:23 |
  2. QuartusⅡ
  3. | トラックバック:0
  4. | コメント:2

Wiiを購入

今日はトイザらス荒川沖店でWiiとDS Liteを売り出すというので、朝7時20分に家を出て朝8時頃トイザラスについた。入り口から列がずっと駐車場のはずれのほうまで続いていて並ぼうとしたのだがWiiは売り切れだといわれてしまった。(DS Liteはまだあったそうだ)残念。Wiiは234台だったかな?入荷したそうだ。列の先頭は昨日から並んでいるそうだ。がっくりしてかえる。
だが天はわれを見放さなかった。11月25日に予約しておいたワンダーグーから10時頃Wiiが入りましたとの電話が入った。やった。早速受け取りに行く。
午後からセッティング。開けてみるととても小さい。パソコンの外付けDVDドライブくらい。早速つないで見てみる。起動した。
はじめてのWiiパックとWii Sportsはアマゾンからすでに購入済だったのでとりあえず、はじめてのWiiをやる。なかなかリモコン操作性がいい。振り回す動作に対する追従性がいいと思う。ビリヤード面白い。実際にやるのに近い形でできるのが良い。
Wii Sportsもテニスなどリアルだと思った。テニスやっていたが実際やっているのに近い。ゴルフも良い。ボクシングは子供はやっているが私は1ラウンド持たずにダウン。体力が足りない。
やはりWiiはとても面白いと思った。子供は今のところ夢中だ。
無線LANも暗号キーを入れたら簡単につながった。Wiiニュースがサービス開始していないので見えなかったのが淋しい。ショッピングも出来るようだ。ゲームもダウンロードできるのかな?
Wii_061223.jpg

  1. 2006年12月23日 21:04 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:10

DCMを使わないクロックを使いIOB内のFFでデータを受ける

IOBの入力用FFを活用する”でDCMを使わないクロックを使いIOB内のFFでデータを受けた。その結果、クロックの遅延のほうが大きくなったのでセットアップ時間は-0.944nsとマイナスになってしまった。下にFPGA Editorでのlvds_rx_clkからBUFGMUXまでの配線とIOB内の配線、Timing Analyzerのタイミング解析結果を示す。(使用しているFPGAはVirtex-2proです)
clk_FPGA_Editor_3_061220.png

clk_timing_ana_4_061220.png

”IOBの入力用FFを活用する”でDCMを使わないクロックを使いIOB内のFFでデータを受けた。その結果、クロックの遅延のほうが大きくなったのでセットアップ時間は-0.944nsとマイナスになってしまった。下にFPGA Editorでのlvds_rx_clkからBUFGMUXまでの配線とIOB内の配線、Timing Analyzerのタイミング解析結果を示す。
clk_FPGA_Editor_3_061220.png

clk_timing_ana_4_061220.png

ホールド時間は足りているはずだがプラスの値に戻そうと思った。そこで以前は余計物と思ったIOB内の遅延素子をONにすることにした。前回はディフォルトで入っていたものだ。IOB内の配線とTiming Analyzerのタイミング解析結果を示す。
clk_FPGA_Editor_3_061220.png



これではセットアップ時間の規格を満足しないのでクロックを遅延して辻褄を合わせることにする。”クロックを遅延する方法”を参考にして受信クロックに遅延を挿入した。LUT3プリミティブではINIT値が不正だとSynplify ProにけられたのでBUFプリミティブを挿入した。VHDL記述を下に示す。(Synplify Proで論理合成した場合)

attribute syn_keep : string;
attribute syn_keep of clk_node: signal is "ture";
attribute syn_keep of clk_delay_1: signal is "true";
attribute syn_keep of clk_delay_2: signal is "true";
attribute syn_keep of clk_delay_3: signal is "true"; 

..........................

    ibufg_inst1 : ibufg port map(
        i => lvds_rx_clk,
        o => rxclk_ibuf
    );
    
    clk_node <= rxclk_ibuf;
    delay1 : buf
        port map(
            o => clk_delay_1,
            i => clk_node
        );
    delay2 : buf
        port map(
            o => clk_delay_2,
            i => clk_delay_1
        );
    delay3 : buf
        port map(
            o => clk_delay_3,
            i => clk_delay_2
        );
        
    bufg_in : bufg port map(
        i => clk_delay_3,
        o => rxclkfb
    );


このVHDL記述を追加してインプリメントするとBUFプリミティブが入っていなかった。Synplify Proに制約ファイルを出力するオプションをつけてもだめだった。それでUCFにネットをKEEPするようにKEEP制約を追加した。

NET "clk_delay_1" KEEP;
NET "clk_delay_2" KEEP;
NET "clk_delay_3" KEEP;


これでクロックにBUFプリミティブを入れて遅延されられるようになった。下にFPGA Editorで見たBUFプリミティブの様子とTiming Analyzerでのタイミング解析結果を示す。
clk_delay_FPGA_Editor_1_061220.png

clk_delay_timing_ana_2_061220.png

これでセットアップ時間は0.439nsになったので多少FPGAの遅延時間が違っていても大丈夫だろう。
なお、clk_delay_1はIOBの中に統合されてしまったようで外のスライスにはアサインされなかった。(KEEP制約でKEEPしたのはネットなのでclk_delay_1ネットはIOBからの出力ネットとして存在する)
大体ワーストケースの遅延時間はあるがベストケースの値はマニュアルに書いていない。
  1. 2006年12月21日 12:56 |
  2. FPGAチップ内の配線方法
  3. | トラックバック:0
  4. | コメント:0

Partitionの設定

”Xilinxのウェブセミナで書いた”モジュールごとのパーティションの設定について書いてみようと思う。
プロジェクトは”スパルタン3EスターターキットのLCD表示回路5”で使用したスパルタン3EスターターキットのLCD表示回路を使用する。
プロジェクトを開いてinstrom.vhd(instrom_inst)にパーティションを設定する。PicoBlazeのプログラムだけを変えたときにそこだけ変更してくれれば良いと思ったからである。instrom.vhdを右クリックしてメニューを出し、その中から"New Partition"をクリック。
partition_1_061220.png

そうするとinstrom.vhdのアイコンの横にオレンジ色の循環している矢印がついた新たなアイコンがつく。TOPのVHDLファイルTest_LCD4HexDisp.vhdにもチップの上にオレンジ色の循環している矢印がついた新たなアイコンがつく。
partition_2_061220.png

通常のコンパイルと一緒にProcessesペインでGenerate Programming Fileをダブルクリックしてbitファイルまで生成する。そうすると緑チェックのついたアイコンに変わる。これでインプリメントできたようだ。
partition_4_061220.png

次にinstrom.vhdをほんの少し変更する。コメントをちょっと減らすだけでも良い。
そうするとinstrom.vhdのアイコンだけがオレンジ色の循環している矢印がついたアイコンの状態に戻るので、再度ProcessesペインでGenerate Programming Fileをダブルクリックしてbitファイルまで生成する。そうするとパーティションを設定したinstrom.vhdだけ変更して論理合成インプリメントしてくれる予定だ。これでインプリメントが速くなると良いけど。。。
partition_5_061220.png

更にDesign SummaryのFPGA Design SummaryのDetailed Reportsの各ReportsにPartionのReportが出てくる。例えばSynthesis Reportはこんな感じ。
partition_6_061220.png

最後にPartitionをinstrom.vhdに設定しない時と最初に設定したとき、instrom.vhdだけを変更してそこだけを論理合成する場合の時間をXSTレポートから見てみる。

partitionなしXST 18秒
partitionありXST 25秒
partition設定しVHDLの変更のときのXST 22秒


というわけでPartitionを設定しないほうが論理合成が速いようだ。サンプルが小さいファイルなので有効性は確認できないようだ。オーバーヘッドのほうが大きくなっているのであろう。それにinstrom.vhdはPlcoBlazeのアセンブラが出力するプログラムを初期化で入れたBRAMだけインスタンスしてある特殊なファイルだし。それだけにプログラムを書き換えたときに速くなるとうれしいのだが、もっと大きなプロジェクトで試してみなくてはだめなようだ。
実は最初にDDR SDRAMコントローラのプロジェクトでPartitionを確かめてみようと思ったがプロジェクトにDDRレジスタが入っていると怒られてPartitionを設定できないようだった。DDRレジスタが入っている.vhdファイルにPartitionを設定していなくてもだめだったのでプロジェクトにDDRレジスタが入ってるデザインがあったらだめなのか?
もっと大きなプロジェクトで試してみたいが大きいのはほとんどSynplify Proのプロジェクトなので"New Partition"がハイドされて選択できないようだ。後でXSTに変えてやってみようと思う。

本当にXilinxのISEは人知れず(みんな知っているのかな?)機能が追加されていて探検するのが興味深いツールだと思う。
  1. 2006年12月20日 22:03 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:4

Xilinxのウェブセミナ

今日Xilinx社からメールが来て”Virtex-5 LXT 65nm FPGA のご紹介”のウェブセミナということで早速聴講した。
PCI Expressのエンドポイントの設定などについて興味深く拝聴した。
聞き終わってセミナー一覧を見ると”ISE8.2iはじめの一歩”のセミナもあったのでついでに聞いた。
その際にXilinxのWebサイトにクイックスタートチュートリアルを使用していたようだ。クイックスタートチュートリアルはあるのは知っていたが更に”ザイリンクス ISEアドバンス チュートリアル”もあることに気がついた。これはパーティションを設定してインプリメントする方法も書いてあるようだ。暇があるときにやってみようと思う。いろいろ面白そうだ。日本語だし。。。
"ザイリンクス ISEアドバンス チュートリアル”を一部引用します。
”パーティションは論理デザインのインスタンスに設定し、そのインスタンスのインプリメンテーションを可能な限り再利用するよう指定します。”
  1. 2006年12月18日 17:20 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:2

息子の回復

11月24日に退院した息子だが、最初は匍匐前進だが足を使わず手だけで床を這って歩いていたがだんだんと足も使えるようになり、次には赤ちゃんの這い這いが出来るようになった。
そしてだんだんと立てるようになり、いまでは家の中ではだいぶ立って歩けるようになって来た。家の外では不安もあって松葉杖なのだが。。。
この前家族全員ですし屋に行くことが出来たので、昨日は私と息子と下の娘でラーメン屋で昼食にしようと行ってみたが、ラーメン屋につくと息子が腰が痛くなったということで入れなかった。やはり精神的に他の人がいるラーメン屋にいけなかったのじゃないだろうか?家族全員での回転寿司はまだ敷居が低かったのかもしれない?
それでも夕方には奥さんの実家に家族全員で行った。息子もいとこが来るので行きたいと言っていた。やはり気心が知れていれば一緒に遊びたいし大丈夫なようだ。
まだ息子は学校には行っていない。まだ行きたくないようだ。一番トラウマが深いのかもしれない。今は病院の先生から学校の話は禁止とのお達しが出ている。だんだんと良くなってきたので病院の先生からもだんだんと学校の話が出てくると思うが、やはり徐々に慣らしていかないと症状が逆戻りしてしまうのだろう。親もだんだんと良くなっているのでそのうち学校にいけるだろうと思っている。あせりは禁物のようだ。それでも目覚ましく回復し歩けるようになって本当に良かった。
  1. 2006年12月18日 06:22 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

10万アクセス

million_access_061216.png

ブログ”FPGAの部屋”も2006年6月4日にカウンタを設置してから今日で10万アクセスを超えた。皆様ありがとうございます。私が見たときは100072アクセスだった。
最近はツールの話題は大体やりつくした感がある。後はChipscopeのやり方などかな?

DDR SDRAMコントローラのVerilog変換については大分進んできた。Verilog HDLも論理合成する記述だったらVHDLと同様に書けるようになって来た。Verilogのモジュールもアルファベット順に作ってきて今は上のスナップショットを見てもらうとわかるようにread_data_module.vを作っている。今のところどちらかの言語が書きづらいということはなくVHDL、Verilog両方とも問題なく書けるようだ。全部変換したら今度はVerilog独自にテストベンチを書いてみたい。

将来的なことになるがPCI-Xのモジュールを独自に作ることになるだろうと思う。PCIよりセットアップ時間は楽になるが、アトリビュートフェーズがあるし、特に4バーストに満たないデータ転送の処理をどうしようかと思っている。どのように構成するかが思案のしどころだ。

まだ風邪が治らず今日は鼻が詰まって体がだるい。頭が動かないのでVerilog変換等のあまり頭を使わないことしか出来ない。だるいので今日は一日だらだらして過ごそう。
  1. 2006年12月16日 10:01 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:2

続:SDRAM動作不良

”SDRAM動作不良”で書いたとおりに小さい基板のうち3枚のうち2枚がSDRAMの書き読みで1bit間違ってしまうという不具合があった。業者に送って調べてもらったところダンピング抵抗用の抵抗アレイで隣同士がショートしていたようだ。
そのうちの一枚は更にPowerPCのコア電圧用DC-DCコンバータの電圧を決定する抵抗が実装不良でオープンになっていた。PowerPCが動作しないのでコア電圧を測ったら1.3Vのはずが0.8Vになっていたのでわかったのだった。
他のところの実装は大丈夫だろうか?これでは他のところも怪しいだろう。そのつもりでチェックしなければ。。。

DWMの1月号を見ていたら表面実装品の半田付けの特集があった”チップ部品はんだ不良の原因とその処方せん”やはりここに書いてあったのと同様に電極両端のはんだのぬれがアンバランスでチップ立ちしてしまったのかな?そんなに浮いているようには見えなかったのだが。。。
  1. 2006年12月14日 16:40 |
  2. プリント基板の作成過程
  3. | トラックバック:0
  4. | コメント:0

風邪を引いてしまった

昨日から鼻が詰まって鼻水が出る。夜寝ているときには完全に鼻が詰まっているので口で呼吸をしているためマスクをして寝ている。
どうも12月頭の頃からノロウイルス、足の指の骨折とついていない。
今日は耳鼻科に行ってこないと、とても苦しい。皆さんもご注意ください。
仕事のほうもこのような状況ではかどらない。
新たにPSoCを使ったお仕事が来るかもしれない。
広い周波数範囲でAM変調したいということなのでPSoCで出来るかどうか前に買った私物を持って行って確かめてみる予定。
  1. 2006年12月14日 06:11 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:3

Kicad

アイン1977さんの2006年11月26日付けのブログKicadでKicadを知った。Eagleみたいな回路図CAD+基板CADらしい。ガーバー出力もあるし、ガーバーデータViewerもある。更にOrcad回路図からの変換ツールが付いているようだ。(まだ試してはいない) 無料(GPL)で16層までいけるようだ。
今日ちょっとチュートリアルをやってみたが面白そうだった。ただUNDOがないのがちょっと気になる。UNDELETEはあるのだが。。。
私はあまりOrcadで回路図を書いたこともないので評価はできないが、ちょっと使ってみようかと思っている。まずはOrcadの回路図を変換してみたい。
  1. 2006年12月11日 19:36 |
  2. CADツール
  3. | トラックバック:0
  4. | コメント:2

Aurora

今月号のDWMにはAurora活用チュートリアルが載っていた。AuroraはXilinxのRocketIOを使った無料の通信用IPだ。
私も2年ほど前に評価したことがある。ModelSimで対向にしてシミュレーションしてVirtex2proに試しにインプリメントしてみた。対向にしてシミュレーションした時に入力してから反対側に出力するまでのレイテンシが思っていたよりも長かったような気がする。
確かやってみたのは4LaneでLane Widthは2だったので合計8バイト幅の入出力データ幅だったと思う。RocketIOの動作周波数は3.125GHz、8B10Bエンコードで1Lane当たり2.5Gbpsだったと思う。(2年前なので記憶があいまい)
ModelSimはSWIFTインターフェースを使えないといけないのでSEを使った。Xilinxのアンサー”ModelSim (SE、PE)、6.2i SmartModel/SWIFT インターフェイス - ModelSim で MGT および PPC の SmartModel を使用する方法”を見ながらModelSimの$MODEL_TECH ディレクトリの modelsim.iniファイルを修正してシミュレーションすることが出来た。(結局Auroraは使っていないけど。。。懐かしい)
  1. 2006年12月11日 19:23 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:6

新しい基板のことを発表

新しい基板を作ったことを3月に発表することになった。作ったといってもパターン設計、伝送線路シミュレーション、基板作成、部品実装は業者に依頼したので、発表するのは基板の概略、部品選定、回路設計、伝送線路シミュレーションの結果による波形の改善とかになると思う。
大体聞いてくれる人は素人の人が多いので発表ではプリント基板とは何かから説明しないといけないと思うので、たいしたことはしゃべれないと思う。結局”仕事一生懸命してますよ”というアピールになる予定。その代わり原稿は気合を入れて書こうと思っている。
一応予稿はかけたが本稿はまだ下書き段階で少ししか書いていない。DDR SDRAMコントローラのVerilog変換版が出来てからやろうと思っている。
お仕事の方は少ない頻度でLVDSの通信エラーが出ている。今のところDCMでCLKFXを使ったDCMのカスケード接続でLVDS ICに供給するクロックを作っているので、そこのジッタが問題なのではないかと思っている。ローレベルでDCMをカスケードしたときとしない時の通信エラーの出方を比較する予定。
  1. 2006年12月09日 06:37 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Spartan-3A スタータ キット

XilinxからのメールでSpartan-3A スタータ キットが2007年前半に出るそうだ。大体Spartan-3E スタータ キットと同様だがDDR SDRAMがDDR2 SDRAMになっていて、4,096色の15 ピンVGAコネクタケーブル?ということなので8色ではなくなっているようだ。
FPGAの上下に2つのコネクタがあるのでこの間にドーターカードが付くのだろう。Digilentから発売されるのだろうか?日本の会社から手軽に買えればいいのだが。。。
Spartan-3AはIOBの入力用遅延素子の内、IOBの外のFFを使うIBUF_DELAY_VALUEが動的に変えられるようになっているようだ。Spartan-3Eは”Spartan3Eの入力用プログラマブル遅延素子””Spartan-3Eの入力用プログラマブル遅延素子2”で書いたように値を設定すると回路など動的に変更できない。更にSpartan-3Aは遅延素子のタップが増えているそうだ。(増えているというよりSpartan-3Eのバグが修正されたということかもしれないが。。。)
これならばDDR2 SDRAMも割と楽につながるかもしれない。ちょっとやってみたい気がする。本当はVirtex4のボードをいじってみたいがなかなか個人的に買えない。(でもWiiは予約してしまった) 今度買うか、もしかして本当に近くの方で持っている方は少し貸していただけるとうれしいんだけども。。。でも壊したらまずいし借りないほうが良いか。。。
とりあえず今やっていることが終わったらDDR SDRAMコントローラもVirtex4用に書いてみたい。ISERDESとOSERDESを使えば良いのかな?
やはりVirtex4はVirtex2からかなりFPGA内部が変わっているので使ってみたい。Virtex5もやってみたいな。。。
  1. 2006年12月06日 22:38 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:4

LUT使用率97%

昨日は実験だったのだが、今度の実験の担当の先生と話しているとFPGAの話になった。
その先生はとにかく速度やFPGAのリソース使用率を上げるためにLUT(Look Up Table)を常に意識したVerilogの記述をしているそうだ。FPGA内のローカル配線やグローバル配線なども意識してVerilogを書いているそうだ。LUTの使用率97%ぐらいはいけるとのことだった。98%にしようとすると失敗するといっていた。凄いびっくり。
組み合わせ回路もalways文やfunction文など使わないでLUTを意識した論理記号で書いているようだった。究極のスピードとLUT使用率を実現するために。
凄すぎてちょっと私にはついていけない感じ。デバイス専用のHDL記述になってしまうのでIPとして再利用は出来なくなる。
性能を追求するためにここまでしているのかと感心した。
  1. 2006年12月05日 05:31 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:4

DDR SDRAMコントローラをVHDLからVerilog2001へ書き換える3

”DDR SDRAMコントローラをVHDLからVerilog2001へ書き換える3”では`default_nettype noneについて書いてみたい。
私はデータ型宣言のあいまいな言語はあまり好きではない。それはデバックでなかなかバグがわからずに痛い目にあっているからでもある。Verilog-1995は改定 入門Verilog HDL記述によるとデータ型の宣言を行わないネットはディフォルトでwire型になったそうだ。Verilog2001では`default_nettype <データ型>でディフォルトのデータ型を指定できるそうである。<データ型>にnoneを指定するとデータ型の宣言を省略した時にエラーとすることが出来るそうだ。
結果としてmoduleのinput信号もwire宣言しないとエラーになるようだ。
module addr_fifoの宣言はこうなった。

`default_nettype none
`timescale 1ns / 1ps

module addr_fifo(clk, reset, din, read_write, wr_en, rd_en, dout, rw_out, full, empty, next_dout, next_rw_out, almost_empty, almost_full);
    `include "../ddr_parameters_synth.vh"

    input clk, reset;
    input [USER_INPUT_ADDRESS_WIDTH-1:0] din;
    input read_write;
    input wr_en, rd_en;
    output [USER_INPUT_ADDRESS_WIDTH-1:0] dout;
    output rw_out;
    output full, empty;
    output [USER_INPUT_ADDRESS_WIDTH-1:0] next_dout;
    output next_rw_out, almost_empty, almost_full;

    wire clk, reset;
    wire [USER_INPUT_ADDRESS_WIDTH-1:0] din;
    wire read_write;
    wire wr_en, rd_en;
        
    wire [USER_INPUT_ADDRESS_WIDTH-1:0] dout;
    wire rw_out;
    wire full;
    wire empty;
    wire [USER_INPUT_ADDRESS_WIDTH-1:0] next_dout;
    wire next_rw_out, almost_empty, almost_full;

  1. 2006年12月03日 14:03 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:0

DDR SDRAMコントローラをVHDLからVerilog2001へ書き換える2

”DDR SDRAMコントローラをVHDLからVerilog2001へ書き換える2”ではgenerate文のVHDLとVerilogの違いについて書こうと思う。
VHDLでLUTを使用したDual Port RAMのRAM16X1Dプリミティブをアドレス幅だけインスタンスを作る方法を下に示す。

    FIFO_GEN : for i in USER_INPUT_ADDRESS_WIDTH-1 downto 0 generate
        RAM16_INST : RAM16X1D port map(
            DPO => out_sig(i),
            SPO => open,
            A0 => wp(0),
            A1 => wp(1),
            A2 => wp(2),
            A3 => wp(3),
            D => din(i),
            DPRA0 => rp(0),
            DPRA1 => rp(1),
            DPRA2 => rp(2),
            DPRA3 => rp(3),
            WCLK => clk,
            WE => we
        );
    end generate FIFO_GEN;


Verilog2001で書くとこうなるのではないだろうか?

    generate
    genvar i;
        for (i=USER_INPUT_ADDRESS_WIDTH-1; i>=0; i=i-1) begin: ADDR_FIFO_RAM
            RAM16X1D #(
                .INIT(16'h0000) // Initial contents of RAM
            ) RAM16_INST (
                .DPO(out_sig[i]),
                .SPO(),
                .A0(wp[0]),
                .A1(wp[1]),
                .A2(wp[2]),
                .A3(wp[3]),
                .D(din[i]),
                .DPRA0(rp[0]),
                .DPRA1(rp[1]),
                .DPRA2(rp[2]),
                .DPRA3(rp[3]),
                .WCLK(clk),
                .WE(we)
            );
        end
    endgenerate


一応、ModelSimでコンパイルは通っているがelaborateの時にエラーが出るかもしれないし、どのようになるかもわからない。それは全部出来てSimulationするときのお楽しみとしたい。

2006.01.17:追記 generateの中のbeginの後にラベル名(ADDR_FIFO_RAM)が必要なようだ。ModelSimではなくても通るがISEのXST(論理合成ツール)ではラベルがないと通らないようだ。
  1. 2006年12月03日 13:05 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:0

DDR SDRAMコントローラをVHDLからVerilog2001へ書き換える1

Verilogの勉強としてSpartan3E Starter KitのDDR SDRAMコントローラをVHDLからVerilog2001へ書き換えてみることにした。VerilogにすればMicron社のDDR SDRAMモデルも使うことが出来る。(VerilogのモデルはWebサイトにあるから)
VHDLで書いたファイルは”DDR SDRAMコントローラのシミュレーション(FMFライブラリを作る)”からたどることが出来る。
Verilogで書くに当たっての条件は下の通りだ。
1.VHDLでPackage文で書いていた各VHDLファイルで使用していたデータバス幅などの定義はVerilogでも別ファイルにしたい。これは`includeで大丈夫か?
2.Verilog2001で書きたい。generate等が使えないといやだ。
3.`default_nettype noneを定義して、データ型の宣言のチェックを厳密にする。

1.のVHDLでのPackageはこのように書いてある。(一部)


library ieee;
use ieee.std_logic_1164.all;

package ddr_controller_pack is
    constant DDR_ADDRESS_WIDTH : integer := 13;
    constant DDR_COLUMN_ADDRESS_WIDTH : integer := 10;
    constant USER_INPUT_ADDRESS_WIDTH : integer := DDR_ADDRESS_WIDTH + DDR_COLUMN_ADDRESS_WIDTH + 2;
    constant MAX_REFRESH_COUNT_LENGTH : integer := 6;
    constant MAX_REFRESH_COUNT : std_logic_vector(MAX_REFRESH_COUNT_LENGTH-1 downto 0) := "110000"; -- 48


このPackageをVHDLファイルの先頭でLibrary宣言してUSEで使用を宣言している。

library work;
use work.ddr_controller_pack.all;

entity addr_fifo is
    port(
        clk : in std_logic;
        reset : in std_logic;
        din : in std_logic_vector(USER_INPUT_ADDRESS_WIDTH-1 downto 0);


このように入力ポートや出力ポートのデータ幅にCONSTANT値を使用している。このようにVerilogでも書きたい。Verilogではparameterか`defineで同様に書けるようだということがわかった。これを別ファイルにして呼びたいので`includeを使うことにした。それでparameterか`defineのどっちを使うかだが`defineで定義すると`INPUT_VALのように文字列に`をつけなければならないようなので止めてparameterで行くことにした。(でも多分`defineで定義しなければだめなのもあることだろう)
VHDLの論理合成用パッケージddr_controller_pack_synth.vhdに相当するVerilogの環境設定値インクルードファイルをddr_parameters_synth.vhとした。.vhとしたのはDDR SDRAMモデルをMicronからダウンロードした際にDDR SDRAMパラメータが書いてあったファイル名がddr_parameters.vhだったから、これでいいのかなと思ったわけだ。ISEでインプリするときにどうなのかはまだわからない。とりあえずModelSimでシミュレーションすることを目指そうと思う。
ddr_parameters_synth.vhの一部を下に示す。

    parameter DDR_ADDRESS_WIDTH = 13;
    parameter DDR_COLUMN_ADDRESS_WIDTH = 10;
    parameter USER_INPUT_ADDRESS_WIDTH = DDR_ADDRESS_WIDTH + DDR_COLUMN_ADDRESS_WIDTH + 2;

    parameter MAX_REFRESH_COUNT_LENGTH = 6;
    parameter MAX_REFRESH_COUNT = 6'b110000; // 48 MAX_REFRESH_COUNTは、DDR SDRAMのクロックを16分周したク


このddr_parameters_synth.vhをインクルードする位置をC言語と同様に最初にしたのだがModelSimでコンパイルするとエラーが出てだめだった。

`include "../ddr_parameters_synth.vh"

module addr_fifo(clk, reset, din, read_write, wr_en, rd_en, dout, rw_out, full, empty, next_dout, next_rw_out, almost_empty, almost_full);


ここでインクルードするとparameterで書いてあるのでだめだと思いmodule宣言の後に書くことにした。

module addr_fifo(clk, reset, din, read_write, wr_en, rd_en, dout, rw_out, full, empty, next_dout, next_rw_out, almost_empty, almost_full);
`include "../ddr_parameters_synth.vh"


こうすると無事にコンパイルできた。
`defineで書くと多分最初にインクルードしても大丈夫なのだろう。コンパイラでは`includeの位置に読み込んできたファイルを展開するだけだと思われる。

Verilogに詳しい方、ここは違うとか、こうすると良いとか指摘してください。よろしくお願いします。

足の骨の骨折は今のところあまり痛くないので良かった。でも皮膚の色は変色していていかにも折れていますと主張しているようだ。
  1. 2006年12月03日 08:43 |
  2. 入門Verilog
  3. | トラックバック:1
  4. | コメント:0

2006年5月からのブログのアクセス数

11月のアクセス数は19,113アクセスだった。2万アクセスにもう少しだった。こんなに沢山の方に私のブログを見てもらえてうれしい気持ちだ。ありがとうございます。
2006年5月からの月別アクセス数をグラフにしてみた。大体平均してアクセスがあるようだ。
blog_access_061202.png


今まではおもにVHDLで回路を記述していたが、今後はなるべくVerilog2001に乗り換えようと思っている。やはりVerilogの下位モジュールの信号値を見られるところやシミュレーションの記述に惹かれている。CQ出版社の改定 入門Verilog HDL記述によると、いままでのVerilogは宣言しないネットはディフォルトでwireになったようだが、Verilog2001だと`default_nettype none
を宣言すると宣言しないネットがあるとエラーが出るようだ。このように大分Verilog2001は使いやすくなっている。generateもあるし、always @ *も使えるので、これで書いてみようと思う。ということを前も書いたと思うが、今度こそ本格的に書いてみようと思う。
  1. 2006年12月02日 09:11 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

右足の小指の骨が折れた

CRTディスプレイを足に落として右足の小指の骨が折れてしまった。
どうしよう来週はPSoC® World Tourなのに行けそうもない。今週はどうにもついていない。

この機会にVerilogの勉強をすることにする。
どうやらModelSim SEではVerilogのテストベンチからVHDLの回路のインスタンスは見ることが出来ないようだ。<VHDLの回路のインスタンス>.<信号名>でアクセスことが出来なかった。Start Simulationでエラーになってしまう。
  1. 2006年12月01日 17:17 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:4