FC2カウンター FPGAの部屋 無償ツールで実践する「ハード・ソフト協調検証」をやってみる3(協調シミュレーション準備)
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

無償ツールで実践する「ハード・ソフト協調検証」をやってみる3(協調シミュレーション準備)

今度は、”無償ツールで実践する「ハード・ソフト協調検証」(6) ―― 協調シミュレーションを実行する”(以下の文章ではハード・ソフト協調検証」(6)と呼ぶことにする)をやってみることにする。
Avalon_BFM_DPI_C.zipをダウンロードし解凍すると、Avalon_BFM_DPI_C\Avalon_BFM_DPI_C\progフォルダがあった。これはprogフォルダを抜き出して、avalon_bfm_simフォルダにコピーすれば良いのか?ハード・ソフト協調検証」(6)では、”set_sim.doをset_dpi_sim.doにコピーします”と書いてあるが、avalon_bfm_simフォルダには、onchip_memory2_0.hexファイルしか存在しない。ここに色々なファイルが生成されていないのはおかしい。
前の過程を慎重に見直すと、ハード・ソフト協調検証(5)の図16でERRORが出ている。私のやったSOPC Builderでも同様にエラーが出ていた。
hard_soft_6_100228.png

このエラーはavalon_bfm_burst_0モジュールで、Always_Burst_Max_Burst:0なのにmaster Linewrap_Bursts: 1になっているためのようだ。と言うことは、ハード・ソフト協調検証(5)の図10の設定のどこかをいじる必要があるのかもしれない。
もう一度、Altera Avalon MM Master BFMのダイアログを出してみてみると、Burst AttributesにLinewrap bursts:という項目があるので、このチェックを外した。
hard_soft_7_100228.png

これでFinishボタンをクリックして、Generateしたところ、問題なくGenerateが成功した。
hard_soft_8_100228.png

avalon_bfm_simフォルダを見ると、set_sim.doはないが、setup_sim.doがあった。たぶんこれだろう?その他、ファイルも出来ていた。
hard_soft_9_100228.png

avalon_bfm_simフォルダに、avalon_bfm_sim.mpfも出来ていたので、Avalon_BFM_DPI_C.zipを解凍したAvalon_BFM_DPI_C\Avalon_BFM_DPI_Cフォルダの下のprogフォルダとwave.doをavalon_bfm_simフォルダにコピーすれば良いのだと思う?たぶん。。。
setup_dpi_sim.doをsetup_sim.doとして、avalon_bfm_simフォルダにコピーすれば良いかと思ったが、念のためにWinMergeで調べてみると、ディレクトリパスが絶対パスで書いてあった。その部分は変更しないようにし、それ以外の異なる部分をコピーした。
hard_soft_10_100228.png

これで、ハード・ソフト協調検証(5)の12.シミュレーションの準備まで終了した。
ここでは、Avalon BFMのシミュレーション環境として自動生成されたsetup_sim.doに対して、tb_prog.svをシミュレーションする記述を付加した。

13.SystemVerilogコードをコンパイルする
ModelSim AE6.5b を起動して、avalon_bfm_sim.mpfをロードした。
Transcriptペインでdo setup_sim.do と入力して、setup_sim.doを起動した。下にログを示す。

do setup_sim.do
# h:/altera/91/quartus//sopc_builder
# h:/altera/91/quartus//bin/perl
# Sopc_Builder Directory: h:/altera/91/quartus//sopc_builder
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@
# @@ setup_sim.do
# @@
# @@ Defined aliases:
# @@
# @@ s -- Load all design (HDL) files.
# @@ re-vlog/re-vcom and re-vsim the design.
# @@
# @@ c -- Re-compile memory contents.
# @@ Builds C- and assembly-language programs
# @@ (and associated simulation data-files
# @@ such as UART simulation strings) for
# @@ refreshing memory contents.
# @@ Does NOT re-generate hardware (HDL) files
# @@ ONLY WORKS WITH LEGACY SDK (Not the Nios IDE)
# @@
# @@ w -- Sets-up waveforms for this design
# @@ Each SOPC-Builder component may have
# @@ signals 'marked' for display during
# @@ simulation. This command opens a wave-
# @@ window containing all such signals.
# @@
# @@ l -- Sets-up list waveforms for this design
# @@ Each SOPC-Builder component may have
# @@ signals 'marked' for listing during
# @@ simulation. This command opens a list-
# @@ window containing all such signals.
# @@
# @@ h -- print this message
# @@
# @@


Transcriptペインでsを入力してコンパイルした。コンパイルはうまく行ったがvsimでエラー発生。下にログを示す。

s
# Model Technology ModelSim ALTERA vlog 6.5b Compiler 2009.10 Oct 1 2009
# -- Compiling module burstcount_fifo_for_avalon_bfm_burst_0_upstream_module
# -- Compiling module rdv_fifo_for_mm_master_bfm_0_m0_to_avalon_bfm_burst_0_upstream_module
# -- Compiling module avalon_bfm_burst_0_upstream_arbitrator
# -- Compiling module avalon_bfm_burst_0_downstream_arbitrator
# -- Compiling module mm_master_bfm_0_m0_arbitrator
# -- Compiling module onchip_memory2_0_s1_arbitrator
# -- Compiling module avalon_bfm_reset_clk_0_domain_synch_module
# -- Compiling module avalon_bfm
# -- Compiling module lcell
# -- Compiling module ALTERA_MF_MEMORY_INITIALIZATION
# -- Compiling module ALTERA_MF_HINT_EVALUATION
# -- Compiling module ALTERA_DEVICE_FAMILIES
# -- Compiling module dffp
# -- Compiling module pll_iobuf
# -- Compiling module stx_m_cntr
# -- Compiling module stx_n_cntr
# -- Compiling module stx_scale_cntr
# -- Compiling module MF_pll_reg
# -- Compiling module MF_stratix_pll
# -- Compiling module arm_m_cntr
# -- Compiling module arm_n_cntr
# -- Compiling module arm_scale_cntr
# -- Compiling module MF_stratixii_pll
# -- Compiling module ttn_m_cntr
# -- Compiling module ttn_n_cntr
# -- Compiling module ttn_scale_cntr
# -- Compiling module MF_stratixiii_pll
# -- Compiling module cda_m_cntr
# -- Compiling module cda_n_cntr
# -- Compiling module cda_scale_cntr
# -- Compiling module MF_cycloneiii_pll
# -- Compiling module MF_cycloneiiigl_m_cntr
# -- Compiling module MF_cycloneiiigl_n_cntr
# -- Compiling module MF_cycloneiiigl_scale_cntr
# -- Compiling module cycloneiiigl_post_divider
# -- Compiling module MF_cycloneiiigl_pll
# -- Compiling module altpll
# -- Compiling module altlvds_rx
# -- Compiling module stratix_lvds_rx
# -- Compiling module stratixgx_dpa_lvds_rx
# -- Compiling module stratixii_lvds_rx
# -- Compiling module flexible_lvds_rx
# -- Compiling module stratixiii_lvds_rx
# -- Compiling module stratixiii_lvds_rx_channel
# -- Compiling module stratixiii_lvds_rx_dpa
# -- Compiling module altlvds_tx
# -- Compiling module stratix_tx_outclk
# -- Compiling module stratixii_tx_outclk
# -- Compiling module flexible_lvds_tx
# -- Compiling module dcfifo_dffpipe
# -- Compiling module dcfifo_fefifo
# -- Compiling module dcfifo_async
# -- Compiling module dcfifo_sync
# -- Compiling module dcfifo_low_latency
# -- Compiling module dcfifo_mixed_widths
# -- Compiling module dcfifo
# -- Compiling module altaccumulate
# -- Compiling module altmult_accum
# -- Compiling module altmult_add
# -- Compiling module altfp_mult
# -- Compiling module altsqrt
# -- Compiling module altclklock
# -- Compiling module altddio_in
# -- Compiling module altddio_out
# -- Compiling module altddio_bidir
# -- Compiling module altdpram
# -- Compiling module altsyncram
# -- Compiling module alt3pram
# -- Compiling module parallel_add
# -- Compiling module scfifo
# -- Compiling module altshift_taps
# -- Compiling module a_graycounter
# -- Compiling module altsquare
# -- Compiling module altera_std_synchronizer
# -- Compiling module altera_std_synchronizer_bundle
# -- Compiling module alt_cal
# -- Compiling module alt_aeq_s4
# -- Compiling module alt_eyemon
# -- Compiling module alt_dfe
# -- Compiling module signal_gen
# -- Compiling module jtag_tap_controller
# -- Compiling module dummy_hub
# -- Compiling module sld_virtual_jtag
# -- Compiling module sld_signaltap
# -- Compiling module altstratixii_oct
# -- Compiling module altparallel_flash_loader
# -- Compiling module altserial_flash_loader
# -- Compiling module altsource_probe
# -- Compiling module LPM_MEMORY_INITIALIZATION
# -- Compiling module LPM_HINT_EVALUATION
# -- Compiling module LPM_DEVICE_FAMILIES
# -- Compiling module lpm_constant
# -- Compiling module lpm_inv
# -- Compiling module lpm_and
# -- Compiling module lpm_or
# -- Compiling module lpm_xor
# -- Compiling module lpm_bustri
# -- Compiling module lpm_mux
# -- Compiling module lpm_decode
# -- Compiling module lpm_clshift
# -- Compiling module lpm_add_sub
# -- Compiling module lpm_compare
# -- Compiling module lpm_mult
# -- Compiling module lpm_divide
# -- Compiling module lpm_abs
# -- Compiling module lpm_counter
# -- Compiling module lpm_latch
# -- Compiling module lpm_ff
# -- Compiling module lpm_shiftreg
# -- Compiling module lpm_ram_dq
# -- Compiling module lpm_ram_dp
# -- Compiling module lpm_ram_io
# -- Compiling module lpm_rom
# -- Compiling module lpm_fifo
# -- Compiling module lpm_fifo_dc_dffpipe
# -- Compiling module lpm_fifo_dc_fefifo
# -- Compiling module lpm_fifo_dc_async
# -- Compiling module lpm_fifo_dc
# -- Compiling module lpm_inpad
# -- Compiling module lpm_outpad
# -- Compiling module lpm_bipad
# -- Compiling module oper_add
# -- Compiling module oper_addsub
# -- Compiling module mux21
# -- Compiling module io_buf_tri
# -- Compiling module io_buf_opdrn
# -- Compiling module oper_mult
# -- Compiling module tri_bus
# -- Compiling module oper_div
# -- Compiling module oper_mod
# -- Compiling module oper_left_shift
# -- Compiling module oper_right_shift
# -- Compiling module oper_rotate_left
# -- Compiling module oper_rotate_right
# -- Compiling module oper_less_than
# -- Compiling module oper_mux
# -- Compiling module oper_selector
# -- Compiling module oper_decoder
# -- Compiling module oper_bus_mux
# -- Compiling module oper_latch
# -- Compiling package verbosity_pkg
# -- Compiling package avalon_mm_pkg
# -- Importing package verbosity_pkg
# -- Compiling module altera_avalon_mm_master_bfm
# -- Importing package verbosity_pkg
# -- Importing package avalon_mm_pkg
# -- Compiling module mm_master_bfm_0
# -- Compiling module avalon_bfm_burst_0
# -- Compiling module onchip_memory2_0
# -- Compiling module test_bench
# -- Compiling module tb_prog
# -- Importing package avalon_mm_pkg
# -- Importing package verbosity_pkg
#
# Top level modules:
# lcell
# altpll
# altlvds_rx
# altlvds_tx
# dcfifo
# altaccumulate
# altmult_accum
# altmult_add
# altfp_mult
# altsqrt
# altclklock
# altddio_bidir
# altdpram
# alt3pram
# parallel_add
# scfifo
# altshift_taps
# a_graycounter
# altsquare
# altera_std_synchronizer_bundle
# alt_cal
# alt_aeq_s4
# alt_eyemon
# alt_dfe
# sld_virtual_jtag
# sld_signaltap
# altstratixii_oct
# altparallel_flash_loader
# altserial_flash_loader
# altsource_probe
# lpm_constant
# lpm_inv
# lpm_and
# lpm_or
# lpm_xor
# lpm_bustri
# lpm_compare
# lpm_abs
# lpm_counter
# lpm_latch
# lpm_ff
# lpm_shiftreg
# lpm_ram_dq
# lpm_ram_dp
# lpm_ram_io
# lpm_rom
# lpm_fifo
# lpm_fifo_dc
# lpm_inpad
# lpm_outpad
# lpm_bipad
# oper_add
# oper_addsub
# mux21
# io_buf_tri
# io_buf_opdrn
# oper_mult
# tri_bus
# oper_div
# oper_mod
# oper_left_shift
# oper_right_shift
# oper_rotate_left
# oper_rotate_right
# oper_less_than
# oper_mux
# oper_selector
# oper_decoder
# oper_bus_mux
# oper_latch
# test_bench
# tb_prog
# vsim +nowarnTFMPC -L lpm_ver -L sgate_ver -L altera_mf_ver -L altgxb_ver -L stratixiigx_hssi_ver -L stratixgx_ver -L stratixgx_gxb_ver -L stratixiigx -L altera_ver -L stratixiii_ver -L stratixii_ver -L cycloneii_ver -L cycloneiii_ver -L stratixiv_hssi_ver -L arriaii_ver -L arriaii_pcie_hip_ver -L arriaii_hssi_ver -L stratixiv_pcie_hip_ver -L cycloneiv_pcie_hip_ver -L cycloneiv_hssi_ver -L hardcopyiv_pcie_hip_ver -L hardcopyiv_hssi_ver -t ps -sv_root prog -sv_lib dpi_main test_bench tb_prog
# (vsim-3763) SystemVerilog DPI cannot access file 'prog\dpi_main.dll'
# No such file or directory. (errno = ENOENT)
# Use the -help option for complete vsim usage.
# Error loading design


ModelSim AE6.5b を終了した。
MSYSを起動した。avalon_bfm_simフォルダに移動して、

vsim -c -dpiexportobj prog/exportobj.obj test_bench tb_prog


コマンドを入れると、成功したようだ。
hard_soft_11_100228.png

後で気がついたのだが、上の図で、prog/exportobj.objのはずがprog/wxportobj.objと入力してしまったようだ。wxportobj.objをexportobj.objにリネームした。
ここでは、setup_sim.doスクリプトをModelSim上で実行してから、アライアスされたsコマンドでコンパイルし、コマンドラインからのvsimでC言語からリンクされるファイルexportobj.objを生成した。

14.C言語プログラムをコンパイルする
MSYSで、progフォルダに移動して、

gcc -c dpi_main.c


を実行した。その結果、dpi_main.oが生成された。
次に、

gcc -shared -o dpi_main.dll dpi_main.o exportobj.obj /c/altera/91/modelsim_ase/win32aloem/mtipli.dll


を実行すると、dpi_main.dllが生成された。
長くなってしまうので、今日はここまでにする。
ここでは、先程vsimで生成した exportobj.obj と dpi_main.c をコンパイルしたオブジェクトファイルをリンクして、dpi_main.dll を生成した。
  1. 2010年02月28日 15:52 |
  2. SystemVerilog
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1391-8f5dfec4
この記事にトラックバックする(FC2ブログユーザー)