”
高位合成言語+ツールのKaruta を使ってみる3(生成されたVerilog ファイルをシミュレーション)”の続き。
前回は、Karuta で生成したVerilog ファイルをシミュレーションして、動作するのに 20 クロックかかるのが分かった。今回は、AXIインターフェースのサンプルをやってみよう。
”
FPGA向け論理回路設計のためのプログラミング言語処理系 Karuta の紹介”の”
アクセラレータを作れるか?”から AXI インターフェースのサンプルをやってみる。
”
FPGA向け論理回路設計のためのプログラミング言語処理系 Karuta の紹介”の”
アクセラレータを作れるか?”からソースコードを引用する。ファイル名は AXI_example.karuta とした。
@AxiSlave()
shared regs int[4]
@AxiMaster()
shared buf int[4]
func main() {
// slave側へのアクセスを待つ
regs.waitAccess()
// slaveの0ワード目の値をアドレスとして使う
var addr int = regs[0]
// メモリ上のaddrから2ワードをbuf[0]以降に読み込む
buf.load(addr, 2, 0)
buf[2] = buf[0] * buf[0] + buf[1] * buf[1]
// メモリ上のaddr + 8に1ワード分buf[2]以降から書き込む
buf.store(addr + 8, 1, 2)
}
karuta AXI_example.karuta --compileコマンドで、Verilog ファイルを生成した。

AXI_example.v が生成された。AXI Slave とAXI Master のポートが確認できる。

RTL シミュレーションしてみたいが、Verilog ファイルベースで接続を書くのがとっても面倒だ。
なんとかして、ソースコードレベルでAXIインターフェースの接続を書きたい。
配列のアドレスを取得できれば、そのアドレスをAXI Slave でセットしてDMA できるのだが、独自言語なので、アドレスの取得の仕方が分からない?そもそも配列のアドレスが取得できるのだろうか?
@neonlightdev さんから、”--compile --with_shell --vcd”オプションを教えてもらったので、やってみた。
karuta AXI_example.karuta --compile --with_shell --vcd
生成された AXI_example.v はシミュレーション用のテストベンチが付いていたが、やはり、トランザクションは自分で書く必要があるかも知れない?

一応、Vivado 2019.1 で AXI_example プロジェクトを作成して、AXI_example.v を入れた。

PROJECT MANAGER から SIMULATION -> Run Simulation -> Run Behavioral Simulation を選択した。
更に、Run All (F3) ボタンをクリックして、$finish まで実行した。

AXI のトランザクションは無かった。

配列のアドレスの書き方覚えて、ソースコード上でスティミュラスを書きたい。。。
- 2019年10月23日 04:56 |
- Karuta
-
| トラックバック:0
-
| コメント:0