FPGA Gbps通信そろそろできそう | 2021.08.16 04:41 |
ここ数日は殆ど晴れなかったので、涼しい日々を過ごしていました。
暑いのは苦手なので、このままの温度感で夏が終わってほしい感じは
あります。
FPGAでギガビット・トランシーバーを用いてGbpsの高速通信に挑戦
している件、この連休を潰して黙々と取り組んだ結果、そろそろ動き
そうなところまで来ました。
てか まだ不完全ですが、なんかそれっぽく動きつつあります。
先週「タイミング制約がうまく行かない」と言っていた件は、ネットで
調べながらアレコレ試行錯誤していたら、良い感じに制約できたっぽい
です。(多分)
ポイントは、ロジックアナライザーでのデバック用に一時的に引き出して
いる信号線については「set_false_path」でタイミング制約から除外、
かつ、お互いに同期せず無関係なクロック信号は「set_clock_groups
-asynchronous」で外してあげると、うまく行くようです。
タイミング制約の条件をちゃんと書いてあげることで、タイミング解析
のエラーが防げ、コンパイル時間も短縮し、回路が動作する最高周波数
も向上しました。・・・知った後から思えば当たり前なのですが。
あとは、回路のクロック同期処理を見直したり、不必要に速いクロック
ラインは速度を一段下げたり、コンパイラの最適化設定を変更しました。
結果として、40MHz程度でしか動かないとされ大量にタイミング解析で
エラーが出ていたロジックが、解析結果からエラーが無くなり回路自体
も200MHzオーバーで動くようになりました。
そして、コンパイルするごとに挙動が変わる不安定さも無くなりました。
・・凄いぞ! 不安定なLSIが 5倍以上高速化して安定したぞ!
いやー、FPGAのタイミング制約って超重要なんだなぁ・・(痛感
またひとつ勉強になりました。
それ以外に行ったこととして、プロトコルのリセット処理を見直したり、
勘違いにより特定の信号の論理(0・1)が逆だったことが判明したので
修正したり、プロトコルの上位レイヤーのエラー処理やデータ転送処理
を修正したりしていました。
そんなこんなやったことで、なんか所々は動くようになりつつあります。
全体的にはまだまだ不安定で、不規則に初期化シーケンスがコケたり、
特定のコマンドの組み合わせが通らず途中でフリーズしたりするので、
まだ「動きました」「できました」とは言えない状況ですが、
ちょっと前のように「全く動かない」というような文鎮状態ではないので、
だいぶ望みは出てきた感じです。
そろそろ何を作っているのか詳細を公言(本ブログに記載)しても良い
かもしれませんが、XOPSと関わりのない他所で どのように活用・展開
していくのか未定なため、もうしばらく伏せておきます。
本一件は、XOPSの世界では全く使わない無縁な話で、XOPS以外の他所で
使うことを見込んでやっているわけですが、
昨今の世間の状況や、使用・活用先の近状、今後の自身の状況など総合的
に考えると、まさに『やるなら今しかない』みたいな状況なので、
短期集中で今勝負するしかありません。
今のところは まだモチベーションが保てていますが、(他の世界へ)
よそ見をして道を外れる前に終わらせたいと思っています。
暑いのは苦手なので、このままの温度感で夏が終わってほしい感じは
あります。
FPGAでギガビット・トランシーバーを用いてGbpsの高速通信に挑戦
している件、この連休を潰して黙々と取り組んだ結果、そろそろ動き
そうなところまで来ました。
てか まだ不完全ですが、なんかそれっぽく動きつつあります。
先週「タイミング制約がうまく行かない」と言っていた件は、ネットで
調べながらアレコレ試行錯誤していたら、良い感じに制約できたっぽい
です。(多分)
ポイントは、ロジックアナライザーでのデバック用に一時的に引き出して
いる信号線については「set_false_path」でタイミング制約から除外、
かつ、お互いに同期せず無関係なクロック信号は「set_clock_groups
-asynchronous」で外してあげると、うまく行くようです。
タイミング制約の条件をちゃんと書いてあげることで、タイミング解析
のエラーが防げ、コンパイル時間も短縮し、回路が動作する最高周波数
も向上しました。・・・知った後から思えば当たり前なのですが。
あとは、回路のクロック同期処理を見直したり、不必要に速いクロック
ラインは速度を一段下げたり、コンパイラの最適化設定を変更しました。
結果として、40MHz程度でしか動かないとされ大量にタイミング解析で
エラーが出ていたロジックが、解析結果からエラーが無くなり回路自体
も200MHzオーバーで動くようになりました。
そして、コンパイルするごとに挙動が変わる不安定さも無くなりました。
・・凄いぞ! 不安定なLSIが 5倍以上高速化して安定したぞ!
いやー、FPGAのタイミング制約って超重要なんだなぁ・・(痛感
またひとつ勉強になりました。
それ以外に行ったこととして、プロトコルのリセット処理を見直したり、
勘違いにより特定の信号の論理(0・1)が逆だったことが判明したので
修正したり、プロトコルの上位レイヤーのエラー処理やデータ転送処理
を修正したりしていました。
そんなこんなやったことで、なんか所々は動くようになりつつあります。
全体的にはまだまだ不安定で、不規則に初期化シーケンスがコケたり、
特定のコマンドの組み合わせが通らず途中でフリーズしたりするので、
まだ「動きました」「できました」とは言えない状況ですが、
ちょっと前のように「全く動かない」というような文鎮状態ではないので、
だいぶ望みは出てきた感じです。
そろそろ何を作っているのか詳細を公言(本ブログに記載)しても良い
かもしれませんが、XOPSと関わりのない他所で どのように活用・展開
していくのか未定なため、もうしばらく伏せておきます。
本一件は、XOPSの世界では全く使わない無縁な話で、XOPS以外の他所で
使うことを見込んでやっているわけですが、
昨今の世間の状況や、使用・活用先の近状、今後の自身の状況など総合的
に考えると、まさに『やるなら今しかない』みたいな状況なので、
短期集中で今勝負するしかありません。
今のところは まだモチベーションが保てていますが、(他の世界へ)
よそ見をして道を外れる前に終わらせたいと思っています。
category : 電子工作 | comment [0] |