ひでみのアイデア帳

くだらないことなんだけど、忘れないために・・・

SystemVerilogのお勉強(3−2)

Zynq-7000 VIPで実行できるタスクを眺めてみる。

適当に一覧化してみた。

そのうち、ちゃんとした形式にしよう・・・

リセット

fpga_soft_reset(RESET_CTL[31:0])

FPGAをソフトウェアリセットする

RESET_CTL[31:0] 下記のビットのみ有効 [24:20] [17:16] [13:12] [ 3: 0]

デバッグ設定

set_stop_on_error(LEVEL)

AXIバスのエラー発生時にシミュレーションを停止するか設定する。

LEVEL 0: 停止しない 1: 停止

set_channel_level_info(NAME[1023:0], LEVEL)

タスクの内部実装は何もない。

set_function_level_info(NAME[1023:0], LEVEL)

タスクの内部実装は何もない。

set_debug_level_info(LEVEL)

AXIバスのデバッグメッセージの出力のON/OFFを設定する。

0: デバッグメッセージを出力しない 1: デバッグメッセージを出力する

S_AXI_xxx

set_slave_profile(NAME[1023:0], LATENCY[1:0])

AXIバス(S_AXI_xxx)のレイテンシタイプを設定する。

NAME[1023:0] "S_AXI_GP0" "S_AXI_GP1" "S_AXI_HP0" "S_AXI_HP1" "S_AXI_HP2" "S_AXI_HP3" "S_AXI_ACP" "ALL"

LATENCY[1:0] BEST_CASE: ベストケース AVG_CASE: 平均値 WORST_CASE: ワーストケース RANDOM_CASE: ランダム

set_arqos(NAME[1023:0], VALUE[3:0])

S_AXI_xxxのARQOSを設定する。

NAME[1023:0] "S_AXI_GP0" "S_AXI_GP1" "S_AXI_HP0" "S_AXI_HP1" "S_AXI_HP2" "S_AXI_HP3" "S_AXI_ACP"

VALUE[3:0] 設定値

set_awqosNAME[1023:0], VALUE[3:0])

S_AXI_xxxのAWQOSを設定する。

NAME[1023:0] "S_AXI_GP0" "S_AXI_GP1" "S_AXI_HP0" "S_AXI_HP1" "S_AXI_HP2" "S_AXI_HP3" "S_AXI_ACP"

VALUE[3:0] 設定値

メモリ

pre_load_mem_from_file(FILENAME[(128*8)-1:0], START_ADDR[31:0], SIZE[31:0])

ファイルのデータをメモリに書き込む。

FILENAME ファイル名(最大128文字)

START_ADDR 書込開始アドレス

SIZE 書込サイズ

pre_load_mem(DATA_TYPE[1:0], START_ADDR[31:0], SIZE[31:0])

規定のデータを書き込む。

DATA_TYPE[1:0] ALL_RANDOM: ランダム値を書き込む(デフォルト) ALL_ZEROS: 0を書き込む ALL_ONES: 1を書き込む

START_ADDR 書込開始アドレス

SIZE 書込サイズ

peek_mem_to_file(FILENAME[(128*8)-1:0], START_ADDR[31:0], SIZE[31:0])

メモリからデータを読みだし、ファイルへ書き込む。

FILENAME ファイル名(最大128文字)

START_ADDR 読出開始アドレス

SIZE 読出サイズ

write_mem(DATA[64*16-1 :0], START_ADDR[31:0], SIZE[31:0])

メモリへデータを書き込む。

DATA 書き込むデータ(64bit×16word)

START_ADDR 書込開始アドレス

SIZE 書込サイズ

read_mem(START_ADDR[31:0], SIZE[31:0], DATA[64*16-1 :0])

メモリからデータを読みだす。

START_ADDR 書込開始アドレス

SIZE 書込サイズ

DATA 読み出されたデータが格納される(64bit×16word)

read_interrupt(IRQ_STATUS[15:0])

割込みステータスを返す。

IRQ_STATUS IRQ_F2Pの内容が格納される。

wait_interrupt(IRQ[3:0], IRQ_STATUS[15:0])

IRQ IRQ_F2P[15:0]の番号を入力することで割込み待ちをする。

IRQ_STATUS IRQ_F2Pの内容が格納される。

wait_mem_update(ADDR[31:0], DATA_IN[31:0], DATA_OUT[31:0])

該当アドレスのメモリが更新されるまで待ち、DATA_INと比較する。 該当アドレスのデータがDATA_INと一致しない場合はシミュレーションと停止する。

ADDR データチェックするアドレス。

DATA_IN 比較データ

DATA_OUT 読み出されたデータが格納される

M_AXI_GP0/1

write_from_file(FILENAME[(128*8)-1:0], START_ADDR[31:0], SIZE[31:0], RESPONSE[1:0])

ファイルのデータをM_AXI_GP0/1へ書き込む。

FILENAME ファイル名

START_ADDR

SIZE

REQPONSE

read_to_file(FILENAME[(128*8)-1:0], START_ADDR[31:0], SIZE[31:0], RESPONSE[1:0])

M_AXI_GP0/1からデータをファイルに書き込む。

FILENAME ファイル名

START_ADDR

SIZE

RESPONSE

write_data(START_ADDR[31:0], SIZE[31:0], DATA[(128*8)-1:0], RESPONSE[1:0])

M_AXI_GP0/1へデータを書き込む。

START_ADDR

SIZE 書き込むデータのサイズ(最大128ワード)

DATA 書き込むデータ

RESPONSE

read_data(START_ADDR[31:0], SIZE[31:0], DATA[(128*8)-1:0], RESPONSE[1:0])

M_AXI_GP0/1からデータを読み込む。

START_ADDR

SIZE 読み込むデータのサイズ(最大128ワード)

DATA 読み込むデータ

RESPONSE

write_burst

(input [31:0] start_addr,input [axi_len_width-1:0] len,input [axi_size_width-1:0] siz,input [axi_brst_type_width-1:0] burst,input [axi_lock_width-1:0] lck,input [axi_cache_width-1:0] cache,input [axi_prot_width-1:0] prot,input [(axi_mgp_data_width*axi_burst_len)-1:0] data,input integer datasize, output [1:0] response);

M_AXI_GP0/1にバースト書込を行う。

write_burst_concurrent

(input [31:0] start_addr,input [axi_len_width-1:0] len,input [axi_size_width-1:0] siz,input [axi_brst_type_width-1:0] burst,input [axi_lock_width-1:0] lck,input [axi_cache_width-1:0] cache,input [axi_prot_width-1:0] prot,input [(axi_mgp_data_width*axi_burst_len)-1:0] data,input integer datasize, output [1:0] response);

read_burst

M_AXI_GP0/1からバースト読み出しを行う。

input [31:0] start_addr; input [axi_len_width-1:0] len; input [axi_size_width-1:0] siz; input [axi_brst_type_width-1:0] burst; input [axi_lock_width-1:0] lck; input [axi_cache_width-1:0] cache; input [axi_prot_width-1:0] prot; output [(axi_mgp_data_widthaxi_burst_len)-1:0] data; output [(axi_rsp_widthaxi_burst_len)-1:0] response;

システムレジスタ

wait_reg_update(ADDR[31:0], DATA_IN[31:0], MASK[31:0], TIME_INTERVAL[31:0], TIMEOUT[31:0], DATA_OUT[31:0])

read_register_map(START_ADDR[31:0], SIZE[31:0], DATA[64*16-1:0])

システムレジスタのデータを読み込む。

START_ADDR 読み込む開始レジスタアドレス。

SIZE 読み込むサイズ。

DATA データが格納される

read_register(ADDR[31:0], DATA[31:0])

システムレジスタのデータを読み込む。

ADDR 読み込むレジスタアドレス

DATA データが格納される