あるとき、vivado2016.2を起動しようとしたところ、

vicual Cのランタイムの修復?画面が現れて、修復が必要ですと言われた。

しかし、修復してもランタイムが見つからないとかで

結局vivadoが起動しなくなってしまった。

 

解決方法をネットでいろいろ探ってみたが見つからず、

英語のxilinxフォーラムでやっと同じ感じで困っている人を見つけたが、

その相談の中で提示されていた解決方法が結構面倒な感じだったので

他になんかないかな~と思って自分で試していたら自己解決したので、

ネットに情報上げておこーと思ってブログをはじめてみました(笑

 

【vivadoが起動しなくなるまで】

vivado2016.2を使っていました。

あるとき、C言語の勉強をお手軽にしてみようかな~と思い、

ゲームつくりながらC言語の勉強できるぜ!的な本を買って

勉強することにした。

 

その本ではフリーのvisual studioを使って作業を進めるように書いてあったので、

本に付属のインストーラーでインストールして、C言語の勉強を進めていた。

 

しばらくして、rtlの記述の仕方の違いで論理合成で生成される回路にどんな

違いがあるのかなーというところをいろいろ試してみようと思い、

vivadoをおもむろに起動してみると

。。。最初に書いた通り、

Visual Cランタイムの修復を促す画面⇒修復後にvivado.batのタイムアウトエラー⇒vivado立ち上がらず。。。

 

という状態になった。

 

というわけで、vivado起動⇒論理合成(RTL synthesis)が利用可能になることを

目標に、がんばることに。

 

【Xilinxフォーラムで提示されていた方法】

まずはググる。しかし、日本語では見つからず。。。。

エラーメッセージをそのまま貼り付けてググると英語のサイトしかでてこない。

が、検討違いなところばっかり。

やっとの思いでネタを見つけ、英語で議論されている内容を追っていくと、

結局再インストールをする必要があるという結論で終わっていた。

しかも、vivadoとvisual studioを入れなおす順番も指定されている。

め、、、めんどくさい。vivadoは特にライセンス設定が必要だった気がするし。。。

(すでに何しないといけなかったかは忘れていた。。。ので面倒くささ倍増)

なんかほかにないかな~

 

【原因を探ってみた】

そもそもランタイム自体破損しているとは思えなかった

(何度も修復を試みているし、修復失敗しました的なメッセージは一切出なかったし。)

ラインタイムをチェックしている所かなんかがおかしくなっていると

勝手に決めつけ、とりあえず起動シーケンスの中でエラーをはいている場所を探してみた。

 

vivadoはvivado.batを最初に実行して、

ざっくり環境設定、ロードやって、最後にguiを起動している。

とりあえずエラーをはいている場所を探してみると、

ロードを行っている

loader.bat

にその場所はあった。

ちなみに、windowのbatファイルの記述方法はしらないので、

空で見てわかる範囲の内容で書いています。

更に、ちょっとコードそのまま貼り付けていいか調べるの面倒なので、

ざっくり書くと、

 

①なんかのフラグが立っていて、

②xvcredist.exeがある場合、

③-check引数でxvcredist.exeを実行

④ErrorLevelが1だとxvcredist.exeを引数無しで実行⇒おそらくこれがrepairを実行している。

 

って感じ。

xvcredist.exeが無いとここのチェック処理自体がスキップされるっぽいので、

適当にディレクトリ掘って、xvcredist.exeを移動し、その後vivadoの起動をしてみた。

 

本当にランタイムに問題があったり、インストールパスが変になっていたりすれば

vivadoは起動しないはず。

 

チェックがおかしくなっていただけであれば、起動するはず。

 

【結果】

vivado起動しました。(バッチファイルのタイムアウトエラーはでたものの。。)

synthesisとimplimentationの実行ができるところまでは確認した。

 

【やること】

xvcredist.exeをもとの場所から移動させる。

 

 

【終わりに】

ちなみに、これで本当にいろいろ問題ないかどうかはわかりません(笑

結局、何かやろうとしたときに問題が起きる可能性はあります。

実際再インストールしか問題を真に解決する方法がないかもしれないし。

 

あと、途中のbatchファイルの件は linuxのコマンドと簡単なCの記述の知識を

応用(?)して読み解いたので、実際間違ってるかもしれないです。

もし間違っていたら訂正していただけるとありがたいです。

 

後で調べてみようとは思いますが、今は時間がないのでこれで!