今日もPlanAheadと向き合っていた。
しかし、先日書いたようなクロックに間に合わないからアウトというのはなくなっていた。(参考記事 : 回路の遅延とnsの戦い)
ところがまだエラーは残ってる。なになに、MAXDELAYがうんぬんだと。
どうもこれはMIGが自動的に生成した制約らしく、この配線の遅延は0.64ns以内にしろということだったらしい。
それが1.2nsぐらいになってるから、0.6nsほどオーバーしてると言われたわけだ。
それで調べたら、PlanAheadの本来の使い方というのがわかった。
回路の遅延を要求の範囲内に抑えるために、配線を手動でいじくって制約を書き足すツールだったらしい。
さて、というわけでネットリストからその制約のかかってる配線を探して選んでみると、ずいぶんながい配線が引かれていた。
なるほど、これは0.64ns以内に収まらないわけだと。
これを人間が見て、近くにもっていってやればいいわけです。
というわけで、配置されているインスタンスをドラッグ&ドロップで移動させて、配線を短くする。
人間がみればどう考えても近くすれば制約を満たせるだろとおもうのだが、なぜかそうは自動でしてくれなかったようだ。
理由は定かではないが。
そしてこれで配線し直すと別のところでエラーが発生した。
どうも、このインスタンスはここと決めつけるとなかなかうまくいかないらしい。
そこでPlanAheadをみながら手で制約を書くことにした。
INST "hoge" LOC=SLICE_X0Y55:SLICE_X1Y56;
こんな風に書いて、hogeというインスタンスは指定されたスライスに固定する。
スライスは碁盤の目のように並んでいるので、その左上のスライスと右下のスライスを:で区切って書くとその範囲で適当に固定される。
こうすればこの範囲内で適当にエラーをなくすように決めてくれるはず。
実際、これでエラーはがくっと減った。
ただ、別のMAXDELAYの制約にひっかかるものが出てきた。
なんと遅延を0.19ns以内にせよという、それはそれで無茶な制約だと思うが、それを0.1ns程度オーバーするものが2つほど。
手動で直そうと試みたものの、これを直すと別のところがあかんようになるという具合にうまく決まらない。
果たしてこの制約は満たせるものなのかようわからんが、MIGはこれを要求しているようだ。
まぁこんな具合に、配線をいじくって回路の遅延を短くすることは確かに可能だけど、それなりに困難を伴う。
それなら、以前やったように、回路のゆとりを増やして、回路の配線を簡単にしてあげる方がよっぽどいい。
実際、ほとんどの部分はゆとりを増やせば自動配線でうまくいった。
MIGはこういう要求をしているけど、あんまりよいことだとは思わないけどね。
まぁ、もうちょっと上手いやり方を考えてみるわ。
ただ、回路の遅延がなくなってもちゃんと動くのか怪しい兆候もあるのよね。
一応、ビヘイビアレベルでのシミュレーションではうまく動いてることになってるけど、
読み込み書き込みの状況を示すLEDが点灯していないのでなんかおかしいのかもしれない。
そういう面を直せばうまく動いてしまうかも知れない。それならいいんですけどね。
少なくとも、昨日まではまともに動く気はしなかったけど、もううまく動くんじゃないかと思っている面もある。
にしても、133MHzの回路の設計は大変だ。メモリ周り以外は133MHzで作ってやるものかと決意した。