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

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

FPGAの部屋

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

"Multi Pass Place & Route"の使用方法

バイトレーン変換機能つきDMA転送のバグがやっと取れたようだ。非常にうれしい。
ロジックが増えてしまったので、タイミングを適合させるのには苦労した。今回はクロックが遅延してしまって、入力のセットアップ時間が小さくなりすぎて、マイナスになってしまった。それを修正するために、Floorplannerで入力パッドから入力FFを適当に離して、セットアップ時間を遅延させた。全部やると大変なので、セットアップ時間がマイナスになった入力だけを移動したのだ。
やり方はここを参照。以前はクリティカルバスを短くするやり方だが、セットアップ時間を増やすのも同じ。短くなるように移動したパスを長くなるように移動する。
次にクロックの遅延が増えないように、ちょうど良いBUFGMUXを使うように固定。概要はここを参照。固定の仕方はUCFに直接書いてもいいが、Floorplannerでやるのが簡単だろう。
これでコンパイルすると動作周波数が66MHzを下回ってしまった。もう一度"Floorplannerの使い方覚書3"の方法でクリティカルパスを短くしても良かったが、今回はMulti Pass Place & Routeで問題を解決してみることにした。
1.ISEの"Process for Source"ウインドウの"Implement Design" - "Place & Route" - "Multi Pass Place & Route"を右クリックして"Properties..."をクリック。
そうするとこのようなダイアログが開く。
ISE_multi_PR_051130.jpg

2."Starting Placer Cost Table (1-100)"に1を設定する。(コストテーブルを1から10くらいまでやれば感じがわかる。)
3."Number of PAR Iterations (0-100)"に10を設定する。(10回PARするので、コストテーブル1から10までPARされる)
4.ダイアログをOKを押して終了し、"Multi Pass Place & Route"をダブルクリックしてPARを始める。
5.終了したら、一番結果の良いコストテーブルを探す。"Multi Pass Place & Route"の四角の中に+がある図形をクリックして、展開する。
6."View Place & Route Report(s)"をダブルクリックすると、全てのPARリポートが開く(私は、エディタで、各コストテーブルのディレクトリの????.parを見るのが好き。例ならば、mppr_resultの下に各コストテーブルのディレクトリが出来ているはず)
7."Copy Result to Working Project"を右クリックして"Properties..."をクリック。
ISE_multi_PR_Rcopy_051130.jpg

8."Value"の右の四角をクリックすると、ディレクトリを選択するウインドウが現れるので、一番結果の良いコストテーブルのディレクトリを指定し、OKをクリック、ダイアログを閉じる。
9."Copy Result to Working Project"をダブルクリックすると、ISEにそのコストテーブルの結果がコピーされる。

これでちょうどいいのが見つかり、終了となった。
(注意) "Multi Pass Place & Route"を使用するとPARをイテレーションの回数実行するので、ものすごく時間がかかる場合があります。始めたら一日仕事にならない場合があるので、使用注意。仕事帰りに仕掛けて翌朝見るのが無難です。
  1. 2005年11月30日 20:50 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

クロック用パッドとBUFGの関係

この前から悩んでいることが検証できたので、覚書。
使用デバイスはVirtex2の1000-6-FG456。
回路はPCIバスのインターフェースとSDRAMやPowerPCインターフェース回路などが集まった回路。
FPGAのクロックはPCIバスの66MHzクロックから取って、DCMへ入力、それをFPGA全体のクロックとして使用している。もう1つのDCMを使用し、FPGAの外部にクロックを出力。PowerPCやSDRAMなどに供給している。
そういう回路で、ISE6.3で以前にコンパイルした回路を、再度コンパイルするとセットアップ時間やクロックからの出力時間がおかしくなるという現象があった。
以前のものは
COMP "ad(0)" OFFSET = OUT 6 nS AFTER COMP "clk" | 6.000ns | 5.204ns | 1
--------------------------------------------------------------------------------
COMP "ad(0)" OFFSET = IN 3 nS BEFORE COMP "clk" | 3.000ns | 2.064ns | 1
--------------------------------------------------------------------------------
COMP "ad(1)" OFFSET = OUT 6 nS AFTER COMP "clk" | 6.000ns | 5.226ns | 1
--------------------------------------------------------------------------------
COMP "ad(1)" OFFSET = IN 3 nS BEFORE COMP "clk" | 3.000ns | 1.402ns | 1

こんな感じである。ちなみに回路はPCIバス64ビット66MHzなので、セットアップ時間が3ns、クロックからの出力時間が6nsである。
これが新たにコンパイルすると、
* COMP "ad(0)" OFFSET = OUT 6 nS AFTER COMP "clk" | 6.000ns | 6.224ns | 1
--------------------------------------------------------------------------------
COMP "ad(0)" OFFSET = IN 3 nS BEFORE COMP "clk" | 3.000ns | 0.179ns | 1
--------------------------------------------------------------------------------
* COMP "ad(1)" OFFSET = OUT 6 nS AFTER COMP "clk" | 6.000ns | 6.296ns | 1
--------------------------------------------------------------------------------
COMP "ad(1)" OFFSET = IN 3 nS BEFORE COMP "clk | 3.000ns | 0.721ns | 1

このようにセットアップ時間が小さくなって、クロックからの出力時間が伸びて、規格をオーバーしてしまった。
明らかにクロックのディレイが増えてしまった。何でだかわからずに、FPGAエディタを見てみると、CLK入力からBUFGMUXまでの経路がぜんぜん違うことに気が付いた。
ちなみにHDLソースは、CLK入力からIBUFGプリミティブに接続し、それをリセット回路とDCMに入力している。
リセット回路が入っているわけは、PCIバスのクロックはホスト・パソコンがリセットされる時に1msほど、PCIクロックが停止するマザーボードがあった。そのようなマザーではDCMをリセットしなければクロックがおかしくなる。DCMリセット後はDCMのクロック波形が安定するのを待って、その他の回路のリセットを開放する。その場合に普通はDCMのLOCKED信号が1になるタイミングでその他の回路のリセットを放すわけだ。
だが、それではどうしても不都合が生じてしまった。それで、DCMを一定時間リセットしてから、10ms(これはデータシートに書いてあるDFSのクロックが安定する最大の時間)後にDCM以外の回路のリセットを放すようにしてあるのだ。これで不都合は解消され、うまく動作している。
以上のような動作をするリセット回路を作って入れてある。リセット回路はDCMからのクロックで動くわけに行かないので、CLKパッドから直接入力されたクロックで動作する。
前振りが長くなってしまったが、前者のFPGAエディタの経路。
FPGA_Editor_clk_route_1_051128.png

赤い線の配線の遅延は0.143ns。VHDLソースにBUFGは入っていないが、どれかのツールが自動的に入れてくれたようだ。つまりCLK入力パッドからIBUFGを経由してBUFG(BUFGMUX)に、そこからリセット回路とDCMに入力される。BUFGへの入力配線を赤でハイライトしてみているわけ。BUFGからの出力は表示していないが、実はリセット回路とDCMにつながっている。つまり余計な配線は全て消して表示しているので注意。
後者のFPGAエディタの経路。
FPGA_Editor_clk_route_2_051128.png

配線遅延は1.467ns。配線遅延が大幅に増えている。
大きな白線の中が黒い箱と細長い白線の中が黒い箱はスイッチボックスで配線を切り替えるところ。無駄に回っているのがわかる。配線がないのだろうか?
以前コンパイルした回路はBUFGMUX7Pを使用していて、今回、コンパイルした回路はBUFGMUX5Pを使用している。
ためしに、いままで暗黙的にBUFG(BUFGMUXの一部を使用するとBUFGの機能になる)を使用していたが、明示的にHDLソースでBUFGプリミティブを使ってみた。そうすると中間のクロック遅延になった。そのFPGAエディタの経路はこれ。
FPGA_Editor_clk_route_3_051128.png

赤い線の配線遅延は0.759ns。
今度は、UCFでBUFGMUX7Pを指定してみた。そうしたら前者と同様の配線になり、配線遅延は0.143nsになった。
どうやらCLK入力パッドの位置だと、遅延の少ない配線が出来る可能性があるBUFGMUXは7Pと6Sらしい。そこを使った方が有利なので、これからはFPGA Editorで最適な配線になるように、使用するBUFGMUXを選択したい。
いままで、これらの値が変動することがあったが(特にISEのバージョンが変わると)この辺が影響していたのだろう。
しかし、同じISE6.3のはずなのになぜなのだろうか?
  1. 2005年11月28日 15:16 |
  2. FPGAチップ内の配線方法
  3. | トラックバック:0
  4. | コメント:0

県西総合公園に行ってきた

今日も奥さんはミニバスの審判で出かけて、またまたいない。一番下の子が公園に行きたいそうなので、2人で県西総合公園に行ってきた。もう上の2人の子供は付いてこないので、家においてきた。
県西総合公園は協和町(今は筑西市です)にある公園。家から20km位あり、車で30分というところだ。行ってみると、いつもに無い渋滞。警備員のおじさんに聞いてみると祭りをやっているようだ。
やっと車を止めて、いつものアスレチックに行く。
kensei_park_2_051127.jpg

このような大きなアスレチックとローラー滑り台がある。右側のカプセル状の通路はアスレチックになっていて、小学校低学年向けだが結構楽しめる。中はいろんなアスレチックがあるが、これは一例。恐竜に見える絵もある。kensei_park_3_051127.jpg

これと、ローラー滑り台がもう1基ある。少し離れた林の中には、アスレチックが点在している。
kensei_park_6_051127.jpg

入園料は無料だしなかなか楽しめる公園だ。おまけに凄く広い。
お祭りやっているので、途中で池のかもたちにパンをちぎって投げながら移動。
kensei_park_1_051127.jpg

イベント会場に行くとムーミンの風で膨らませて、中で子供が飛び跳ねて遊ぶ遊具があった。早速並んで、やった。うれしそうに飛び跳ねてた。kensei_park_4_051127.jpg

会場ではいろいろな地域の物産が売っていたが、ひしおという食べ物を買ってきた。昔は良く食べたが、最近はなかなか売っていない。全国的に食べられているかどうかわからない。ひしおは溜まりしょうゆの絞る前の物みたいなもので、麦が粒のまま見えている。熱いご飯に載せて食べるとおいしい。言わば、粒が大きい味噌みたいなものである。
kensei_park_5_051127.jpg


  1. 2005年11月27日 17:12 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

インフルエンザ予防接種

今日の午後、耳鼻科の医者でインフルエンザの予防接種をしてきた。
子供3人と私とで行ってきた。奥さんは職場で出来るそうだし、今日は仕事。
行ったら、一番下と一番上の子供は微熱がある。一番下の子供は朝から鼻づまりだったが、午前中にプールに行かせてしまった。プールの後、鼻づまりがひどくなったようだったが、微熱まであったのか、完全に風邪の初期症状だ。
一番上はもともと扁桃腺が大きいのだが、医者に見てもらったところ、はれてもいるとのこと、薬をもらって来た。
結局、自分と真ん中の子供だけ、予防接種をやってきた。
一番上の子供は結局、予防接種をしなかったが、12月に13歳になる。予防接種は13歳からは1回でいいとのことなので、1回でも良いでしょうかと聞いたら、だめだという。それは、1回接種では5ml液を注射するそうだが、それは13歳からと決められていて、これを守らないと、もしもの時に保健が降りないなどのペナルティがあるそうだ。
結局、風邪も引いているし、12月に13歳になってからやることにした。
インフルエンザの予防接種を毎年、家族全員でやっているが、これは以前に、家族全員インフルエンザでやられてしまって、看護する人が誰もいなくなってしまったことがあるからだ。40度近い熱があるのに、おかゆを作ったりするのは応える。それで、毎年全員やることにした。
インフルエンザの予防接種をやってみると、医療機関によって値段にだいぶ、ばらつきがある。あるところは4000円、そっちは3500円、こっちは2000円とか。結局、花粉症でいつもお世話になっている耳鼻科が大人2500円、子供2300円と安めなので、いつもそこで接種している。ちなみに大人は1回、子供は2回接種する。
  1. 2005年11月26日 11:38 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

入門Verilog HDL記述の回路の検証

入門Verilog HDL記述の回路を検証してみた。122ページのシリアル・パラレル変換について、納得できない記述だったので、やってみた。
記述は、
module Seri_Par(ck, res, en, si, q);
 input ck;
 input res;
 input en;
 input si;
 output [3:0] q;
 reg [3:0] q;
 always @(posedge ck) begin
  if (res)
   q <= 4'h0;
  else if (en) begin

   q <= q << 1;
   q[0] <= si;

  end
 end
endmodule

というもの。どうもq[0]に2回代入されているのが気になる。シミュレーションしてみた。動作はOK。
Seri_Par_Sim_OK_051124.jpg

XSTで論理合成後のRTL回路図を表示してみた。
Seri_Par_OK_Cur_051124.jpg

いたって正常。

これで青の部分を下のように変更するとだめだということだ。
   q[0] <= si;
   q <= q << 1;

つまり記述の順番を変えるとだめ。これでシミュレーションしてみると
Seri_Par_Sim_NG_051124.jpg

確かにだめだ。出力が出ない。
次にXSTで論理合成後のRTL回路図は、
Seri_Par_Cur_NG_051124.jpg

なんだこれは? q[0]がGNDに接続されているだけだ。

125ページの正解例では、
   q <= {q, si};
だったが、これも式の左辺と右辺のビット幅が合わないので、気持ち悪い。
VHDL好きな私ならば、こう書きたい。
   q[3:1] <= q[2:0];
   q[0] <= si;

もしくは1行で書くならばこうか?
   q <= {q[2:0], si};
Verilog書く時は本の記述で良いのかもしれないが、私は下の2例のように書きたい。
  1. 2005年11月24日 22:41 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:1

入門Verilog HDL記述を読んでます

Verilog HDLの勉強の続きで入門Verilog HDL記述(CQ出版社)を読んでいる。
これも読みやすいいい本だと思う。
感心したのが、リダクション演算子。各ビットごとの論理演算が1発で出来る。
reg [31:0] data;
assign parity = ^data;

これで出来るそうである。
assign parity = data[31] ^ data[30] ^ ........ ^ data[0];
と同様。
VHDLでは、function文でも出来るが、process文で書くと
process (data)
 variable temp : std_logic_vector(31 downto 0);
begin
 for i in 0 to 31 loop
  if i=0 then
   temp(0) := data(0);
  else
   temp(i) := data(i) xor temp(i-1);
  end if;
 end loop;
 parity <= temp(31);
end process;

と書いていた。(間違っていないかしら、即席で書いたから)
VHDLでも知らないだけであるのかもしれないが、Verilogのリダクション演算子便利である。
Verilog-HDLの現在の印象は、
1.型がルーズなので便利な反面、エラーがわかりづらいかもしれない。
2.VHDLのrecord型に相当するものが無いので、構造体が書けない。
3.累乗やLOGなどが無いようだ。
4.generate文が無い。
5.多元配列が使えないようだ。

全体的には、型が甘いカーニハン&リッチー時代のC言語のような印象だ。
4.5.はVerilog2001で使えるようになっているし、XSTも対応しているので、積極的にVerilog2001を使いたい。
まだ、半分くらいしか読んでないので、残りを読もう。納得できない記述もあるので、デルタ時間を考えながらシミュレートしてみたい。
そろそろ技術論文も書き始めなくてはいけないので、忙しそう。ポスター発表する予定なので、3月に、近くに住んでいる方で御用とお急ぎで無い方はいらしてください。後でアナウスします。
  1. 2005年11月23日 21:29 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:0

光通信モジュールの講習会に行ってきました

今日は新横浜の東エレのセミナールームでアジデントの光通信モジュールとMGTの付いたFPGA(V2pro, V4)の講習会に行ってきました。
同軸ケーブルで1.25Gbpsを10mくらい伝送すると、だいぶアイが閉じてくるということだった。けど、まだ大丈夫じゃないのかな? 光を通すと立ち上がり、立下りは緩やかだが(単にスルーレートの問題?)、波形の乱れは少ない。
でもどうして、アジデントの波形ジェネレータからの波形を見せて、FPGAのMGTから出力する波形を見せてくれなかったんだろう。それが見たかった。
どっちにせよ、こちとらには、どの位の波形まで大丈夫かがわからないので、判断不能?だが。。。
話を聞いていると2.5Gbpsで5mくらいまでは大丈夫らしいから、うちの用途にはメタルで大丈夫なもよう?
パッケージの小さい光通信モジュールがもっと安く手に入ればいいんだけど。
思もよらずに、前から見たかったアバールのPCIeボードの説明があった。マザーによる相性はなく、大丈夫だとのこと。でも、PCIeの性能はうたい文句の6割とのことなので、そんなもんか。それだと、X4でも、133MHz,64bit,PCI-Xと余り性能が変わらなくなってしまう。
しかし、今日は薄着で行ってしまったので、(先週行ったのと同じような格好だが、今日のほうがとても寒かった)寒くて死ぬかと思った。
今日の教訓、寒そうだなと思ったら、まず厚着。
最近、セミナー行ってばかりだが、もう終わりである。
  1. 2005年11月21日 22:01 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:4

小学校の廃品回収

今日は小学校の廃品回収だった。
年に2回夏と秋に実施している。
小学生を持つ親たちが、近所の廃品を回収して廃品回収業者に売却し、代金を小学校で子供たちのために使うという行事だ。
収集する物は古新聞、古雑誌、ダンボール、ビール瓶及びビールの箱だ。地区ごとに収集して、小学校の隣の集積場に持ってくると廃品回収業者のトラックが待っているので、それに積むわけである。
うちの地区は4台の軽トラックと2トントラック1台を持っている家に出してもらって回収した。私の乗ったトラックは古新聞、古雑誌、ダンボールを回収した。
結構、古新聞が重いのである。でも、一番きついのは集積場の廃品回収業者のトラックの上で、軽トラの持ってきた新聞の束を受け取って並べる仕事だ。だんだん自分のいる地面(新聞紙の束)があがっていくので、新聞の束を受け取って引き上げるのが大変。この仕事はPTA役員とか体育の先生とかが受け持っている。本当にご苦労様である。
  1. 2005年11月20日 21:04 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

小学校のマラソン大会

今日は小学校のマラソン大会だ。
体育委員なので、走路上に立って、交通整理だった。
体育の先生が先頭を自転車で走って、先導していた。どうしても、おばあん、お母さん方が自分の子供の頑張っている姿を見たさに走路をふさいでしまうことがあるので、露払いをしているようだ。
1,2年生が1km、3,4年生が1.5km、5,6年生が2.5km。
子供成績はいまいちだったけど、下の子供は転倒にもめげずに完走したし、真ん中の子供は夏に骨折したにもかかわらず完走できた。
しかし、今日はとても寒かった。震え上がってしまった。その後のトン汁がおいしかった。生き返った。
今年はいい天気だが、とても寒かった。写真は、マラソンの後の閉会式。役員なので、走っている写真は取れなかった。
marason_051119.jpg

  1. 2005年11月19日 19:08 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

ISEでの組み合わせ回路の論理シミュレーション

今日は初心者向けにISEでの組み合わせ回路の論理シミュレーションのやり方を解説。今、Verilog-HDLを勉強中なのでVerilogで解説します。始めにVerilogでテストベンチを吐いてくれるようにプロジェクト・プロパティを設定。ここを参照。VHDLの場合はVHDLにする。
まずは、ISEでHDLを右クリックしてNew Source...を選択する。
ISE_new_Source_051119.jpg

New Sourceウインドウが開くので、File nameを入力する。Locationは通常はそのまま。TB_new_source_051119.jpg

テストベンチを生成するHDLファイルを選択する。この場合、and_gate.vしかないので決まり。TB_Select_051119.jpg

次に、New Source Informationウインドウが開く。完了をクリック。
TB_New_Source_Info_051119.jpg

Initialize Timingウインドウが開く。クロック入力する場合はそのままだが、組み合わせ回路をシミュレーションする場合は"Clock Information"の"Combinatorial(or internal clock)"ラジオボタンをクリック。OKをクリック。
TB_Initialize_Timing_051119.jpg

そうすると、ISEの右のペインにタイミングチャートを入力する画面になる。そこで、下図のように入力に波形を入力。入力のタイミングチャートをクリックすると、水色の領域の最初で入力波形が変化する。黄色は自分で想定する出力波形を入力して、実際の出力波形と比較してくれるが、とりあえずは使わないのでそのままにする。"Processes for Source"ペインから下の"Process View"タブを選択して、"Simulate Behavioral Model"をダブルクリックするとModelSimが立ち上がり、論理シミュレーションを始める。Logic_simu_051119.jpg

そうすると、ModelSimのWaveウインドウにシミュレーションの結果が表示される。AND回路である。ModelSim_Wave_051119.jpg

これでおしまい。

次は、Verilog-HDLを勉強していて、ブロッキング代入文とノンブロッキング代入文の使い分けを考えていた時に思いついたので、ノンブロッキング代入文を使ったHDLのシミュレーション時のデルタ遅延時間の扱いについて考察してみたい。
  1. 2005年11月19日 15:44 |
  2. その他のXilinxのツールについて
  3. | トラックバック:0
  4. | コメント:0

乾燥プルーンの効能

尾籠な話で申し訳ないが、この季節、便が硬くなって困る。
私はそういう時は、乾燥プルーンが効く。夜、乾燥プルーンを食べると、朝すんなり出るのである。
でも、いつも食べていると効果が薄くなるようだ。たまに食べると効く気がする。
便秘気味だと思う方は、試してみてはどうだろう。人によって違うらしいが、私には効くようである。
まことに汚い話で申し訳ないが、何らかの足しになれば。。。
  1. 2005年11月18日 19:59 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Floorplannerの使い方覚書3

Floorplannerの使い方覚書1で現在のロジックセルの配置をすべてUCF(制約ファイル)とFNF(フロアプランのファイル)にコピーして、クリティカルパスのみ配置を移動した。
セミナに行ってみると、それはだめといわれてしまった。確かにV2-6000で6%くらいしかロジックを使っていないにもかかわらず、UCFファイルの行数は5000行を越え、容量は390Kbyte以上になっている。全部使うようになったら、UCFは5万行を越えそうである。これじゃだめだ。
それで、クリティカルパスだけUCFとFNFにコピーして、修正したほうが良いとセミナで言っていたのでやってみた。
例によって、インプリメンテーションしてから、タイミングアナライザを起動する。
Process View - Implement Design - Place & Route - Generate Post-Place & Route Static Timing - Analyze Post-Place & Route Static Timing(Timing Analyzer)をダブルクリックして、Timing Analyzerを起動。
ISE_timinga.jpg


Timinig Analyzerが起動する。一番左の時計マークのアイコン"Analyze against Timing Constrains"をクリックする。そうするとあらかじめUCFで制約をかけたパスについてタイミング解析をする。タイミングを満たしていないパスはで表示される。
Timing Analyzer画面の左側のペインの"Timing Constrains"の左の四角で囲ったプラスをクリックすると、制約ごとのタイミング解析結果を展開して表示する。その時に、タイミングを満たしていないパスはで表示される。
さらにその制約(ここではTIMEGRP "clk" PERIOD=の部分)の左の四角で囲ったプラスをクリックすると、一番遅延が大きいパス(クリティカルパス)から表示される。ここでもタイミング制約を満足していないパスはで表示される。
でクリティカルパスを確認。
timing_ana_051116.jpg

Timing AnalyzerでViewメニューからFloorplanner for crossprobingを選択し、Floorplannerを起動。クリティカルパス(赤い四角で囲った部分)をダブルクリック。
Floorplannerをクリックして前面に出すとクリティカルパスが表示される。
floorplanner_051116.jpg

FloorplannerでFloorplanメニューから"Constrain from placemant"を選ぶと、表示されているクリティカルパスだけ別画面のUCF Flowにコピーできる。
floorplanner_2_051116.jpg

現在のUCF Flowの画面には、インプリ前に指定したエリア制約も表示されている。(Floorplannerの使い方覚書2参照)
ロジックセルを移動して、クリティカルパスを改善する。その場合、そのままドラックするとそのまま移動してしまうので、いったんフォーカスをはずしてから、一番長いパスを縮めると良いだろう。(図はクリティカルパスを移動中)
floorplanner_3_051116.jpg

全てのクリティカルパスに操作を行うまで繰り返すか、飽きたら(いい加減20くらいやっていると飽きる)セーブしてもう一度インプリ。
UCF制約ファイルに書かれる例は。
INST "serial" AREA_GROUP = "AG_serial" ;
AREA_GROUP "AG_serial" RANGE = SLICE_X28Y40:SLICE_X37Y30 ;
INST "con" AREA_GROUP = "AG_con" ;
AREA_GROUP "AG_con" RANGE = SLICE_X24Y26:SLICE_X39Y16 ;
INST "iom" AREA_GROUP = "AG_iom" ;
AREA_GROUP "AG_iom" RANGE = SLICE_X30Y15:SLICE_X34Y4 ;
INST "core" AREA_GROUP = "AG_core" ;
AREA_GROUP "AG_core" RANGE = SLICE_X5Y39:SLICE_X22Y9 ;
INST "core/_n02021" LOC = "SLICE_X13Y12" ;
INST "core/_n01231" LOC = "SLICE_X10Y25" ;
INST "core/forbmux<7>_SW2" LOC = "SLICE_X15Y24" ;
INST "core/forbmux<14>_SW2" LOC = "SLICE_X12Y26" ;
INST "core/mem_wb/dff8/q_2" LOC = "SLICE_X8Y17" ;
INST "core/Inst_forwarding/forwardB<0>41" LOC = "SLICE_X14Y19" ;

という感じ。最初はエリア制約。次がロジックセルの位置固定。

この操作はあまりクリティカルパスが多いと、ほかと干渉して結局クリティカルパスが移動するだけの結果になる場合があるようだ。私もサンプルをやってみて、発散して止めてしまった。余りクリティカルパスが多いと、他のパスと干渉してしまうのではないだろうか?
クリティカルパスが少ない場合に有効かもしれない。
後は、クリティカルパスがあるモジュールを特定して、そこだけ配置を固定して、クリティカルパスを修正するという方法が使えるかもしれない。余りにもクリティカルパスが多いと、全部固定するのと変わらなくなるが。。。
やはり、HDLコードの品質が重要ということだろう。#それが一番難しいのだが。。。
  1. 2005年11月17日 20:51 |
  2. Floorplannerの使い方
  3. | トラックバック:0
  4. | コメント:2

ET2005に行ってきました

今日はET2005に行ってきた。
結構盛況だった。始めに気になっていたCQ出版社の新しいボードのプレゼンを聞いてきた。スパルタン3-400と1500の2つのFPGAとCPLDが載っていた。PCIバス、IDE、USB、PS2など1通りそろっている。Xilixのスターターキットよりも決定的にいいと思ったのは、VGAがアナログでDACが点いていることだ。スターターキットはFPGAのピンがそのまま出ているので、8色しかないが、こっちはアナログで出せる。価格は10万円位だそうだ。ちょっと高いかな? 5万円くらいならばそく買いだが。。。
東京エレクトロンデバイスに行って、3.125Gbpsの信号のアイ開口などを見る。良くわからないが、開いているようだ。PCI Expressボードも見る。やはり、マザーによって、相性があるようだ。図研のPCI ExpressのIPなども聞いてきた。後は、電源、DC-DCコンバータを見てきた。小さくて良さそうなのがあったが、ちょっと電流が少ないかも?
XilinxのFPGA、Virex2proはみんなファンが付いていた。念のためつけているそう。MGTを8チャネル使うと、1個200mA~300mAくうらしいので、それだけで1.6W~2.4W食うようだ。これだけでもヒートシンクものだ。
面白そうなのではEden、1GHzプロセッサのマックミニくらいのパソコンがあった。個人的にほしい。
プリント基板の一方の端に大きな2輪のタイヤがついていて、もう一方を上に上げて、2輪で立ったまま動くロボットが会った。なかなか面白い。
その他、一通り見てまわった。

最後に展示している会社でアンケートのおまけにくれる景品。
ET2005_goods.jpg

ノートはActel、ボールペンは左からフリースケール、アジデント、東京エレクトロンデバイス、富士エレクトロニクス。下のLEDライト付きキーホルダはテキサス・インストルメンツ。ポーチは横河。クリーナー(青)はインテル。電卓はARM。
かくして、セールスメールがいっぱい来るようになるのである。
どっかで情報がもれて、マンションの売込みが殺到しないことを祈る。(そんな金は無いのに、だいぶ悩まされたことがある)

------------------------------
そういえば、東芝でCELLチップ、基板、ワークステーション?が展示されていた。あまり良く見なかったので、詳しいことはわからない。
  1. 2005年11月16日 19:12 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:2

柿を収穫、小学校のマラソンコースを歩く

今日は奥さんが仕事なので、まったりとすごす。
天気が良いので、そろそろ食べごろの柿がなっている柿の木から柿の実を収穫した。(今写真撮ってきたので見づらい)
kakinoki_051113.jpg

柿の木は、もともとどうしようもない渋柿だったのだが、5年ほど前、奥さんのお父さんに次郎柿を接木してもらったもの。やっと、沢山実がなるようになった。実はだいぶ落ちたのだが、それでも十分食べられるだけ残っている。食べる分だけ、収穫して、後は残しておく。これが収穫した柿。なかなか良いでき。
kakinomi_051113.jpg

食べてみたが結構甘い。奥さんの実家では木が折れるじゃないかと思うほど沢山なっているが、ウチは土地が悪いのかそんなにはならない。

来週の土曜日に小学校マラソンがある。体育委員なので、誘導員として道に立つことになっている。そこで下見のために、真ん中の子供と一緒にマラソンコースを歩いてきた。とても走って回れないので、散歩にしてもらった。
来週は小学校でマラソンやってから、トン汁パーティである。小学校で大鍋でトン汁を作り、小学生、父兄で食べるイベント。毎年、マラソンの後にやっている。準備でテントなどを張らなくちゃいけないし、来週は忙しそう。
  1. 2005年11月13日 18:16 |
  2. 日記
  3. | トラックバック:1
  4. | コメント:2

高速回路のHDLインプリメンテーション方法の考察

DDR SDRAMコントローラを設計する上で、参考にしたアプリケーション・ノートがある。それがXilinxのxapp253だ。もうXilinxのサイトには載っていないが、グーグルのキャッシュがここにある。デザインファイルはここに残っている。
シミュレーションしてこれを調べた所、とてもよい出来だと思った。バンクをアクティブにした後、タイムアウトまでプリチャージしない様になっている。タイムアウト前に同じバンクへのアクセスが来たら、バンクがアクティブになっているので、レイテンシが短くなる。これを使ってもいいかなと思ったが、シミュレーションをしてみると、バグがあるようだ。2つくらい修正したが、どうもまだだめなので、自分で作りることにした。
構造を参考にしながら、オリジナルに作ったのだが、アプリ・ノートの回路に疑問があるところがあった。DQ,DQS,DMの信号が1本ずつモジュールとして書かれていたのだ。1本を8本とか4本にまとめていて、何でこんな面倒なことするのかな?と思っていた。まとめてインスタンスすれば良いのにと思っていた。実際自分ではfor generateでまとめてインスタンスした。
でも、今回のセミナを受けていた気がついた。1本ずつまとめ、8本単位にまとめれば、それごとにフロアプランでエリア制約をかけることが出来る。(エリア制約についてはこれを参照) データバスを64本(私のは32本じゃなくてDIMM用に64本に拡張してある)まとめると、フロアプランナーでは四角形しかエリア制約できないので、ロジックがばらけてしまう。これはタイミングにとっては不利になると思う。
さらに、私は書き込みと読み出しのモジュールを分けてしまった。これじゃ、タイリング状にフロアプランするしかないし、(IOBは読み書き両方)おまけにフロアプランナーじゃ出来ないので、PACEでやるしかない。それで、IOBの形でアプリ・ノートでは書いてあったのか。IOBの配置もチップの横に縦一列に並んでいて、データパス的に有利だ。
やはり、IOBに最適化できるように修正しよう。
  1. 2005年11月12日 08:36 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:2

アドバンスドFPGA設計セミナ2日目

今日も新宿のXilinxのトレーニングに行ってきた。
今日のお題は

・RPMの演習
・Virtex2のグローバル・クロックバッファの配置
・インクリメンタルデザイン、モジュラーデザイン、フロアプランナー
・FPGAエディタの使い方

RPMは何に使うのかと思っていたら、演習は回路をコンパイル後にクリティカルパスをRPMにして、タイミングの改善を図るというものだった。UCFを手で編集して、クリティカルパスを短くするように相対配置を考えるという、結構不毛な物。そんだったらフロアプランナーで、クロスプローブして動かしたほうが良くない? もしRPM書くなら、少なくとも手で書くより、フロアプランナーでGUIでかいた方が良さそう。おまけに余りタイミング改善されなかった。こっちがよければあっちがだめ。もぐらたたき風。
Virtex2のグローバル・クロックバッファの配置は、V2-3000で10個グローバルバッファを使ったことがあって、その時苦労したので、思い出しながらやった。結構簡単。
インクリメンタルデザインは、C言語のmake見たいに、直した回路ブロックだけインプリメントして、その他のブロックは前のインプリをコピーするというもの。そのためには、回路ブロックをしっかりフロアプランしないといけない。
FPGAエディタの使い方は、前から知りたかったので、面白かった。ネットを指定して、配線遅延を見るやり方や、LUTの論理式なども見えたり、編集も出来た。配線なども出来るし、なかなか良いツールなのだ。
今回、セミナでやったわけではないが、高速回路のHDLソースの書き方について、気がついたことがある。やっとアプリ・ノートがあんな書き方していたのか、わかった気がする。ツールでは、PACEやFPGAエディタもなかなか使えるし、後でブログにやり方を書こうかなとも思う?
  1. 2005年11月11日 21:41 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:3

アドバンスドFPGA設計セミナ1日目

今日、アドバンスドFPGA設計セミナ1日目に行って今帰ってきたところ。
今日の参加者は4人だった。男3人に女1人。
今日のお題目は、

・前振り(CLBの構造やスライスなどの説明)
・UCFの書き方
・スクリプトの書き方(Windowsではバッチファイル)
・RPM(相対位置マクロ)の書き方

UCFの書き方では*だけでなく?も使えるということがわかった。
さらにFFSやRAMSの脇に括弧でインスタンスを限定する書き方もわかった。
TIMESPEC TS_TIMES = FROM FFS(*filpflop?) TO RAMS(rambase/ramdev*) 10 ns;
と書けるそうである。(資料が手元に無いのでうろ覚え)
temp/filpflop3はFFSにマッチするが、temp/filpflop_3はFFSにマッチしないそうだ。
RPM編では良く使う回路をRPMにしろといっていたが、RPMにするのがたいへんではないだろうか?
Floorplannerで出来るそうだが、簡単に出来るのかな? 演習は時間が無くて飛ばしたので、後でやってみる。
一番良かったのは、Generate Programming FileのプロパティにOhter Bitgen Command Line Optionsがあることを教えてもらったことだ。でもわかってなかったのはうかつである。
これでここに"-g Centered_x2y0:0"を書けばOKである。詳しいわけはここを参照。これが一番うれしかった。
明日はFloorplannerやクロックのまわし方なので楽しみである。

process_properties_051110.jpg

  1. 2005年11月10日 20:18 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

明日からFPGAのセミナー

明日から、XilinxのアドバンスドFPGA設計セミナー行ってきます。何か、新しくわかったことがあったら報告します。というか忘れないように、まとめとかないと。。。
自分でも、Floorplanner使い方忘れちゃうので自分のブログを見ながらやってます。
ISEでVerilogプロジェクトで試してみようと思ったら、テストベンチファイルはVHDLしか出力できないようだ。テストベンチを自分で書かなくてはいけないが、本を職場に忘れてきてしまって、書けない。
そうか、VHDLでインターフェース?に載っていたVHDL2Verilog変換プログラムかけても良いのかも?

ISEのProject PropertiesのGenerated Simulation LanguageにVHDLとVerilogを選ぶ所がありました。下図参照。(キコさん、教えていただきまして、ありがとうございました)
でも、勉強のため、Verilogのテストベンチを書いてみようと思う。簡単なのだけど。
仕事は、以前のネットワークインターフェースのミスアラインのDMAにバグがあり、うまく行っていない。かなり以前に作ったので、忘れてしまっていて、デバックがうまく行っていない。困った。どうしてもだめだったら、作り直しか?

Project_Properties_051109.jpg

  1. 2005年11月09日 20:36 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:3

かかし祭り

今日たまたま石下町を通ったら、かかし祭りをやっていたので見てきました。
かかし祭りは大人と子供部門に分かれて、自作のかかしの出来を競うお祭りで、この時期に毎年やってます。結構面白いので大体毎年行ってみてます。
こんな感じです。いろんな団体が出してます。スーパードライの缶は消防団の出し物。
kakashi_2005_1.jpg

保育園か幼稚園の大作。さぞや、先生と父兄が大変だったと思う。
kakashi_2005_2.jpg

恐竜の組み立て模型の大判も合った。小さいのをスケールアップしたのかしら?
kakashi_2005_3.jpg

うちらの年代にはなつかしい。おばけのQ太郎。
kakashi_2005_4.jpg

結構面白かった。また来年も見たい。
  1. 2005年11月06日 16:06 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Verilog-HDLのお勉強2

昨日は、例の本のテストベンチ編を読んだ。
Verilogはコンソール出力するにもCのprintfと似たような$displayを使えるそうだ。ファイルへ出力する場合は$fopenしてから$fdisplayするそうだ。これはC言語でfopenしてから、fprintfするのと似ている。ファイルから入力するのは、$readmembらしい。$fscanfとかないのかな?
VHDLでも93で'IMAGEを使ってreportで値を見られるようになったようだ。
テストベンチを書く際に、Verilogではtaskでタスクの外部の値も書き換えることが出来るそうだ。これは便利。悩まなくて済む。
VHDLでもprocess文で宣言されたプロシージャに限り、プロシージャの外部のsignalやvariableを変更可能だそうだ。これもとても便利である。書くのが楽になった。早速使おう。
いろんなことがわかり、とてもいい本だ。今度はPLIを読むことにする。

常々、プロの人はどのようにして回路を検証しているのか、とても気になっていた。自分でやっているのどう違うのかということだ。もっと、うまいやり方があるんじゃないかということをいつも考えていたので、この本はとてもためになった。いつか、プロの方と検証についてお話してみたい。

今、XilinxのISEの環境で、VHDLで書いた回路をVerilogで書き直しているが、`includeを使用すると、HDLソースじゃなくなることがある。どうやらincludeファイルとの検索順がまずいのかもしれない。includeファイル名を検索が早いものにして試してみよう? 他のファイルでは大丈夫なファイルもあるので。。。結局、パスがおかしかったのが原因でした。ISEのプロジェクトがあるフォルダがカレントなので、そこからのパスを書かないといけなかったのです。すべてのVerilogソースファイルをISEのプロジェクトがあるフォルダに入れて解決しました。
  1. 2005年11月06日 07:02 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:2

Verilog-HDLのお勉強

今日はVerilog-HDLのお勉強をしようと思い、この本を買いました。
この本はVHDLとVerilog双方の言語で、カウンタやシフタ、FIFO等の回路が書いてある。VHDLは多少なりとも理解できるので、対訳本みたいな感じで勉強しやすいかもと思い購入した。さらに全ての回路がパラメータでビット幅を拡張する(パラメタライズ)ことが出来るように書いてある。自分もそう書きたいと思っているので、とても共感できた。
以前からVerilogでパラメタライズな書き方をしたいと思っていた。例えば、パラメタライズなビット幅で、リセット時の値がオール1のDフリップフロップを書くとする。VHDLでは(others => '1');で済むがVerilogでのスマートな書き方がわからなかった。VHDLでは
process(reset, clk) begin
 if reset='1' then
  q <= (others => '1');

だけど、Verilogでは
always @(posedge clk or posedge reset)
 if (reset)
  q <= -1;

かなと思っていた。(以前、掲示板で聞いたの忘れてしまった)
でも、こう書けば良いということがわかった。
parameter BIT_WIDTH 8;
always @(posedge clk or posedge reset)
 if (reset)
  for(i=0; i<BIT_WIDTH-1; i=i+1)
   q[i] <= 1'b1;

これならば完璧である。なぜ自分で思いつかなかったかと思うと情けない。
いい本だと思う。明日も本を読んで勉強したい。

-----------------------
前にFPGA掲示板で教えてもらったのを思い出した。
`define BITWIDTH 4
always @(posedge clk or posedge reset)
 if (reset)
   q <= {`BPS_WIDTH{1'B1}};

だった。
  1. 2005年11月04日 22:29 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:2