ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。Verilogスポンサーリンク前回のSCR1ネタ最後に以下のように書いた。ここまでに記載したようにとりあえず...の対策をいくつか施して動かした部分もあるし、実はこのシミュレーションも正常に終わってなかったりしているので、引き続きもう少しシミュレーション環境の調査を行っていくつもりだが、今日はここまで。tech-diningyo.hatenablog.comということで今日は、Vivado+SCR1+riscv-testsシミュレーション環境についてももう少し調べていく。今日は$readmemhがうまく動かないという話題について。表題の通りだが、前回の記事では読み込むRISC-VバイナリのHEXデータファイルを以下のようにして、直書き&フルパス指定することによって、実行していた。$readmemh(stuff_file,memory);endこれについて少し調べてみる。Verilogのstringに入れると解釈できていないように見える。試したのは以下の3つのケースSCR1オリジナル(すでにやってるけど)$readmemhに直接ファイル名を指定reg宣言した変数にファイルパスを設定して、その変数を$readmemhに与えるソースコード的には以下のような物を用意して、コメントアウトする部分を切り替えて試してみた。SCR1のオリジナルソースコード以下のようなメッセージが得られた。directory.ここで気になるのは警告文中のファイル名が謎の文字列"õh"に化けているように見えること。なんかやっぱり、string型の変数にファイル名設定するとVivadoでは読み込めてないように見える。$displayの出力は普通なのに。上記のようになっているので当然、読み出されるデータも不定になっていた。直接ファイルを指定こちらも既に試しているとおりではあるが、以下のメッセージが得られた。実行時間の情報を出しているのはcase1のように警告が出ていないことを示すため。28752警告が出ていないことからもわかるが、正常にメモリがデータが読み込まれているため、シミュレーション時の波形においても正しいでデータが読み込まれている。reg変数に設定した後、$readmemh得られた出力は以下のようになった。28689"case2"という文字の直後にスペースが入っているのは、reg変数のビット幅の関係。こちららも特に警告は出ておらず、正常に$readmemhにより所望のファイルが読み込まれていた。結果まとめ以上の結果からすると、やっぱりVivadoシミュレータにおいてはstring変数に設定したファイルパスが$readmemhの処理の上では認識されていないことになる。いうことで、この挙動についてverilogの仕様を追ってみることにする。現在実行しているシミュレーションでこの$readmemhが実行されているのはテストベンチ上のメモリモデルscr1_memory_tb_axiである。Verilogの文法が適用されている。Verilogにおける$readmemhの定義を確認していく。確認したのはこのPDFでこれによると、$readmemhの項目では以下の事項のみが触れられている。Verilogにおいて拡張された部分のみで、ざっくり以下のことが書いてある。arrayに読み込めるようなった。typesの型に読み込めるようになった。1364-2001)で確認してみる。file"によると、以下のようになっている。"が何を指しているのか、、、なのだが、ここには書いていないので、別の項目も探してみると以下の説明が$fopenの項目である17.2.1で見つかる。"についての説明が記載してあり、それは以下のようになっている。string"を格納したものということになりそう。"についての扱いは拡張されていないように見えるので、$readmemhでstring型の文字列が扱えないのは一概にバグとは言えない感じに思える。VCSとかでは普通に扱えるからてっきり読めるんだと思ってた。商用のシミュレータ使ってると結構ベンダ依存の拡張が存在してて、ツール切り替えるときに動いてた記述が動かなくなることがあるけど、これもその一つということなのか。Verilogの仕様でしっかり拡張されているようで以下の一文が書いてあった。type.ということで、結論としてはstringで読めないのは仕方がなさそうなのでreg変数で動くように書き換える(前項のcase3の対応)、、、ということになりそう。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。