FC2カウンター FPGAの部屋 2006年10月
fc2ブログ

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

FPGAの部屋

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

DDR SDRAMシミュレーションモデル

検索していたら、たまたまフリーのDDR SDRAMのシミュレーションモデルを置いてあるサイトに行き着いた。それはFree Model Foundryだ。
Spartan3E Starter KitのDDR SDRAM、MT46V16M16のVHDLモデルもある。これでDDR SDRAMコントローラのシミュレーションができるので、近々ModelSim単体でのシミュレーションのやり方もあわせて書こうかと思っている。
データシートがあるサイトの話に戻すと、ALL DATASHEET.COMDatasheetCatalog.comを便利に利用させてもらっている。トランジスタやダイオード、古いデータシートもあるのでとても便利だ。
  1. 2006年10月31日 12:59 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

つくばエキスポセンター

今日は一番下の娘の小学校のリクレーションでつくばエキスポセンターに行ってきた。高さ50mのH-Ⅱロケットが目印だ。私もロケットに興味がある。更にJAXAのロケットに関する展示物も2Fにある。これをゆっくり見たいのだが、いつも子供のお守りで来ているのでゆっくり見たことがない。
EXPO_center_1_061028.jpg

今日は最初にプラネタリウムを見た。結構凄い(のだろう)プラネタリウムがある。下の写真はその建物。
EXPO_center_2_061028.jpg

エキスポセンターに最初に入ったところに衛星の模型がある。海洋観測衛星もも1号だそうだ。
EXPO_center_3_061028.jpg

うちの子がお友達と駆けずり回っている隙に2階のJAXAのところで写真を撮ってきた。
最初はH-ⅡAロケットの3段目より上の断面を見ることが出来る模型。これは大きい。2メートル以上はあるか?
EXPO_center_4_061028.jpg

次に日本のロケットの系譜がわかる模型の展示物。
EXPO_center_5_061028.jpg

次に各国のロケット。及びシャトル。あまり詳しくないけど左から4番目は旧ソ連のエネルギア?
EXPO_center_6_061028.jpg

H-ⅡAなのかな?第1段目のロケットのエンジン模型とH-Ⅱ?ロケット。補助用固体ロケットの本数とトップのフェアリング形状が違うみたい。
EXPO_center_7_061028.jpg

お終いに船外活動用の宇宙服。ヘルメットのシールドに金メッキなので中が良く見えない。
EXPO_center_8_061028.jpg

子供が友達と遊んでいる間に写真だけ撮ったので、説明が読めずに良くわからない。かなりエキスポセンターには来ているのだが、子供のお守りばかりでゆっくり見たことがない。今度一人でじっくり見たいものだ。
つくばに来た方でロケットに興味がある方は一回見ると良いと思う。それともあまり興味はないのかな?
  1. 2006年10月28日 22:10 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

セミナー開催

今度、FPGAを使う研究の学生さんがいるのでXilix FPGAのセミナーをやろうと思っている。私も年なので若いもんに伝授しなくては!!!
最初はこのブログのカテゴリーのFPGAリテラシー及びチュートリアルをそのまま教材にしてやるか。。。ブログは新しいものから表示されるから、それは古い順にひっくり返してと。
その後は何かな?Virtex2を使うのでVirtex2の内部構造及び特徴とDDRレジスタの使い方、クロックバッファの使い方(BUFGMUX)かな。その辺でFPGAエディタを少し使って見せて。。。
次にUCFの書き方、制約エディタの使い方。PACEの使いかた。制約エディタで書けない制約を手動で書く。
その後、タイミングアナライザでタイミングをクローズする方法、FPGA Editorを本格的に使ってDelayなどを見る。タイミングアナライザからフロアプランナーとFPGA Editorをクロスプローブする。クリティカルパスだけ手動でいじってタイミングクローズする方法。
タイミングクローズする方法の2段目、タイミングクローズしやすいエリア制約のかけ方。エリア制約をしやすいように考えてHDLを書く方法。
RLOC制約、位置相対マクロの使い方。コマンドラインでのISEの使用方法。
こんなところだろうか?10回では終わりそうもない。とりあえずは最初の2項目かな?全部やってもわかんないだろうし。。。
1,2人ではもったいないのでY研からもやりたい人を呼んでこようかしら?でも人が多くなると時間の調整などで面倒だな。。。
  1. 2006年10月27日 22:21 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

ISE8.2iの日本語表示はまだあやしい

ISE8.2iの日本語表示機能はまだあやしいようだ。下の図がISE8.2iでDDR SDRAMコントローラのトップのVHDLを表示したものだピンクの枠で囲った部分が化けている。
ISE_editor_1_japanese_061027.png

peggyで表示してみる。この部分は下の図のピンクの枠で囲った日本語のはずなのだ。
ISE_editor_2_japanese_061027.png

ISE8.2iはまだバグが多いようだ。ISE8.3iがもし出るとしたらISE6.3iのように安定していると良いのだが。。。
  1. 2006年10月27日 05:31 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

ISE8.2iをコマンドラインから使う

以前ISE8.2iにするとTranslateでTCLエラーで落ちるプロジェクトがあるということを書いたが、やはり改善できないためコマンドラインから使用することにした。
コマンドラインとはWindowsの”スタート”(画面の右下にあるやつ)->”すべてのプログラム”->”アクセサリ”->”コマンドプロンプト”で入力するコマンドのことだ。
コマンドラインで実行するコマンドはISEのProcessesペインでの名称との対応表を示すと

・Synthesize - XST -> xst.exe
・Translate -> ngdbuild.exe
・Map -> map.exe
・Plase & Route -> par.exe
・Generate Programming File -> bitgen.exe


である。これらはXilinx ISEのインストールフォルダ\bin\ntの下にある。これらコマンドのオプションはXSTはXSTガイドの10:コマンド ライン モードに、その他は開発システム リファレンス ガイドに書いてある。結構コマンドラインで使うのは難しくオプションを選ぶのが大変だ。ISE8.2iにするとTranslateでTCLエラーで落ちるプロジェクトではMAP以下を実行できていないので無理だが、ISEのプロパティでお手軽に設定したほうが楽だ。今回の趣旨には沿わないが一度ISEで実行すると、どのようなコマンドを実行したかを見ることが出来る。それはProcessesペインの"Design Utilities"の中から"View Command Line Log File"をダブルクリックすると今まで実行したコマンドが右のペインに出る。
今回は以前のスパルタン3Eスタータキット用のDDR SDRAM Controllerで見てみることにする。
ISE_command_1_0610124.png

これをエディタにコピペしてそれをバッチファイルにする。(.bat)そのバッチファイルを実行すればインプリメントからbitファイルの生成まで実行することが出来る。

xst -ise "H:/HDL/FndtnISEWork/Spartan3E_starter_kit/DDRtest_org/DDRtest_synth/DDRtest_synth.ise" -intstyle ise -ifn DDRtest.xst -ofn DDRtest.syr
ngdbuild -ise "H:/HDL/FndtnISEWork/Spartan3E_starter_kit/DDRtest_org/DDRtest_synth/DDRtest_synth.ise" -intstyle ise -dd _ngo -nt timestamp -uc "DDRtest.ucf" -p xc3s500e-fg320-4 "DDRtest.ngc" DDRtest.ngd
map -ise "H:/HDL/FndtnISEWork/Spartan3E_starter_kit/DDRtest_org/DDRtest_synth/DDRtest_synth.ise" -intstyle ise -p xc3s500e-fg320-4 -cm area -pr b -k 4 -c 100 -o DDRtest_map.ncd DDRtest.ngd DDRtest.pcf
par -ise "H:/HDL/FndtnISEWork/Spartan3E_starter_kit/DDRtest_org/DDRtest_synth/DDRtest_synth.ise" -w -intstyle ise -ol std -t 1 DDRtest_map.ncd DDRtest.ncd DDRtest.pcf
trce -ise "H:/HDL/FndtnISEWork/Spartan3E_starter_kit/DDRtest_org/DDRtest_synth/DDRtest_synth.ise" -intstyle ise -e 3 -l 3 -s 4 -xml DDRtest DDRtest.ncd -o DDRtest.twr DDRtest.pcf -ucf DDRtest.ucf
bitgen -ise "H:/HDL/FndtnISEWork/Spartan3E_starter_kit/DDRtest_org/DDRtest_synth/DDRtest_synth.ise" -intstyle ise -f DDRtest.ut DDRtest.ncd


-ise "H:/HDL/FndtnISEWork/Spartan3E_starter_kit/DDRtest_org/DDRtest_synth/DDRtest_synth.ise"をつけておくとISEプロジェクトでチェックマークがつくようになるようだ。これを除くとISEプロジェクトでチェックマークは付かないようだ。純粋にコマンドラインで実行する場合にはこれはいらないと思う。
上のコマンドを見るといくつか設定ファイルがある。XSTのDDRtest.xstとDDRtest.syr、bitgenのDDRtest.utだ。
DDRtest.xstは下のようにXSTのオプションが書いてある。

set -tmpdir "./xst/projnav.tmp"
set -xsthdpdir "./xst"
run
-ifn DDRtest.prj
-ifmt mixed
-ofn DDRtest
-ofmt NGC
-p xc3s500e-4-fg320
-top DDRtest
-opt_mode Speed
-opt_level 1
-iuc NO
-lso DDRtest.lso
-keep_hierarchy NO
-rtlview Yes
-glob_opt AllClockNets
-read_cores YES
-write_timing_constraints NO
-cross_clock_analysis NO
-hierarchy_separator /
-bus_delimiter <>
-case maintain
-slice_utilization_ratio 100
-verilog2001 YES
-fsm_extract YES -fsm_encoding Auto
-safe_implementation No
-fsm_style lut
-ram_extract Yes
-ram_style Auto
-rom_extract Yes
-mux_style Auto
-decoder_extract YES
-priority_extract YES
-shreg_extract YES
-shift_extract YES
-xor_collapse YES
-rom_style Auto
-mux_extract YES
-resource_sharing YES
-mult_style auto
-iobuf YES
-max_fanout 500
-bufg 8
-register_duplication YES
-register_balancing No
-slice_packing YES
-optimize_primitives NO
-use_clock_enable Yes
-use_sync_set Yes
-use_sync_reset Yes
-iob auto
-equivalent_register_removal YES
-slice_utilization_ratio_maxmargin 5


ここで-ifn オプションはXSTのプロジェクトファイルだ。論理合成するファイルをリストしている。下に示す。

vhdl work "../swdiv.vhd"
vhdl work "../ROTSW_SM.vhd"
vhdl work "../LCD_Display_pack.vhd"
vhdl work "../LCDOPESM.vhd"
vhdl work "../IN4HEXSM.vhd"
vhdl work "../rot_enc_cont.vhd"
vhdl work "../kcpsm3.vhd"
vhdl work "../input_4hex_val.vhd"
vhdl work "../ddr_controller_ono/ddr_controller_pack_syn.vhd"
vhdl work "../ddr_controller_ono/REFREQSM.vhd"
vhdl work "../LCD_operation.vhd"
vhdl work "../INSTROM.VHD"
vhdl work "../input_4hex_top.vhd"
vhdl work "../ddr_controller_ono/write_data_module.vhd"
vhdl work "../ddr_controller_ono/wrdata_fifo.vhd"
vhdl work "../ddr_controller_ono/read_data_module.vhd"
vhdl work "../ddr_controller_ono/rddata_fifo.vhd"
vhdl work "../ddr_controller_ono/dcm_module.vhd"
vhdl work "../ddr_controller_ono/controller.vhd"
vhdl work "../ddr_controller_ono/addr_fifo.vhd"
vhdl work "../LCD4HexDisp.vhd"
vhdl work "../ddr_controller_ono/ddr_sdram_cont.vhd"
vhdl work "../Test_LCD4HexDisp.vhd"
verilog work "dcm100.v"
vhdl work "../DDRtest.vhd"


次にDDRtest.utはbitgenのオプションが書いてあるファイルだ。

-w
-g DebugBitstream:No
-g Binary:no
-g CRC:Enable
-g ConfigRate:1
-g ProgPin:PullUp
-g DonePin:PullUp
-g TckPin:PullUp
-g TdiPin:PullUp
-g TdoPin:PullUp
-g TmsPin:PullUp
-g UnusedPin:PullDown
-g UserID:0xFFFFFFFF
-g DCMShutdown:Disable
-g StartUpClk:CClk
-g DONE_cycle:4
-g GTS_cycle:5
-g GWE_cycle:6
-g LCK_cycle:NoWait
-g Security:None
-g DonePipe:No
-g DriveDone:No


こうしてコマンドラインからコマンドを起動することが出来る。いろいろわかっていればバッチファイルを作っていろいろ便利に使えるらしい。そこまではしていないが、ISE8.2iではプロジェクトナビゲータが使えないようなのでバッチファイルを整備して使えるようにしなければならないようだ。プロジェクトナビゲータが使えればそっちのほうが考えなしに使えていいのだが。。。
  1. 2006年10月24日 22:30 |
  2. その他のXilinxのツールについて
  3. | トラックバック:0
  4. | コメント:0

日経エレクトロニクスの付録

日経エレクトロニクスにも付録がつくようだ。日経エレクトロニクスと一緒にパンフレットが送られてきた。
CQの2番煎じという気がしないわけでもないが、CQのより基板が大きくてたくさん部品がついている。USBコネクタも実装されているので電源もここから取れるのだろう。
マイコンはレネサスの16ビット・フラッシュ・マイコンR8C/Tinyシリーズだそうだ。名前は組み込み速修キットで1月1日号について来るそうだ。キットの構成を下に書く。

NEオリジナル開発ボード
・レネサスの16ビット・フラッシュ・マイコンR8C/Tinyシリーズ(R8C/25グループ)を搭載
・プログラム用フラッシュ32Kバイト
・データ用フラッシュ1Kバイト×2
・タクトス・イッチ×2
・LED×2
・USBインターフェース(miniUSB Bタイプコネクタ)

CD-ROM
・統合開発環境 High-peformance Embedded Workshop 無償評価版
・リアルタイムOS Smalightなど収録

ガイドブック
・このキットの使い方を解説するテキスト


MAX3232をつけられるようになっているので、つければRS-232Cも使えるようだ。
あまりマイコンには興味はないのだがリアルタイムOSは試してみたいと思っている。楽しみだ。
nikkei_board_061023.jpg

最近の日経エレクトロニクスは分解記事とか、面白い記事が多くなってきたので読むのが楽しみだ。ソニーの最新ビデオカメラを分解してチップまで磨きだして構成を見たり気合が入っている。今までどちらかというと読み物に偏ってきた日経エレクトロニクスが実際に役立つ記事、つまりCQよりになって来るということなのだろうか?

今見たら日経エレクトロニクス「マイコンキャンペーン」のページができていた。
  1. 2006年10月23日 22:20 |
  2. マイコン関連
  3. | トラックバック:0
  4. | コメント:0

息子の病状(その後、身体表現性障害の疼痛性障害)

今日も午後3時から午後7時くらいまで息子の病室で付き添いをした。これでもう7月18日から入院してるので3ヶ月以上入院していることになる。
先月末に整形外科病棟から精神科病棟に移動した。身体表現性障害の疼痛性障害なのでしかたない。(つまり心身症)
最近は腰の痛みは大分和らいできたようだが、まだうつ伏せに寝たままだ。本人は痛みが和らいできたことを認めたくないみたいだが、顔の表情や痛みがあるときの様子が大分楽になってきたのが見て取れる。
精神科病棟に移動してから、規則を厳しくしたので、(つまり9時にはゲームを止めて静かに寝ろといわれたり、食事の時はゲーム禁止といわれたり。)と言ってもごく普通のことなのだが、今までやり放題だったので、いらいらしてしまうようだ。
そういうわけで食事もハンガーストライキなのか?家族がいない夕食以外は食べない時が多くなっていた。しかし、最近は看護士さんからも食べるようになり、大体、朝昼晩食事が出来るようになり、とてもよかった。
全体的に良くはなって来たのだが本人がそれを認めない。認めたくないような感じだ。何かきっかけがあれば立って歩けるのではと思っているが、なかなか動けないと決めつけていてそうも行かないみたいだ。
精神科のお医者さんと担当看護士さんの次の1手に期待するしかないようだ。それともショック療法で家に無理やりつれて帰ってくるとか?
  1. 2006年10月22日 22:04 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

私流のVHDLの書き方2

今日は書くこともなくないのだが私流のVHDLの書き方を少しだけ書こうと思う。今度はVerilogで書こうと思っているのだが、今のところのHDLはVHDLだ。
PCIバスのPCIコマンドの定義とパリティのジェネレータを紹介しようと思う。物はpackage文とpackage body文だ。

library ieee;
use ieee.std_logic_1164.all;

package pci_pack is
    -- PCI Command
    constant PCI_MEM_READ : std_logic_vector := "0110";
    constant PCI_MEM_READ_LINE : std_logic_vector := "1110";
    constant PCI_MEM_READ_MULT : std_logic_vector := "1100";
    constant PCI_MEM_WRITE : std_logic_vector := "0111";
    constant PCI_MEM_WR_INVALIDATE : std_logic_vector := "1111";
    constant PCI_IO_READ : std_logic_vector := "0010";
    constant PCI_IO_WRITE : std_logic_vector := "0011";
    constant PCI_CONFIG_READ : std_logic_vector := "1010";
    constant PCI_CONFIG_WRITE : std_logic_vector := "1011";
    constant PCI_INTERRUPT_ACK : std_logic_vector := "0000";
    constant PCI_SPECIAL_CYCLE : std_logic_vector := "0001";
    constant PCI_DOUBLE_ADDRESS : std_logic_vector := "1101";
    
    function GenParityEven(ad : std_logic_vector; c_be : std_logic_vector)
        return std_logic;
end pci_pack;

package body pci_pack is
    function GenParityEven(ad : std_logic_vector; c_be : std_logic_vector)
        return std_logic is
    variable tempad : std_logic_vector(ad'high downto ad'low);
    variable tempcbe : std_logic_vector(c_be'high downto c_be'low);
    begin
        tempad(ad'low) := ad(ad'low);
        for i in ad'low+1 to ad'high loop
            tempad(i) := tempad(i-1) xor ad(i);
        end loop;
        tempcbe(c_be'low) := tempad(ad'high) xor c_be(c_be'low);
        for i in c_be'low+1 to c_be'high loop
            tempcbe(i) := tempcbe(i-1) xor c_be(i);
        end loop;
        return tempcbe(c_be'high);
    end GenParityEven;
end pci_pack;


package bodyのPCIバス用偶数パリティジェネレータはad(アドレス・データ)、c_be(コマンド・バイトイネーブル)の偶数パリティを返すファンクションだ。ad'low、c_be'highを使っているのでadやc_beが何ビットでも対応することが出来る。
使うときにはこんな感じで使っている。

    pci_even_parity <= GenParityEven(ad(31 downto 0), c_be_b(3 downto 0));
    pci_even_parity64 <= GenParityEven(ad(63 downto 32), c_be_b(7 downto 4));


  1. 2006年10月21日 20:09 |
  2. VHDLの書き方
  3. | トラックバック:0
  4. | コメント:3

LVDSの送受信が出来た

LVDSはNS社のLVDSチップを対向にして使用しているが、やっと正しく送受信を行うことが出来た。
LVDS送信チップはFPGAからLVCMOSレベルのDDR転送で接続されている。LVDS受信チップはLVCMOSレベルのSDR転送なので倍のデータ幅でFPGAに接続されている。LVDS送信チップに供給されているクロックの立ち上がりと立下りで取ったデータがLVDS受信チップのデータのどこに出るかが良くわからなかった。後、DCバランスやDESKEWなどナゾの機能もあった。
やっと受かってみると、なにかデータシートと違っている気がするが気のせいだろうか?
何はともあれ重要な部分が動作したので”ヤッター”と大喜びしてしまった。

2006/11/01 : データシートと違っていたと思ったのは勘違いでした。データシート通りでした。お詫びいたします。
  1. 2006年10月19日 22:16 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

Virtex5-LXT

昨日メールでVirtex5-LXTの案内が来た。それによると

Virtex-5 LXT の特長およびザイリンクスのサポートは:

> 3.2Gbps までを100mW 以下で実現し、消費電力を最小化するRocket IO GTP トランシーバ
> 規格準拠した内蔵 PCI Express エンドポイントと 内蔵イーサネットMAC ブロックでデザインを容易にし設計コストを削減 
> 優れた波形品質と送受信でのエンファシス・イコライゼーション技術搭載で確実な高速伝送を実現 
> ザイリンクスの開発・検証ツール、デザインキット、IP、特性評価レポートで、XAUI、OC-48、HDSDIなど各種標準規格をすばやく実現


だそうだ。
PCI Expressエンドポイント回路が入っていてロイアリティなしに使えるとすればとてもよいと思うが、どうなのだろうか?
更にVirtex2Pの場合はPCIeカードを作る場合はカードエッジからのクロックを整えるPLLチップも必要だったが、内蔵PLLによって、いらなくなっているかどうか見てみたい。
ET2006、組み込み総合技術展でVirtex-5 LXTを搭載した評価ボードを展示するそうだ。これはぜひ行ってみたい。
水曜日と金曜日は実験があっていけないので11/16木曜日か。。。
  1. 2006年10月18日 21:15 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:2

アタゴオルは猫の森を見てきました

atagoolu_1_061015.jpg

今日は一番下の娘と一緒にアニメ映画、アタゴオルは猫の森を見てきました。久しぶりにヒデヨシに会えました。
映画館は人が少なく128人入れる部屋が30人くらいの入りでした。やはりマイナーなんですね。
作者のますむらひろし氏の作品は学生時代、マンガ少年を買っていたので読んでいました。擬人化した猫(ヒデヨシたち)と不思議な世界が魅力的でした。昔は単行本も持っていたのですが、今では紛失してしまいました。ますむらひろし氏の"賢治に一番近い光"シリーズはもっていますが。。。
昔を思い出して楽しかったです。そういえば谷山浩子のコンサートに行った時にますむらひろし氏がゲストとして来ていました。コンサートの終了近くにますむらひろし氏が観客席に来て近くだったのでサインをしてもらいました。その際に氏のマンガ本にサインしてもらえばよかったんですが、あいにく持っていなかったのでそのころの教科書、現代情報理論にサインしてもらいました。関係ない本で失礼だったと思いますが、その当時は好きな漫画家にサインをもらえたのでうれしかったです。
atagoolu_2_061015.jpg

今アマゾンでアタゴオルは猫の森1~3まで買っちゃいました。
  1. 2006年10月15日 14:28 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

今年も柿が生った

今年も柿が色づいてきました。今年初めて柿をもいで2つほど食べてみましたが、甘くなっていておいしかったです。
去年はかなり実がなっていましたが、今年は少ないです。何も手入れをしていないので豊作の次の年は不作みたいです。それでもある程度は生っています。
今はかなり柿の葉が落ちています。もう少しして葉が枯れたら焼き芋をする予定です。(恒例行事)
kaki_061014.jpg

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

ModelSim-Altera Web Edition

昨日来たアルテラからのメールによると期間限定でModelSim-Altera Web Editionが出たということです。
Xilinxと同様にAlteraでもフリーでModelSimを使えるとなるとAlteraもやってみようかという気になります。AlteraはXilinxに比べて無料のModelSimがないので手が出ませんでした。アルテラのQuartus II Web Edition ソフトウェアダウンロードページにあります。
そうなると1チップMSXが気になる存在になりました。どうしようかな?
デザインウエーブマガジン2006年11月号のFPGA+CPUでアクセラレーションを試すためにもQuartus2 + ModelSim Altera + Nios2をダウンロードして試してみようと思います。

<2006/10/15 追記>
家で趣味で使う場合です。仕事ではModelSim SEなので、たぶんAlteraのライブラリをコンパイルすれば使えるはず???(AlteraのFPGA近頃使ったことないのでわからないが。。。)

<2006/10/16 追記>
Quartus2 + ModelSim Altera + Nios2をインストールしたパソコンで、XilinxのChipscope Core Inserterを単体で動かそうとしたらXilinxのenvironment variableがないと言われて起動しません。Alteraのツールが書き換えてしまったようです。ISEプロジェクトに入れればChipscope Core Inserter使えるようですし、実害はなさそうですが、もう一度ISE8.2iをインストールしなおすことにします。

Alteraのツールが原因ではないかもしれません。とにかくもう一度ISE8.2iをインストールしなおすことにします。
  1. 2006年10月13日 12:17 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:8

お手軽にISEでSynplifyを使う上での注意点

お手軽にISEでSynplifyを使う上での注意点。お手軽にSynplifyを使うという意味はSynplify用の制約ファイル(.sdc)を書かないでデフォルトのまま使うという意味だ。
ISEのSynthesize - Synplify Proのプロパティを開くとディフォルトでは下の図のように設定されている。
otegaru_synplify_1_061011.png

Frequencyは0でハイドされているので、マニュアルによると

[Frequency]

タイミング ドリブン合成でのクロック周波数を指定します。タイミング ドリブン合成で、このグローバル クロック周波数が使用されます。

デフォルト値は 0 で、エリア最適化が実行されます。


Write Vendor Constraint Fileにチェックが入ってる。同じくマニュアルによると

[Write Vendor Constraint File]

Synplify/Synplify Pro では、ベンダー制約ファイルを使用してユーザー指定のデザイン制約をアノテートします。このプロパティは、この NCF ファイルを生成するかどうかを指定します。

デフォルトではこのプロパティは True (チェック ボックスはオン) に設定されており、NCF 制約ファイルが生成されます。


よってデフォルトの状態ではFrequencyはエリア最適化されて、その結果が制約ファイルに書き込まれる。
ISEではSynplifyの生成した制約も取り込まれて制約に追加されるようなので、余計な(おかしい)制約が増えてしまい、Place & Routeの結果がおかしくなってしまう。まったく関係ないと思われる制約が入ってきて勝手に満たせないと怒られてしまう。
そのような場合は前の図でWrite Vendor Constraint Fileのチェックボックスのチェックをはずすと良い。そうするとSynplifyは制約を吐かずに素直にUCFの制約とその派生した制約だけになるようだ。

<おまけ>一度Write Vendor Constraint Fileのチェックボックスのチェックして論理合成してしまうと再度Rerun allしてもSynplifyの制約が残ってしまう。
そのような時はISEのProjectメニューからCleanup Project Filesを実行してプロジェクトをお掃除すると良い。
  1. 2006年10月11日 11:38 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:2

IOBの入力用FFを活用する

XilinxのFPGAのIOBにビルトインされている出力用FF(フリップフロップ)はFDDRCPEなどを使えば直接インスタンシエーションできるが、IOBの入力用FFを使うときには論理合成ツールに推定させなければいけないので使うつもりでも使えていないときがある。(現在使っているのはVirtex2pro-VP30)
入力用FFを使えればかなりセットアップ時間を安定して稼ぐことが出来るのでなるべく入れて使いたい。通常は下の図のようにMAPのプロパティの"Pack I/O Registers/Latchs into IOBs"で"For Inputs and Outputs"に設定してあってFFがIOBのFFに合う形に書いてあればIOBに入るはずだが、そうならない時もある。これは不確定だがDCMを通していないクロックで使用するFFの時がそうなのだろうか?今回のケースもソースクロックでサンプルするFFの話である。
IOB_FF_0_061008.png

入力パッド後の最初のFFは入力に論理がなく、ただ単に入力パッドの状態を1クロック分ラッチしておくだけである。こんな感じ。
process(reset, rxclk) begin
 if reset='1' then
  rxdata_int <= '0';
 elsif rxclk'event and rxclk='1' then
  rxdata_int <= rxdata; -- 入力パッドから入力
 end if;
end process;

MAPのプロパティの"Pack I/O Registers/Latchs into IOBs"で"For Inputs and Outputs"に設定しただけでは下の図のようにFPGA Editorで見てみるとIOB内の入力用FFを使用していない。
IOB_FF_1_061008.png

この状態でのTiming Analyzerのタイミング解析結果を下に示す。IOBは入力だけで他のスライスにFFをアサインしているのがわかる。
IOB_FF_TA_Tiopi_061008.png

そこでIOB内の入力用FFを使うためにUCFに明示的にIOB内の入力用FFを使うように制約を書いてみる。今回はConstraints Editorを使用してみよう。最初にISEのウインドウ内のProcessesペインのUser Contraintsを展開してCreate Timing Constraintsをダブルクリックする。
IOB_FF_2_061008.png

Constraints Editorが立ち上がるのでMiscタブをクリックする。
IOB Register Control内のSpecify...ボタンをクリック。
IOB_FF_3_061008.png

IOB Register Controlのダイアログが開く。
Available Registers:で必要なレジスタを選択してAddボタンをクリックする。
IOB_FF_4_061008.png

Constraints Editorに戻ると右下のConstraintsペインに制約が追加されている。
IOB_FF_5_061008.png

INST "FFの名前(階層付)" IOB = TRUE;
これでインプリメントしてみた。結果のFPGA EditorでのIOBの様子とTiming Analyzerの結果を下に示す。
IOB_FF_6_061008.png

IOB_FF_TA_Tiopickd_061008.png

これで見るとTiopickdが使用されていてデータの遅延時間が3.732nsとかなり遅くなっている。データシートを見るとどうやらIOBの入力用ディレイが使用されているようだ。おかげでセットアップ時間は1.941nsとなってしまって、規格の1.5nsを満足しなくなってしまった。少なくともVirtex2proではホールド時間を確保するためにDCMが入らない時(たぶん)はIOBディレイが入ってしまうのだろう。(未確認)
次にこれではだめなので、IOBディレイを抜くことにした。今度はUCFを手書きで制約を追加することにする。前回の制約にIOBDELAY = NONEを追加する。
INST "FFの名前(階層付)" IOB = TRUE | IOBDELAY = NONE;
これでインプリメントしてみたところ下の図のようにIOBディレイが削除できた。
IOB_FF_7_061008.png

IOB_FF_TA_Tiopick_061008.png

IOBディレイが削除されデータ入力の遅延はTiopick = 0.847nsだけになった。結果としてセットアップ時間は-0.944nsになった。これだとクロックのほうがデータより遅れているのでホールド時間がきついが、うちのアプリではホールド時間はたっぷり余裕があるので大丈夫だろう。
余裕がない場合はやはりデータ入力用FFをIOBから出してスライスに持っていって遅延を適当に加えるしかないと思われる。その場合は手動でスライスを配置したほうが偏差が少なくてよいかもしれない。
もう1つIOBの入力用FF使用のディレイ有りでクロックを遅延する方法もあった。このほうが1つのクロック入力にLUTディレイを入れればよいので簡単だと思う。
  1. 2006年10月08日 22:09 |
  2. UCFの書き方
  3. | トラックバック:0
  4. | コメント:9

PSXが帰ってきました

PSXが帰ってきました。また、HDDが壊れて交換でした。またまた録画データが消去です。
でも2ヶ月で壊れるHDD、ものすごいはずれですね。それとも壊れるべくして壊れた?
うちのPSX、日が照るところにおいてあるので温度が上がって壊れているのかな?AVラックなのでここしか置くとこないんですけど。。。結構ラックの上の棚とは10cmくらい空いているので大丈夫だと思うんだけど。。。
これでアナログ放送終了までHDDが持つことを祈る。。。
  1. 2006年10月08日 21:26 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

基板のデバック(続き)

昨日書いた32ビットワード単位で言うと0番地には正しいデータが入ってるが、4番地のデータはC番地に、8番地のデータは10番地に入るというバグは解消した。SDRAMのアドレスはデータバスが64ビット幅なので8バイトごとに+1されるはずだ。以前は32ビット幅なので4バイトごとに+1だったのがそのままになっていた。それで飛び飛びに入ってしまったようだ。これは修正されてPowerPCは動作したが、他のところが動作していないようだ。シミュレーションを完璧にやっていないので、デバックは大体こんなもんだ。
2学期はいろいろ忙しいのでなかなか時間が取れない。今週中にはアスベスト工事のために部屋も引っ越さなくては。。。
  1. 2006年10月04日 20:33 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

基板のデバック

大きな基板は大体動作してきた。FPGA内のブロックRAMからPowerPCをブートしているのだが、ブートは出来るようになった。
そういえばブロックRAMはRAMBプリミティブを並べて作っている。そしてブートコードを入れる際にはBMMファイルを作成してDATA2BRAMでCコンパイラが吐いたELFファイルをブロックRAMにロードしている。今のところISE6.3iなのでこれでよいのだが、どうやらISE8.2iにはDATA2BRAMがなくなっているようだ。他のプログラムロードの手段があるだろうから調査が必要なようだ。
しかし、Xilinxのツールはいろいろ変わってしまうので、その都度苦労する気がする。
この辺は動作してXport経由でパソコン上のターミナルにブートメッセージを表示するようになったが、その先のXport経由でプログラムコードを流し込んでSDRAMで動作させる部分が動かない。チップスコープで確かめてみたところ32ビットワード単位で言うと0番地には正しいデータが入ってるが、4番地のデータはC番地に、8番地のデータは10番地に入ってしまっているようだ。これは以前デーバスが32ビット幅だったのを64ビット幅に修正したのだが、その辺がバグっているようだ。
PowerPCは命令フェッチのキャッシュフィル時に例えば8番地に飛ぶとすると8番地、10番地、18番地、0番地というようにぐるりと回ってアクセスする。(データバス64ビットの場合、キャッシュラインサイズ32バイト)これは4ビートだが、以前はデータバスが32ビットだったので8ビートだったのだ。修正後のアドレスアクセス機能がどこかバグっているらしい。
小さい基板は順調だと思ったが1枚は完動するが、2枚はSDRAMのあるビットがたまに間違ってしまう。原因は不明だ。SDRAMに供給するクロックの位相を変えても変化がないのでFPGAの出力が遅延しているせいではないと思うのだが。。。基板のパターンがおかしいのだろうか?でも必ず間違うわけじゃないし、となるとクロストーク?でも1枚は動いているし。。。
  1. 2006年10月04日 06:05 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:4

またPSXが壊れた

8月にPSXのハードディスクが壊れて修理してもらったが、また同様に壊れてしまったようだ。PSXのロゴは出るがその後真っ暗。大分遅れてテレビ画像だけは出るが音声は出ない。更に操作画面もでない。HDDアクセスランプがずっと点いてしまっている。
ソニータイマーにしては大分早いが、また壊れてしまったようだ。しょうがないのでサポートに電話して取りに来てもらうことにした。今度は前の修理から2ヶ月たっていないので無料修理だろう。しかし、ソニーだと思うと壊れたことに腹も立たないから不思議だ。やはりという思いがある。
  1. 2006年10月02日 05:49 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0